Esempio n. 1
0
async def syncHighScores(request, fb_token):
    body = request.json

    if 'easy_highscores' not in body or 'hard_highscores' not in body:
        return json_response({'error': Response.BadRequest}, status=400)

    user = db.findUserByFbToken(fb_token)
    if user == None:
        return json_response({'error': Response.NotFoundError}, status=404)

    syncedHard = list(
        set(user['hard_highscores']) | set(body['hard_highscores']))
    hardHS = sorted(syncedHard, reverse=True)[:10]

    syncedEasy = list(
        set(user['easy_highscores']) | set(body['easy_highscores']))
    easyHS = sorted(syncedEasy, reverse=True)[:10]

    db.updateHighScores(user['_id'], easyHS, hardHS)

    return json_response({
        'easy_highscores': easyHS,
        'hard_highscores': hardHS
    },
                         status=200)
Esempio n. 2
0
async def create_event(request):
    body = request.json

    if 'uid' not in body or 'token' not in body or 'title' not in body or \
        'location' not in body or 'start' not in body or 'end' not in body \
        or 'description' not in body or 'image' not in body:
        return json_response({'error': 'Bad request'}, status=400)

    title = body['title']
    repeat, end_repeat, repeat_days = None, None, None

    if 'repeat' in body:
        repeat = body['repeat']
    if 'end_repeat' in body:
        end_repeat = body['end_repeat']
    if 'repeat_days' in body:
        repeat_days = dumps(body['repeat_days'])

    res = db.create_event(body['uid'], body['token'], title, body['location'],
                          body['start'], body['end'], body['description'],
                          repeat, end_repeat, repeat_days, body['image'])

    if 'error' in res:
        return json_response({'error': res['error']}, status=res['status'])

    msg = 'A new event ({}) has been added! Check it out!'.format(title)
    rejected_tokens = pusher.send_notifications(db.get_event_apn_tokens(),
                                                msg, 'event')

    for apn_token in rejected_tokens:
        db.remove_apn_token(apn_token)

    return json_response(res, status=201)
Esempio n. 3
0
async def getFriendsHighscores(request, fb_token):
    body = request.json

    if 'fb_tokens' not in body:
        return json_response({'error': Response.BadRequest}, status=400)

    user = db.findUserByFbToken(fb_token)
    if user == None:
        return json_response({'error': Response.NotFoundError}, status=404)

    friends = db.getAllUsersByFBTokens(body['fb_tokens'])
    friendHighScores = []

    for friend in friends:
        maxEasy = 0
        if len(friend['easy_highscores']) > 0:
            maxEasy = max(friend['easy_highscores'])

        maxHard = 0
        if len(friend['hard_highscores']) > 0:
            maxHard = max(friend['hard_highscores'])

        friendHighScores.append({
            'first_name': friend['first_name'],
            'last_name': friend['last_name'],
            'fb_token': friend['fb_token'],
            'easy_highscore': maxEasy,
            'hard_highscore': maxHard
        })

    return json_response({'friends': friendHighScores}, status=200)
Esempio n. 4
0
async def update_team(request):
    body = request.json

    if 'uid' not in body or 'token' not in body or 'tid' not in body or \
        'name' not in body or 'description' not in body or \
        'leaders' not in body or 'meetings' not in body or \
        'groupme' not in body or 'members' not in body or 'admins' not in body:
        return json_response({'error': 'Bad Request'}, status=400)

    name = body['name']
    res = db.update_team(body['uid'], body['token'], body['tid'], name,
                         body['description'], body['leaders'],
                         body['meetings'], body['groupme'], body['members'],
                         body['admins'])

    if 'error' in res:
        return json_response({'error': res['error']}, status=res['status'])

    msg = 'You\'ve been added to {} Team!'.format(name)
    tokens = db.get_team_apn_tokens(res['new_members'])
    rejected_tokens = pusher.send_notifications(tokens, msg, 'team')

    for apn_token in rejected_tokens:
        db.remove_apn_token(apn_token)

    return json_response({}, status=200)
Esempio n. 5
0
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 })
Esempio n. 6
0
 async def batched_predict(request):
     dummy_input = [random.random()]
     response = await wrapped_model.predict(dummy_input)
     if not response.succeed():
         return json_response({'output': None, 'status': 'failed'})
     assert response.result == dummy_input[0], response.result
     return json_response({'output': response.result})
Esempio n. 7
0
async def getUser(request, fb_token):

    user = db.findUserByFbToken(fb_token)
    if user == None:
        return json_response({'error': Response.NotFoundError}, status=404)

    return json_response({'user': user}, status=200)
Esempio n. 8
0
async def update_event(request):
    body = request.json

    if 'uid' not in body or 'token' not in body or 'eid' not in body or \
        'title' not in body or 'location' not in body or \
        'start' not in body or 'end' not in body or \
        'description' not in body or 'image' not in body:
        return json_response({'error': 'Bad request'}, status=400)

    title, start, end = body['title'], body['start'], body['end']
    repeat, end_repeat, repeat_days = None, None, None

    if 'repeat' in body:
        repeat = body['repeat']
    if 'end_repeat' in body:
        end_repeat = body['end_repeat']
    if 'repeat_days' in body:
        repeat_days = dumps(body['repeat_days'])

    res = db.update_event(body['uid'], body['token'], body['eid'], title,
                          body['location'], start, end, body['description'],
                          repeat, end_repeat, repeat_days, body['image'])

    if 'error' in res:
        return json_response({'error': res['error']}, status=res['status'])

    start_dt = datetime.strptime(start, '%Y-%m-%d %H:%M:%S')
    end_dt = datetime.strptime(end, '%Y-%m-%d %H:%M:%S')

    start_dt_old = datetime.strptime(res['start_old'], '%Y-%m-%d %H:%M:%S')
    end_dt_old = datetime.strptime(res['end_old'], '%Y-%m-%d %H:%M:%S')

    if start_dt != start_dt_old or end_dt != end_dt_old:

        msg = 'The time of {} has been changed. It will now '.format(title)
        start_time_str = start_dt.strftime('%I:%M%p').lstrip('0').lower()
        end_time_str = end_dt.strftime('%I:%M%p').lstrip('0').lower()

        if start_dt.date() == end_dt.date():
            day = start_dt.strftime('%A, %B ')
            day += number.ordinal(start_dt.day)
            msg += 'be from {} to {} on {}.'.format(start_time_str,
                                                    end_time_str, day)
        else:
            start_day = start_dt.strftime('%A, %B ')
            start_day += number.ordinal(start_dt.day)
            end_day = end_dt.strftime('%A, %B ')
            end_day += number.ordinal(end_dt.day)

            msg += 'start on {} at {} and end on {} at {}.'.\
                format(start_day, start_time_str, end_day, end_time_str)

        rejected_tokens = pusher.send_notifications(db.get_event_apn_tokens(),
                                                    msg, 'event')
        for apn_token in rejected_tokens:
            db.remove_apn_token(apn_token)

    return json_response({}, status=201)
Esempio n. 9
0
async def getUserByUsernameAndPassword(request):
    if 'username' not in request.args or 'password' not in request.args:
        return json_response({'error': Response.BadRequest}, status=400)

    user = db.findUserByUsernameAndPassword(request.args['username'][0],
                                            request.args['password'][0])
    if user == None:
        return json_response({'error': Response.NotFoundError}, status=404)

    return json_response({'user': user}, status=200)
Esempio n. 10
0
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)
Esempio n. 11
0
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)
Esempio n. 12
0
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)
Esempio n. 13
0
async def deleteUser(request, fb_token, mode):

    user = db.findUserByFbToken(fb_token)
    if user == None:
        return json_response({'error': Response.NotFoundError}, status=404)

    easyHS = [] if mode == "easy" else user['easy_highscores']
    hardHS = [] if mode == "hard" else user['hard_highscores']
    db.updateHighScores(user['_id'], easyHS, hardHS)

    return json_response({'success': 'removed ' + mode + ' highscores'},
                         status=201)
Esempio n. 14
0
async def postChat(request):
    body = request.json
    message = body['message']
    token = body['apn_token']

    try:
        notify = Notify()
        notify.sendMessages([token], message, {})
    except Exception as e:
        return json_response({'error': str(e)}, status=500)

    return json_response({'success': True})
Esempio n. 15
0
async def leave_course(request):
    body = request.json

    if 'uid' not in body or 'token' not in body or 'cid' not in body:
        return json_response({'error': 'Bad request'}, status=400)

    res = db.leave_course(body['uid'], body['token'], body['cid'])

    if 'error' in res:
        return json_response({'error': res['error']}, status=res['status'])

    return json_response({}, status=200)
Esempio n. 16
0
async def delete_events(request):
    body = request.json

    if 'uid' not in body or 'token' not in body or 'events' not in body:
        return json_response({'error': 'Bad request' }, status=400)

    res = db.delete_events(body['uid'], body['token'], body['events'])

    if 'error' in res:
        return json_response({'error': res['error']}, status=res['status'])

    return json_response({}, status=200)
Esempio n. 17
0
async def get_courses(request):

    args = request.args

    if 'uid' not in args or 'token' not in args:
        return json_response({'error': 'Bad request'}, status=400)

    res = db.get_courses(args['uid'][0], args['token'][0])

    if 'error' in res:
        return json_response({'error': res['error']}, status=res['status'])

    return json_response(res, status=200)
Esempio n. 18
0
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)
Esempio n. 19
0
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)
Esempio n. 20
0
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)
Esempio n. 21
0
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)
Esempio n. 22
0
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' })
Esempio n. 23
0
def error(message, **kwargs):
    return json_response({
        "status": "error",
        "results": [],
        "exception": message,
        **kwargs,
    })
Esempio n. 24
0
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 })
Esempio n. 25
0
    def handle_uncaught_exception(self,
                                  request,
                                  exception,
                                  custom_message=INTERNAL_SERVER_ERROR_JSON):

        return json_response(custom_message,
                             status.HTTP_500_INTERNAL_SERVER_ERROR)
Esempio n. 26
0
def success(result_set, **kwargs):
    return json_response({
        "status": "success",
        "results": result_set,
        "exception": None,
        **kwargs,
    })
Esempio n. 27
0
async def post_login(request):
    token = request.json['auth_token']
    url = '{}/v1/login/verify/{}'.format(ID_SERVICE_LOGIN_URL, token)
    resp = await app.http.get(url)
    if resp.status != 200:
        raise SanicException("Login Failed", status_code=401)

    user = await resp.json()
    toshi_id = user['toshi_id']
    session_id = generate_session_id()
    async with app.pool.acquire() as con:
        admin = await con.fetchrow("SELECT * FROM admins WHERE toshi_id = $1",
                                   toshi_id)
        if admin:
            await con.execute(
                "INSERT INTO sessions (session_id, toshi_id) VALUES ($1, $2)",
                session_id, toshi_id)
    if admin:
        response = json_response(user)
        response.cookies['session'] = session_id
        #response.cookies['session']['secure'] = True
        return response
    else:
        toshi_log.info("Invalid login from: {}".format(toshi_id))
        raise SanicException("Login Failed", status_code=401)
Esempio n. 28
0
def check_rate_limit(key, now):

    # If there are more recent attempts than allowed
    if key in RATE_LIMIT_DB and len(
            RATE_LIMIT_DB[key]) > RATE_LIMIT_NB_REQUESTS:
        oldest_attempt = RATE_LIMIT_DB[key][0]
        logger.info(
            f"Rate limit reached for {key}, can retry in {int(RATE_LIMIT_SECONDS - now + oldest_attempt)} seconds"
        )
        return json_response(
            {
                "error": {
                    "code":
                    "error_rate_limit",
                    "content":
                    f"Rate limit reached for this domain or ip, retry in {int(RATE_LIMIT_SECONDS - now + oldest_attempt)} seconds"
                }
            },
            status=400)

    # In any case, add this attempt to the DB
    if key not in RATE_LIMIT_DB:
        RATE_LIMIT_DB[key] = [now]
    else:
        RATE_LIMIT_DB[key].append(now)
Esempio n. 29
0
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})
Esempio n. 30
0
async def program_detail(request, name):
    process = supervisor.getProcessInfo(name)
    return json_response({
        'name': process['name'],
        'statename': process['statename'],
        'description': process['description'],
        'logs': get_log(process['name'])
    })
Esempio n. 31
0
async def return_data(request, data):
    return json_response(await get_data(
        data, int(request.args.get('size', 10))
    ))