X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=index.cgi;h=c121c3879b050597602b80cb8e39845254fdf737;hb=HEAD;hp=9b9bb5fb473ca02ba50fef4d40190303d3505d9a;hpb=c54b9fb65cc638117cae1c7185ab4ac937462296;p=shellwiki diff --git a/index.cgi b/index.cgi index 9b9bb5f..c121c38 100755 --- a/index.cgi +++ b/index.cgi @@ -1,36 +1,37 @@ #!/bin/sh +# Copyright 2022 - 2023 Paul Hänsch +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +export REV_PAGES=${REV_PAGES:-true} +export REV_ATTACHMENTS=${REV_ATTACHMENTS:-false} +export WIKI_THEME="${WIKI_THEME:-default}" +export SEARCH_INDEX="${SEARCH_INDEX:-true}" +export USER_AUTH="${USER_AUTH:-default}" + . "${_EXEC:-${0%/*}}/cgilite/cgilite.sh" . "${_EXEC}/cgilite/session.sh" -. "${_EXEC}/cgilite/file.sh" -. "${_EXEC}/cgilite/users.sh" +. "${_EXEC}/auth/${USER_AUTH}.sh" +. "${_EXEC}/tools.sh" . "${_EXEC}/acl.sh" +. "${_EXEC}/themes/${WIKI_THEME}.sh" -. "${_EXEC}/themes/default.sh" - -CACHE_AGE=${CACHE_AGE:-1800} -export MD_MACROS="$_EXEC/macros" -export MD_HTML="${MD_HTML:-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 - -mdfile(){ - local page="$(PATH "$1")" +which git >/dev/null || REV_PAGES=false +[ "$REV_PAGES" != true ] && REV_ATTACHMENTS=false - if [ -f "$_DATA/pages/$page/#page.md" ]; then - printf %s\\n "$_DATA/pages/$page/#page.md" - elif [ -f "$_EXEC/pages/$page/#page.md" ]; then - printf %s\\n "$_EXEC/pages/$page/#page.md" - else - return 1 - fi -} +# Renew session cookie, only if cookie already set +[ "$(COOKIE session)" ] && SESSION_COOKIE wiki_text() { # Print source text of a wiki page @@ -42,58 +43,35 @@ wiki_text() { cat -- "$mdfile" } -wiki() { - # Print content of a wiki page - # Get page from data or underlay dir, handle caching - local page="$(PATH "$1")" mdfile cache cachetime - - cache="$_DATA/pages/$page/#page.${USER_ID}.cache" - - mdfile="$(mdfile "$page")" || return 4 - acl_read "$page" || return 3 - - cachetime="$(stat -c %Y -- "$mdfile" "$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/"; - sed -E '1,20{ /^%[a-z]+/d; }' "$mdfile" \ - | md |tee -- "${cache}.$$" - ) - grep -q '^%nocache' "$mdfile" \ - && rm -- "${cache}.$$" \ - || mv -- "${cache}.$$" "${cache}" - fi -} - -case "${PATH_INFO}" in - /"[.]"/*) - FILE "${_EXEC}/${PATH_INFO#/\[.\]}" - ;; - */"#"*/*) - export ERROR_MSG="This page name is not allowed" - theme_error 400 - ;; - /|*[^]]/) - theme_page "${PATH_INFO}" - ;; - */"[login]") - theme_page "/[wiki]/login/" - ;; - */"[register]") - theme_page "/[wiki]/register/" - ;; - */"[invite]") - theme_page "/[wiki]/invite/" - ;; - *) - . "$_EXEC/page_edit.sh" \ - || . "$_EXEC/attachment.sh" \ - || theme_error 404 - ;; -esac +if [ "$REV_PAGES" = true -a ! -f "$_DATA/.gitignore" ]; then + cat >"$_DATA/.gitignore" <<-EOF + users.db + serverkey + tags/ + index/ + **/#cache/ + **/#page.md.lock + **/#page.*.cache + **/#page.*.cache.* + **/#page:*.*.cache + **/#page:*.*.cache.* + **/#index.flag + EOF + [ "$REV_ATTACHMENTS" != true ] \ + && printf '**/#attachments/\n' >>"$_DATA/.gitignore" + git init "$_DATA" + git -C "$_DATA" add .gitignore + printf '%s\n' "" "[user]" \ + "email = \"shellwiki@localhost\"" \ + "name = \"Shellwiki\"" \ + >>"$_DATA/.git/config" + 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