Merge branch 'master' of ssh://trinity.codewiz.org/~/public_html/wiki/git/geekigeeki
authorBernie Innocenti <bernie@codewiz.org>
Tue, 24 Nov 2009 18:15:15 +0000 (13:15 -0500)
committerBernie Innocenti <bernie@codewiz.org>
Tue, 24 Nov 2009 18:15:15 +0000 (13:15 -0500)
1  2 
geekigeeki.py

diff --combined geekigeeki.py
index 79dda63e2c463df56b6e9790985b4005d727f2b4,aa54781073b62048ff81f144243ecebfca6f9ae8..9d2bf9e12e8dea0617622960871baa95a990d753
@@@ -36,6 -36,7 +36,7 @@@ def config_get(key, default=None)
  def script_name():
      return os.environ.get('SCRIPT_NAME', '')
  
+ #TODO: move post-edit hook into wiki, then kill this
  def script_path():
      return os.path.split(os.environ.get('SCRIPT_FILENAME', ''))[0]
  
@@@ -46,8 -47,9 +47,9 @@@ def query_string()
      else:
          return os.environ.get('QUERY_STRING', '') or 'FrontPage'
  
- def privileged_path():
-     return config_get('privileged_url') or script_name()
+ def is_privileged():
+     purl = config_get('privileged_url')
+     return (purl is not None) and os.environ.get('SCRIPT_URI', '').startswith(purl)
  
  def remote_user():
      user = os.environ.get('REMOTE_USER', '')
@@@ -71,7 -73,7 +73,7 @@@ def is_external_url(pathname)
  def relative_url(pathname, privileged=False):
      if not is_external_url(pathname):
          if privileged:
-             url = privileged_path()
+             url = config_get('privileged_url') or script_name()
          else:
              url = script_name()
          pathname = url + '/' + pathname
@@@ -143,7 -145,7 +145,7 @@@ def send_title(name, text="Limbo", msg_
          rel, href = link
          print(' <link rel="%s" href="%s" />' % (rel, relative_url(href)))
  
-     editable = name and writable and config_get('privileged_url') is not None
+     editable = name and writable and is_privileged()
      if editable:
          print(' <link rel="alternate" type="application/x-wiki" title="Edit this page" href="%s" />' \
              % relative_url('?a=edit&q=' + name, privileged=True))
@@@ -612,8 -614,8 +614,8 @@@ class WikiFormatter
                      print('</p><p>')
                  else:
                      indent = indent_re.match(self.line)
 -                    #3.0: print(self._indent_to(len(indent.group(0))), end=' ')
                      print(self._indent_to(len(indent.group(1)), indent.group(2)))
 +                    # Stand back! Here we apply the monster regex that does all the parsing
                      print(re.sub(scan_re, self.replace, self.line))
  
          if self.in_pre: print('</pre>')
@@@ -666,7 -668,7 +668,7 @@@ class Page
          out = '== '
          pathname = ''
          for dirname in self.page_name.strip('/').split('/'):
 -            pathname = (pathname + '/' + dirname) if pathname else dirname
 +            pathname = (pathname and pathname + '/' ) + dirname
              out += '[[' + pathname + '|' + dirname + ']]/'
          out += ' ==\n'
   
                      #print "bernie: pragmas[" + m.group(1) + "] = " + m.group(2) + "<br>\n"
              except IOError, err:
                  if err.errno != errno.ENOENT and err.errno != errno.EISDIR:
-                     raise er
+                     raise err
          return self._pragmas
  
      def pragma(self, name, default):
  
      def save(self, newdata, changelog):
          if not self.can_write():
-             self.msg_text = 'Write access denied by ACLs'
-             self.msg_type = 'error'
+             self.msg_text = 'Write access denied by Access Control List'
+             return
+         if not is_privileged():
+             self.msg_text = 'Unauthenticated access denied'
              return
  
          self._write_file(newdata)