#!/bin/sh . "${_EXEC:-${0%/*}}/cgilite/cgilite.sh" . "${_EXEC}/cgilite/session.sh" . "${_EXEC}/cgilite/file.sh" . "${_EXEC}/cgilite/users.sh" . "${_EXEC}/acl.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")" 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 } 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")" 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/"; md <"$mdfile" |tee -- "${cache}.$$" ) mv -- "${cache}.$$" "${cache}" fi } case "${PATH_INFO}" in /"[.]"/*) FILE "${_EXEC}/${PATH_INFO#/\[.\]}" ;; */) theme_page "${PATH_INFO}" ;; */"[login]") [ "$USER_NAME" ] \ && REDIRECT "./" \ || theme_login ;; */"[register]") theme_register ;; */"#"*) : # TODO: Invalid page name ;; esac . "$_EXEC/page_edit.sh" . "$_EXEC/attachment.sh"