Пример #1
0
def appApiUserData(environ, start_response):
    username = environ['PATH_INFO'].split('/')[-1].split('?')[0]

    user = storage.sql('''
        SELECT * FROM users WHERE username=?
    ''', (username,))
    if not user:
        start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
        return [util.json_bytes({'error': 1, 'message': 'No such user.'})]

    storage.recalculate_player_achievements(user[0]['id'])
    data = storage.sql('''
        SELECT username, points, achievements, users.id AS id FROM users
        LEFT OUTER JOIN leaderboard ON leaderboard.user_id = users.id
        WHERE username = ?
    ''', (username,))

    if not data:
        start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
        return [util.json_bytes({'error': 1, 'message': 'No such user.'})]

    data = data[0]
    data['achievements'] = json.loads(data['achievements'])
    start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
    return [util.json_bytes({'error': 0, 'data': data})]
Пример #2
0
def appRequest(environ, start_response):
    #print("ASD")
    data_len = int(environ.get('CONTENT_LENGTH', 0))
    data = urllib.parse.parse_qs(environ['wsgi.input'].read(data_len).decode('utf-8'), keep_blank_values=True)
    #print(data)

    user = storage.get_user_data(data['username'][0])
    if user:
        start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
        return [util.json_bytes({'error': 2, 'message': 'Username already exists.'})]
    if not re.match('^[A-Za-z0-9]{1,15}$', data['username'][0]):
        start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
        return [util.json_bytes({'error': 4, 'message': 'Invalid username.'})]
    if len(data['password'][0]) < 7:
        start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
        return [util.json_bytes({'error': 4, 'message': 'Password should be at least 7 characters long.'})]
    
    storage.sql('''
        INSERT INTO users (username, password, mon) VALUES (?, ?, ?)
    ''', (
        data['username'][0],
        util.password_hash(data['password'][0]),
        '{"species": "CHARMANDER", "mon_name": "Shadow", "moves": ["SCRATCH"], "name": "X", "items": [1,2,3,4,0,0,0,0]}'
    ))
    
    user = storage.get_user_data(data['username'][0])
    key = util.new_session_key()
    storage.sql('''
        UPDATE users SET sessid=? WHERE id=?
    ''', (key, user['id']))
    
    print("New user!", user['username'])
    start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
    return [util.json_bytes({'error': 0, 'message': 'OK'})]
Пример #3
0
def appApiChangeMessage(environ, start_response):
    data_len = int(environ.get('CONTENT_LENGTH', 0))
    data = urllib.parse.parse_qs(environ['wsgi.input'].read(data_len).decode('utf-8'), keep_blank_values=True)

    if len(data['message'][0]) > 120:
        start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
        return [util.json_bytes({'error': 2, 'message': 'Message too long.'})]
    
    storage.sql('''
        UPDATE users SET message=? WHERE session=?
    ''', (data['message'][0], data['sessid'][0]))
    
    start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
    return [util.json_bytes({'error': 0, 'message': 'OK'})]
Пример #4
0
def appRequest(environ, start_response):
    #print("LOGIN")
    start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
    data_len = int(environ.get('CONTENT_LENGTH', 0))
    data = urllib.parse.parse_qs(environ['wsgi.input'].read(data_len).decode('utf-8'), keep_blank_values=True)
    username = data['username'][0]
    password = data['password'][0]
    q =  util.checkUserLogin(username, password)
    if q != None:
        sessid = util.new_session_key()
        storage.sql("update users set sessid=? where id=?", (sessid, q["id"]))
        return [util.json_bytes({'error': 0, 'sessid': sessid})]
    else:
        return [util.json_bytes({'error': 1, 'message': 'Invalid username and/or password.'})]
Пример #5
0
def appApiRelogin(environ, start_response):
    data_len = int(environ.get('CONTENT_LENGTH', 0))
    data = urllib.parse.parse_qs(environ['wsgi.input'].read(data_len).decode('utf-8'), keep_blank_values=True)
    
    user = storage.sql('''
        SELECT * FROM users WHERE username=? AND password=?
    ''', (data['username'][0], util.password_hash(data['password'][0])))
    
    if not user:
        start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
        return [util.json_bytes({'error': 1, 'message': 'Invalid username and/or password.'})]
    user = user[0]
    
    start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
    return [util.json_bytes({'error': 0, 'sessid': user['session']})]
Пример #6
0
def appApiScoreboard(environ, start_response):
    leaderboard = storage.sql('''
        SELECT username, points FROM leaderboard
        LEFT OUTER JOIN users ON leaderboard.user_id = users.id
        WHERE username <> 'TheZZAZZGlitch'
        ORDER BY points DESC
    ''')
    start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
    return [util.json_bytes({'error': 0, 'data': leaderboard})]
Пример #7
0
def appApiRegister(environ, start_response):
    data_len = int(environ.get('CONTENT_LENGTH', 0))
    data = urllib.parse.parse_qs(environ['wsgi.input'].read(data_len).decode('utf-8'),
        keep_blank_values=True)

    user = storage.get_user_data(data['username'][0])
    if user:
        start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
        return [util.json_bytes({'error': 2, 'message': 'Username already exists.'})]
    if not (data['username'][0].strip() and data['password'][0].strip()):
        start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
        return [util.json_bytes({'error': 3, 'message': 'This field must not be empty.'})]
    if not re.match('^[A-Za-z0-9]{1,15}$', data['username'][0]):
        start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
        return [util.json_bytes({'error': 4, 'message': 'Invalid username.'})]
    if len(data['message'][0]) > 120:
        start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
        return [util.json_bytes({'error': 5, 'message': 'Message too long.'})]
    
    storage.sql('''
        INSERT INTO users (username, password, message, fun) VALUES (?, ?, ?, ?)
    ''', (
        data['username'][0],
        util.password_hash(data['password'][0]),
        data['message'][0],
        random.randrange(0,255)
    ))
    
    user = storage.get_user_data(data['username'][0])
    storage.push_event(user.id, storage.EVT_REGISTERED, 0)

    storage.sql('''
        INSERT INTO leaderboard (user_id, points, achievements) VALUES (?, 0, '{}')
    ''', (user['id'],))
    
    key = util.new_session_key()
    storage.sql('''
        UPDATE users SET session=? WHERE id=?
    ''', (key, user['id']))
    
    start_response('200 OK', HEADERS_JSON + HEADERS_CORS)
    return [util.json_bytes({'error': 0, 'message': 'OK'})]