mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-11-09 04:38:49 +00:00
feat(Tokens): PRWLR-4718 implement user authorization with JWT (#47)
* feat(Users): PRWLR-4718 make user email the default login username * feat(Token): PRWLR-4718 add serializers, views and urls for access and refresh tokens * feat(Token): PRWLR-4718 add first membership tenant in token if not present in json body * feat(Users): PRWLR-4718 add company_name to model * feat(Users): PRWLR-4718 create tenant and membership when creating new user * fix(BaseView): PRWLR-4718 add tenant_id to serializer context * fix(Tests): PRWLR-4718 use authorization with unit tests * fix(Views): PRWLR-4718 fix tenant retrieval from request * fix(Tests): PRWLR-4718 fix tests * fix(Fixtures): PRWLR-4718 fix tenant memberships ordering * chore(Tokens): PRWLR-4718 update token url * chore(Spec): PRWLR-4718 update API spec * feat(Tokens): PRWLR-4718 enable token refresh blacklisting * feat(Tokens): PRWLR-4718 implement RS256 algorithm and dev valid keys * fix(Environment): PRWLR-4718 fix jwt keys env vars * fix(Environment): PRWLR-4718 fix jwt keys env vars (testing) * chore(Settings): PRWLR-4718 remove drf-spectacular unused settings * fix(Environment): PRWLR-4718 remove jwt signature keys from dev and testing modules
This commit is contained in:
1 parent
4c83351b26
commit
54bb034cac
19 files changed
+987
-467
No files matched your search
@@ -2,7 +2,6 @@ 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
|
||||
@@ -64,18 +63,19 @@ class StateChoices(models.TextChoices):
|
||||
class User(AbstractBaseUser):
|
||||
id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
|
||||
name = models.CharField(max_length=150, validators=[MinLengthValidator(3)])
|
||||
username = models.CharField(
|
||||
max_length=150, unique=True, validators=[UnicodeUsernameValidator()]
|
||||
)
|
||||
email = models.EmailField(max_length=254, unique=True)
|
||||
company_name = models.CharField(max_length=150, blank=True)
|
||||
is_active = models.BooleanField(default=True)
|
||||
date_joined = models.DateTimeField(auto_now_add=True, editable=False)
|
||||
|
||||
USERNAME_FIELD = "username"
|
||||
REQUIRED_FIELDS = ["name", "email"]
|
||||
USERNAME_FIELD = "email"
|
||||
REQUIRED_FIELDS = ["name"]
|
||||
|
||||
objects = CustomUserManager()
|
||||
|
||||
def is_member_of_tenant(self, tenant_id):
|
||||
return self.memberships.filter(tenant_id=tenant_id).exists()
|
||||
|
||||
class Meta:
|
||||
db_table = "users"
|
||||
|
||||
@@ -106,7 +106,7 @@ class Membership(models.Model):
|
||||
related_query_name="membership",
|
||||
)
|
||||
role = MemberRoleEnumField(choices=RoleChoices.choices, default=RoleChoices.MEMBER)
|
||||
date_joined = models.DateTimeField(auto_now_add=True)
|
||||
date_joined = models.DateTimeField(auto_now_add=True, editable=False)
|
||||
|
||||
class Meta:
|
||||
db_table = "memberships"
|
||||
|
||||
Reference in new issue
Block a user