async def getUser(request, id): user = db.findUserById(id) if user == None: return json_response({'error': Response.NotFoundError}, status=404) if not Auth.ValidateUser(user, request): return json_response({'error': Response.InvalidUser}, status=400) newSessionToken = Auth.GenerateSessionToken() db.updateUserSessionToken(id, newSessionToken) user = db.findUserById(id) return json_response({'user': user}, status=200)
async def patchUser(request, id): user = db.findUserById(id) if user == None: return json_response({'error': Response.NotFoundError}, status=404) if not Auth.ValidateUser(user, request): return json_response({'error': Response.InvalidUser}, status=400) body = request.json if 'first_name' not in body and 'last_name' not in body: return json_response({'error': Response.BadRequest}, status=400) db.updateUserById(id, body['first_name'], body['last_name']) user = db.findUserById(id) return json_response({'user': user}, status=201)
async def patchChat(request, id, chat_id): user = db.findUserById(id) if user == None: return json_response({ 'error': Response.NotFoundError }) if not Auth.ValidateUser(user, request): return json_response({ 'error': Response.InvalidUser }, status=400) chat = db.findChatById(chat_id) if chat == None: return json_response({ 'error': Response.NotFoundError }) body = request.json if 'user_ids' not in body: return json_response({ 'error': Response.BadRequest }, status=400) notify = Notify() users = db.findUsersByIds(chat['user_ids']) apnTokens = [otherUser['apn_token'] for otherUser in users if otherUser['_id'] != user['_id']] custom = { 'chat_id' : chat['_id'], 'type' : 'users_added' } notify.sendMessages(apnTokens, user['first_name'] + ' ' + user['last_name'] + ' added more people to one of your chats.', custom) newUserIdsToAdd = [userId for userId in body['user_ids'] if userId not in chat['user_ids']] db.addUsersToChat(chat_id, newUserIdsToAdd) chat = db.findChatById(chat_id) chat['users'] = db.findUsersByIds(chat['user_ids']) return json_response({ 'chat' : chat })
async def postUser(request): body = request.json if 'first_name' not in body or 'last_name' not in body or 'fb_token' not in body: return json_response({'error': Response.BadRequest}, status=400) user_id = db.insertUser(body) user = db.findUserById(user_id) return json_response({'user': user}, status=201)
async def deleteUser(request, id): user = db.findUserById(id) if user == None: return json_response({'error': Response.NotFoundError}, status=404) if not Auth.ValidateUser(user, request): return json_response({'error': Response.InvalidUser}, status=400) db.removeUserById(id) return json_response({'success': True}, status=201)
async def postUser(request): body = request.json if 'first_name' not in body and 'last_name' not in body and 'apn_token' not in body: return json_response({'error': Response.BadRequest}, status=400) body['session_token'] = Auth.GenerateSessionToken() user_id = db.insertUser(body) user = db.findUserById(user_id) return json_response({'user': user}, status=201)
async def facebookUserLogin(request): if 'code' not in request.args: return json_response({'error': Response.BadRequest}, status=400) code = request.args['code'][0] fbookURL = 'https://graph.facebook.com/oauth/access_token? \ client_id=' + config.fbClientId + \ '&redirect_uri=' + config.fbRedirectURI + \ '&client_secret=' + config.fbClientSecret + \ '&code=' + code r = requests.get(fbookURL) fbInfo = r.json() if 'access_token' not in fbInfo: return html('<h2 style="color:white;">' + json.dumps({'error': fbInfo}) + '</h2>') r = requests.get( "https://graph.facebook.com/me?fields=id,first_name,last_name,picture&access_token=" + fbInfo['access_token']) fbUser = r.json() if 'id' not in fbUser: return html('<h2 style="color:white;">' + json.dumps({'error': fbUser}) + '</h2>') user = db.findByFBID(fbUser['id']) user_id = None new_user = user == None if user != None: db.updateUser( user['_id'], { 'first_name': fbUser['first_name'], 'last_name': fbUser['last_name'], 'fb_id': fbUser['id'], 'prof_pic': fbUser['picture']['data']['url'] }) user_id = user['_id'] else: user_id = db.insertUser({ 'first_name': fbUser['first_name'], 'last_name': fbUser['last_name'], 'fb_id': fbUser['id'], 'prof_pic': fbUser['picture']['data']['url'] }) user = db.findUserById(user_id) user['new'] = new_user resp = '<h1 id="user" style="color:white;">' + json.dumps(user) + '</h1>' return html(resp)
async def postUser(request): body = request.json if 'username' not in body or 'password' not in body: return json_response({'error': Response.BadRequest}, status=400) user = db.findByUsername(body['username']) if user != None: return json_response({'error': Response.BadRequest}, status=400) user_id = db.insertUser(body) user = db.findUserById(user_id) return json_response({'user': user}, status=201)
async def postChat(request, id): user = db.findUserById(id) if user == None: return json_response({ 'error': Response.NotFoundError }) if not Auth.ValidateUser(user, request): return json_response({ 'error': Response.InvalidUser }, status=400) body = request.json if 'user_ids' not in body: return json_response({ 'error': Response.BadRequest }, status=400) chat_id = db.insertChat(body) return json_response({ 'chat': db.findChatById(chat_id) }, status=201)
async def deleteChat(request, id, chat_id): user = db.findUserById(id) if user == None: return json_response({ 'error': Response.NotFoundError }) if not Auth.ValidateUser(user, request): return json_response({ 'error': Response.InvalidUser }, status=400) chat = db.findChatById(chat_id) if chat == None: return json_response({ 'error': Response.NotFoundError }) db.removeUserFromChat(id, chat_id) return json_response({ 'success' : 'user removed from chat' })
async def getUserChats(request, id): user = db.findUserById(id) if user == None: return json_response({ 'error': Response.NotFoundError }) if not Auth.ValidateUser(user, request): return json_response({ 'error': Response.InvalidUser }, status=400) chats = db.findChatsByUserId(id) if 'removed_chat_ids' in user: chats = [chat for chat in chats if chat['_id'] not in user['removed_chat_ids']] for chat in chats: chat['users'] = db.findUsersByIds(chat['user_ids']) return json_response({ 'chats' : chats })
async def postChat(request, id): body = request.json user = db.findUserById(id) if user == None: return json_response({'error': Response.NotFoundError}, status=404) if not Auth.ValidateUser(user, request): return json_response({'error': Response.InvalidUser}, status=400) try: notify = Notify() notify.clearNotifications(user['apn_token']) except Exception as e: return json_response({'error': str(e)}, status=500) return json_response({'success': True})
async def postComment(request, user_id, page_id): body = request.json if 'message' not in body: return json_response({'error': Response.BadRequest}, status=400) user = db.findUserById(user_id) if user == None: return json_response({'error': Response.BadRequest}, status=400) page = db.findPageById(page_id) if page == None: return json_response({'error': Response.BadRequest}, status=400) comment_id = db.insertComment(user, page, body['message']) comment = db.findCommentById(comment_id) return json_response({'comment': comment}, status=201)
async def getChatMessages(request, user_id, chat_id): user = db.findUserById(user_id) chat = db.findChatById(chat_id) if user == None or chat == None: return json_response({'error': Response.NotFoundError}) if not Auth.ValidateUser(user, request): return json_response({'error': Response.InvalidUser}, status=400) messages = db.findMessagesByChatId(chat_id) users = db.findUsersByIds(chat['user_ids']) return json_response({ 'messages': messages, 'chat': chat, 'users': users }, status=201)
async def patchChat(request, id, chat_id): user = db.findUserById(id) if user == None: return json_response({ 'error': Response.NotFoundError }) if not Auth.ValidateUser(user, request): return json_response({ 'error': Response.InvalidUser }, status=400) chat = db.findChatById(chat_id) if chat == None: return json_response({ 'error': Response.NotFoundError }) body = request.json if 'title' not in body: return json_response({ 'error': Response.BadRequest }, status=400) db.updateChat(chat_id, body['title']) return json_response({ 'success' : 'chat updated' })
async def postChat(request, user_id, chat_id): user = db.findUserById(user_id) chat = db.findChatById(chat_id) if user == None or chat == None: return json_response({'error': Response.NotFoundError}) if not Auth.ValidateUser(user, request): return json_response({'error': Response.InvalidUser}, status=400) body = request.json if 'message' not in body: return json_response({'error': Response.BadRequest}, status=400) db.insertMessage(user_id, chat_id, body['message']) messages = db.findMessagesByChatId(chat_id) chat = db.findChatById(chat_id) users = db.findUsersByIds(chat['user_ids']) apnTokens = [ otherUser['apn_token'] for otherUser in users if otherUser['_id'] != user['_id'] and ( 'removed_chat_ids' not in otherUser or chat['_id'] not in otherUser['removed_chat_ids']) ] # Send push notification to users. notify = Notify() custom = {'chat_id': chat['_id'], 'type': 'new_message'} notify.sendMessages(apnTokens, 'Encrypted message from ' + user['first_name'] + '.', custom) return json_response({ 'messages': messages, 'chat': chat, 'users': users }, status=201)
async def getUser(request, user_id): user = db.findUserById(user_id) if user == None: return json_response({'error': Response.NotFoundError}, status=404) return json_response({'user': user}, status=200)