示例#1
0
    def migrate_vidyo_room(self, booking):
        booking_params = booking._bookingParams
        vc_room = VCRoom(created_by_id=Config.getInstance().getJanitorUserId())
        vc_room.type = 'vidyo'
        vc_room.status = VCRoomStatus.created if booking._created else VCRoomStatus.deleted
        vc_room.name = booking_params['roomName']
        vc_room.data = {
            'description': booking_params['roomDescription'],
            'room_pin': booking._pin,
            'moderation_pin': getattr(booking, '_moderatorPin', ''),
            'vidyo_id': booking._roomId,
            'url': booking._url,
            'owner': ('User', int(booking._owner.id)),
            'owner_identity': booking._ownerVidyoAccount,
            'auto_mute': booking_params.get('autoMute', True)
        }
        vc_room.modified_dt = booking._modificationDate
        vc_room.created_dt = booking._creationDate

        db.session.add(vc_room)

        vidyo_ext = VidyoExtension(vc_room=vc_room,
                                   extension=int(booking._extension),
                                   owned_by_id=int(booking._owner.id))

        db.session.add(vidyo_ext)
        db.session.flush()
        self.vc_rooms_by_extension[vidyo_ext.extension] = vc_room

        print cformat(
            '%{green}+++%{reset} %{cyan}{}%{reset} [%{yellow!}{}%{reset}]'
        ).format(vc_room.name, booking._roomId)
        return vc_room
 def _create_room(name, extension, data, **kwargs):
     vc_room = VCRoom(name=name,
                      data=data,
                      type='vidyo',
                      status=kwargs.pop('status', VCRoomStatus.created),
                      created_by_user=dummy_user,
                      **kwargs)
     db.session.add(vc_room)
     db.session.flush()
     extension = VidyoExtension(vc_room_id=vc_room.id,
                                extension=extension,
                                owned_by_user=dummy_user)
     vc_room.vidyo_extension = extension
     return vc_room
示例#3
0
 def _create_room(name, extension, owner, data, **kwargs):
     vc_room = VCRoom(name=name,
                      data=data,
                      type="vidyo",
                      status=kwargs.pop('status', VCRoomStatus.created),
                      created_by_id=kwargs.pop('created_by_id',
                                               dummy_avatar.id),
                      **kwargs)
     db.session.add(vc_room)
     db.session.flush()
     extension = VidyoExtension(vc_room_id=vc_room.id,
                                extension=extension,
                                owned_by_id=owner.id)
     vc_room.vidyo_extension = extension
     return vc_room
示例#4
0
 def has_data(self):
     return VCRoom.find(
         type='vidyo').count() or VidyoExtension.find().count()
 def _merge_users(self, target, source, **kwargs):
     super(VidyoPlugin, self)._merge_users(target, source, **kwargs)
     for ext in VidyoExtension.find(owned_by_user=source):
         ext.owned_by_user = target
         flag_modified(ext.vc_room, 'data')
    def create_room(self, vc_room, event):
        """Create a new Vidyo room for an event, given a VC room.

        In order to create the Vidyo room, the function will try to do so with
        all the available identities of the user based on the authenticators
        defined in Vidyo plugin's settings, in that order.

        :param vc_room: VCRoom -- The VC room from which to create the Vidyo
                        room
        :param event: Event -- The event to the Vidyo room will be attached
        """
        client = AdminClient(self.settings)
        owner = retrieve_principal(vc_room.data['owner'])
        login_gen = iter_user_identities(owner)
        login = next(login_gen, None)
        if login is None:
            raise VCRoomError(_("No valid Vidyo account found for this user"),
                              field='owner_user')

        extension_gen = iter_extensions(
            self.settings.get('indico_room_prefix'), event.id)
        extension = next(extension_gen)

        while True:
            room_mode = {
                'isLocked': False,
                'hasPIN': bool(vc_room.data['room_pin']),
                'hasModeratorPIN': bool(vc_room.data['moderation_pin'])
            }
            if room_mode['hasPIN']:
                room_mode['roomPIN'] = vc_room.data['room_pin']
            if room_mode['hasModeratorPIN']:
                room_mode['moderatorPIN'] = vc_room.data['moderation_pin']

            room_obj = client.create_room_object(
                name=vc_room.name,
                RoomType='Public',
                ownerName=login,
                extension=extension,
                groupName=self.settings.get('room_group_name'),
                description=vc_room.data['description'],
                RoomMode=room_mode)

            if room_obj.RoomMode.hasPIN:
                room_obj.RoomMode.roomPIN = vc_room.data['room_pin']
            if room_obj.RoomMode.hasModeratorPIN:
                room_obj.RoomMode.moderatorPIN = vc_room.data['moderation_pin']

            try:
                client.add_room(room_obj)
            except APIException as err:
                err_msg = err.message

                if err_msg.startswith('Room exist for name'):
                    raise VCRoomError(_("Room name already in use"),
                                      field='name')
                elif err_msg.startswith('Member not found for ownerName'):
                    login = next(login_gen, None)
                    if login is None:
                        raise VCRoomError(
                            _("No valid Vidyo account found for this user"),
                            field='owner_user')
                elif err_msg.startswith('Room exist for extension'):
                    extension = next(extension_gen)
                else:
                    raise

            else:
                # get room back, in order to fetch Vidyo-set parameters
                created_room = client.find_room(extension)

                if not created_room:
                    raise VCRoomNotFoundError(
                        _("Could not find newly created room in Vidyo"))
                vc_room.data.update({
                    'vidyo_id': unicode(created_room.roomID),
                    'url': created_room.RoomMode.roomURL,
                    'owner_identity': created_room.ownerName
                })
                flag_modified(vc_room, 'data')
                vc_room.vidyo_extension = VidyoExtension(
                    vc_room_id=vc_room.id,
                    extension=int(created_room.extension),
                    owned_by_user=owner)

                client.set_automute(created_room.roomID,
                                    vc_room.data['auto_mute'])
                break
示例#7
0
 def _merge_users(self, target, source, **kwargs):
     super(VidyoPlugin, self)._merge_users(target, source, **kwargs)
     for ext in VidyoExtension.find(owned_by_user=source):
         ext.owned_by_user = target
         flag_modified(ext.vc_room, 'data')
示例#8
0
 def has_data(self):
     return VCRoom.find(type='vidyo').count() or VidyoExtension.find().count()