. "$_EXEC/cgilite/file.sh"
+REV_ATTACHMENTS="${REV_ATTACHMENTS:-false}"
+
attachment_convert(){
local attpath="$1"
local cachepath="${attpath%/#attachments/*}/#cache/${attpath#*/#attachments/}"
# show attachment page
# receive uploads
tsid="$(POST session_key)"; tsid="${tsid%% *}"
+ action="$(POST action)"
attachment_delete="$(POST delete)"
page="${PATH_INFO%\[attachment\]}"
. "$_EXEC/multipart.sh"
multipart_cache
+ # Use positional parameters for filename collection
+ # The positional array is the only array available
+ # in plain posix shells, see the documentation for
+ # your shells "set" builtin for a hint to this
+ # obscure use mode
+ set --
+
# Validate session id from form to prevent CSRF
# Only validate if username is present, because no username means
# anonymous uploads are allowed via acl and cgilite/session.sh does not
mkdir -p "$_DATA/pages${page}#attachments/"
n=1; while filename=$(multipart_filename "file" "$n"); do
filename="$(printf %s "$filename" |tr /\\0 __)"
+ set -- "$@" "pages${page}#attachments/$filename"
multipart "file" "$n" >"$_DATA/pages${page}#attachments/$filename"
n=$((n + 1))
done
rm -- "$multipart_cachefile"
+ if [ "$REV_ATTACHMENTS" = true ]; then
+ git -C "$_DATA" add -- "$@"
+ git -C "$_DATA" commit -qm "Attachments to # $page # uploaded by @ $USER_NAME @" -- "$@"
+ fi
REDIRECT "${_BASE}${PATH_INFO}"
elif [ "${CONTENT_TYPE%%;*}" = "multipart/form-data" ]; then
printf 'Refresh: %i\r\n' 4
theme_error 403
head -c $((CONTENT_LENGTH)) >/dev/null
return 0
- elif [ "$attachment_delete" -a "$SESSION_ID" = "$tsid" ]; then
- rm -- "$_DATA/pages${page}#attachments/$attachment_delete"
+ elif [ "$action" = delete -a "$SESSION_ID" = "$tsid" ] && acl_write "${page}"; then
+ set --
+ n="$(POST_COUNT select)"; while [ $n -gt 0 ]; do
+ delete="$(POST select $n |PATH)"
+ set -- "$@" "pages${page}#attachments/${delete##*/}"
+ n=$((n - 1))
+ done
+ if [ "$REV_ATTACHMENTS" = true ]; then
+ git -C "$_DATA" rm -- "$@"
+ git -C "$_DATA" commit -qm \
+ "Attachment to # $page # deleted by @ $USER_NAME @" -- "$@"
+ else
+ rm -- "$@"
+ fi
REDIRECT "${_BASE}${PATH_INFO}"
- elif [ "$attachment_delete" ]; then
+ elif [ "$action" = delete ]; then
printf 'Refresh: %i\r\n' 4
theme_error 403
return 0
+ # elif [ "$attachment_delete" -a "$SESSION_ID" = "$tsid" ]; then
+ # if [ "$REV_ATTACHMENTS" = true ]; then
+ # git -C "$_DATA" rm -- \
+ # "$_DATA/pages${page}#attachments/$attachment_delete"
+ # git -C "$_DATA" commit -qm \
+ # "Attachment to # $page # deleted by @ $USER_NAME @" -- \
+ # "$_DATA/pages${page}#attachments/$attachment_delete"
+ # else
+ # rm -- "$_DATA/pages${page}#attachments/$attachment_delete"
+ # fi
+ # REDIRECT "${_BASE}${PATH_INFO}"
+ # elif [ "$attachment_delete" ]; then
+ # printf 'Refresh: %i\r\n' 4
+ # theme_error 403
+ # return 0
elif ! acl_read "${page}"; then
theme_error 403
return 0