Skip to content
Snippets Groups Projects
Verified Commit d8d6213b authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Add bbb_ methods to AnonymousUser

parent 325588e9
No related branches found
No related tags found
No related merge requests found
......@@ -13,6 +13,8 @@ class BigbluebuttonConfig(AppConfig):
def ready(self):
"""Extend the User model with attribute shortcuts."""
from django.contrib.auth.models import AnonymousUser # noqa
User = get_user_model()
User.add_to_class("bbb_attendees", property(util.get_user_attendees))
......@@ -20,3 +22,9 @@ class BigbluebuttonConfig(AppConfig):
User.add_to_class("bbb_display_name", property(settings.DISPLAY_NAME_CALLBACK))
User.add_to_class("bbb_get_attendee", settings.ATTENDEE_CALLBACK)
User.add_to_class("bbb_get_role", settings.ROLE_CALLBACK)
setattr(AnonymousUser, "bbb_attendees", property(util.get_user_attendees))
setattr(AnonymousUser, "bbb_user_id", property(settings.USER_ID_CALLBACK))
setattr(AnonymousUser, "bbb_display_name", property(settings.DISPLAY_NAME_CALLBACK))
setattr(AnonymousUser, "bbb_get_attendee", settings.ATTENDEE_CALLBACK)
setattr(AnonymousUser, "bbb_get_role", settings.ROLE_CALLBACK)
from typing import TYPE_CHECKING, List
import uuid
from typing import TYPE_CHECKING, List, Union
from django.contrib.auth import get_user_model
from django.utils.translation import gettext as _
from ..api.attendee import Attendee, Role
if TYPE_CHECKING: # pragma: no cover
from django.contrib.auth.models import AnonymousUser
from .models import Meeting
User = get_user_model()
def get_user_id(user: "User") -> str:
def get_user_id(user: Union["AnonymousUser", "User"]) -> str:
"""Get a unique ID for a Django user.
If the User object has a guid attribute, this is used by default. If not,
......@@ -18,10 +22,14 @@ def get_user_id(user: "User") -> str:
It can be overridden with the `BBB_USER_ID_CALLBACK` setting.
"""
return str(getattr(user, "guid", user.pk))
if user.is_anonymous:
return str(uuid.uuid1())
else:
return str(getattr(user, "guid", user.pk))
def get_display_name(user: "User") -> str:
def get_display_name(user: Union["AnonymousUser", "User"]) -> str:
"""Get a display namefor a Django user.
Defaults to the full name of the user object or, if it is empty, its
......@@ -29,7 +37,11 @@ def get_display_name(user: "User") -> str:
It can be overridden with the `BBB_DISPLAY_NAME_CALLBACK` setting.
"""
return user.get_full_name().strip() or user.username
if user.is_anonymous:
return _("Anonymous User")
else:
return user.get_full_name().strip() or user.username
def get_meeting_id(meeting: "Meeting") -> str:
......@@ -42,7 +54,7 @@ def get_meeting_id(meeting: "Meeting") -> str:
return str(meeting.guid)
def get_attendee(user: "User", meeting: "Meeting") -> Attendee:
def get_attendee(user: Union["AnonymousUser", "User"], meeting: "Meeting") -> Attendee:
"""Generate an Attendee object for a meeting and user.
If the user's ID is already a known attendee on the meeting by the information
......@@ -65,7 +77,7 @@ def get_attendee(user: "User", meeting: "Meeting") -> Attendee:
return attendee
def get_role(user: "User", meeting: "Meeting") -> Role:
def get_role(user: Union["AnonymousUser", "User"], meeting: "Meeting") -> Role:
"""Determine the role of a user for a meeting.
By default, staff members and superusers become moderators, all other users
......@@ -80,7 +92,7 @@ def get_role(user: "User", meeting: "Meeting") -> Role:
return Role.VIEWER
def get_user_attendees(user: "User") -> List[Attendee]:
def get_user_attendees(user: Union["AnonymousUser", "User"]) -> List[Attendee]:
from .models import BigBlueButtonGroup # noqa
attendees = []
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment