]> git.plutz.net Git - busy/blobdiff - index.cgi
whoopsie, forgot that m-)
[busy] / index.cgi
index 1612a9fb89d42c75dd024c4858f6a15fa97f7345..932a763a26acfc453e53172adad4cc7101bef56d 100755 (executable)
--- a/index.cgi
+++ b/index.cgi
@@ -1,89 +1,70 @@
 #!/bin/zsh
 
-# Copyright 2011 Paul Haensch
-# This file is part of Busy
+# Copyright 2014 Paul Hänsch
 #
+# This file is part of Busy.
+# (originally written for and copied from Confetti)
+# 
 # Busy is free software: you can redistribute it and/or modify
 # 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.
-#
+# 
 # Busy 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 Affero General Public License for more details.
-#
+# 
 # You should have received a copy of the GNU Affero General Public License
-# along with Busy.  If not, see <http://www.gnu.org/licenses/>.
+# along with Busy.  If not, see <http://www.gnu.org/licenses/>. 
 
-umask=002
-alias _wiki="stx2any --no-template --link-abbrevs --quote -T html"
-. auth/acl.sh
+export LC_ALL=de_DE.UTF-8
 
-page=$(egrep -o '(^|&)p=[a-zA-Z0-9/_-]+(&|$)' <<<"${QUERY_STRING}" |sed 's,&,,g;s,p=,,')
+# basic functions
+die() {
+  echo "$*" >/dev/stderr
+  exit 1
+}
+debug() { #change to false to disable debugging
+  #true && echo "$*" >>debug
+  true && [ -n "$*" ] && echo -E "$*" >>/dev/stderr
+  true && [ -z "$*" ] && tee /dev/stderr
+}
 
-[ -z "$LOGIN" ] && LOGIN=false
-[ -z "$page" ] && page=Home
+# this program is supposed to be symlinked into a http root directory
+# we will use the http root as object storage (data directory) and call sub
+# programs from the directory in which the real executable resides
+# therefore we need to identify the code and data directories _EXEC and _DATA
+call="$0"
+real="$(readlink -f $call)"
+_EXEC="$(dirname "$real")"  #execution directory
+_DATA="$(dirname "$call")"  #storage directory
 
-if (! $LOGIN && egrep -qx "https?://${HTTP_HOST}/(session.cgi\?|write/).*" <<<"${HTTP_REFERER}"); then
-  echo -n "Location: https://${HTTP_HOST}/session.cgi?${QUERY_STRING}\n\n"
-  exit 0
-fi
+[ -w "$_DATA" ] && [ -d "$_DATA" ] || die "storage directory must be writable"
 
-echo -n "Content-type: text/html\n\n"
+# create directories for object storage
+for each in "$_DATA"/{Home,Tasks,Wiki,QRcodes}; do
+  [ ! -e "$each" ] && mkdir "$each"
+  [ -w "$each" ] && [ -d "$each" ] || die "storage $each must be a writable directory"
+done
 
-cat <<END_index.cgi
-<!DOCTYPE HTML>
-<!-- DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" -->
+# create htaccess file
+[ -f .htaccess ] || cat >.htaccess <<EOF
+Options                +ExecCGI
+AddHandler     cgi-script .cgi
+DirectoryIndex index.cgi
+EOF
+[ -f .htaccess ] || die "no htaccess file present and unable to create one"
 
-<html>
-  <head>
-    <title>Busy</title>
-    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-    <link rel="stylesheet" type="text/css" href="busy.css">
-    <link rel="stylesheet" type="text/css" href="wikitext.css">
-    $([ -r "${page}.css" ] && echo '<link rel="stylesheet" type="text/css" href="'"$page"'.css">')
-    <style type="text/css"><!-- --></style>
-    <script type="text/javascript">
-    <!--
-function show_screen(id){
-  document.getElementById(id).style.display = "inline";
-}
-function hide_screen(id){
-  document.getElementById(id).style.display = "none";
-}
-    -->
-    </script>
-  </head>
-  <body onload="init();">
-    <div id="TITLE">
-      <h1 id="NAME">$(egrep '^name=.*$' project.meta |cut -d= -f2-)</h1>
-      <span id="SLOGAN">$(egrep '^slogan=.*$' project.meta |cut -d= -f2-)</span>
-    </div>
-    <div id="USERMENU">
-$( $LOGIN || echo '<form action="https://'${HTTP_HOST}'/login.cgi?'${QUERY_STRING:gs/&/&amp;/}'" method="post" accept-charset="UTF-8">
-                    Login:<br>
-                    <input type="text" name="user" value placeholder="Username"><br>
-                    <input type="password" name="pass" value placeholder="Password"><br>
-                    <input type="submit" value="Go!">
-                  </form>')
-    </div>
-    <div id="ACCOUNTING">
-    </div>
-    <div id="MENU">
-      <a href='/?p=Home'>Home</a>
-      <a href='/?p=Wiki'>Wiki</a>
-      <a href='/?p=Subversion'>Code</a>
-      <a href='/?p=Tasks'>Tasks</a>
-    </div>
-      $(if [ -r "./${page}.page" ]; then
-       . "./${page}.page"
-        else
-       echo '<h2>Page not found or nevermore</h2>'
-       echo 'Quoth the Raven: 404'
-        fi
-      )
-  </body>
-</html>
-END_index.cgi
+. "$_EXEC/cgi.sh"
+. "$_EXEC/constants.sh"
 
+cgi_get
+
+if [ -n "$_GET[\"action\"]" ]; then
+  . "$_EXEC/action.sh"
+elif [ -n "$_GET[\"export\"]" ]; then
+  . "$_EXEC/export.sh"
+else
+  . "$_EXEC/page.sh"
+fi