X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=index.cgi;h=5d168230371aa30653da759ea9b8f4acbbb0ba0f;hb=4ad62632e520c153517f8e98ef87543fea0d2c7c;hp=ea78af168a22a187e80bfa4e1bfa302b7afa67dd;hpb=ad80bc2c5d655b67abea18b7b6c107896e7b3150;p=shellwiki diff --git a/index.cgi b/index.cgi index ea78af1..5d16823 100755 --- a/index.cgi +++ b/index.cgi @@ -2,106 +2,54 @@ . "${_EXEC:-${0%/*}}/cgilite/cgilite.sh" . "${_EXEC}/cgilite/session.sh" -. "${_EXEC}/cgilite/file.sh" . "${_EXEC}/cgilite/users.sh" +. "${_EXEC}/tools.sh" +. "${_EXEC}/acl.sh" -. "${_EXEC}/themes/default.sh" +export REV_PAGES=${REV_PAGES:-true} +export REV_ATTACHMENTS=${REV_ATTACHMENTS:-false} +export WIKI_THEME="${WIKI_THEME:-default}" -CACHE_AGE=${CACHE_AGE:-1800} -export MD_MACROS="$_EXEC/macros" -export MD_HTML="${MD_HTML:-false}" +which git >/dev/null || REV_PAGES=false +[ "$REV_PAGES" != true ] && REV_ATTACHMENTS=false -if [ "$(which awk)" ]; then - md() { awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk"; } -elif [ "$(which busybox)" ]; then - md() { busybox awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk"; } -else - md() { cat; } -fi +. "${_EXEC}/themes/${WIKI_THEME}.sh" + +# Renew session cookie, only if cookie already set +[ "$(COOKIE session)" ] && SESSION_COOKIE wiki_text() { # Print source text of a wiki page # Get page from data or underlay dir - local page="$(PATH "$1")" - - if [ -f "$_DATA/pages/$page/#page.md" ]; then - cat -- "$_DATA/pages/$page/#page.md" - elif [ -f "$_EXEC/pages/$page/#page.md" ]; then - cat -- "$_EXEC/pages/$page/#page.md" - else - return 1 - fi -} - -wiki() { - # Print content of a wiki page - # Get page from data or underlay dir, handle caching - local page="$(PATH "$1")" md cache cachetime - - cache="$_DATA/pages/$page/#page.cache" - if [ -f "$_DATA/pages/$page/#page.md" ]; then - md="$_DATA/pages/$page/#page.md" - elif [ -f "$_EXEC/pages/$page/#page.md" ]; then - md="$_EXEC/pages/$page/#page.md" - else - return 1 - fi + local page="$(PATH "$1")" mdfile - cachetime="$(stat -c %Y -- "$md" "$cache" 2>/dev/null)" - - if [ "${cachetime#*${BR}}" -gt "${cachetime%${BR}*}" \ - -a "${cachetime#*${BR}}" -gt "$((_DATE - CACHE_AGE))" ]; then - cat "${cache}" - else - mkdir -p -- "$_DATA/pages/$page/" - # Macros expect to find page directory as working dir - ( cd -- "$_DATA/pages/$page/"; - md <"$md" |tee -- "${cache}.$$" - ) - mv -- "${cache}.$$" "${cache}" - fi -} - -attachment() { - local file="$(PATH "$1")" - - # TODO: deliver downscaled images, etc. - if [ -f "$_DATA/pages/${file%/*}/#attachments/${file#*/}" ]; then - FILE "$_DATA/pages/${file%/*}/#attachments/${file#*/}" - elif [ -f "$_EXEC/pages/${file%/*}/#attachments/${file#*/}" ]; then - FILE "$_EXEC/pages/${file%/*}/#attachments/${file#*/}" - elif [ -d "$_DATA/pages/${file}/" -o -d "$_EXEC/pages/${file}" ]; then - # path looks like a rogue page name (without trailing slash), so redirect - REDIRECT "$_BASE/${file}/" - else - return 1 - fi + mdfile="$(mdfile "$page")" || return 4 + acl_read "$page" || return 3 + cat -- "$mdfile" } -case "${PATH_INFO}" in - /"[.]"/*) - FILE "${_EXEC}/${PATH_INFO#/\[.\]}" - ;; - */) - if [ -f "$_DATA/pages/$PATH_INFO/#page.md" \ - -o -f "$_EXEC/pages/$PATH_INFO/#page.md" ]; then - theme_page "${PATH_INFO}" - else - theme_404 - fi - ;; - */"[login]") - [ "$USER_NAME" ] \ - && REDIRECT "./" \ - || theme_login - ;; - */"[register]") - theme_register - ;; - */"#"*) - : # TODO: Invalid page name - ;; -esac - -. "$_EXEC/page_edit.sh" -. "$_EXEC/attachment.sh" +if [ "$REV_PAGES" = true -a ! -f "$_DATA/.gitignore" ]; then + cat >"$_DATA/.gitignore" <<-EOF + users.db + serverkey + **/#cache/ + **/#page.lock + **/#page.*.cache + **/#page.*.cache.* + **/#page:*.*.cache + **/#page:*.*.cache.* + EOF + [ "$REV_ATTACHMENTS" != true ] \ + && printf '**/#attachments/\n' >>"$_DATA/.gitignore" + git init "$_DATA" + git -C "$_DATA" add .gitignore + git -C "$_DATA" commit -m 'initialization' -- .gitignore +fi 1>&2 + +for handler in "$_EXEC"/handlers/*; do + . "$handler" && break +done +if [ $? != 0 ]; then + export ERROR_MSG="The presented URL schema cannot be handled" + theme_error 400 +fi