projects
/
geekigeeki.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
64737bb
)
Initial authentication support.
author
Bernardo Innocenti
<bernie@trinity.develer.com>
Mon, 10 Sep 2007 01:38:42 +0000
(
03:38
+0200)
committer
Bernardo Innocenti
<bernie@trinity.develer.com>
Mon, 10 Sep 2007 01:38:42 +0000
(
03:38
+0200)
geekigeeki.py
patch
|
blob
|
history
diff --git
a/geekigeeki.py
b/geekigeeki.py
index 99234c539c0d23b2cd69c587773de617bdc05a70..190964478d979134e3c699776a5656923f0ed183 100755
(executable)
--- a/
geekigeeki.py
+++ b/
geekigeeki.py
@@
-23,8
+23,6
@@
__version__ = '$Revision: 1.63+gerry+bernie $'[11:-2];
import cgi, sys, string, os, re, errno, time, stat
from os import path, environ
import cgi, sys, string, os, re, errno, time, stat
from os import path, environ
-from socket import gethostbyaddr
-from time import localtime, strftime
# Regular expression defining a WikiWord
# (but this definition is also assumed in other places)
# Regular expression defining a WikiWord
# (but this definition is also assumed in other places)
@@
-35,22
+33,31
@@
url_re = re.compile(r"^[a-z]{3,8}://[^\s'\"]+\S$")
title_done = False
title_done = False
-def emit_header(type="text/html"):
- print "Content-type: " + type + "; charset=utf-8"
- print
-
-# Formatting stuff --------------------------------------------------
+# CGI stuff ---------------------------------------------------------
def get_scriptname():
return environ.get('SCRIPT_NAME', '')
def get_scriptname():
return environ.get('SCRIPT_NAME', '')
+def remote_user():
+ return environ.get('REMOTE_USER', 'AnonymousCoward')
+
+def remote_host():
+ return environ.get('REMOTE_ADDR', '')
+
def get_hostname(addr):
try:
def get_hostname(addr):
try:
+ from socket import gethostbyaddr
return gethostbyaddr(addr)[0] + ' (' + addr + ')'
except:
return addr;
return gethostbyaddr(addr)[0] + ' (' + addr + ')'
except:
return addr;
+# Formatting stuff --------------------------------------------------
+
+def emit_header(type="text/html"):
+ print "Content-type: " + type + "; charset=utf-8"
+ print
+
def send_guru(msg, msg_type):
if msg is None or len(msg) == 0: return
print '<pre id="guru" onclick="this.style.display = \'none\'" class="' + msg_type + '">'
def send_guru(msg, msg_type):
if msg is None or len(msg) == 0: return
print '<pre id="guru" onclick="this.style.display = \'none\'" class="' + msg_type + '">'
@@
-111,7
+118,7
@@
def send_title(name, text="Limbo", msg=None, msg_type = 'error'):
# Navbar
print '<div class="navigator">'
# Navbar
print '<div class="navigator">'
- print '<b>' + site_name + ': '
+ print '
<b>' + site_name + ': '
if name:
print link_tag('?fullsearch=' + name, text) + '</b> '
else:
if name:
print link_tag('?fullsearch=' + name, text) + '</b> '
else:
@@
-119,6
+126,7
@@
def send_title(name, text="Limbo", msg=None, msg_type = 'error'):
print ' | ' + link_tag('FrontPage', 'Front Page', 'navlink')
print ' | ' + link_tag('FindPage', 'Find Page', 'navlink')
print ' | <a href="/wikigit/wiki.git" class="navlink">Recent Changes</a>'
print ' | ' + link_tag('FrontPage', 'Front Page', 'navlink')
print ' | ' + link_tag('FindPage', 'Find Page', 'navlink')
print ' | <a href="/wikigit/wiki.git" class="navlink">Recent Changes</a>'
+
if name:
print ' | <a href="/wikigit/wiki.git?a=history;f=' + name + '" class="navlink">Page History</a>'
print ' | ' + link_tag('?raw=' + name, 'Raw Text', 'navlink')
if name:
print ' | <a href="/wikigit/wiki.git?a=history;f=' + name + '" class="navlink">Page History</a>'
print ' | ' + link_tag('?raw=' + name, 'Raw Text', 'navlink')
@@
-126,8
+134,12
@@
def send_title(name, text="Limbo", msg=None, msg_type = 'error'):
print ' | ' + link_tag('?edit=' + name, 'Edit Page', 'navlink')
else:
print ' | <i>Immutable Page</i>'
print ' | ' + link_tag('?edit=' + name, 'Edit Page', 'navlink')
else:
print ' | <i>Immutable Page</i>'
- print '</div>'
+ user = remote_user()
+ if user != 'AnonymousCoward':
+ print ' | <i>logged in as <b>' + cgi.escape(user) + '</b></i>'
+
+ print '</div>'
title_done = True
title_done = True
@@
-488,8
+500,6
@@
class PageFormatter:
class Page:
def __init__(self, page_name):
self.page_name = page_name
class Page:
def __init__(self, page_name):
self.page_name = page_name
- self.remote_user = 'AnonymousCoward'
- self.remote_host = environ.get('REMOTE_ADDR', '')
self.msg = ''
self.msg_type = 'error'
self.attrs = {}
self.msg = ''
self.msg_type = 'error'
self.attrs = {}
@@
-499,15
+509,12
@@
class Page:
# and insert a space there
return re.sub('([a-z])([A-Z])', r'\1 \2', self.page_name)
# and insert a space there
return re.sub('([a-z])([A-Z])', r'\1 \2', self.page_name)
-
def _text_filename(self):
return path.join(text_dir, self.page_name)
def _text_filename(self):
return path.join(text_dir, self.page_name)
-
def _tmp_filename(self):
return path.join(text_dir, ('#' + self.page_name + '.' + `os.getpid()` + '#'))
def _tmp_filename(self):
return path.join(text_dir, ('#' + self.page_name + '.' + `os.getpid()` + '#'))
-
def exists(self):
try:
os.stat(self._text_filename())
def exists(self):
try:
os.stat(self._text_filename())
@@
-563,7
+570,7
@@
class Page:
acl = attrs["acl"]
for rule in acl.split():
(user,perms) = acl.split(':')
acl = attrs["acl"]
for rule in acl.split():
(user,perms) = acl.split(':')
- if user ==
self.remote_user
or user == "All":
+ if user ==
remote_user()
or user == "All":
if 'write' in perms.split(','):
return True
return False
if 'write' in perms.split(','):
return True
return False
@@
-582,6
+589,7
@@
class Page:
def _last_modified(self):
if not self.exists():
return None
def _last_modified(self):
if not self.exists():
return None
+ from time import localtime, strftime
modtime = localtime(os.stat(self._text_filename())[stat.ST_MTIME])
return strftime(datetime_fmt, modtime)
modtime = localtime(os.stat(self._text_filename())[stat.ST_MTIME])
return strftime(datetime_fmt, modtime)
@@
-589,8
+597,8
@@
class Page:
send_title(None, 'Edit ' + self.split_title(), msg=self.msg, msg_type=self.msg_type)
print ('<p><b>Editing ' + self.page_name
send_title(None, 'Edit ' + self.split_title(), msg=self.msg, msg_type=self.msg_type)
print ('<p><b>Editing ' + self.page_name
- + ' for ' +
self.remote_user
- + ' from ' +
get_hostname(self.remote_host
)
+ + ' for ' +
cgi.escape(remote_user())
+ + ' from ' +
cgi.escape(get_hostname(remote_host())
)
+ '</b></p>')
print '<div class="editor"><form method="post" action="%s/%s">' % (get_scriptname(), self.page_name)
print '<input type="hidden" name="savepage" value="%s">' % (self.page_name)
+ '</b></p>')
print '<div class="editor"><form method="post" action="%s/%s">' % (get_scriptname(), self.page_name)
print '<input type="hidden" name="savepage" value="%s">' % (self.page_name)
@@
-629,10
+637,11
@@
class Page:
self._write_file(newtext)
rc = 0
if post_edit_hook:
self._write_file(newtext)
rc = 0
if post_edit_hook:
+ # FIXME: what's the std way to perform shell quoting in python?
cmd = ( post_edit_hook
cmd = ( post_edit_hook
- +
' '
+ text_dir + '/' + self.page_name
- +
' ' + self.remote_user
- +
' ' + self.remote_host
+ +
" '"
+ text_dir + '/' + self.page_name
+ +
"' '" + remote_user()
+ +
"' '" + remote_host() + "'"
)
out = os.popen(cmd)
msg = out.read()
)
out = os.popen(cmd)
msg = out.read()