X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=geekigeeki.py;h=f3ce1dcb3268d452e29c997c5a698040a15b58cf;hb=b36435d29f2dcaf6d3a2d19d21ca8b3c2c62c44d;hp=287a945cf45a2e56e4d26ef2f0c58b12c5c24484;hpb=bc6d8d8d4fd644789345dabc91b5ee728f524afa;p=geekigeeki.git
diff --git a/geekigeeki.py b/geekigeeki.py
index 287a945..f3ce1dc 100755
--- a/geekigeeki.py
+++ b/geekigeeki.py
@@ -3,7 +3,7 @@
#
# Copyright 1999, 2000 Martin Pool
# Copyright 2002 Gerardo Poggiali
-# Copyright 2007, 2008 Bernie Innocenti
+# Copyright 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
@@ -24,46 +24,54 @@ from time import clock
start_time = clock()
import cgi, sys, os, re, errno, stat
-from os import path, environ
# Regular expression defining a WikiWord
# (but this definition is also assumed in other places)
word_re = re.compile(r"^\b((([A-Z][a-z0-9]+){2,}/)*([A-Z][a-z0-9]+){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|bmp|ico)$", re.IGNORECASE)
+img_re = re.compile(r"^.*\.(png|gif|jpg|jpeg|bmp|ico|ogm|ogg|mkv|mpg|mpeg|mp4|avi|asf|flv|wmv|qt)$", re.IGNORECASE)
+video_re = re.compile(r"^.*\.(ogm|ogg|mkv|mpg|mpeg|mp4|avi|asf|flv|wmv|qt)$", re.IGNORECASE)
url_re = re.compile(r"^[a-z]{3,8}://[^\s'\"]+\S$")
link_re = re.compile("(?:\[\[|{{)([^\s\|]+)(?:\s*\|\s*([^\]]+)|)(?:\]\]|}})")
title_done = False
-
# CGI stuff ---------------------------------------------------------
-
def script_name():
- return environ.get('SCRIPT_NAME', '')
+ return os.environ.get('SCRIPT_NAME', '')
+
+def query_string():
+ path_info = os.environ.get('PATH_INFO', '')
+ if len(path_info) and path_info[0] == '/':
+ return path_info[1:] or 'FrontPage'
+ else:
+ return os.environ.get('QUERY_STRING', '') or 'FrontPage'
def privileged_path():
return privileged_url or script_name()
def remote_user():
- user = environ.get('REMOTE_USER', '')
+ user = os.environ.get('REMOTE_USER', '')
if user is None or user == '' or user == 'anonymous':
user = 'AnonymousCoward'
return user
def remote_host():
- return environ.get('REMOTE_ADDR', '')
+ return os.environ.get('REMOTE_ADDR', '')
def get_hostname(addr):
try:
from socket import gethostbyaddr
return gethostbyaddr(addr)[0] + ' (' + addr + ')'
- except Exception, er:
+ except Exception:
return addr
+def is_external_url(pathname):
+ return (url_re.match(pathname) or pathname.startswith('/'))
+
def relative_url(pathname, privileged=False):
- if not (url_re.match(pathname) or pathname.startswith('/')):
+ if not is_external_url(pathname):
if privileged:
url = privileged_path()
else:
@@ -78,6 +86,13 @@ def permalink(s):
def emit_header(mime_type="text/html"):
print "Content-type: " + mime_type + "; charset=utf-8\n"
+def sendfile(dest_file, src_file):
+ """Efficiently copy file data between file descriptors"""
+ while 1:
+ data = src_file.read(65536)
+ if not data: break
+ dest_file.write(data)
+
def send_guru(msg_text, msg_type):
if not msg_text: return
print '
'
@@ -85,30 +100,12 @@ def send_guru(msg_text, msg_type):
print ' Software Failure. Press left mouse button to continue.\n'
print msg_text
if msg_type == 'error':
- print ' Guru Meditation #DEADBEEF.ABADC0DE'
+ print '\n Guru Meditation #DEADBEEF.ABADC0DE'
print '
'
- # FIXME: This little JS snippet is harder to pass than ACID 3.0
- print """
- """
+ try:
+ sendfile(sys.stdout, open('gurumeditation.js', 'rb'))
+ except IOError, err:
+ pass
def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=False):
global title_done
@@ -120,12 +117,15 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
print ''
- site_name = globals().get('site_name', 'Unconfigured Site')
print "%s: %s" % (site_name, text)
print ' '
if not name:
print ' '
+ for meta in meta_urls:
+ http_equiv, content = meta
+ print ' ' % (http_equiv, relative_url(content))
+
for link in link_urls:
rel, href = link
print ' ' % (rel, relative_url(href))
@@ -151,11 +151,11 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
# Navbar
print '