diff --git a/r2/r2/controllers/validator/wiki.py b/r2/r2/controllers/validator/wiki.py index c542996dd..fbeb41a3c 100644 --- a/r2/r2/controllers/validator/wiki.py +++ b/r2/r2/controllers/validator/wiki.py @@ -180,13 +180,7 @@ class VWikiModerator(VSrModerator): def __init__(self, fatal=False, *a, **kw): VSrModerator.__init__(self, fatal=fatal, *a, **kw) -class VWikiPage(Validator): - def __init__(self, param, required=True, restricted=True, modonly=False, **kw): - self.restricted = restricted - self.modonly = modonly - self.required = required - Validator.__init__(self, param, **kw) - +class VWikiPageName(Validator): def run(self, page): if not page: # If no page is specified, give the index page @@ -210,6 +204,21 @@ class VWikiPage(Validator): if WikiPage.is_impossible(page): return self.set_error('INVALID_PAGE_NAME', code=400) + return page + +class VWikiPage(VWikiPageName): + def __init__(self, param, required=True, restricted=True, modonly=False, **kw): + self.restricted = restricted + self.modonly = modonly + self.required = required + Validator.__init__(self, param, **kw) + + def run(self, page): + page = VWikiPageName.run(self, page) + + if self.has_errors: + return + if (not c.is_wiki_mod) and self.modonly: return self.set_error('MOD_REQUIRED', code=403) diff --git a/r2/r2/controllers/wiki.py b/r2/r2/controllers/wiki.py index 16b0d106c..d22564ced 100644 --- a/r2/r2/controllers/wiki.py +++ b/r2/r2/controllers/wiki.py @@ -39,7 +39,7 @@ from r2.controllers.validator import VMarkdown, VModhash, nop from r2.controllers.validator.wiki import (VWikiPage, VWikiPageAndVersion, VWikiModerator, VWikiPageRevise, this_may_revise, this_may_view, - wiki_validate) + VWikiPageName, wiki_validate) from r2.controllers.api_docs import api_doc, api_section from r2.lib.pages.wiki import (WikiPageView, WikiNotFound, WikiRevisions, WikiEdit, WikiSettings, WikiRecent, @@ -76,7 +76,7 @@ class WikiController(RedditController): @wiki_validate(pv=VWikiPageAndVersion(('page', 'v', 'v2'), required=False, restricted=False), - page_name=nop('page')) + page_name=VWikiPageName('page')) def GET_wiki_page(self, pv, page_name): page, version, version2 = pv message = None @@ -125,7 +125,7 @@ class WikiController(RedditController): return WikiRevisions(listing, page=page.name, may_revise=this_may_revise(page)).render() @wiki_validate(wp=VWikiPageRevise('page'), - page=nop('page')) + page=VWikiPageName('page')) def GET_wiki_notfound(self, wp, page): api = c.render_style in extensions.API_TYPES if wp[0]: @@ -242,7 +242,7 @@ class WikiApiController(WikiController): @wiki_validate(VModhash(), pageandprevious=VWikiPageRevise(('page', 'previous'), restricted=True), content=VMarkdown(('content')), - page_name=nop('page'), + page_name=VWikiPageName('page'), reason=nop('reason')) @api_doc(api_section.wiki, uri='/api/wiki/edit') def POST_wiki_edit(self, pageandprevious, content, page_name, reason):