Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions trojstenid/users/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from ulid import ULID

if TYPE_CHECKING:
from allauth.account.models import EmailAddress
from django.db.models.manager import RelatedManager

from trojstenid.schools.models import UserSchoolRecord
Expand Down Expand Up @@ -43,6 +44,7 @@ class User(AbstractUser):

avatar_file = ImageField(upload_to=user_avatar_name, blank=True)
userschoolrecord_set: "RelatedManager[UserSchoolRecord]"
emailaddress_set: "RelatedManager[EmailAddress]"

@property
def avatar(self):
Expand Down
19 changes: 16 additions & 3 deletions trojstenid/users/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,39 @@

class OurOAuth2Validator(OAuth2Validator):
oidc_claim_scope = OAuth2Validator.oidc_claim_scope
oidc_claim_scope.update({"groups": "groups", "school_info": "school_info"})
oidc_claim_scope.update(
{
# field: required scope
"groups": "groups",
"school_info": "school_info",
"emails": "email",
}
)

def get_additional_claims(self, request):
user: User = request.user
school_info = None
if record := user.get_current_school_record():
school_info = record.to_dict()

emails = set()
emails.add(user.email)
for e in user.emailaddress_set.filter(verified=True):
emails.add(e.email)

return {
"name": user.get_full_name(),
"family_name": user.last_name,
"given_name": user.first_name,
"preferred_username": user.username,
"email": user.email,
"emails": list(emails),
"groups": [g.name for g in user.groups.all()],
"school_info": school_info,
}

def validate_silent_login(self, request):
def validate_silent_login(self, request): # pyright:ignore
return True

def validate_silent_authorization(self, request):
def validate_silent_authorization(self, request): # pyright:ignore
return True