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")
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