diff --git a/vc_vidyo/indico_vc_vidyo/forms.py b/vc_vidyo/indico_vc_vidyo/forms.py index 4098b73..6b0021c 100644 --- a/vc_vidyo/indico_vc_vidyo/forms.py +++ b/vc_vidyo/indico_vc_vidyo/forms.py @@ -21,13 +21,12 @@ from wtforms.fields.simple import TextAreaField from wtforms.validators import DataRequired, Length, Optional, Regexp, ValidationError from indico.modules.vc.forms import VCRoomAttachFormBase, VCRoomFormBase -from indico.util.user import retrieve_principal from indico.web.forms.base import generated_data from indico.web.forms.fields import IndicoPasswordField, PrincipalField from indico.web.forms.widgets import SwitchWidget from indico_vc_vidyo import _ -from indico_vc_vidyo.util import iter_user_identities +from indico_vc_vidyo.util import iter_user_identities, retrieve_principal PIN_VALIDATORS = [Optional(), Length(min=3, max=10), Regexp(r'^\d+$', message=_("The PIN must be a number"))] @@ -71,7 +70,7 @@ class VCRoomForm(VCRoomFormBase, VidyoAdvancedFormMixin): def __init__(self, *args, **kwargs): defaults = kwargs['obj'] if defaults.owner_user is None and defaults.owner is not None: - defaults.owner_user = retrieve_principal(defaults.owner, allow_groups=False, legacy=False) + defaults.owner_user = retrieve_principal(defaults.owner) super(VCRoomForm, self).__init__(*args, **kwargs) @generated_data diff --git a/vc_vidyo/indico_vc_vidyo/plugin.py b/vc_vidyo/indico_vc_vidyo/plugin.py index 91edbcf..b01a39d 100644 --- a/vc_vidyo/indico_vc_vidyo/plugin.py +++ b/vc_vidyo/indico_vc_vidyo/plugin.py @@ -31,7 +31,6 @@ from indico.modules.events.views import WPSimpleEventDisplay from indico.modules.vc import VCPluginMixin, VCPluginSettingsFormBase from indico.modules.vc.exceptions import VCRoomError, VCRoomNotFoundError from indico.modules.vc.views import WPVCEventPage, WPVCManageEvent -from indico.util.user import retrieve_principal from indico.web.forms.fields import IndicoPasswordField from indico.web.forms.widgets import CKEditorWidget from indico.web.http_api.hooks.base import HTTPAPIHook @@ -43,7 +42,7 @@ from indico_vc_vidyo.cli import cli from indico_vc_vidyo.forms import VCRoomAttachForm, VCRoomForm from indico_vc_vidyo.http_api import DeleteVCRoomAPI from indico_vc_vidyo.models.vidyo_extensions import VidyoExtension -from indico_vc_vidyo.util import iter_extensions, iter_user_identities, update_room_from_obj +from indico_vc_vidyo.util import iter_extensions, iter_user_identities, retrieve_principal, update_room_from_obj class PluginSettingsForm(VCPluginSettingsFormBase): @@ -156,7 +155,7 @@ class VidyoPlugin(VCPluginMixin, IndicoPlugin): :param event: Event -- The event to the Vidyo room will be attached """ client = AdminClient(self.settings) - owner = retrieve_principal(vc_room.data['owner'], allow_groups=False, legacy=False) + owner = retrieve_principal(vc_room.data['owner']) login_gen = iter_user_identities(owner) login = next(login_gen, None) if login is None: @@ -232,7 +231,7 @@ class VidyoPlugin(VCPluginMixin, IndicoPlugin): except RoomNotFoundAPIException: raise VCRoomNotFoundError(_("This room has been deleted from Vidyo")) - owner = retrieve_principal(vc_room.data['owner'], allow_groups=False, legacy=False) + owner = retrieve_principal(vc_room.data['owner']) changed_owner = room_obj.ownerName not in iter_user_identities(owner) if changed_owner: login_gen = iter_user_identities(owner) diff --git a/vc_vidyo/indico_vc_vidyo/util.py b/vc_vidyo/indico_vc_vidyo/util.py index 756db99..14a7243 100644 --- a/vc_vidyo/indico_vc_vidyo/util.py +++ b/vc_vidyo/indico_vc_vidyo/util.py @@ -93,3 +93,12 @@ def update_room_from_obj(settings, vc_room, room_obj): 'moderation_pin': room_obj.RoomMode.moderatorPIN if room_obj.RoomMode.hasModeratorPIN else "", }) vc_room.vidyo_extension.extension = int(room_obj.extension) + + +def retrieve_principal(principal): + from indico.modules.users import User + type_, id_ = principal + if type_ in {'Avatar', 'User'}: + return User.get(int(id_)) + else: + raise ValueError('Unexpected type: {}'.format(type_))