From 826c00fee5330785f8444ba7b252ef730263e922 Mon Sep 17 00:00:00 2001 From: Andre D Date: Sun, 13 Jan 2013 22:49:29 -0500 Subject: [PATCH] wiki: Validate wiki markdown with the wiki md processor. --- r2/r2/controllers/wiki.py | 2 +- r2/r2/lib/filters.py | 9 ++++++--- r2/r2/lib/validator/validator.py | 5 +++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/r2/r2/controllers/wiki.py b/r2/r2/controllers/wiki.py index 0f904e3b6..231080df8 100644 --- a/r2/r2/controllers/wiki.py +++ b/r2/r2/controllers/wiki.py @@ -274,7 +274,7 @@ class WikiController(RedditController): class WikiApiController(WikiController): @wiki_validate(VModhash(), pageandprevious=VWikiPageRevise(('page', 'previous'), restricted=True), - content=VMarkdown(('content')), + content=VMarkdown(('content'), renderer='wiki'), page_name=VWikiPageName('page'), reason=VPrintable('reason', 256)) @api_doc(api_section.wiki, uri='/api/wiki/edit') diff --git a/r2/r2/lib/filters.py b/r2/r2/lib/filters.py index a8a02e8e3..98ddc6c8d 100644 --- a/r2/r2/lib/filters.py +++ b/r2/r2/lib/filters.py @@ -194,11 +194,14 @@ markdown_xhtml_dtd_path = os.path.join( markdown_dtd = '' % markdown_xhtml_dtd_path -def markdown_souptest(text, nofollow=False, target=None): +def markdown_souptest(text, nofollow=False, target=None, renderer=None): if not text: return text - - smd = safemarkdown(text, nofollow=nofollow, target=target) + + if not renderer: + smd = safemarkdown(text, nofollow=nofollow, target=target) + elif renderer == 'wiki': + smd = wikimarkdown(text) # Prepend a DTD reference so we can load up definitions of all the standard # XHTML entities ( , etc.). diff --git a/r2/r2/lib/validator/validator.py b/r2/r2/lib/validator/validator.py index 9a1370768..415747744 100644 --- a/r2/r2/lib/validator/validator.py +++ b/r2/r2/lib/validator/validator.py @@ -571,14 +571,15 @@ class VTitle(VLength): } class VMarkdown(VLength): - def __init__(self, param, max_length = 10000, **kw): + def __init__(self, param, max_length = 10000, renderer=None, **kw): VLength.__init__(self, param, max_length, **kw) + self.renderer = renderer def run(self, text, text2 = ''): text = text or text2 VLength.run(self, text) try: - markdown_souptest(text) + markdown_souptest(text, renderer=self.renderer) return text except ValueError: import sys