X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=index.cgi;h=9b9bb5fb473ca02ba50fef4d40190303d3505d9a;hb=e7342f9c967cce37a40d37f84e9e182c6f4e02a5;hp=2d4954f0c4cc55a1b3778fbebac4f00579afd965;hpb=1915ebd8eeacf71975e39f7280110bd00992aa20;p=shellwiki diff --git a/index.cgi b/index.cgi index 2d4954f..9b9bb5f 100755 --- a/index.cgi +++ b/index.cgi @@ -1,10 +1,10 @@ #!/bin/sh . "${_EXEC:-${0%/*}}/cgilite/cgilite.sh" -set -- nocookie . "${_EXEC}/cgilite/session.sh" . "${_EXEC}/cgilite/file.sh" . "${_EXEC}/cgilite/users.sh" +. "${_EXEC}/acl.sh" . "${_EXEC}/themes/default.sh" @@ -20,35 +20,39 @@ else md() { cat; } fi -wiki_text() { - # Print source text of a wiki page - # Get page from data or underlay dir +mdfile(){ local page="$(PATH "$1")" - if [ -f "$_DATA/pages/$page/#page.md" ]; then - cat -- "$_DATA/pages/$page/#page.md" + if [ -f "$_DATA/pages/$page/#page.md" ]; then + printf %s\\n "$_DATA/pages/$page/#page.md" elif [ -f "$_EXEC/pages/$page/#page.md" ]; then - cat -- "$_EXEC/pages/$page/#page.md" + printf %s\\n "$_EXEC/pages/$page/#page.md" else return 1 fi } +wiki_text() { + # Print source text of a wiki page + # Get page from data or underlay dir + local page="$(PATH "$1")" mdfile + + mdfile="$(mdfile "$page")" || return 4 + acl_read "$page" || return 3 + cat -- "$mdfile" +} + wiki() { # Print content of a wiki page # Get page from data or underlay dir, handle caching - local page="$(PATH "$1")" md cache cachetime + local page="$(PATH "$1")" mdfile 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 + cache="$_DATA/pages/$page/#page.${USER_ID}.cache" + + mdfile="$(mdfile "$page")" || return 4 + acl_read "$page" || return 3 - cachetime="$(stat -c %Y -- "$md" "$cache" 2>/dev/null)" + cachetime="$(stat -c %Y -- "$mdfile" "$cache" 2>/dev/null)" if [ "${cachetime#*${BR}}" -gt "${cachetime%${BR}*}" \ -a "${cachetime#*${BR}}" -gt "$((_DATE - CACHE_AGE))" ]; then @@ -57,57 +61,39 @@ wiki() { mkdir -p -- "$_DATA/pages/$page/" # Macros expect to find page directory as working dir ( cd -- "$_DATA/pages/$page/"; - md <"$md" |tee -- "${cache}.$$" + sed -E '1,20{ /^%[a-z]+/d; }' "$mdfile" \ + | 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 + grep -q '^%nocache' "$mdfile" \ + && rm -- "${cache}.$$" \ + || mv -- "${cache}.$$" "${cache}" fi } -. "$_EXEC/page_edit.sh" - 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 + */"#"*/*) + export ERROR_MSG="This page name is not allowed" + theme_error 400 + ;; + /|*[^]]/) + theme_page "${PATH_INFO}" ;; */"[login]") - [ "$USER_NAME" ] \ - && REDIRECT "./" \ - || theme_login + theme_page "/[wiki]/login/" ;; */"[register]") - theme_register - ;; - */"[attachment]"/*) - : # TODO: Original attachment file + theme_page "/[wiki]/register/" ;; - */"#"*) - : # TODO: Invalid page name + */"[invite]") + theme_page "/[wiki]/invite/" ;; *) - attachment "${PATH_INFO}" + . "$_EXEC/page_edit.sh" \ + || . "$_EXEC/attachment.sh" \ + || theme_error 404 ;; esac +