s4

changeset 697:4461d596150d

HEADS UP: session storing schema changed, which allows multi sessions
author HIROSE Yuuji <yuuji@gentei.org>
date Thu, 21 May 2020 23:33:40 +0900
parents 4ebe5184a3e3
children b036a06cad90
files s4-funcs.sh
diffstat 1 files changed, 43 insertions(+), 7 deletions(-) [+]
line diff
     1.1 --- a/s4-funcs.sh	Thu May 21 12:08:27 2020 +0900
     1.2 +++ b/s4-funcs.sh	Thu May 21 23:33:40 2020 +0900
     1.3 @@ -658,13 +658,25 @@
     1.4    query "select gecos from gecoses where name=$u;"
     1.5  )
     1.6  setpar() {
     1.7 +  # 2020/5/14 Add dirty code to cache essential params
     1.8 +  case "$1" in
     1.9 +    user)	_user="$v"; err SETPARRRRR:user=$v ;;
    1.10 +    skey)	_skey="$v"; err SETPARRRRR:skey=$v ;;
    1.11 +  esac
    1.12    query "replace into par values('$session', '$1', '$2', \"$3\");"
    1.13  }
    1.14  replpar() {
    1.15    query "update par set val=\"$3\" where sessid='$session' and var='$1' and type='$2';"
    1.16  }
    1.17  getpar() {
    1.18 -  val=`query "select val from par where var='$1' and sessid='$session' $2;"`
    1.19 +  # err GETPAR=$1, _user=$_user
    1.20 +  val=""
    1.21 +  case "$1" in	# Dirty cache mechanism for high-load average
    1.22 +    user)	val=$_user
    1.23 +		err GETPAR____USER=$val;;
    1.24 +    skey)	val=$_skey; err SKEY=$val ;;
    1.25 +  esac
    1.26 +  val=${val:-`query "select val from par where var='$1' and sessid='$session' $2;"`}
    1.27  ## err getpar/val1: "val=[$val]"
    1.28    if [ -z "$val" ]; then
    1.29      val=`query "select val from cookie where var='$1' and sessid='$session' $2;"`
    1.30 @@ -681,7 +693,26 @@
    1.31  ## err getpar/ret: "val=[$val]"
    1.32    echo "$val"
    1.33  }
    1.34 -
    1.35 +setskey() {
    1.36 +  # For quick response...(?)
    1.37 +  query "REPLACE INTO $sesstb VALUES('$1', '$2', datetime('now', 'localtime', '$timeout'));"
    1.38 +}
    1.39 +chkskey() {
    1.40 +  # $1=sesskey, $user=LoginUserName
    1.41 +  test -z "$1" && return 1
    1.42 +  rowid=`query "SELECT rowid FROM $sesstb WHERE user='$user' AND skey = '$1';"` || return 2
    1.43 +  err CHKskey:rowid=$rowid
    1.44 +  if [ -n "$rowid" ]; then
    1.45 +     query "UPDATE $sesstb SET expire=datetime('now', 'localtime', '$timeout') WHERE rowid=$rowid;"	# Errors can be ignored
    1.46 +     return 0
    1.47 +  fi
    1.48 +  return 1
    1.49 +}
    1.50 +resetskey() {
    1.51 +  if [ -n "$_user" ]; then
    1.52 +    query "DELETE FROM $sesstb WHERE user='$_user';"
    1.53 +  fi
    1.54 +}
    1.55  getpartype() {
    1.56    query "select type from par where var='$1' and sessid='$session' $2;"
    1.57  }
    1.58 @@ -1157,6 +1188,10 @@
    1.59    for kv in `echo $HTTP_COOKIE|sed 's/[;, ]/ /g'`; do
    1.60      k="${kv%%=*}"
    1.61      v="`echo ${kv#*=}|nkf -Ww -mQ|sed -e 's/\"/\"\"/g'`"
    1.62 +    case "$k" in
    1.63 +      user)	_user="$v"; ;; ## err FromCookie:user=$_user ;;
    1.64 +      skey)	_skey="$v"; ;; ## err FromCookie:skey=$_skey ;;
    1.65 +    esac
    1.66      query "replace into cookie values('$session', '$k', 'string', \"$v\");"
    1.67    done
    1.68  }
    1.69 @@ -1290,10 +1325,10 @@
    1.70  checkauth() {
    1.71    user=`getpar user`
    1.72    skc=`getpar skey`		# from cookie
    1.73 -  [ -z "$user" ] && return 3
    1.74 -  skey="`getpwfield $user skey`"
    1.75 -  if [ -n "$skey" ]; then
    1.76 -    if [ x"$skey" = x"$skc" ]; then
    1.77 +  [ -z "$user" ] && return 2
    1.78 +  ##skey="`getpwfield $user skey`"
    1.79 +  if [ -n "$skc" ]; then
    1.80 +    if chkskey "$skc"; then
    1.81        return 0
    1.82      fi
    1.83    fi
    1.84 @@ -1312,7 +1347,7 @@
    1.85    # putheader; echo; echo user=$user, db=$dbpswd, enc=$encpswd
    1.86    if pwcheck "$pswd"; then
    1.87      newsession=`genrandom 50`
    1.88 -    if dbsetbyid user "$user" skey "$newsession" &&
    1.89 +    if setskey "$user" "$newsession" &&
    1.90  	dbsetbyid user "$user" login "`date '+%F %T'`"; then
    1.91        gencookie "user=$user" "skey=$newsession"
    1.92        return 0
    1.93 @@ -1324,6 +1359,7 @@
    1.94  }
    1.95  showlogin() {
    1.96    args=`echo $myargs|tr ' ' '+'`
    1.97 +  test -z "$args" && resetskey
    1.98    s4name=${S4NAME:-s4}
    1.99    ( sed '/^<body/q' $layout/html.m4.html
   1.100      cat $layout/login.m4.html