Exemplo n.º 1
0
def register_phone():
    """用户手机注册 (GET|POST)

    :uri: /users/register_phone
    :param phone: 手机号
    :param password: 密码
    :param nickname: 昵称
    :param code: 短信验证码
    :param gender: 性别(可选)(1:男, 2:女)
    :returns: {'user': object, 'ut': string}
    """
    params = request.values
    phone = params.get('phone', None)
    code = params.get('code', None)
    password = params.get("password", None)
    nickname = params.get("nickname", None)
    gender = params.get("gender", 0)
    if not phone or not code or not password or not nickname:
        return error.InvalidArguments

    invalid_error = User.invalid_password(password)
    if invalid_error:
        return invalid_error

    invalid_error = User.invalid_nickname(nickname)
    if invalid_error:
        return invalid_error

    if User.get_by_phone(phone):
        return error.UserExists

    if not SMS.verify_code(phone, code):
        return error.VerifyCodeFailed

    user = User.init()
    name = '$mb$%s%s' % (phone[-4:], random.randint(1000, 9999))
    user.name = name
    user.phone = phone
    user.nickname = nickname
    user.gender = gender

    salt = os.urandom(const.PWD_HASH_LEN)
    pwd = User.gen_pwd_hash(password, salt)
    user._salt = Binary(salt)
    user._password = Binary(pwd)
    uid = user.create_model()
    new_user = User.get_one(uid)
    token = User.gen_token(str(uid))
    return {'user': new_user.format(), 'ut': token}
Exemplo n.º 2
0
def verify_nickname():
    """验证昵称 (GET|POST)

    :uri: /users/verify_nickname
    :param nickname: 昵称
    :returns: {}
    """
    params = request.values
    nickname = params.get('nickname', None)

    invalid_error = User.invalid_nickname(nickname)
    if invalid_error:
        return invalid_error

    return {}
Exemplo n.º 3
0
def register():
    """用户注册 (GET|POST)

    :uri: /users/register
    :param name: 用户名
    :param password: 密码
    :param nickname: 昵称
    :returns: {'user': object, 'ut': string}
    """
    params = request.values.to_dict()
    name = params.get("name", None)
    # delete password from data so that we don't save it to mongo
    password = str(params.pop("password", None))
    nickname = params.get('nickname', None)
    if not name or not password or not nickname:
        return error.InvalidArguments

    invalid_error = User.invalid_password(password)
    if invalid_error:
        return invalid_error

    invalid_error = User.invalid_nickname(nickname)
    if invalid_error:
        return invalid_error

    if User.get_by_name(name):
        return error.UserExists

    user = User.init()
    user.update(params)

    salt = os.urandom(const.PWD_HASH_LEN)
    pwd = User.gen_pwd_hash(password, salt)
    user._salt = Binary(salt)
    user._password = Binary(pwd)
    uid = user.create_model()
    new_user = User.get_one(uid)

    # 初始化用户任务
    UserTask.create_and_init_user_tasks(str(new_user._id))

    token = User.gen_token(str(uid))
    return {'user': new_user.format(), 'ut': token}
Exemplo n.º 4
0
def modify_info(uid):
    """修改用户信息 (GET|POST&LOGIN)

    :uri: /users/<string:uid>/modify-info
    :param nickname: 昵称
    :param phone: 手机
    :param birthday: 生日
    :param email: 邮箱
    :param gender: 性别(1:男, 2:女)
    :param signature: 签名
    :param announcement: 公告
    :returns: {'user': object}
    """
    user = request.authed_user
    params = request.values
    nickname = params.get('nickname', None)

    signature = params.get('signature', None)
    if signature:
        if Spam.filter_words(signature, 'signature'):
            return error.InvalidContent

    announcement = params.get('announcement', None)
    if announcement:
        if Spam.filter_words(announcement, 'announcement'):
            return error.InvalidContent

    if nickname:
        invalid_error = User.invalid_nickname(nickname)
        if invalid_error:
            return invalid_error

    info = dict()
    for key in const.USER_ALLOWED_MODIFY:
        if params.get(key, None):
            info[key] = const.USER_ALLOWED_MODIFY[key](params[key])
    if 'gender' in info and info['gender'] not in [1, 2]:
        return error.InvalidArguments
    info['update_at'] = time.time()
    user = user.update_model({'$set': info})
    return {'user': user.format()}