X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=geekigeeki.py;h=f403885ec31c77a88853dd1163e673398531ad4c;hb=b17bc44fb398f4ed071ed0028fd4f2bdf05e9b94;hp=b34f152188b0544747471a796258d521f9eb0aba;hpb=014d5c705784bfe7b47731ad5cc50568fc5e63cf;p=geekigeeki.git diff --git a/geekigeeki.py b/geekigeeki.py index b34f152..f403885 100755 --- a/geekigeeki.py +++ b/geekigeeki.py @@ -28,8 +28,9 @@ from os import path, environ # Regular expression defining a WikiWord # (but this definition is also assumed in other places) -file_re = re.compile(r"^\b([A-Za-z0-9_\.\-/]+)\b$") word_re = re.compile(r"^\b((([A-Z][a-z]+){2,}/)*([A-Z][a-z]+){2,})\b$") +# FIXME: we accept stuff like foo/../bar and we shouldn't +file_re = re.compile(r"^\b([A-Za-z0-9_\-][A-Za-z0-9_\.\-/]*)\b$") img_re = re.compile(r"^.*\.(png|gif|jpg|jpeg)$", re.IGNORECASE) url_re = re.compile(r"^[a-z]{3,8}://[^\s'\"]+\S$") @@ -136,14 +137,13 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error'): # Navbar print '
%d hits out of %d pages searched.
" % (hits, searched) -def do_raw(pagename): +def handle_raw(pagename): Page(pagename).send_raw() -def do_edit(pagename): +def handle_edit(pagename): pg = Page(pagename) - if 'preview' in form: - pg.send_editor(form['savetext'].value) - elif 'save' in form: - pg.save_text(form['savetext'].value) + if 'save' in form: + if form['file'].value: + pg.save(form['file'].file.read()) + else: + pg.save(form['savetext'].value.replace('\r\n', '\n')) pg.send_page() elif 'cancel' in form: pg.msg_text = 'Editing canceled' pg.msg_type = 'notice' pg.send_page() - else: - pg.send_editor() + else: # preview or edit + text = None + if 'preview' in form: + text = form['savetext'].value + pg.send_editor(text) def make_index_key(): links = map(lambda ch: '%s' % (ch, ch), 'abcdefghijklmnopqrstuvwxyz') @@ -248,7 +252,7 @@ def page_list(): def send_footer(name, mod_string=None): if globals().get('debug_cgi', False): cgi.print_arguments() - cgi.print_form(cgi.FieldStorage()) + cgi.print_form(form) cgi.print_environ() print 'generated in %0.3fs' + @@ -267,10 +271,9 @@ def _macro_FullSearch(*vargs): return _macro_search("fullsearch") def _macro_search(type): - if form.has_key('value'): - default = form["value"].value - else: - default = '' + default = '' + if 'value' in form: + default = form['value'].value return """
""" % (type, default) def _macro_WordIndex(*vargs): @@ -335,7 +338,7 @@ class PageFormatter: self.in_pre = self.in_table = False self.in_header = True self.list_indents = [] - self.tr_cnt = self.h_cnt = 0 + self.tr_cnt = 0 self.styles = { #wiki html enabled? "//": ["em", False], @@ -360,9 +363,8 @@ class PageFormatter: self.h_level = 0 else: self.h_level = len(word) - 1 - self.h_cnt += 1 - #abridged = re.sub('[^a-z_]', '', word.lower().replace(' ', '_')) - result = '' - if blank_re.match(line): + if blank_re.match(self.line): print '
' else: - indent = indent_re.match(line) + indent = indent_re.match(self.line) print self._indent_to(len(indent.group(0))) - print re.sub(scan_re, self.replace, line) + print re.sub(scan_re, self.replace, self.line) if self.in_pre: print '' if self.in_table: print '
' @@ -590,7 +592,7 @@ class Page: raise er def get_attrs(self): - if self.__dict__.has_key('attrs'): + if 'attrs' in self.__dict__: return self.attrs self.attrs = {} try: @@ -620,7 +622,8 @@ class Page: return action in perms.split(',') return False except Exception, er: - pass + if acl: + self.msg_text = 'Illegal acl line: ' + acl return default def can_write(self): @@ -661,13 +664,18 @@ class Page: send_guru("Write access denied by ACLs", "error") return + file = '' + if 'file' in form: + file = form['file'].value + print ('
Editing ' + self.page_name + ' for ' + cgi.escape(remote_user()) + ' from ' + cgi.escape(get_hostname(remote_host())) + '
') - print '