diff --git a/r2/r2/controllers/validator/wiki.py b/r2/r2/controllers/validator/wiki.py index 3216752ce..dff128b07 100644 --- a/r2/r2/controllers/validator/wiki.py +++ b/r2/r2/controllers/validator/wiki.py @@ -185,6 +185,10 @@ class VWikiModerator(VSrModerator): VSrModerator.__init__(self, fatal=fatal, *a, **kw) class VWikiPageName(Validator): + def __init__(self, param, error_on_different=False, *a, **kw): + self.error_on_different = error_on_different + Validator.__init__(self, param, *a, **kw) + def run(self, page): original_page = page if not page: @@ -207,7 +211,10 @@ class VWikiPageName(Validator): if WikiPage.is_impossible(page): return self.set_error('INVALID_PAGE_NAME', code=400) - return (page, page != original_page) + if self.error_on_different and page != original_page: + self.set_error('PAGE_NAME_MOVED') + + return page class VWikiPage(VWikiPageName): def __init__(self, param, required=True, restricted=True, modonly=False, @@ -216,7 +223,7 @@ class VWikiPage(VWikiPageName): self.modonly = modonly self.allow_hidden_revision = allow_hidden_revision self.required = required - Validator.__init__(self, param, **kw) + VWikiPageName.__init__(self, param, **kw) def run(self, page): page = VWikiPageName.run(self, page) @@ -224,8 +231,6 @@ class VWikiPage(VWikiPageName): if self.has_errors: return - page = page[0] - 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 18b4d05e8..a35539292 100644 --- a/r2/r2/controllers/wiki.py +++ b/r2/r2/controllers/wiki.py @@ -77,19 +77,20 @@ class WikiController(RedditController): @wiki_validate(pv=VWikiPageAndVersion(('page', 'v', 'v2'), required=False, restricted=False, allow_hidden_revision=False), - page_name=VWikiPageName('page')) + page_name=VWikiPageName(('page'), error_on_different=True)) def GET_wiki_page(self, pv, page_name): - page, version, version2 = pv message = None - if page_name[1]: - url = join_urls(c.wiki_base_url, page_name[0]) + if c.errors.get(('PAGE_NAME_MOVED', 'page')): + url = join_urls(c.wiki_base_url, page_name) return self.redirect(url) + page, version, version2 = pv + if not page: if c.render_style in extensions.API_TYPES: self.handle_error(404, 'PAGE_NOT_CREATED') - return WikiNotFound(page=page_name[0]).render() + return WikiNotFound(page=page_name).render() if version: edit_by = version.get_author() @@ -133,7 +134,6 @@ class WikiController(RedditController): @wiki_validate(wp=VWikiPageRevise('page'), page=VWikiPageName('page')) def GET_wiki_create(self, wp, page): - page = page[0] api = c.render_style in extensions.API_TYPES error = c.errors.get(('WIKI_CREATE_ERROR', 'page')) if error: @@ -260,7 +260,7 @@ class WikiApiController(WikiController): error = c.errors.get(('WIKI_CREATE_ERROR', 'page')) if error: self.handle_error(403, **(error.msg_params or {})) - page = WikiPage.create(c.site, page_name[0]) + page = WikiPage.create(c.site, page_name) if c.user._spam: error =_("You are doing that too much, please try again later.") self.handle_error(415, 'SPECIAL_ERRORS', special_errors=[error])