def ui_render_template(template_name_or_list, **context):

    art_user_id = request_value(request, 'user_id', None)
    need_user = int(request_value(request, 'needUserInfo', 0))

    if need_user > 0 and (art_user_id is None
                          or is_int_number(art_user_id) is False):
        return jsonify(form_res(RGResCode.lack_param))

    params = dict({"js_ver": RGJSVersion, "css_ver": RGCSSVersion}, **context)
    render = render_template(template_name_or_list, **params)

    if need_user > 0:
        from Model import user
        auth, view_user_id = do_auth()
        relation = user.get_relation(view_user_id, art_user_id)
        re_relation = user.get_relation(art_user_id, view_user_id)
        t = {
            "user": user.get_user(art_user_id).__dict__,
            "home": user.isHome(view_user_id, art_user_id),
            "auth": view_user_id is not None,
            "relation": relation,
            "re_relation": re_relation,
            'render': render
        }
        return jsonify(form_res(RGResCode.ok, t))
    return render
Beispiel #2
0
def user_bind():
    verify_code = int(request_value(request, 'code'))
    pwd = request_value(request, 'pwd')
    email = request_value(request, 'email').strip()
    username = request_value(request, 'username').strip()

    auth, user_id, pass_email, auth_username = RGUIController.do_auth_more_info(
        need_request_email=False)
    if not auth or username != auth_username:
        return jsonify(form_res(RGResCode.auth_fail))

    uid, res = user.verify_user(username=username,
                                email=email,
                                pwd=pwd,
                                verify_code=verify_code,
                                verify_type=RGVerifyType.bind)

    if uid is not None:
        token = RGUIController.token_session(uid=uid,
                                             token_type=session['type'],
                                             username=username,
                                             email=email,
                                             remember=None)
        return jsonify(form_res(RGResCode.ok, {'token': token}))
    else:
        return jsonify(form_res(res, None))
Beispiel #3
0
def user_password():
    username = request_value(request, 'username')
    if username is not None:
        username = username.strip()

    pwd = request_value(request, 'pwd')
    verify_code = int(request_value(request, 'code', default='0'))

    uid, res = user.verify_user(username=username,
                                email=None,
                                pwd=pwd,
                                verify_code=verify_code,
                                verify_type=RGVerifyType.forget_pwd)

    if uid is not None:
        _user = user.get_user_with_username(username=username, need_email=True)
        remember = int(request_value(request, 'remember', default='0'))
        token_type = int(request_value(request, 'type', default='0'))
        token = RGUIController.token_session(uid=uid,
                                             token_type=token_type,
                                             username=username,
                                             email=_user.email,
                                             remember=remember)
        return jsonify(form_res(RGResCode.ok, {'token': token}))
    else:
        return jsonify(form_res(res, None))
Beispiel #4
0
def openid_base_params(extra=None):
    # 登录验证, 注册新用户, 更新用户信息
    # token 保留字段;
    # username 用户名;
    # pwd 密码;
    # appid 来自何种应用的注册请求;
    # clientId 用户设备唯一号;
    # timestamp 注册请求到达应用的时间戳;
    # login_channel 用户渠道标识符; iOS pc android
    # extra_payload 保留字典字段;
    # user_ip 客户端ip;
    # remote_ip 服务端ip;
    params = {
        # 'token': '',
        # 'username': username,
        # 'email': email,
        # 'pwd': password,
        'request_id': str(uuid.uuid1()),
        'appid': 'RGBlog',
        'clientId': request_value(request, 'clientId', default=''),
        'timestamp': RGTimeUtil.timestamp(),
        'login_channel': request_value(request, 'channel', default=''),
        # 'extra_payload': '用户名',
        'user_ip': request_ip(request, default=''),
        'remote_ip': RGPublicHost
    }
    if extra is not None:
        params = dict(params, **extra)
    return params
Beispiel #5
0
def user_file_del(user_id):
    user_file_id = request_value(request, 'id')

    if user_file_id is None:
        return jsonify(form_res(RGResCode.lack_param))

    conn = None
    try:
        conn = dao.get()

        delete_files = files.user_file_del_and_return_files(user_id=user_id,
                                                            id=user_file_id,
                                                            conn=conn)

        if len(delete_files) > 0:
            executor.submit(do_del_file, delete_files)

        conn.commit()
        return jsonify(form_res(RGResCode.ok, None))
    except Exception as e:
        print(e)
        conn.rollback()
        conn.commit()
        return jsonify(form_res(RGResCode.del_fail, None))
    finally:
        if conn:
            conn.close()
Beispiel #6
0
def user_file_move(user_id):
    user_file_id = request_value(request, 'id')
    if user_file_id is None:
        return jsonify(form_res(RGResCode.lack_param))

    to_id = request_value(request, 'to_id')
    if to_id is None:
        return jsonify(form_res(RGResCode.lack_param))
    flag = files.user_file_move(user_id=user_id,
                                move_id=user_file_id,
                                to_id=to_id)
    if flag is True:
        code = RGResCode.ok
    else:
        code = RGResCode.del_fail
    return jsonify(form_res(code, None))
Beispiel #7
0
def new_file(user_id):
    """
    上传文件
    body 参数:
        fileUpInfo      文件信息
        {file}          文件流
    """
    re_files = request.files
    file_up_info = request_value(request, 'fileUpInfo')
    if file_up_info is None:
        return jsonify(form_res(RGResCode.lack_param))
    file_up_info = json.loads(file_up_info, encoding="utf-8")

    for file_key in re_files:
        up_info = file_up_info.get(file_key, None)
        if up_info is None:
            return jsonify(form_res(RGResCode.lack_param))
        if up_info.get('md5', None) is None:
            return jsonify(form_res(RGResCode.lack_param))
        if up_info.get('in_file', 0):
            if not files.capacity_enough(
                    user_id=user_id, new_file_size=request_file_size(request)):
                return jsonify(form_res(RGResCode.full_size))

    code, result = do_new_file()
    if code != RGResCode.ok:
        return jsonify(form_res(code))

    data = {}
    for up_res in result:
        file_key = up_res['key']

        up_info = file_up_info.get(file_key)
        set_name = up_info.get('name', '')

        in_album = up_info.get('in_album', 0)
        album_id = up_info.get('album_id', -1)

        in_file = up_info.get('in_file', 0)
        did = up_info.get('directory_id', -1)

        handle = handler_upload_res(user_id,
                                    up_res=up_res,
                                    set_name=set_name,
                                    in_album=in_album,
                                    album_id=album_id,
                                    in_file=in_file,
                                    directory_id=did)

        code = handle['code']
        data[file_key] = {
            'code': code,
            'file': handle['data'],
        }

        if code != RGResCode.ok and 'path' in up_res:
            del_filename = up_res['path']
            executor.submit(do_del_file, [del_filename])

    return jsonify(form_res(RGResCode.ok, data))
Beispiel #8
0
def verify_page():
    username = request_value(request, 'username')

    if username is None:
        return redirect(url_for('login_page'))

    _user = user.get_user_with_username(username, need_email=True)

    if _user is None:
        return redirect(url_for('login_page'))

    verify_type = _user.get_payload(key='type')

    if _user.is_full_active() and verify_type != RGVerifyType.forget_pwd:
        return redirect(url_for('login_page'))
    elif _user.is_active_and_need_bind_email():
        return redirect(url_for('login_page'))
    elif _user.is_time_out():
        return redirect(url_for('login_page'))

    email = _user.get_payload(key='email')
    if email is None:
        return redirect(url_for('login_page'))

    return RGUIController.ui_render_template(
        "login.html", **{
            'username': username,
            'email': email,
            'coll_pwd': True,
            'verify_type': verify_type
        })
Beispiel #9
0
def password_page():
    return RGUIController.ui_render_template(
        "login.html", **{
            'username': request_value(request, key='username', default=''),
            'coll_user_email': True,
            'verify_type': 2
        })
Beispiel #10
0
def handle_download_file(filename,
                         download_name=None,
                         mime=None,
                         max_age=604800):
    range_mode = 'Range' in request.headers
    remote_url = handle_download_file_url(filename)
    params = {
        'mime': mime,
        'name': download_name,
        'cover': int(request_value(request, 'cover', 0))
    }
    req = requests.get(remote_url,
                       headers=request.headers,
                       json=params,
                       stream=not range_mode)
    if req.status_code != 200 and req.status_code != 206:
        return Response(req.content, req.status_code, direct_passthrough=True)
    if range_mode:
        response = Response(req.content, 206, direct_passthrough=True)
    else:
        response = Response(
            stream_with_context(req.iter_content(chunk_size=2048)))
        if req.status_code == 200:
            response.headers['Cache-Control'] = 'max-age=' + str(max_age)
            response.headers['Expires'] = gmt_time_string(
                timedelta(seconds=max_age))
    for key in req.headers:
        response.headers[key] = req.headers[key]
    return response
Beispiel #11
0
def new_user_file_with_hash(user_id):
    up_files = request_value(request, 'files')
    if up_files is None:
        return jsonify(form_res(RGResCode.lack_param))
    for file_key in up_files:
        file = up_files[file_key]
        file_type = int(file.get('type', 0))
        in_file = int(file.get('in_file', 0))

        if 'md5' not in file:
            if in_file:
                if file_type != 1:
                    return jsonify(form_res(RGResCode.lack_param))
            else:
                return jsonify(form_res(RGResCode.lack_param))

        in_album = file.get('in_album', False)
        album_id = file.get('album_id', None)
        if in_album and album_id is None:
            return jsonify(form_res(RGResCode.lack_param))

    data = {}
    for file_key in up_files:
        file = up_files[file_key]
        result = __fast_up(user_id=user_id, file=file)
        data[file_key] = result
    return jsonify(form_res(RGResCode.ok, data))
Beispiel #12
0
def user_file_directory_list(user_id):
    directory_id = request_value(request, 'directory_id', -1)
    try:
        result = files.user_file_directory_list(user_id=user_id,
                                                directory_id=directory_id)
        return jsonify(form_res(RGResCode.ok, result))
    except:
        return jsonify(form_res(RGResCode.database_error))
Beispiel #13
0
def user_file_set(user_id):
    user_file_id = request_value(request, 'id')
    if user_file_id is None:
        return jsonify(form_res(RGResCode.lack_param))

    args = {}
    personal_name = request_value(request, 'name')

    if personal_name is not None:
        args['personal_name'] = personal_name

    flag = files.user_file_set(user_id=user_id, id=user_file_id, args=args)
    if flag is True:
        code = RGResCode.ok
    else:
        code = RGResCode.update_fail
    return jsonify(form_res(code, None))
Beispiel #14
0
def user_login():
    username = request_value(request, 'username').strip()
    pwd = request_value(request, 'pwd')
    _user = user.user_login(username, pwd)

    remember = int(request_value(request, 'remember', default='0'))
    token_type = int(request_value(request, 'type', default='0'))

    if _user is not None:
        token = RGUIController.token_session(uid=_user.ID,
                                             token_type=token_type,
                                             username=_user.username,
                                             email=_user.email,
                                             remember=remember)
        resp = jsonify(form_res(RGResCode.ok, {'token': token}))
        return resp
    else:
        return jsonify(form_res(RGResCode.not_existed, None))
Beispiel #15
0
def user_file_search(user_id):
    name = request_value(request, 'name')
    if name is None or len(name) <= 0:
        return jsonify(form_res(RGResCode.lack_param))
    try:
        result = files.user_file_list_with_name(user_id=user_id, name=name)
        return jsonify(form_res(RGResCode.ok, result))
    except:
        return jsonify(form_res(RGResCode.database_error))
Beispiel #16
0
def user_file_open_code_cancel(user_id):
    file_id = request_value(request, 'id')
    if file_id is None:
        return jsonify(form_res(RGResCode.lack_param))
    flag = files.user_file_set(user_id=user_id,
                               id=file_id,
                               args={"open_code": None})
    if flag:
        code = RGResCode.ok
    else:
        code = RGResCode.database_error
    return jsonify(form_res(code))
Beispiel #17
0
def __get_file_stream(file, max_age=604800):
    filename = file[
        'filename'] if file is not None and 'filename' in file else None
    mime = file['mime'] if file is not None and 'mime' in file else None
    name = file['name'] if file is not None and 'name' in file else None

    img_quality = request_value(request, 'img_quality', 'original')
    if img_quality == 'low':
        filename = name_fix(filename=filename, thumb=True, gif_activity=False)
    if filename is None:
        return jsonify(form_res(RGResCode.not_existed))
    return handle_download_file(filename, name, mime=mime, max_age=max_age)
Beispiel #18
0
def user_file_info(user_id):
    file_id = request_value(request, 'id')
    if file_id is None:
        return jsonify(form_res(RGResCode.lack_param))

    info = files.user_file_info(user_id=user_id, id=file_id)
    if info is not None:
        del info['filename']
        code = RGResCode.ok
    else:
        code = RGResCode.database_error
    return jsonify(form_res(code, {"file": info}))
Beispiel #19
0
def user_file_size(user_id):
    user_file_id = request_value(request, 'id', -1)
    if user_file_id is None:
        return jsonify(form_res(RGResCode.lack_param))

    user_file_id = int(user_file_id)
    error, file_size = files.user_file_size(user_id=user_id, id=user_file_id)
    if error is None:
        code = RGResCode.ok
    else:
        code = RGResCode.database_error
    return jsonify(form_res(code, {"size": file_size}))
Beispiel #20
0
def user_file_share_code(user_id):
    file_id = request_value(request, 'id')
    if file_id is None:
        return jsonify(form_res(RGResCode.lack_param))
    share_code = RGRequestHelp.fid_encode(file_id, user_id)
    flag = files.user_file_set(user_id=user_id,
                               id=file_id,
                               args={"open_code": share_code})
    if flag:
        code = RGResCode.ok
    else:
        share_code = None
        code = RGResCode.database_error
    return jsonify(form_res(code, {"shareCode": share_code}))
Beispiel #21
0
def user_check():
    username = request_value(request, 'username', default=None)
    if username is None:
        return jsonify(form_res(RGResCode.lack_param))

    exist = False
    _user = user.login_sign_check(username)
    if _user is None:
        code, _users = User.RGOpenIdController.user_list(username)
        if code == RGResCode.ok and len(_users) > 0:
            exist = True
    else:
        exist = True
    code = RGResCode.ok if exist else RGResCode.not_existed
    return jsonify(form_res(code, _user))
Beispiel #22
0
def user_visit_page_info(view_user_id):
    art_user_id = request_value(request, 'user_id', None)
    if art_user_id is None or is_int_number(art_user_id) is False:
        return jsonify(form_res(RGResCode.lack_param))

    relation = user.get_relation(view_user_id, art_user_id)
    re_relation = user.get_relation(art_user_id, view_user_id)
    t = {
        "user": user.get_user(art_user_id).__dict__,
        "home": user.isHome(view_user_id, art_user_id),
        "auth": view_user_id is not None,
        "relation": relation,
        "re_relation": re_relation,
    }
    return jsonify(form_res(RGResCode.ok, t))
Beispiel #23
0
def get_verify_code():
    username = request_value(request, 'username').strip()
    email = request_value(request, 'email').strip()
    verify_type = int(request_value(request, 'verifyType', default='0'))

    if verify_type == RGVerifyType.bind:
        auth, user_id, pass_email, auth_username = RGUIController.do_auth_more_info(
            need_request_email=False)
        if auth is False or username != auth_username:
            return jsonify(form_res(RGResCode.auth_fail))

    verify_code = user.generate_verify_code()

    res = user.new_user_and_save_verify_code(username=username,
                                             email=email,
                                             verify_code=verify_code,
                                             verify_type=verify_type)

    if res == RGResCode.ok:
        try:
            if verify_type == RGVerifyType.forget_pwd:
                title = RGMailConfig['newPasswordUserMailTitle']
                content = RGMailConfig[
                    'newPasswordVerifyCodeMailFormat'].format(verify_code)
            else:
                title = RGMailConfig['newUserMailTitle']
                content = RGMailConfig['bindVerifyCodeMailFormat'].format(
                    verify_code)

            send_verify_mail(receiver=email, title=title, content=content)
            return jsonify(form_res(RGResCode.ok))
        except Exception as e:
            print(e)
            user.update_user_info(username=username, info_payload='')
            return jsonify(form_res(RGResCode.server_error))
    return jsonify(form_res(res))
Beispiel #24
0
def user_file_relative_list(user_id):
    code = request_value(request, 'code')
    if code is None:
        return jsonify(form_res(RGResCode.lack_param))
    u_id = None
    try:
        directory_id, u_id = RGRequestHelp.did_decode(code)
    except Exception as e:
        return jsonify(form_res(RGResCode.param_error))
    finally:
        if u_id != user_id:
            return jsonify(form_res(RGResCode.auth_fail))
    try:
        result, error = files.user_file_files_relative_with_id(user_id=user_id,
                                                               id=directory_id)
        if error is not None:
            raise error
        return jsonify(form_res(RGResCode.ok, result))
    except:
        return jsonify(form_res(RGResCode.database_error))
Beispiel #25
0
        def wrapper(*args, **kwargs):
            code = request_value(request, 'open_code')
            if code is None:
                if wrapper_code_key is not None:
                    code = kwargs.get(wrapper_code_key)
                if code is None:
                    return jsonify(form_res(RGResCode.lack_param))
                else:
                    code = re.sub("[^A-Za-z0-9].*", "", code)
            try:
                f_id, u_id = RGRequestHelp.fid_decode(code)
            except Exception as e:
                return jsonify(form_res(RGResCode.param_error))
            conn = None
            try:
                conn = dao.get()
                open_code_info = files.user_file_info(user_id=u_id,
                                                      id=f_id,
                                                      open_code=code,
                                                      conn=conn)
                if open_code_info is None:
                    return jsonify(form_res(RGResCode.not_existed))

                file_id = request_value(request, 'id')
                info = open_code_info
                if file_id is not None:
                    file_id = int(file_id)
                    if f_id != file_id:
                        # 共享文件夹内的文件可访问
                        file_info = files.user_file_info(user_id=u_id,
                                                         id=file_id)
                        if file_info is None:
                            return jsonify(form_res(RGResCode.not_existed))
                        paths = file_info['directory_path'].split(sep=',')
                        open_path = str(open_code_info['id'])
                        if open_path in paths:
                            info = file_info

                if wrapper_path_key is not None:
                    path = kwargs.get(wrapper_path_key, '')
                    info['filename'] = info['filename'] + '/' + path
                    info['name'] = path.split('/')[-1]
                    del info['mime']

                kwargs.update({
                    'conn': conn,
                    'info': info,
                    'open_code': code,
                    'f_id': f_id,
                    'u_id': u_id,
                })
                response = func(*args, **kwargs)
                conn.commit()
                return response
            except Exception as e:
                print(e)
                conn.rollback()
                conn.commit()
                return jsonify(form_res(RGResCode.database_error))
            finally:
                if conn:
                    conn.close()
Beispiel #26
0
def user_set_info(user_id):
    t = get_data_with_request(request)

    url = RGFullThisServerHost + '/file/fastUpload'

    fast_json = {}
    file_up_info = request_value(request, 'fileUpInfo')
    if file_up_info is not None:
        fast_json = json.loads(file_up_info, encoding="utf-8")

    bg_id, icon_id = None, None
    req = requests.post(url=url,
                        auth=request.authorization,
                        cookies=request.cookies,
                        json={"files": fast_json})
    if req.status_code != 200:
        return jsonify(form_res(RGResCode.server_error, None))

    res_json = req.json()
    code = res_json['code']
    if code != RGResCode.ok:
        return jsonify(form_res(code, None))

    data = res_json['data']
    need_upload = False
    file_stream = {}
    for key in data:
        result = data[key]
        if result['code'] == RGResCode.ok:
            file = result['file']['id']
            if key == "background":
                bg_id = file
            elif key == "icon":
                icon_id = file
        elif result['code'] == RGResCode.not_existed:
            stream = request.files[key]
            value = (stream.filename, stream.stream, stream.content_type)
            file_stream[key] = value
            need_upload = True
        else:
            return jsonify(form_res(result['code'], None))

    if need_upload:
        url = RGFullThisServerHost + '/file/upload'
        req = requests.post(url=url,
                            files=file_stream,
                            data=request.form,
                            params=None,
                            auth=request.authorization,
                            cookies=request.cookies,
                            hooks=None,
                            json=request.json,
                            stream=True)
        res_json = req.json()

        code = res_json['code']
        if code != RGResCode.ok:
            return jsonify(form_res(code, None))
        data = res_json['data']
        for key in data:
            result = data[key]
            if result['code'] == RGResCode.ok:
                file_id = result['file']['id']
                if key == "background":
                    bg_id = file_id
                elif key == "icon":
                    icon_id = file_id
            else:
                return jsonify(form_res(result['code'], None))

    tag = None
    nickname = None
    style = None

    if 'nickname' in t:
        nickname = t['nickname']

    if 'style' in t:
        style = t['style']

    if 'tag' in t:
        tag = t['tag']

    if icon_id is None:
        if 'iconId' in t:
            icon_id = t['iconId']

    if bg_id is None:
        if 'bgId' in t:
            bg_id = t['bgId']

    flag = user.update_user_info(user_id=user_id,
                                 nickname=nickname,
                                 tag=tag,
                                 icon=icon_id,
                                 background=bg_id,
                                 style=style)
    if flag is True:
        code = RGResCode.ok
    else:
        code = RGResCode.update_fail
    return jsonify(form_res(code, None))