From: Paul Hänsch Date: Wed, 28 Apr 2021 08:58:27 +0000 (+0200) Subject: Merge commit '6455a7f85522fd319caa8cb7cffa93b4ee9ca4b9' X-Git-Url: https://git.plutz.net/?p=confetti;a=commitdiff_plain;h=028ca40e8f741f3bf7acbba15d61e4479ab570d2;hp=-c Merge commit '6455a7f85522fd319caa8cb7cffa93b4ee9ca4b9' --- 028ca40e8f741f3bf7acbba15d61e4479ab570d2 diff --combined cgilite/common.css index 9e72c16,f9b17ad..f9b17ad --- a/cgilite/common.css +++ b/cgilite/common.css @@@ -60,7 -60,7 +60,7 @@@ h2 { font-size: 1.125em; select, input, button, textarea, a.button { display: inline-block; - background-color: #FFF; + color: #000; background-color: #FFF; border: .5pt solid; padding: .25em .75em; vertical-align: text-bottom; @@@ -87,6 -87,20 +87,20 @@@ input + label margin-left: .375em; } + @media print { + @page { margin: 20mm; } + + h1 { text-align: center; } + + h1, h2, h3, h4, h5, h6, form legend { + page-break-inside: avoid; + page-break-after: avoid; + page-break-before: auto; + } + li { page-break-inside: avoid; } + th, dt { page-break-after: avoid; } + } + /* ======= End Generic Styles ======= */ /* ======= Common Styles ======= */ @@@ -97,8 -111,7 +111,7 @@@ bottom: -100%; left: 50%; transform: translate(-50%, 0); content: attr(tooltip); padding: .5em; - background-color: #FFC; - color: #000; + color: #000; background-color: #FFC; border: .5pt solid; z-index: 1; } @@@ -107,7 -120,7 +120,7 @@@ input[type=radio].tab { display: none; input[type=radio].tab + label { display: table-cell; padding: .5em 1em; - background-color: #EEE; + color: #000; background-color: #EEE; border: .5pt solid; } input[type=radio].tab:checked + label { diff --combined cgilite/session.sh index 93cc2f4,b52ac0a..b52ac0a --- a/cgilite/session.sh +++ b/cgilite/session.sh @@@ -86,3 -86,20 +86,20 @@@ update_session() SESSION_KEY="$(update_session)" SET_COOKIE 0 session="$SESSION_KEY" Path=/ SameSite=Strict HttpOnly SESSION_ID="${SESSION_KEY%% *}" + + SESSION_BIND() { + local key="$1" value="$2" + SET_COOKIE session "$key"="${value} $(session_mac "$value" "$SESSION_ID")" + } + + SESSION_VAR() { + local key="$1" + local value sig + value="$(COOKIE "$key")" + sig="${value##* }" value="${value% *}" + if [ "$sig" = "$(session_mac "$value" "$SESSION_ID")" ]; then + printf %s\\n "$value" + else + return 1 + fi + } diff --combined cgilite/storage.sh index 7f70e64,355bd56..355bd56 --- a/cgilite/storage.sh +++ b/cgilite/storage.sh @@@ -29,18 -29,18 +29,18 @@@ LOCK() lock="${1}.lock" timeout="${2-20}" if [ \! -w "${lock%/*}" ] || [ -e "$lock" -a \! -d "$lock" ]; then - printf 'Impossible to get lock: %s\n' "$lock" >&2 + debug "Impossible to get lock: $lock" return 1 fi while ! mkdir "$lock" 2>&-; do block="$(cat "$lock/pid" || printf 1)" if ! { ps -eo pid |grep -qwF "$block"; }; then - printf 'Overriding stale lock: %s\n' "$lock" >&2 + debug "Overriding stale lock: $lock" break fi if [ $timeout -le 0 ]; then - printf 'Timeout while trying to get lock: %s\n' "$lock" >&2 + debug "Timeout while trying to get lock: $lock" return 1 fi timeout=$((timeout - 1)) @@@ -56,31 -56,22 +56,22 @@@ RELEASE() if [ "$(cat "$lock/pid")" = "$$" ]; then rm "$lock/pid" if ! rmdir "$lock"; then - printf 'Cannot remove tainted lock: %s\n' "$lock" >&2 + debug "Cannot remove tainted lock: $lock" printf '%i\n' $$ >"${lock}/pid" return 1 fi return 0 else - printf 'Refusing to release foreign lock: %s\n' "$lock" >&2 + debug "Refusing to release foreign lock: $lock" return 1 fi } - STRING=' - s;\\;\\\\;g; - s;\n;\\n;g; - s;\t;\\t;g; - s;\r;\\r;g; - s;\+;\\+;g; - s; ;+;g; - ' - - STRING_OLD(){ - { [ $# -eq 0 ] && cat || printf %s "$*"; } \ - | sed -E ':X; $!{N;bX;}'"$STRING" - } - + # STRING=' + # s;\\;\\\\;g; s;\t;\\t;g; + # s;\n;\\n;g; s;\r;\\r;g; + # s;\+;\\+;g; s; ;+;g; + # ' STRING(){ local in out='' [ $# -gt 0 ] && in="$*" || in="$(cat)" @@@ -96,7 -87,6 +87,6 @@@ printf '%s' "$out" } - UNSTRING=' :UNSTRING_X s;((^|[^\\])(\\\\)*)\\n;\1\n;g; @@@ -107,10 -97,6 +97,6 @@@ s;((^|[^\\])(\\\\)*)\\\+;\1+;g; s;\\\\;\\;g; ' - UNSTRING_OLD(){ - { [ $# -eq 0 ] && cat || printf %s "$*"; } \ - | sed -E "$UNSTRING" - } UNSTRING(){ local in out='' [ $# -gt 0 ] && in="$*" || in="$(cat)" @@@ -119,7 -105,7 +105,7 @@@ \\n*) out="${out}${BR}"; in="${in#\\n}" ;; \\r*) out="${out}${CR}"; in="${in#\\r}" ;; \\t*) out="${out} "; in="${in#\\t}" ;; - \\+) out="${out}+"; in="${in#\\+}" ;; + \\+*) out="${out}+"; in="${in#\\+}" ;; +*) out="${out} "; in="${in#+}" ;; \\*) in="${in#\\}" ;; *) out="${out}${in%%[\\+]*}"; in="${in#"${in%%[\\+]*}"}" ;; @@@ -127,3 -113,95 +113,95 @@@ printf '%s' "$out" } + DBM() { + local file="$1" cmd="$2" + local k v key value + shift 2; + + case "$cmd" in + check|contains) + key="$(STRING "$1")" + while read -r k v; do if [ "$k" = "$key" ]; then + return 0 + fi; done <"$file" 2>&- + return 1 + ;; + get) + key="$(STRING "$1")" + while read -r k v; do if [ "$k" = "$key" ]; then + UNSTRING "$v" + return 0 + fi; done <"$file" 2>&- + return 1 + ;; + set|store) + key="$(STRING "$1")" value="$(STRING "$2")" + LOCK "$file" || return 1 + { while read -r k v; do + [ "$k" = "$key" ] || printf '%s\t%s\n' "$k" "$v" + done <"$file" 2>&- + printf '%s\t%s\n' "$key" "$value" + } >"${file}.$$.tmp" + mv "${file}.$$.tmp" "${file}" + RELEASE "$file" + return 0 + ;; + add|insert) + k="$1" key="$(STRING "$1")" value="$(STRING "$2")" + LOCK "$file" || return 1 + if DBM "$file" check "$k"; then + RELEASE "$file" + return 1 + else + printf '%s\t%s\n' "$key" "$value" >>"${file}" + RELEASE "$file" + return 0 + fi + ;; + update|replace) + k="$1" key="$(STRING "$1")" value="$(STRING "$2")" + LOCK "$file" || return 1 + if ! DBM check "$k"; then + RELEASE "$file" + return 1 + fi + { while read -r k v; do + [ "$k" = "$key" ] \ + && printf '%s\t%s\n' "$key" "$value" \ + || printf '%s\t%s\n' "$k" "$v" + done <"$file" 2>&- + } >"${file}.$$.tmp" + mv "${file}.$$.tmp" "${file}" + RELEASE "$file" + return 0 + ;; + append) + key="$(STRING "$1")" value="$(STRING "$2")" + LOCK "$file" || return 1 + if ! DBM check "$1"; then + RELEASE "$file" + return 1 + fi + { while read -r k v; do + [ "$k" = "$key" ] \ + && printf '%s\t%s\n' "$key" "$v$value" \ + || printf '%s\t%s\n' "$k" "$v" + done <"$file" 2>&- + } >"${file}.$$.tmp" + mv "${file}.$$.tmp" "${file}" + RELEASE "$file" + return 0 + ;; + delete|remove) + key="$(STRING "$1")" + LOCK "$file" || return 1 + { while read -r k v; do + [ "$k" = "$key" ] || printf '%s\t%s\n' "$k" "$v" + done <"$file" 2>&- + } >"${file}.$$.tmp" + mv "${file}.$$.tmp" "${file}" + RELEASE "$file" + return 0 + ;; + esac + }