From b500b09d321e9657343e6d407c78d23c8da4b591 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Sun, 12 Sep 2021 19:46:40 +0200 Subject: [PATCH 1/1] Squashed 'cgilite/' changes from dcab989..2218e82 2218e82 Set _EXEC _DATA and _BASE variables git-subtree-dir: cgilite git-subtree-split: 2218e82add4c42ca6ec30c49e0b9cded4dc1e14f --- cgilite.sh | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/cgilite.sh b/cgilite.sh index 7f828dd..6a4a648 100755 --- a/cgilite.sh +++ b/cgilite.sh @@ -25,10 +25,33 @@ # set -o posix # ksh, not portable setopt -o OCTAL_ZEROES 2>&- +# Integrated webserver request timeout +cgilite_timeout=2 + +# General environment variables +# $_EXEC - directory containing application itself +# $_DATA - direcotry where application data may be stored +# $_BASE - optional prefix for http path, e.g. "/myapp" +# +# Programmers should take care to use those variables throughout the +# application. +# Variables may be set via CLI argument, in environment, or left as default. + +for cgilite_arg in "$@"; do case $cgilite_arg in + --exec=*) _EXEC="${cgilite_arg#*=}";; + --data=*) _DATA="${cgilite_arg#*=}";; + --base=*) _BASE="${cgilite_arg#*=}";; +esac; done +unset cgilite_arg + +_EXEC="${EXEC:-${0%/*}}" +_DATA="${DATA:-.}" +_EXEC="${_EXEC%/}" _DATA="${_DATA%/}" _BASE="${BASE%/}" + +# Carriare Return and Line Break characters for convenience CR=" " BR=' ' -cgilite_timeout=2 PATH(){ local str seg out @@ -175,6 +198,8 @@ fi debug(){ [ $# -gt 0 ] && printf '%s\n' "$@" >&2 || tee -a /dev/stderr; } [ "${DEBUG+x}" ] && env >&2 +# general helper functions, see GET, POST, and REF below + cgilite_count(){ printf %s "&$1" \ | grep -oE '&'"$2"'=[^&]*' \ @@ -200,6 +225,17 @@ cgilite_keys(){ | sort -u } +# Read arguments from GET, POST, or the query string of the referrer (REF). +# Example: +# GET varname n +# +# where n is number for the Nth occurence of a variable and defaults to 1 +# +# *_COUNT varname +# -> returns number of ocurences +# *_KEYS +# -> returns list of available varnames + GET(){ cgilite_value "${QUERY_STRING}" "$@"; } GET_COUNT(){ cgilite_count "${QUERY_STRING}" $1; } GET_KEYS(){ cgilite_keys "${QUERY_STRING}"; } @@ -228,6 +264,7 @@ HEADER(){ } COOKIE(){ + # Read value of cookie HEX_DECODE % "$( HEADER Cookie \ | grep -oE '(^|; ?)'"$1"'=[^;]*' \ @@ -302,6 +339,7 @@ SET_COOKIE(){ } REDIRECT(){ + # Trigger redirct and terminate script printf '%s: %s\r\n' \ Status "303 See Other" \ Content-Length 0 \ -- 2.39.2