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})]
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'})]
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'})]
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.'})]
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']})]
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})]
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'})]