コード例 #1
0
ファイル: profile.py プロジェクト: taedixon/weasyl
def select_userinfo(userid, config=None):
    if config is None:
        [query] = d.engine.execute("""
            SELECT pr.config, ui.birthday, ui.gender, ui.country
            FROM profile pr
            INNER JOIN userinfo ui USING (userid)
            WHERE pr.userid = %(userid)s
        """, userid=userid)
    else:
        [query] = d.engine.execute("""
            SELECT %(config)s, birthday, gender, country
            FROM userinfo
            WHERE userid = %(userid)s
        """, userid=userid, config=config)

    user_links = d.engine.execute("""
        SELECT link_type, ARRAY_AGG(link_value)
        FROM user_links
        WHERE userid = %(userid)s
        GROUP BY link_type
    """, userid=userid).fetchall()

    show_age = "b" in query[0] or d.get_userid() in staff.MODS
    return {
        "birthday": query[1],
        "age": d.convert_age(query[1]) if show_age else None,
        "show_age": "b" in query[0],
        "gender": query[2],
        "country": query[3],
        "user_links": {r[0]: r[1] for r in user_links},
        "sorted_user_links": sort_user_links(user_links),
    }
コード例 #2
0
ファイル: middleware.py プロジェクト: theSeracen/weasyl
    def ravenCaptureArguments(self, level=None, **extra):
        request = get_current_request()
        data = {
            'level': level,
            'user': {
                'id': d.get_userid(),
                'ip_address': d.get_address(),
            },
            'request': {
                'url': request.environ['PATH_INFO'],
                'method': request.environ['REQUEST_METHOD'],
                'data': request.POST,
                'query_string': request.environ['QUERY_STRING'],
                'headers': http.get_headers(request.environ),
                'env': request.environ,
            },
        }

        return {
            'data':
            data,
            'extra':
            dict(
                extra,
                session=getattr(request, 'weasyl_session', None),
            ),
        }
コード例 #3
0
ファイル: middleware.py プロジェクト: charmander/weasyl
    def ravenCaptureArguments(self, level=None, **extra):
        request = get_current_request()
        data = {
            'level': level,
            'user': {
                'id': d.get_userid(),
                'ip_address': d.get_address(),
            },
            'request': {
                'url': request.environ['PATH_INFO'],
                'method': request.environ['REQUEST_METHOD'],
                'data': request.POST,
                'query_string': request.environ['QUERY_STRING'],
                'headers': http.get_headers(request.environ),
                'env': request.environ,
            },
        }

        return {
            'data': data,
            'extra': dict(
                extra,
                session=getattr(request, 'weasyl_session', None),
            ),
        }
コード例 #4
0
ファイル: middleware.py プロジェクト: 0x15/weasyl
def weasyl_exception_processor():
    web.ctx.log_exc = web.ctx.env.get(
        'raven.captureException', lambda **kw: traceback.print_exc())
    try:
        return _handle()
    except ClientGoneAway:
        if 'raven.captureMessage' in web.ctx.env:
            web.ctx.env['raven.captureMessage']('HTTP client went away', level=logging.INFO)
        return ''
    except web.HTTPError:
        raise
    except Exception as e:
        userid = d.get_userid()
        errorpage_kwargs = {}
        if isinstance(e, WeasylError):
            if e.render_as_json:
                return json.dumps({'error': {'name': e.value}})
            errorpage_kwargs = e.errorpage_kwargs
            if e.value in errorcode.error_messages:
                web.ctx.status = errorcode.error_status_code.get(e.value, '200 OK')
                message = '%s %s' % (errorcode.error_messages[e.value], e.error_suffix)
                return d.errorpage(userid, message, **errorpage_kwargs)
        web.ctx.status = '500 Internal Server Error'
        request_id = None
        if 'raven.captureException' in web.ctx.env:
            request_id = base64.b64encode(os.urandom(6), '+-')
            event_id, = web.ctx.env['raven.captureException'](request_id=request_id)
            request_id = '%s-%s' % (event_id, request_id)
        print 'unhandled error (request id %s) in %r' % (request_id, web.ctx.env)
        traceback.print_exc()
        if getattr(e, '__render_as_json', False):
            return json.dumps({'error': {}})
        return d.errorpage(userid, request_id=request_id, **errorpage_kwargs)
コード例 #5
0
def select_userinfo(userid, config):
    query = d.engine.execute("""
        SELECT birthday, gender, country
        FROM userinfo
        WHERE userid = %(userid)s
    """,
                             userid=userid).first()

    user_links = d.engine.execute("""
        SELECT link_type, ARRAY_AGG(link_value ORDER BY link_value)
        FROM user_links
        WHERE userid = %(userid)s
        GROUP BY link_type
    """,
                                  userid=userid).fetchall()

    show_age = "b" in config or d.get_userid() in staff.MODS
    return {
        "birthday": query.birthday,
        "age": d.convert_age(query.birthday) if show_age else None,
        "show_age": "b" in config,
        "gender": query.gender,
        "country": query.country,
        "user_links": {r[0]: r[1]
                       for r in user_links},
        "sorted_user_links": sort_user_links(user_links),
    }
コード例 #6
0
ファイル: base.py プロジェクト: weykent/weasyl
    def __init__(self):
        if (self.disallow_api or self.moderator_only
                or self.admin_only) and weasyl.api.is_api_user():
            raise web.forbidden()

        self.user_id = define.get_userid()
        self.status = define.common_status_check(self.user_id)

        # Status check
        if self.status:
            self.replace_methods(self.status_check_fail)
            return

        # Guest check
        if self.guest_required and self.user_id != 0:
            self.replace_methods(self.login_guest_fail)
            return

        # Login check
        if self.login_required and self.user_id == 0:
            self.replace_methods(self.login_check_fail)
            return

        # Permission check
        if self.moderator_only and self.user_id not in staff.MODS:
            self.replace_methods(self.permission_check_fail)
            return
        if self.admin_only and self.user_id not in staff.ADMINS:
            self.replace_methods(self.permission_check_fail)
            return
コード例 #7
0
ファイル: base.py プロジェクト: 0x15/weasyl
    def __init__(self):
        if (self.disallow_api or self.moderator_only or self.admin_only) and weasyl.api.is_api_user():
            raise web.forbidden()

        self.user_id = define.get_userid()
        self.status = define.common_status_check(self.user_id)

        # Status check
        if self.status:
            self.replace_methods(self.status_check_fail)
            return

        # Guest check
        if self.guest_required and self.user_id != 0:
            self.replace_methods(self.login_guest_fail)
            return

        # Login check
        if self.login_required and self.user_id == 0:
            self.replace_methods(self.login_check_fail)
            return

        # Permission check
        if self.moderator_only and self.user_id not in staff.MODS:
            self.replace_methods(self.permission_check_fail)
            return
        if self.admin_only and self.user_id not in staff.ADMINS:
            self.replace_methods(self.permission_check_fail)
            return
コード例 #8
0
ファイル: dry.py プロジェクト: charmander/weasyl
def admin_render_page(template_path, args=()):
    userid = d.get_userid()
    status = d.common_status_check(userid)

    if status:
        return d.common_status_page(userid, status)
    elif not userid:
        return d.webpage(userid)
    elif userid not in staff.ADMINS:
        return d.webpage(userid, errorcode.permission)
    else:
        return d.webpage(userid, template_path, args)
コード例 #9
0
def admin_render_page(template_path, args=()):
    userid = d.get_userid()
    status = d.common_status_check(userid)

    if status:
        return d.common_status_page(userid, status)
    elif not userid:
        return d.webpage(userid)
    elif userid not in staff.ADMINS:
        return d.webpage(userid, errorcode.permission)
    else:
        return d.webpage(userid, template_path, args)
コード例 #10
0
ファイル: siteupdate.py プロジェクト: 0x15/weasyl
    def POST(self):
        userid = d.get_userid()
        status = d.common_status_check(userid)

        if status:
            return d.common_status_page(userid, status)
        elif not userid:
            return d.webpage(userid)
        elif userid not in staff.MODS:
            return d.webpage(userid, d.errorcode.permission)

        form = web.input(title="", content="")

        create(userid, form)

        raise web.seeother("/admincontrol")
コード例 #11
0
    def POST(self):
        userid = d.get_userid()
        status = d.common_status_check(userid)

        if status:
            return d.common_status_page(userid, status)
        elif not userid:
            return d.webpage(userid)
        elif userid not in staff.MODS:
            return d.webpage(userid, d.errorcode.permission)

        form = web.input(title="", content="")

        create(userid, form)

        raise web.seeother("/admincontrol")
コード例 #12
0
ファイル: middleware.py プロジェクト: weykent/weasyl
def weasyl_exception_processor():
    web.ctx.log_exc = web.ctx.env.get('raven.captureException',
                                      lambda **kw: traceback.print_exc())
    try:
        return _handle()
    except ClientGoneAway:
        if 'raven.captureMessage' in web.ctx.env:
            web.ctx.env['raven.captureMessage']('HTTP client went away',
                                                level=logging.INFO)
        return ''
    except web.HTTPError:
        raise
    except Exception as e:
        userid = d.get_userid()
        errorpage_kwargs = {}
        if isinstance(e, WeasylError):
            if e.render_as_json:
                return json.dumps({'error': {'name': e.value}})
            errorpage_kwargs = e.errorpage_kwargs
            if e.value in errorcode.error_messages:
                web.ctx.status = errorcode.error_status_code.get(
                    e.value, '200 OK')
                message = '%s %s' % (errorcode.error_messages[e.value],
                                     e.error_suffix)
                return d.errorpage(userid, message, **errorpage_kwargs)
        web.ctx.status = '500 Internal Server Error'
        request_id = None
        if 'raven.captureException' in web.ctx.env:
            request_id = base64.b64encode(os.urandom(6), '+-')
            event_id, = web.ctx.env['raven.captureException'](
                request_id=request_id)
            request_id = '%s-%s' % (event_id, request_id)
        print 'unhandled error (request id %s) in %r' % (request_id,
                                                         web.ctx.env)
        traceback.print_exc()
        if getattr(e, '__render_as_json', False):
            return json.dumps({'error': {}})
        return d.errorpage(userid, request_id=request_id, **errorpage_kwargs)
コード例 #13
0
ファイル: middleware.py プロジェクト: hyena/weasyl
    def ravenCaptureArguments(self, level=None, **extra):
        data = {
            'level': level,
            'user': {
                'id': d.get_userid(),
                'ip_address': d.get_address(),
            },
            'request': {
                'url': web.ctx.env['PATH_INFO'],
                'method': web.ctx.env['REQUEST_METHOD'],
                'data': web.webapi.rawinput(method='POST'),
                'query_string': web.ctx.env['QUERY_STRING'],
                'headers': http.get_headers(web.ctx.env),
                'env': web.ctx.env,
            },
        }

        return {
            'data': data,
            'extra': dict(
                extra,
                session=web.ctx.get('weasyl_session'),
            ),
        }
コード例 #14
0
ファイル: profile.py プロジェクト: taedixon/weasyl
def select_statistics(userid):
    if "i" in d.get_config(userid) and d.get_userid() not in staff.MODS:
        return
    return _select_statistics(userid)
コード例 #15
0
ファイル: profile.py プロジェクト: Weasyl/weasyl
def select_statistics(userid):
    show = "i" not in d.get_config(userid) or d.get_userid() in staff.MODS
    return _select_statistics(userid), show
コード例 #16
0
def weasyl_404(request):
    userid = d.get_userid()
    return Response(d.errorpage(
        userid, "**404!** The page you requested could not be found."),
                    status="404 Not Found")
コード例 #17
0
def select_statistics(userid):
    show = "i" not in d.get_config(userid) or d.get_userid() in staff.MODS
    return _select_statistics(userid), show
コード例 #18
0
ファイル: wsgi.py プロジェクト: 0x15/weasyl
def weasyl_404():
    userid = d.get_userid()
    return web.notfound(d.errorpage(
        userid, "**404!** The page you requested could not be found."))
コード例 #19
0
ファイル: wsgi.py プロジェクト: charmander/weasyl
def weasyl_404(request):
    userid = d.get_userid()
    return Response(d.errorpage(userid, "**404!** The page you requested could not be found."),
                    status="404 Not Found")
コード例 #20
0
ファイル: wsgi.py プロジェクト: weykent/weasyl
def weasyl_404():
    userid = d.get_userid()
    return web.notfound(
        d.errorpage(userid,
                    "**404!** The page you requested could not be found."))