3 [ "$include_acl" ] && return 0
6 # Copyright 2022 - 2023 Paul Hänsch
8 # Permission to use, copy, modify, and/or distribute this software for any
9 # purpose with or without fee is hereby granted, provided that the above
10 # copyright notice and this permission notice appear in all copies.
12 # THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
15 # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
18 # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 # ACL_OVERRIDE="${ACL_OVERRIDE:-Admin:read,write}"
21 ACL_DEFAULT="${ACL_DEFAULT:-Known:read,write${BR}All:read}"
28 # Get directory part of PATH_INFO
29 local path="${path%/*}/./"
30 local pagefile head acl
32 printf '%s\n' "$ACL_OVERRIDE"
35 [ "$path" = / ] && break
38 # Do not use `mdfile` function here because of specialties
39 # in translation handler (`handlers/10_translations.sh`)
40 if [ -f "$_DATA/pages/$path/#page.md" ]; then
41 pagefile="$_DATA/pages/$path/#page.md"
42 elif [ -f "$_EXEC/pages/$path/#page.md" ]; then
43 pagefile="$_EXEC/pages/$path/#page.md"
50 /^%acl([\t ]+.*)?$/bACL;
57 /^(%[ \t]+|%acl[ \t]+|[ \t]+)[^ \t\r]+$/bACL;
58 /^(%[ \t]*|%acl[ \t]*)$/bACL;
64 printf '%s\n' "$ACL_DEFAULT"
68 local page="${1:-${PATH_INFO}}"
71 if [ "$acl_cachepath" != "$page" ]; then
73 acl_collection="$(acl_collect "$page")"
78 read|*,read,*|read,*|*,read)
79 acl="${acl%%:*}:read";;
80 *) acl="${acl%%:*}:";;
82 [ "$USER_NAME" ] && case ${acl%:*} in
84 group="${acl%%:*}" group="${group#[+-]}"
85 printf '%s\n' "$USER_GROUPS" |grep -qxF "$group" \
89 [ "$USER_NAME" ] && case $acl in
90 "@${USER_NAME}:"|"Known:"|"@@:"|"&"*":")
92 "@${USER_NAME}:read"|"Known:read"|"@@:read"|"&"*":read")
94 "-@{$USER_NAME}:read"|"-Known:read"|"-@@:read"|"-&"*":read")
96 "+@{$USER_NAME}:read"|"+Known:read"|"+@@:read"|"+&"*":read")
100 "All:"|"*:") return 1;;
101 "All:read"|"*:read") return 0;;
102 "-All:read"|"-*:read") return 1;;
103 "+All:read"|"+*:read") return 0;;
112 local page="${1:-${PATH_INFO}}"
115 if [ "$acl_cachepath" != "$page" ]; then
116 acl_cachepath="$page"
117 acl_collection="$(acl_collect "$page")"
120 while read -r acl; do
122 write|*,write,*|write,*|*,write)
123 acl="${acl%%:*}:write";;
124 *) acl="${acl%%:*}:";;
126 [ "$USER_NAME" ] && case ${acl%:*} in
128 group="${acl%%:*}" group="${group#[+-]}"
129 printf '%s\n' "$USER_GROUPS" |grep -qxF "$group" \
133 [ "$USER_NAME" ] && case ${acl} in
134 "@${USER_NAME}:"|"Known:"|"@@:"|"&"*":")
136 "@${USER_NAME}:write"|"Known:write"|"@@:write"|"&"*":write")
138 "-@{$USER_NAME}:write"|"-Known:write"|"-@@:write"|"-&"*":write")
140 "+@{$USER_NAME}:write"|"+Known:write"|"+@@:write"|"+&"*":write")
144 "All:"|"*:") return 1;;
145 "All:write"|"*:write") return 0;;
146 "-All:write"|"-*:write") return 1;;
147 "+All:write"|"+*:write") return 0;;