X-Git-Url: https://git.plutz.net/?p=confetti;a=blobdiff_plain;f=index.cgi;h=1c4e7175ddf83f25dae4d7dc84ef7dd125734433;hp=5dc55be28dab259b079cb0e6d247249e0f93cdc8;hb=HEAD;hpb=9a13e82c7e9d0f29ab18df4407c04d0eafdb0aa6 diff --git a/index.cgi b/index.cgi index 5dc55be..71edd85 100755 --- a/index.cgi +++ b/index.cgi @@ -3,11 +3,16 @@ for n in "$@"; do case ${n%%=*} in data) _DATA="${n#data=}";; exec) _EXEC="${n#exec=}";; - noerr) exec 2>&-;; + base) _BASE="${n#base=}";; + debug) DEBUG="${n#debug=}";; esac; done -[ -z "${_EXEC%/}" ] && _EXEC="$(realpath "${0%/*}")" || _EXEC="${_EXEC%/}" -[ -z "${_DATA%/}" ] && _DATA=. || _DATA="${_DATA%/}" +[ ! "${_EXEC%/}" ] && _EXEC="$(realpath "${0%/*}")" || _EXEC="${_EXEC%/}" +[ ! "${_DATA%/}" ] && _DATA="${PWD%/}" || _DATA="${_DATA%/}" +_BASE="${_BASE%/}" +[ "$DEBUG" ] && exec 2>>"$DEBUG" + +mkdir -p "${_DATA}/cache" "${_DATA}/mappings" "${_DATA}/export" "${_DATA}/lock" "${_DATA}/ical" "${_DATA}/vcard" debug() { local dbg=/dev/stderr @@ -23,9 +28,14 @@ debug() { . "$_EXEC/cgilite/cgilite.sh" . "$_EXEC/cgilite/session.sh" +. "$_EXEC/l10n.sh" + _PATH="$(PATH "/${PATH_INFO}")" +_PATH="${_PATH#${_BASE}}" ACTION="$(GET a)" +SESSION_COOKIE + message="$(COOKIE message)" [ "$message" ] && SET_COOKIE 0 message='' @@ -47,16 +57,19 @@ yield_page() { [html [head [title Confetti] [meta name="viewport" content="width=device-width"] - [link rel="stylesheet" type="text/css" href="/style.css"] - ' + [link rel="stylesheet" type="text/css" href="%s/cgilite/common.css"] + [link rel="stylesheet" type="text/css" href="%s/style.css"] + ' "${_BASE}" "${_BASE}" [ -n "$style" ] && printf ' [link rel="stylesheet" type="text/css" href="%s"] ' "$style" printf ' ] [body #top class="%s" ' "$class" - cat + printf '[ul .menu [li [a "%s/cards/" . %s]][li [a "%s/courses/" . %s]][li [a "%s/ledgers/" . %s]]]' \ + "${_BASE}" "$(l10n cards)" "${_BASE}" "$(l10n courses)" "${_BASE}" "$(l10n ledgers)" [ "$message" ] && printf '[p #message\n%s\n]' "$(l10n "$message")" + cat printf '] ]' } \ | "${_EXEC}/cgilite/html-sh.sed" @@ -65,17 +78,27 @@ yield_page() { topdir="${_PATH#/}" topdir="/${topdir%%/*}" -if [ "${_PATH}" = / ]; then - REDIRECT /cards/ -elif [ -d "${_EXEC}/${_PATH}" -a -x "${_EXEC}/${_PATH}/index.cgi" ]; then - . "${_EXEC}/${_PATH}/index.cgi" -elif [ ! -d "${_EXEC}/${_PATH}" -a -x "${_EXEC}/${_PATH}" ]; then - . "${_EXEC}/${_PATH}" -elif [ ! -x "${_EXEC}/${_PATH}" -a -r "${_EXEC}/${_PATH}" ]; then - . "$_EXEC/cgilite/file.sh" - FILE "${_EXEC}/${_PATH}" -elif [ -d "${_EXEC}/${topdir}" -a -x "${_EXEC}/${topdir}/index.cgi" ]; then - . "${_EXEC}/${topdir}/index.cgi" -else - printf 'Status: 404 Not Found\r\nContent-Length: 0\r\n\r\n' -fi +case ${_PATH} in + "/") REDIRECT "${_BASE}/cards/" + ;; + "/export"/*.pdf) . "$_EXEC/cgilite/file.sh" + FILE "${_DATA}/${_PATH}" "application/pdf" + ;; + "/export"/*) . "$_EXEC/cgilite/file.sh" + FILE "${_DATA}/${_PATH}" + ;; + *) + if [ -d "${_EXEC}/${_PATH}" -a -x "${_EXEC}/${_PATH}/index.cgi" ]; then + . "${_EXEC}/${_PATH}/index.cgi" + elif [ -f "${_EXEC}/${_PATH}" -a -x "${_EXEC}/${_PATH}" ]; then + . "${_EXEC}/${_PATH}" + elif [ -f "${_EXEC}/${_PATH}" -a -r "${_EXEC}/${_PATH}" ]; then + . "$_EXEC/cgilite/file.sh" + FILE "${_EXEC}/${_PATH}" + elif [ -d "${_EXEC}/${topdir}" -a -x "${_EXEC}/${topdir}/index.cgi" ]; then + . "${_EXEC}/${topdir}/index.cgi" + else + printf '%s\r\n' 'Status: 404 Not Found' 'Content-Length: 0' '' + fi + ;; +esac