Пример #1
0
    def join_room(room_number, nickname, ip):
        """
        Register a new user\n
        Generates users id, computes it's secret token, saves it in database\n
        :param room_number:\n
        :param nickname: \n
        :param ip: \n
        :return: json{Status, [UserCookie]}
        """

        #do not allow blocked IP users join
        blocked_members = DBUtils.get_fields(room_number, ['blocked_members'])
        if blocked_members is not None:
            blocked_members = blocked_members[0]['blocked_members']
            ips = []
            for userId in blocked_members:
                ips.append(blocked_members[userId]['IP'])

            if ip in ips:
                return Response.responseFailure(
                    "Blocked from entering this party room")

        #get unique ID
        try:
            # print("pre user ID")
            userId = DBUtils.generateUniqueId(Purpose.USER, room_number)
            # print("after UserID has been assigned")
            result = userId
        except ValueError as error:
            return Response.responseFailure("Room does not exist")
        token = SecurityUtils.generateToken()

        user = {
            userId: {
                'nickname': nickname,
                'token': token,
                'IP': ip,
                'songs': {}
            },
        }

        #save in database
        result = DBUtils.add_member(room_number, user)

        if result:
            #generate user identifiers
            cookie = SecurityUtils.generateCookie(userId, token)
            return Response.responseSuccess({
                "UserCookie":
                cookie,
                "UserId":
                userId,
                "SpotifySearchToken":
                TokenModerator.get_client_credentials_token(),
                "YoutubeSearchToken":
                config.TOKEN_KEYS['YOUTUBE_DATA_API']
            })
        else:
            return Response.responseFailure("Failed to add new party member")
Пример #2
0
    def create_room():
        '''
        :return: if successful - True, room object; else - False, {}, message

        # return: response message, either success or failure which holds a room object with the following fields:
        # queue - dictionary/json object with pending songs
        # history - dictionary/json object with played songs
        # searchToken - search token (TODO)
        # accessToken - access token (TODO)
        # master - id of creator of room (TODO)
        # users - list with user ids and their votes
        # return json response with room if it's created, otherwise empty object and a failure message
        '''

        userId = DBUtils.generateUniqueId(Purpose.USER)
        token = SecurityUtils.generateToken()
        cookie = SecurityUtils.generateCookie(userId, token)
        spotify_search_token = TokenModerator.get_client_credentials_token()
        youtube_key = TokenModerator.get_youtube_search_key()

        room_obj = {
            # '_id': DBUtils.generateUniqueId(Purpose.ROOM),
            '_id': DBUtils.generateFourSymbolId(),
            'master': {userId: token},
            'SpotifySearchToken': spotify_search_token,
            'YoutubeSearchToken': youtube_key,
            'head': None,
            'queue': {},
            'history': {}, # played songs
            'users': {
                userId:{
                'nickname': 'Master',
                'token': token,
                'IP': "localhost",
                'songs': {} #master does not have 'blocked' field on purpose
                }
            },
            'blocked_members':{}
        }
        #@think is it ok to return values as head, users, master, _id as those are not needed

        result = DBUtils.create_room(room_obj)

        # cookie to identify the master
        room_obj.update({'MasterCookie': cookie})
        if result:
            return True, room_obj, None
        else:
            msg = 'Room was not created'
            return False, {}, msg