X-Git-Url: http://git.plutz.net/?p=cgilite;a=blobdiff_plain;f=session.sh;h=12788d3eb534292349b8146ac1c50db80118398b;hp=8ed8d8808e0655cc8b89c6ce7bb0df318b0b571f;hb=147c7222675fd027873faa7e921e2679d99e71cc;hpb=506e2f9f146c13919e65a9bbbd844391b96bbe9d diff --git a/session.sh b/session.sh index 8ed8d88..12788d3 100755 --- a/session.sh +++ b/session.sh @@ -3,6 +3,9 @@ [ -n "$include_session" ] && return 0 include_session="$0" +_DATE="$(date +%s)" +SESSION_TIMEOUT="${SESSION_TIMEOUT:-7200}" + server_key(){ IDFILE="${IDFILE:-${_DATA:-.}/serverkey}" if [ "$(stat -c %s "$IDFILE")" -ne 512 ] || ! cat "$IDFILE"; then @@ -27,7 +30,7 @@ randomid(){ } timeid(){ - d=$(($(date +%s) % 4294967296)) + d=$(($_DATE % 4294967296)) { printf "$( printf \\%o \ $((d / 16777216 % 256)) \ @@ -54,28 +57,27 @@ update_session(){ local session sid time sig serverkey checksig IFS=- read -r sid time sig <<-END - $(COOKIE session) + $(POST session_key || COOKIE session) END serverkey="$(server_key)" checksig="$(printf %s "$sid" "$time" "$serverkey" | sha256sum)" checksig="${checksig%% *}" - d=$(date +%s) if ! [ "$checksig" = "$sig" \ - -a "$time" -ge "$d" \ + -a "$time" -ge "$_DATE" \ -a "$(printf %s "$sid" |checkid)" ] 2>&- then - debug Setting up new session + debug "Setting up new session" sid="$(randomid)" fi - time=$(( $(date +%s) + 7200 )) + time=$(( $_DATE + $SESSION_TIMEOUT )) sig="$(printf %s "$sid" "$time" "$serverkey" |sha256sum)" sig="${sig%% *}" printf %s\\n "${sid}-${time}-${sig}" } -SESSION_ID="$(update_session)" -SET_COOKIE 0 session="$SESSION_ID" Path=/ SameSite=Strict HttpOnly -SESSION_ID="${SESSION_ID%%-*}" +SESSION_KEY="$(update_session)" +SET_COOKIE 0 session="$SESSION_KEY" Path=/ SameSite=Strict HttpOnly +SESSION_ID="${SESSION_KEY%%-*}"