X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=geekigeeki.py;h=b6e802c8277f9e67be9e118c0a3eaef9cdc25fc7;hb=0c40ff65375f2cb3fd33da40a83f777eda407adb;hp=ca62bed3fc53d8d5a354a5e4b120c8cfcd32f926;hpb=537829f7f5332bc5867b826312132290d5de8d14;p=geekigeeki.git
diff --git a/geekigeeki.py b/geekigeeki.py
index ca62bed..b6e802c 100755
--- a/geekigeeki.py
+++ b/geekigeeki.py
@@ -1,26 +1,20 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
-# Copyright 1999, 2000 Martin Pool
-# Copyright 2002 Gerardo Poggiali
-# Copyright 2007, 2008, 2009 Bernie Innocenti
+# Copyright (C) 1999, 2000 Martin Pool
+# Copyright (C) 2002 Gerardo Poggiali
+# Copyright (C) 2007, 2008, 2009 Bernie Innocenti
#
# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
__version__ = '4.0-' + '$Id$'[4:11]
-from time import clock
+from time import clock, localtime, gmtime, strftime
start_time = clock()
title_done = False
@@ -42,6 +36,10 @@ 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]
+
def query_string():
path_info = os.environ.get('PATH_INFO', '')
if len(path_info) and path_info[0] == '/':
@@ -49,8 +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', '')
@@ -74,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
@@ -108,7 +107,9 @@ def url_args(kvargs):
return ''
# Formatting stuff --------------------------------------------------
-def emit_header(mime_type="text/html"):
+def emit_header(mtime=None, mime_type="text/html"):
+ if mtime:
+ print("Last-Modified: " + strftime("%a, %d %b %Y %H:%M:%S GMT", gmtime(mtime)))
print("Content-type: " + mime_type + "; charset=utf-8\n")
def send_guru(msg_text, msg_type):
@@ -122,12 +123,12 @@ def send_guru(msg_text, msg_type):
print('' \
% relative_url('sys/GuruMeditation.js'))
-def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=False):
+def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=False, mtime=None):
global title_done
if title_done: return
# Head
- emit_header()
+ emit_header(mtime)
print('')
print('')
@@ -144,10 +145,10 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
rel, href = link
print(' ' % (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(' ' \
- % (privileged_path() + '?a=edit&q=' + name))
+ % relative_url('?a=edit&q=' + name, privileged=True))
history = config_get('history_url')
if history is not None:
@@ -158,7 +159,7 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
# Body
if editable:
- print('')
+ print('')
else:
print('')
@@ -231,17 +232,20 @@ def link_inline(name, descr=None, kvargs={}):
elif image_re.match(name):
return '' % (url, url + url_args(kvargs), descr)
elif file_re.match(name) and not ext_re.search(name): # FIXME: this guesses a wiki page
- return Page(name).send_naked(kvargs)
+ Page(name).send_naked(kvargs) # FIXME: we should return the page as a string rather than print it
+ return ''
else:
return '' \
% (url, url, name)
def link_inline_glob(pattern, descr=None, kvargs={}):
- os.chdir(config_get('data_dir', 'data'))
- s = ''
- for name in glob.glob(pattern):
- s += link_inline(name, descr, kvargs)
- return s
+ if not url_re.match(pattern) and bool(set(pattern) & set('?*[')):
+ s = ''
+ for name in glob.glob(pattern):
+ s += link_inline(name, descr, kvargs)
+ return s
+ else:
+ return link_inline(pattern, descr, kvargs)
# Search ---------------------------------------------------
@@ -332,7 +336,7 @@ def handle_get(pagename, form):
else:
send_httperror("403 Forbidden", pagename)
-# Used by macros/WordIndex and macros/TitleIndex
+# Used by sys/macros/WordIndex and sys/macros/TitleIndex
def make_index_key():
links = ['%s' % (ch, ch) for ch in 'abcdefghijklmnopqrstuvwxyz']
return '