Beispiel #1
0
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']))
Beispiel #2
0
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())
Beispiel #3
0
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("密码修改成功")
Beispiel #4
0
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("")
Beispiel #5
0
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("")
Beispiel #6
0
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("")
Beispiel #7
0
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())
Beispiel #8
0
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)
Beispiel #9
0
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())
Beispiel #10
0
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)
Beispiel #11
0
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("")
Beispiel #12
0
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})
Beispiel #13
0
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))
Beispiel #14
0
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)
Beispiel #15
0
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]})
Beispiel #16
0
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)
Beispiel #17
0
def boards(boardType):
    board_data = BoardFactory.getBoardData(boardType)
    if isinstance(board_data, str):
        return failure(board_data)
    return success(board_data)
Beispiel #18
0
def themes(themeType, boardType):
    theme = ThemeFactory(themeType, boardType)
    if isinstance(theme, str):
        return failure(theme)
    return success(theme)