class WebLogController(RedditController): on_validation_error = staticmethod(abort_with_error) @validate( VRatelimit(rate_user=False, rate_ip=True, prefix='rate_weblog_'), level=VOneOf('level', ('error',)), logs=VValidatedJSON('logs', VValidatedJSON.ArrayOf(VValidatedJSON.Object({ 'msg': VPrintable('msg', max_length=256), 'url': VPrintable('url', max_length=256), })) ), ) def POST_message(self, level, logs): # prevent simple CSRF by requiring a custom header if not request.headers.get('X-Loggit'): abort(403) uid = c.user._id if c.user_is_loggedin else '-' # only accept a maximum of 3 entries per request for log in logs[:3]: g.log.warning('[web frontend] %s: %s | U: %s FP: %s UA: %s', level, log['msg'], uid, log['url'], request.user_agent) VRatelimit.ratelimit(rate_user=False, rate_ip=True, prefix="rate_weblog_", seconds=10)
VSubredditName, VSRByName, VValidatedJSON, VMarkdownLength, VMultiPath, VMultiByPath, ) from r2.lib.pages.things import wrap_things from r2.lib.jsontemplates import ( LabeledMultiJsonTemplate, LabeledMultiDescriptionJsonTemplate, ) from r2.lib.errors import errors, RedditError multi_sr_data_json_spec = VValidatedJSON.Object({ 'name': VSubredditName('name', allow_language_srs=True), }) multi_json_spec = VValidatedJSON.Object({ 'visibility': VOneOf('visibility', ('private', 'public')), 'subreddits': VValidatedJSON.ArrayOf(multi_sr_data_json_spec), }) multi_description_json_spec = VValidatedJSON.Object({ 'body_md': VMarkdownLength('body_md', max_length=10000, empty_error=None), })
VMultiByPath, VOneOf, VSubredditName, VSRByName, VUser, VValidatedJSON, ) from r2.lib.pages.things import wrap_things from r2.lib.jsontemplates import ( LabeledMultiJsonTemplate, LabeledMultiDescriptionJsonTemplate, ) from r2.lib.errors import RedditError multi_sr_data_json_spec = VValidatedJSON.Object({ 'name': VSubredditName('name', allow_language_srs=True), }) MAX_DESC = 10000 MAX_DISP_NAME = 50 WRITABLE_MULTI_FIELDS = ('visibility', 'description_md', 'display_name', 'key_color', 'weighting_scheme') multi_json_spec = VValidatedJSON.PartialObject({ 'description_md': VMarkdownLength('description_md', max_length=MAX_DESC, empty_error=None), 'display_name': VLength('display_name', max_length=MAX_DISP_NAME), 'icon_name': VOneOf('icon_name', g.multi_icons + ("", None)), 'key_color':