s4
changeset 756:a4523e15dfd6 feature-world
s/annex/world/
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Sat, 06 Jun 2020 11:43:42 +0900 |
parents | 1a8291d7fa3d |
children | 2d45b0478d45 |
files | examples/common/default/default.css s4-annex.sh s4-funcs.sh s4-world.sh |
diffstat | 4 files changed, 77 insertions(+), 78 deletions(-) [+] |
line diff
1.1 --- a/examples/common/default/default.css Sat Jun 06 11:21:01 2020 +0900 1.2 +++ b/examples/common/default/default.css Sat Jun 06 11:43:42 2020 +0900 1.3 @@ -343,8 +343,6 @@ 1.4 li.casmenu:hover div, li.casmenu:active div, 1.5 li.casmenu div:hover, li.casmenu div:active 1.6 {display: block;} 1.7 - 1.8 - 1.9 1.10 /* 1.11 * PR Web
2.1 --- a/s4-annex.sh Sat Jun 06 11:21:01 2020 +0900 2.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 2.3 @@ -1,72 +0,0 @@ 2.4 -#!/bin/sh 2.5 - 2.6 -if [ -z "$S4MASTERDB" -o ! -s "$S4MASTERDB" ]; then 2.7 - return 2.8 -fi 2.9 -if [ "$db" -ef "$S4MASTERDB" ]; then 2.10 - return # Points to the same file 2.11 -fi 2.12 - 2.13 -# Now S4ANNEX mode is ACTIVE 2.14 -# sessdb=`dirname $S4MASTERDB`/sess.sq3 2.15 -## skey="skey-`basename $mydir`" 2.16 -S4NAME="[$S4WORLD]$S4NAME" 2.17 -syncflag=${db%.*}.synctime 2.18 -userupdateflag=`dirname $S4MASTERDB`/`basename $userupdateflag` 2.19 -test ! -e "$userupdateflag" && return 2.20 -test "$syncflag" -nt "$userupdateflag" && return 2.21 - 2.22 -# for sub.sq3 2.23 -# 2.24 -# main: user: 'taro', 'hanako', 'shige' 2.25 -# sub: user: 'taro', 'hanako', 'shige' 2.26 -# sub2: user_s: ('taro', 't'), ('hanako', 'h'), ('shige', 's') 2.27 -# then update 2.28 -# 2.29 - 2.30 -## sqlite3 -cmd '.timer 1' -cmd '.echo 1' $db <<EOF 2.31 -err "Starting account synchronization" 2.32 -err "db=$db mas=$S4MASTERDB sessdb=$sessdb" 2.33 -num=$(sqlite3 -bail -cmd 'PRAGMA FOREIGN_KEYS=on' $db <<EOF 2.34 -ATTACH DATABASE "$S4MASTERDB" AS m; 2.35 -CREATE TABLE IF NOT EXISTS user(name, primary key(name)); 2.36 -BEGIN; 2.37 -DElETE FROM main.user WHERE rowid NOT IN (SELECT rowid FROM m.user); 2.38 -INSERT INTO main.user(rowid, name) 2.39 - SELECT rowid, name FROM m.user 2.40 - WHERE m.user.rowid NOT IN (SELECT rowid FROM user); 2.41 -UPDATE user SET name = (SELECT name FROM m.user WHERE main.user.rowid=m.user.rowid); 2.42 -DELETE FROM main.user_s WHERE rowid NOT IN (SELECT rowid FROM m.user_s); 2.43 -REPLACE INTO main.user_s(rowid, name, key, type, val, bin) 2.44 - SELECT rowid,* FROM m.user_s; 2.45 -DELETE FROM main.user_m WHERE rowid NOT IN (SELECT rowid FROM m.user_m); 2.46 -REPLACE INTO main.user_m(rowid, name, key, type, val, bin) 2.47 - SELECT rowid,* FROM m.user_m 2.48 - WHERE key NOT LIKE '%cache%'; 2.49 -END; 2.50 - 2.51 -/* Compare user tables */ 2.52 -WITH master AS ( 2.53 - SELECT p.rowid,* FROM m.user p 2.54 - NATURAL LEFT JOIN m.user_s 2.55 - NATURAL LEFT JOIN m.user_m 2.56 -), annex AS ( 2.57 - SELECT p.rowid,* FROM user p 2.58 - NATURAL LEFT JOIN user_s 2.59 - NATURAL LEFT JOIN user_m 2.60 -), m_a AS ( 2.61 - SELECT * FROM master EXCEPT SELECT * FROM annex 2.62 -), a_m AS ( 2.63 - SELECT * FROM annex EXCEPT SELECT * FROM master 2.64 -) SELECT (SELECT count(*) FROM m_a) + (SELECT count(*) FROM a_m); 2.65 - 2.66 --- SELECT * FROM annex; 2.67 --- SELECT rowid,* FROM m.user LIMIT 10; 2.68 --- SELECT rowid,* FROM user WHERE rowid NOT IN (SELECT rowid FROM m.user); 2.69 -DETACH DATABASE m; 2.70 -EOF 2.71 -) 2.72 -if [ $num -eq 0 ]; then 2.73 - touch $syncflag 2.74 -fi 2.75 -return $num
3.1 --- a/s4-funcs.sh Sat Jun 06 11:21:01 2020 +0900 3.2 +++ b/s4-funcs.sh Sat Jun 06 11:43:42 2020 +0900 3.3 @@ -87,10 +87,9 @@ 3.4 *) touchpanel="" ;; 3.5 esac 3.6 3.7 -# If S4MASTERDB is set, behave as ANNEX s4 3.8 +# If S4MASTERDB is set, behave in another world 3.9 if [ -n "$S4MASTERDB" -a -s "$S4MASTERDB" ]; then 3.10 - # $S4ANNEX is set after s4-annex setup 3.11 - . ./s4-annex.sh 2>> tmp/debug.out 3.12 + . ./s4-world.sh 2>> tmp/debug.out 3.13 fi 3.14 v="" 3.15 for i in $S4WORLDS; do 3.16 @@ -1238,10 +1237,10 @@ 3.17 for kv in `echo $HTTP_COOKIE|sed 's/[;, ]/ /g'`; do 3.18 k="${kv%%=*}" 3.19 v="`echo ${kv#*=}|nkf -Ww -mQ|sed -e 's/\"/\"\"/g'`" 3.20 -err "GetCookie: $k=[$v]" 3.21 + ## err "GetCookie: $k=[$v]" 3.22 case "$k" in 3.23 user) _user="$v" ;; 3.24 - skey) _skey="$v"; k=skey ;; 3.25 + skey) _skey="$v" ;; 3.26 esac 3.27 query "replace into cookie values('$session', '$k', 'string', \"$v\");" 3.28 done 3.29 @@ -1348,7 +1347,7 @@ 3.30 # $1=passwd 3.31 dbpswd=`getpwfield $user pswd` 3.32 encpswd=`mycrypt "$1" "$dbpswd"` 3.33 - # err user=$user, pswd=$1, db=$dbpswd, enc=$encpswd 3.34 + ## err user=$user, pswd=$1, db=$dbpswd, enc=$encpswd 3.35 [ x"$dbpswd" = x"$encpswd" ] 3.36 } 3.37 mypwhash() { 3.38 @@ -1401,7 +1400,6 @@ 3.39 newsession=`genrandom 34` 3.40 if setskey "$user" "$newsession" && 3.41 dbsetbyid user "$user" login "`date '+%F %T'`"; then 3.42 - # err gencookie "user=$user" "skey=$newsession" 3.43 gencookie "user=$user" "skey=$newsession" 3.44 return 0 3.45 else
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/s4-world.sh Sat Jun 06 11:43:42 2020 +0900 4.3 @@ -0,0 +1,72 @@ 4.4 +#!/bin/sh 4.5 + 4.6 +if [ -z "$S4MASTERDB" -o ! -s "$S4MASTERDB" ]; then 4.7 + return 4.8 +fi 4.9 +if [ "$db" -ef "$S4MASTERDB" ]; then 4.10 + return # Points to the same file 4.11 +fi 4.12 + 4.13 +# Now Another world is ACTIVE 4.14 +# sessdb=`dirname $S4MASTERDB`/sess.sq3 4.15 +## skey="skey-`basename $mydir`" 4.16 +S4NAME="[$S4WORLD]$S4NAME" 4.17 +syncflag=${db%.*}.synctime 4.18 +userupdateflag=`dirname $S4MASTERDB`/`basename $userupdateflag` 4.19 +test ! -e "$userupdateflag" && return 4.20 +test "$syncflag" -nt "$userupdateflag" && return 4.21 + 4.22 +# for sub.sq3 4.23 +# 4.24 +# main: user: 'taro', 'hanako', 'shige' 4.25 +# sub: user: 'taro', 'hanako', 'shige' 4.26 +# sub2: user_s: ('taro', 't'), ('hanako', 'h'), ('shige', 's') 4.27 +# then update 4.28 +# 4.29 + 4.30 +## sqlite3 -cmd '.timer 1' -cmd '.echo 1' $db <<EOF 4.31 +err "Starting account synchronization" 4.32 +err "db=$db mas=$S4MASTERDB sessdb=$sessdb" 4.33 +num=$(sqlite3 -bail -cmd 'PRAGMA FOREIGN_KEYS=on' $db <<EOF 4.34 +ATTACH DATABASE "$S4MASTERDB" AS m; 4.35 +CREATE TABLE IF NOT EXISTS user(name, primary key(name)); 4.36 +BEGIN; 4.37 +DElETE FROM main.user WHERE rowid NOT IN (SELECT rowid FROM m.user); 4.38 +INSERT INTO main.user(rowid, name) 4.39 + SELECT rowid, name FROM m.user 4.40 + WHERE m.user.rowid NOT IN (SELECT rowid FROM user); 4.41 +UPDATE user SET name = (SELECT name FROM m.user WHERE main.user.rowid=m.user.rowid); 4.42 +DELETE FROM main.user_s WHERE rowid NOT IN (SELECT rowid FROM m.user_s); 4.43 +REPLACE INTO main.user_s(rowid, name, key, type, val, bin) 4.44 + SELECT rowid,* FROM m.user_s; 4.45 +DELETE FROM main.user_m WHERE rowid NOT IN (SELECT rowid FROM m.user_m); 4.46 +REPLACE INTO main.user_m(rowid, name, key, type, val, bin) 4.47 + SELECT rowid,* FROM m.user_m 4.48 + WHERE key NOT LIKE '%cache%'; 4.49 +END; 4.50 + 4.51 +/* Compare user tables */ 4.52 +WITH master AS ( 4.53 + SELECT p.rowid,* FROM m.user p 4.54 + NATURAL LEFT JOIN m.user_s 4.55 + NATURAL LEFT JOIN m.user_m 4.56 +), thisworld AS ( 4.57 + SELECT p.rowid,* FROM user p 4.58 + NATURAL LEFT JOIN user_s 4.59 + NATURAL LEFT JOIN user_m 4.60 +), m_a AS ( 4.61 + SELECT * FROM master EXCEPT SELECT * FROM thisworld 4.62 +), a_m AS ( 4.63 + SELECT * FROM thisworld EXCEPT SELECT * FROM master 4.64 +) SELECT (SELECT count(*) FROM m_a) + (SELECT count(*) FROM a_m); 4.65 + 4.66 +-- SELECT * FROM thisworld; 4.67 +-- SELECT rowid,* FROM m.user LIMIT 10; 4.68 +-- SELECT rowid,* FROM user WHERE rowid NOT IN (SELECT rowid FROM m.user); 4.69 +DETACH DATABASE m; 4.70 +EOF 4.71 +) 4.72 +if [ $num -eq 0 ]; then 4.73 + touch $syncflag 4.74 +fi 4.75 +return $num