. "${_EXEC}/cgilite/session.sh"
. "${_EXEC}/cgilite/file.sh"
. "${_EXEC}/cgilite/users.sh"
+. "${_EXEC}/acl.sh"
. "${_EXEC}/themes/default.sh"
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"
- cachetime="$(stat -c %Y -- "$md" "$cache" 2>/dev/null)"
+ 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
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
}
/"[.]"/*)
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}"
- fi
+ theme_page "${PATH_INFO}"
+ exit 0
;;
*/"[login]")
- [ "$USER_NAME" ] \
- && REDIRECT "./" \
- || theme_login
+ theme_login
+ exit 0
;;
*/"[register]")
theme_register
+ exit 0
;;
*/"#"*)
: # TODO: Invalid page name