def battle(battle_id): battle = BattleFactory.load_battle(battle_id, db) user_id = current_user.user_id if isinstance(battle, str): return failure(battle) if request.method == 'GET': require = require_format(request.args) return success(battle.get_state(current_time(), user_id, require)) elif request.method == 'POST': #todo check user_id match player_id request_json = request.get_json(force=True) check_res = field_checker(request_json, ['player_id', 'piece_id', 'position']) if check_res is not None: return failure(check_res) battle.try_drop_piece(current_time(), request_json['player_id'], current_user.user_id, request_json['piece_id'], request_json['position']) return success( battle.get_state(current_time(), request_json['player_id']))
def users(): if request.method == 'GET': try: query = json.loads(request.args.get("query", "")) sort = json.loads(request.args.get("sort", "[]")) except Exception as e: return failure(repr(e)) # remove password projection = {"password": False} return success( id_clear( db.users.find(filter=query, projection=projection, sort=sort))) elif request.method == 'POST': request_json = request.get_json(force=True) try: assert (get_email_from_token( request_json['token']) == request_json['email']) except Exception as e: return failure("Permission Denied") user = User.create(db, id_generate, request_json['username'], request_json['email'], request_json['password']) if isinstance(user, str): return failure(user) login_user(user) return success(user.dump())
def change(): try: request_json = request.get_json(force=True) old_password = request_json['old_password'] now_password = rabbit.find()[0]['password'] assert(now_password == old_password) rabbit.update_one({"password": old_password}, {"$set": {"password": request_json['new_password']}}) except AssertionError as e: return failure("旧密码错误") except Exception as e: return failure(repr(e)) else: return success("密码修改成功")
def confirm(): request_json = request.get_json(force=True) if not current_user.check_password(request_json['password']): return failure("原密码错误") result = send_confirm_email( current_user.username, request_json['email'], url_head + "/confirm?token=" + generate_register_token(request_json['email']), email_config) if result != "success": return failure(result) return success("")
def password_resetter(): request_json = request.get_json(force=True) check_res = field_checker(request_json, ['email']) if check_res is not None: return failure(check_res) result = send_reset_mail( request_json['email'], url_head + "/password_resetter?token=" + generate_register_token(request_json['email']), email_config) if result != "success": return failure(result) return success("")
def user_email_password_resetter(user_id): request_json = request.get_json(force=True) try: token = request_json["token"] email = get_email_from_token(token) user = User.load_from_email(db, email) if email == False: return failure("Permission denied") except Exception: return failure("Permission denied") user.update('password', request_json['password']) login_user(user) return success("")
def user(user_id): if current_user.user_id == -1 or current_user.user_id != user_id: return failure("perission denied") request_json = request.get_json(force=True) if not current_user.check_password(request_json['old_password']): return failure("原密码错误") legal_field = ['username', 'password'] for key in list(request_json): if key not in legal_field: request_json.pop(key) for key in request_json: current_user.update(key, request_json[key]) return success(current_user.dump())
def delete_message(): try: request_json = request.get_json(force=True) password = request_json['password'] assert(password == my_password) if 'name' in request_json: name = request_json['name'] count = message.delete_many({'name': name}).deleted_count else: text = request_json['text'] count = message.delete_many({'text': text}).deleted_count except AssertionError as e: return failure("管理员密码错误") except Exception as e: return failure(repr(e)) else: return success(count)
def login(): if request.method == 'POST': request_json = request.get_json(force=True) user = User.load_from_email(db, request_json['email']) if user is None: return failure("user not exist") if not user.check_password(request_json['password']): return failure("password not correct") login_user(user) return success(user.dump()) elif request.method == 'DELETE': logout_user() return success(current_user.dump())
def chat_logs(battle_id): if current_user.user_id == -1: return failure("need login first!") request_json = request.get_json(force=True) battle = BattleFactory.load_battle(battle_id, db) if isinstance(battle, str): return failure(battle) require = request_json.get("require", {}) result = battle.append_chat_log(current_time(), current_user.username, request_json['content'], require=require) if isinstance(result, str): return failure(result) return success(result)
def regiester(): request_json = request.get_json(force=True) result = send_register_mail( request_json['email'], url_head + "/register?token=" + generate_register_token(request_json['email']), email_config) if result != "success": return failure(result) return success("")
def battles(): if request.method == 'GET': try: query = json.loads(request.args.get("query", "{}")) sort = json.loads(request.args.get("sort", "[]")) start = json.loads(request.args.get('start', "{'start': 0}"))['start'] limit = json.loads(request.args.get('limit', "{'limit': 30}"))['limit'] except: return failure("request syntax error! need json string!") if "username" in query and not username_checker(db, query['username']): return failure("user not exist") mongo_query = filter_condition_generate(query) if isinstance(query, str): return failure(query) mongo_sort = sort_condition_generate(sort) if isinstance(sort, str): return failure(sort) current_user.update_perference("condition", { "query": query, "sort": sort }) return success({ "start": start, "battle_list": history_clear( db.battles.find(filter=mongo_query, sort=mongo_sort)[start:start + limit]) }) elif request.method == 'POST': if current_user.user_id == -1: return failure("need login first!") request_json = request.get_json(force=True) check_res = field_checker( request_json, ['battle_name', 'accuracy_time', 'additional_time', 'board_type']) if check_res is not None: return failure(check_res) battle = BattleFactory.create_battle(current_time(), request_json, request_json['board_type'], db) if isinstance(battle, str): return failure(battle) current_user.update_perference("create", request_json) return success({"id": battle.id})
def messages(): try: request_json = request.get_json(force=True) ip = request.remote_addr name = request_json['name'] text = request_json['text'] now_time = time.asctime(time.localtime(time.time())) message.insert_one({'name': name, 'text': text, 'ip': ip, 'time': now_time}) return success("") except Exception as e: return failure(repr(e))
def players(battle_id, player_id): if current_user.user_id == -1: return failure("need login first!") battle = BattleFactory.load_battle(battle_id, db) if isinstance(battle, str): return failure(battle) if request.method == 'POST': result = battle.try_join_player(current_time(), player_id, current_user.user_id, current_user.dump()) if (isinstance(result, str)): return failure(result) return success(result) elif request.method == 'DELETE': result = battle.try_remove_player(current_time(), player_id, current_user.user_id) if (isinstance(result, str)): return failure(result) return success(result)
def next_battle(battle_id): battle = BattleFactory.load_battle(battle_id, db) if isinstance(battle, str): return failure(battle) if battle_id not in next_battle_cache: battle_data = battle.get_state() next_battle = BattleFactory.clone_battle(current_time(), battle_data, db) next_battle_cache[battle_id] = next_battle.id return success({"next_battle": next_battle_cache[battle_id]})
def hosting(battle_id, player_id): battle = BattleFactory.load_battle(battle_id, db) if isinstance(battle, str): return failure(battle) user_id = current_user.user_id if user_id == -1: return failure("请先登录!") if request.method == 'POST': result = battle.add_hosting(current_time(), player_id, current_user.user_id) if (isinstance(result, str)): return failure(result) return success(result) elif request.method == 'DELETE': result = battle.remove_hosting(current_time(), player_id, current_user.user_id) if (isinstance(result, str)): return failure(result) return success(result)
def boards(boardType): board_data = BoardFactory.getBoardData(boardType) if isinstance(board_data, str): return failure(board_data) return success(board_data)
def themes(themeType, boardType): theme = ThemeFactory(themeType, boardType) if isinstance(theme, str): return failure(theme) return success(theme)