feat(Users): #PRWLR-4717 add /users endpoints and basic auth (#43)

* feat(SimpleJWT): PRWLR-4717 add djangorestframework-simplejwt dep

* feat(SimpleJWT): PRWLR-4717 add basic configuration and env variables

* feat(Users): PRWLR-4717 add model and security constraints

* feat(Users): PRWLR-4717 add serializers

* feat(Users): PRWLR-4717 add views

* test(Conftest): PRWLR-4717 add user and authenticated client fixtures

* fix(Unit tests): PRWLR-4717 add automated authentication to all unit tests

* fix(Authentication): PRWLR-4717 add authentication class and update tests

* test(Users): PRWLR-4717 add unit tests

* test(Users): PRWLR-4717 add integration tests

* chore(Schema): PRWLR-4717 update API schema

* fix(User): PRWLR-4717 fix password validation

* feat(Validators): PRWLR-4717 add MaxLength password validator

* fix(User): PRWLR-4717 update User model to delete admin fields

* chore(Serializers): PRWLR-4717 add docstrings and update serializers

* chore(Fixtures): PRWLR-4717 add dev user

* chore(Users): PRWLR-4717 raise DRF NotFound instead of returning response
This commit is contained in:
Víctor Fernández Poyatos authored and GitHub committed 2024-09-18 10:19:44 +02:00
1 parent 6a341b88f0
commit 9ffde34198
25 files changed
+1674 -235

No files matched your search

+38 -3
View File
@@ -1,6 +1,8 @@
import re
from uuid import uuid4, UUID
from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.validators import UnicodeUsernameValidator
from django.contrib.postgres.indexes import GinIndex
from django.contrib.postgres.search import SearchVector, SearchVectorField
from django.core.validators import MinLengthValidator
@@ -9,10 +11,18 @@ from django.utils.translation import gettext_lazy as _
from django_celery_results.models import TaskResult
from uuid6 import uuid7
from api.db_utils import ProviderEnumField, StateEnumField, ScanTriggerEnumField
from api.db_utils import (
ProviderEnumField,
StateEnumField,
ScanTriggerEnumField,
CustomUserManager,
)
from api.exceptions import ModelValidationError
from api.rls import RowLevelSecurityConstraint
from api.rls import RowLevelSecurityProtectedModel
from api.rls import (
RowLevelSecurityProtectedModel,
RowLevelSecurityConstraint,
BaseSecurityConstraint,
)
class StateChoices(models.TextChoices):
@@ -24,6 +34,31 @@ class StateChoices(models.TextChoices):
CANCELLED = "cancelled", _("Cancelled")
class User(AbstractBaseUser):
id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
username = models.CharField(
max_length=150, unique=True, validators=[UnicodeUsernameValidator()]
)
email = models.EmailField(max_length=254, unique=True)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(auto_now_add=True, editable=False)
USERNAME_FIELD = "username"
REQUIRED_FIELDS = ["email"]
objects = CustomUserManager()
class Meta:
db_table = "users"
constraints = [
BaseSecurityConstraint(
name="statements_on_%(class)s",
statements=["SELECT", "INSERT", "UPDATE", "DELETE"],
)
]
class Provider(RowLevelSecurityProtectedModel):
class ProviderChoices(models.TextChoices):
AWS = "aws", _("AWS")