diff --git a/.flake8 b/.flake8 index eccdfba..fa9abc0 100644 --- a/.flake8 +++ b/.flake8 @@ -1,15 +1,19 @@ [flake8] -max-line-length = 160 -exclude = - Dockerfile - docker-compose* - scripts - build - venv* - certego_django_apps/migrations +max-line-length = 88 ignore = - F821 # undefined name 'Rule' - W503 # line break before binary operator - E402 # module level import not at top of file - W291 # trailing whitespace nightmare - E203 # whitespace before ':' \ No newline at end of file + # line break before binary operator + W503, + # missing whitespace after ',' (caused by black style) + E231, + # invalid escape sequence (caused by regex) + W605, +exclude = + Dockerfile, + docker-compose*, + venv, + docs, + migrations, + virtualenv, + ldap_config.py + api_app/analyzers_manager/migrations/*(venv) + example_project \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d33db27..0bc7776 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,33 +1,52 @@ repos: - - repo: https://github.com/myint/autoflake - rev: v1.4 - hooks: - - id: autoflake - args: - [ - "--remove-all-unused-imports", - "--remove-unused-variables", - "--ignore-init-module-imports", - "-i", - ] - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 23.7.0 hooks: - id: black - - repo: https://gitlab.com/pycqa/flake8 - rev: 4.0.1 + - repo: https://github.com/PyCQA/flake8 + rev: 6.1.0 hooks: - id: flake8 - repo: https://github.com/pycqa/isort - rev: 5.10.1 + rev: 5.12.0 hooks: - id: isort - args: ["--profile", "black", "--filter-files", "--skip", "venv"] -#- repo: https://github.com/pre-commit/mirrors-mypy -# rev: master -# hooks: -# - id: mypy -# additional_dependencies: -# - django-stubs -# - djangorestframework-stubs -# args: [--no-strict-optional, --ignore-missing-imports] + args: + [ + "--profile", + "black", + "--filter-files", + "--skip", + "venv", + "--skip", + "configuration/ldap_config.py", + ] + - repo: https://github.com/pre-commit/mirrors-eslint + rev: v8.46.0 + hooks: + - id: eslint + additional_dependencies: + - eslint@8.16.0 + - eslint-config-airbnb@19.0.4 + - eslint-config-prettier@8.5.0 + - eslint-plugin-import@2.26.0 + - eslint-plugin-jsx-a11y@6.5.1 + - eslint-plugin-react@7.30.0 + - eslint-plugin-react-hooks@4.5.0 + args: ["--fix"] + files: frontend/src/ + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v3.0.1 + hooks: + - id: prettier + files: frontend/src/ + - repo: https://github.com/awebdeveloper/pre-commit-stylelint + rev: 0.0.2 + hooks: + - id: stylelint + additional_dependencies: + - stylelint@14.8.5 + - stylelint-config-prettier@9.0.3 + - stylelint-config-standard-scss@4.0.0 + args: ["--fix"] + files: frontend/src/styles/.*(css|scss)$ \ No newline at end of file diff --git a/certego_saas/apps/organization/admin.py b/certego_saas/apps/organization/admin.py index 0f4359a..8f1193b 100644 --- a/certego_saas/apps/organization/admin.py +++ b/certego_saas/apps/organization/admin.py @@ -11,12 +11,14 @@ class MembershipAdmin(admin.ModelAdmin): "user", "organization", "is_owner", + "is_admin", "created_at", ) list_filter = ( "organization", "is_owner", + "is_admin", ) diff --git a/certego_saas/apps/organization/membership.py b/certego_saas/apps/organization/membership.py index 241dcb0..20eeff6 100644 --- a/certego_saas/apps/organization/membership.py +++ b/certego_saas/apps/organization/membership.py @@ -33,8 +33,17 @@ class Meta: on_delete=models.CASCADE, ) is_owner = models.BooleanField(default=False) + is_admin = models.BooleanField(default=False) # funcs + def clean_admin(self): + if self.is_owner and not self.is_admin: + # an owner must be an admin, permissions will be checked on this field + self.is_admin = True + + def clean(self): + super().clean() + self.clean_admin() def __str__(self): member_str = "owner" if self.is_owner else "member" @@ -48,4 +57,7 @@ class ExistingMembershipException(ValidationError): ) class OwnerCantLeaveException(ValidationError): - default_detail = "Owner cannot leave the organization but can choose to delete the organization." + default_detail = ( + "Owner cannot leave the organization" + "but can choose to delete the organization." + ) diff --git a/certego_saas/apps/organization/migrations/0002_membership_is_admin.py b/certego_saas/apps/organization/migrations/0002_membership_is_admin.py new file mode 100644 index 0000000..f500e22 --- /dev/null +++ b/certego_saas/apps/organization/migrations/0002_membership_is_admin.py @@ -0,0 +1,15 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("certego_saas_organization", "0001_initial"), + ] + + operations = [ + migrations.AddField( + model_name="membership", + name="is_admin", + field=models.BooleanField(default=False), + ), + ]