]> git.plutz.net Git - shellwiki/blob - handlers/10_page.sh
dialog for user settings, separate handler for special pages
[shellwiki] / handlers / 10_page.sh
1 #!/bin/sh
2
3 CACHE_AGE=${CACHE_AGE:-1800}
4 export MD_MACROS="$_EXEC/macros"
5 export MD_HTML="${MD_HTML:-false}"
6 export WIKI_THEME=${WIKI_THEME:-default}
7
8 . "$_EXEC/themes/${WIKI_THEME}.sh"
9
10 if [ "$(which awk)" ]; then
11   md() { awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk"; }
12 elif [ "$(which busybox)" ]; then
13   md() { busybox awk -f "$_EXEC/md_macros.awk" -f "$_EXEC/cgilite/markdown.awk"; }
14 else
15   md() { cat; }
16 fi
17
18 wiki() {
19   # Print content of a wiki page
20   # Get page from data or underlay dir, handle caching
21   local page="$(PATH "$1")" mdfile cache cachetime
22
23   cache="$_DATA/pages/$page/#page.${USER_ID}.cache"
24
25   mdfile="$(mdfile "$page")" || return 4
26   acl_read "$page" || return 3
27
28   cachetime="$(stat -c %Y -- "$mdfile" "$cache" 2>/dev/null)"
29
30   if [ "${cachetime#*${BR}}" -gt "${cachetime%${BR}*}" \
31     -a "${cachetime#*${BR}}" -gt "$((_DATE - CACHE_AGE))" ]; then
32     cat "${cache}"
33   else
34     mkdir -p -- "$_DATA/pages/$page/"
35     # Macros expect to find page directory as working dir
36     ( cd -- "$_DATA/pages/$page/";
37       sed -E '1,20{ /^%[a-z]+/d; }' "$mdfile" \
38       | md |tee -- "${cache}.$$"
39     )
40     grep -q '^%nocache' "$mdfile" \
41     && rm -- "${cache}.$$" \
42     || mv -- "${cache}.$$" "${cache}"
43   fi
44 }
45
46 case "${PATH_INFO}" in
47   /"[.]"/*)
48     FILE "${_EXEC}/${PATH_INFO#/\[.\]}"
49     return 0
50     ;;
51   */\#*)
52     export ERROR_MSG='Page names starting with "#" are not allowed'
53     theme_error 400
54     return 0
55     ;;
56   */\[*\]/*)
57     return 1
58     ;;
59   */)
60     theme_page "${PATH_INFO}"
61     return 0
62     ;;
63 esac
64
65 return 1