initial commit
This commit is contained in:
commit
5b839e0543
174 changed files with 12261 additions and 0 deletions
393
werc/bin/werclib.rc
Executable file
393
werc/bin/werclib.rc
Executable file
|
@ -0,0 +1,393 @@
|
|||
fn get_lib_file {
|
||||
if(! ~ $#sitedir 0 && test -f $sitedir/_werc/lib/$1)
|
||||
echo -n $sitedir/_werc/lib/$1
|
||||
if not if(! ~ $#masterSite 0 && test -f $sitesdir/$masterSite/_werc/lib/$1)
|
||||
echo -n $sitesdir/$masterSite/_werc/lib/$1
|
||||
if not if(test -f lib/$1)
|
||||
echo -n lib/$1
|
||||
if not if(~ $#* 2)
|
||||
echo -n $2
|
||||
if not
|
||||
status='Can''t find lib file: '$1
|
||||
}
|
||||
|
||||
fn template { awk -f bin/template.awk $* | rc $rcargs }
|
||||
|
||||
# Auth code
|
||||
# TODO: check http://cookies.lcs.mit.edu/pubs/webauth:tr.pdf
|
||||
allowed_user_chars='[a-zA-Z0-9_]'
|
||||
# Cookie format: WERC_USER: name:timestamp:hash(name.timestamp.password)
|
||||
# login_user can't be used from a template because it sets a cookie
|
||||
fn login_user {
|
||||
# Note: we set the cookie even if it is already there.
|
||||
if(get_user $*)
|
||||
set_cookie werc_user $"logged_user^':0:'^$"logged_password
|
||||
}
|
||||
|
||||
# Check login status, if called with group arg we check membership too
|
||||
fn check_user {
|
||||
get_user
|
||||
g=($* admin)
|
||||
_status=$status
|
||||
if(! ~ $"_status '')
|
||||
_status=(Not logged in: $"_status)
|
||||
if not if(! ~ $#* 0 && ! ~ $logged_user $* && ! grep -s '^'^$logged_user^'$' $werc_root/etc/users/$g/members >[2]/dev/null)
|
||||
_status=(User $logged_user not in: $*)
|
||||
status=$_status
|
||||
}
|
||||
|
||||
# If not logged in, try to get user login info from POST or from cookie
|
||||
fn get_user {
|
||||
if(~ $#logged_user 0) {
|
||||
if(~ $#* 2) {
|
||||
user_name=$1
|
||||
user_password=$2
|
||||
}
|
||||
if not if(~ $REQUEST_METHOD POST)
|
||||
get_post_args user_name user_password
|
||||
|
||||
if(~ $#user_name 0) {
|
||||
ifs=':' { cu=`{ifs=$difs {get_cookie werc_user} | tr -d $NEW_LINE} }
|
||||
if(! ~ $#cu 0) {
|
||||
user_name=$cu(1)
|
||||
user_password=$cu(3)
|
||||
}
|
||||
}
|
||||
auth_user $user_name $user_password
|
||||
}
|
||||
if not
|
||||
status=()
|
||||
}
|
||||
|
||||
# Check if user_name and user_password represent a valid user account
|
||||
# If valid, 'log in' by setting logged_user
|
||||
fn auth_user {
|
||||
user_name=$1
|
||||
user_password=$2
|
||||
|
||||
pfile=$werc_root/etc/users/$"user_name/password
|
||||
if(~ $#user_name 0 || ~ $#user_password 0)
|
||||
status=('Auth: missing user name or pass: '^$"user_name^' / '^$"user_password)
|
||||
if not if(! test -f $pfile)
|
||||
status=('Auth: cant find '^$pfile)
|
||||
if not if(! test -s $pfile || ! ~ $user_password `{cat $pfile})
|
||||
status=('Auth: Pass '$user_password' doesnt match '^`{cat $pfile})
|
||||
if not {
|
||||
logged_user=$user_name
|
||||
logged_password=$user_password
|
||||
dprint Auth: success
|
||||
status=()
|
||||
}
|
||||
}
|
||||
|
||||
fn user_controls {
|
||||
echo User: $"logged_user
|
||||
}
|
||||
|
||||
|
||||
# .md '(meta-)data' extract
|
||||
fn get_md_file_attr {
|
||||
sed -n '/^\* '$2': /p; /^\* '$2': /q; /^$/q' < $1
|
||||
}
|
||||
|
||||
|
||||
# File title extraction
|
||||
fn get_md_title {
|
||||
#sed 's/^(................................................................[^ ]*).*$/\1/g; 1q' < $1
|
||||
sed -n -e '1N; /^.*\n===*$/N; /.*\n===*\n *$/!b' -e 's/\n==*\n//p' < $1
|
||||
}
|
||||
|
||||
fn get_html_title {
|
||||
t=`{sed -n '32q; s/^.*<[Tt][Ii][Tt][Ll][Ee]> *([^<]+) *(<\/[Tt][Ii][Tt][Ll][Ee]>.*)?$/\1/p' < $1}
|
||||
|
||||
# As a backup we might want to pick the first 'non-tag' text in the file with:
|
||||
if(~ $"t '')
|
||||
t=`{sed -n -e 's/^(<[^>]+>)*([^<]+).*/\2/p; 32q' < $1 | sed 1q}
|
||||
|
||||
echo $t
|
||||
}
|
||||
|
||||
fn get_file_title {
|
||||
if (~ $1 *.md)
|
||||
get_md_title $1
|
||||
if not if(~ $1 *.html)
|
||||
get_html_title $1
|
||||
if not if(~ $1 */) {
|
||||
if(test -f $1/index.md)
|
||||
get_md_title $1/index.md
|
||||
if not if(test -f $1/index.html)
|
||||
get_html_title $1/index.html
|
||||
}
|
||||
}
|
||||
|
||||
fn ndate {
|
||||
if(~ $#* 7)
|
||||
date=$*(2-)
|
||||
if not
|
||||
date=`{date}
|
||||
switch($date(2)){
|
||||
case Jan; mo=01
|
||||
case Feb; mo=02
|
||||
case Mar; mo=03
|
||||
case Apr; mo=04
|
||||
case May; mo=05
|
||||
case Jun; mo=06
|
||||
case Jul; mo=07
|
||||
case Aug; mo=08
|
||||
case Sep; mo=09
|
||||
case Oct; mo=10
|
||||
case Nov; mo=11
|
||||
case Dec; mo=12
|
||||
}
|
||||
switch($date(3)){
|
||||
case [0-9]
|
||||
da=0^$date(3)
|
||||
case *
|
||||
da=$date(3)
|
||||
}
|
||||
switch($date(5)){
|
||||
case A; tz=+0100
|
||||
case ADT; tz=-0300
|
||||
case AFT; tz=+430
|
||||
case AKDT; tz=-0800
|
||||
case AKST; tz=-0900
|
||||
case ALMT; tz=+0600
|
||||
case AMST; tz=-0300
|
||||
case AMT; tz=-0400
|
||||
case ANAST; tz=+1200
|
||||
case ANAT; tz=+1200
|
||||
case AQTT; tz=+0500
|
||||
case ART; tz=-0300
|
||||
case AST; tz=-0400
|
||||
case AZOST; tz=+0000
|
||||
case AZOT; tz=-0100
|
||||
case AZST; tz=+0500
|
||||
case AZT; tz=+0400
|
||||
case B; tz=+0200
|
||||
case BNT; tz=+0800
|
||||
case BOT; tz=-0400
|
||||
case BRST; tz=-0200
|
||||
case BRT; tz=-0300
|
||||
case BST; tz=+0100
|
||||
case BTT; tz=+0600
|
||||
case C; tz=+0300
|
||||
case CAST; tz=+0800
|
||||
case CAT; tz=+0200
|
||||
case CCT; tz=+0630
|
||||
case CDT; tz=-0500
|
||||
case CEST; tz=+0200
|
||||
case CET; tz=+0100
|
||||
case CHADT; tz=+1345
|
||||
case CHAST; tz=+1245
|
||||
case CKT; tz=-1000
|
||||
case CLST; tz=-0300
|
||||
case CLT; tz=-0400
|
||||
case COT; tz=-0500
|
||||
case CST; tz=-0600
|
||||
case CVT; tz=-0100
|
||||
case CXT; tz=+0700
|
||||
case ChST; tz=+1000
|
||||
case D; tz=+0400
|
||||
case DAVT; tz=+0700
|
||||
case E; tz=+0500
|
||||
case EASST; tz=-0500
|
||||
case EAST; tz=-0600
|
||||
case EAT; tz=+0300
|
||||
case ECT; tz=-0500
|
||||
case EDT; tz=-0400
|
||||
case EEST; tz=+0300
|
||||
case EET; tz=+0200
|
||||
case EGST; tz=+0000
|
||||
case EGT; tz=-0100
|
||||
case EST; tz=-0500
|
||||
case ET; tz=-0500
|
||||
case F; tz=+0600
|
||||
case FJST; tz=+1300
|
||||
case FJT; tz=+1200
|
||||
case FKST; tz=-0300
|
||||
case FKT; tz=-0400
|
||||
case FNT; tz=-0200
|
||||
case G; tz=+0700
|
||||
case GALT; tz=-0600
|
||||
case GAMT; tz=-0900
|
||||
case GET; tz=+0400
|
||||
case GFT; tz=-0300
|
||||
case GILT; tz=+1200
|
||||
case GMT; tz=+0000
|
||||
case GST; tz=+0400
|
||||
case GYT; tz=-0400
|
||||
case H; tz=+0800
|
||||
case HAA; tz=-0300
|
||||
case HAC; tz=-0500
|
||||
case HADT; tz=-0900
|
||||
case HAE; tz=-0400
|
||||
case HAP; tz=-0700
|
||||
case HAR; tz=-0600
|
||||
case HAST; tz=-1000
|
||||
case HAT; tz=-0230
|
||||
case HAY; tz=-0800
|
||||
case HKT; tz=+0800
|
||||
case HLV; tz=-0430
|
||||
case HNA; tz=-0400
|
||||
case HNC; tz=-0600
|
||||
case HNE; tz=-0500
|
||||
case HNP; tz=-0800
|
||||
case HNR; tz=-0700
|
||||
case HNT; tz=-0330
|
||||
case HNY; tz=-0900
|
||||
case HOVT; tz=+0700
|
||||
case I; tz=+0900
|
||||
case ICT; tz=+0700
|
||||
case IDT; tz=+0300
|
||||
case IOT; tz=+0600
|
||||
case IRDT; tz=+0430
|
||||
case IRKST; tz=+0900
|
||||
case IRKT; tz=+0800
|
||||
case IRST; tz=+0330
|
||||
case IST; tz=+0200
|
||||
case JST; tz=+0900
|
||||
case K; tz=+1000
|
||||
case KGT; tz=+0600
|
||||
case KRAST; tz=+0800
|
||||
case KRAT; tz=+0700
|
||||
case KST; tz=+0900
|
||||
case KUYT; tz=+0400
|
||||
case L; tz=+1100
|
||||
case LHDT; tz=+1100
|
||||
case LHST; tz=+1030
|
||||
case LINT; tz=+1400
|
||||
case M; tz=+1200
|
||||
case MAGST; tz=+1200
|
||||
case MAGT; tz=+1100
|
||||
case MART; tz=-0930
|
||||
case MAWT; tz=+0500
|
||||
case MDT; tz=-0600
|
||||
case MHT; tz=+1200
|
||||
case MMT; tz=+0630
|
||||
case MSD; tz=+0400
|
||||
case MSK; tz=+0300
|
||||
case MST; tz=-0700
|
||||
case MUT; tz=+0400
|
||||
case MVT; tz=+0500
|
||||
case MYT; tz=+0800
|
||||
case N; tz=-0100
|
||||
case NCT; tz=+1100
|
||||
case NDT; tz=-0230
|
||||
case NFT; tz=+1130
|
||||
case NOVST; tz=+0700
|
||||
case NOVT; tz=+0600
|
||||
case NPT; tz=+0545
|
||||
case NST; tz=-0330
|
||||
case NUT; tz=-1100
|
||||
case NZDT; tz=+1300
|
||||
case NZST; tz=+1200
|
||||
case O; tz=-0200
|
||||
case OMSST; tz=+0700
|
||||
case OMST; tz=+0600
|
||||
case P; tz=-0300
|
||||
case PDT; tz=-0700
|
||||
case PET; tz=-0500
|
||||
case PETST; tz=+1200
|
||||
case PETT; tz=+1200
|
||||
case PGT; tz=+1000
|
||||
case PHOT; tz=+1300
|
||||
case PHT; tz=+0800
|
||||
case PKT; tz=+0500
|
||||
case PMDT; tz=-0200
|
||||
case PMST; tz=-0300
|
||||
case PONT; tz=+1100
|
||||
case PST; tz=-0800
|
||||
case PT; tz=-0800
|
||||
case PWT; tz=+0900
|
||||
case PYST; tz=-0300
|
||||
case PYT; tz=-0400
|
||||
case Q; tz=-0400
|
||||
case R; tz=-0500
|
||||
case RET; tz=+0400
|
||||
case S; tz=-0600
|
||||
case SAMT; tz=+0400
|
||||
case SAST; tz=+0200
|
||||
case SBT; tz=+1100
|
||||
case SCT; tz=+0400
|
||||
case SGT; tz=+0800
|
||||
case SRT; tz=-0300
|
||||
case SST; tz=-1100
|
||||
case T; tz=-0700
|
||||
case TAHT; tz=-1000
|
||||
case TFT; tz=+0500
|
||||
case TJT; tz=+0500
|
||||
case TKT; tz=-1000
|
||||
case TLT; tz=+0900
|
||||
case TMT; tz=+0500
|
||||
case TVT; tz=+1200
|
||||
case U; tz=-0800
|
||||
case ULAT; tz=+0800
|
||||
case UYST; tz=-0200
|
||||
case UYT; tz=-0300
|
||||
case UZT; tz=+0500
|
||||
case V; tz=-0900
|
||||
case VET; tz=-0430
|
||||
case VLAST; tz=+1100
|
||||
case VLAT; tz=+1000
|
||||
case VUT; tz=+1100
|
||||
case W; tz=-1000
|
||||
case WAST; tz=+0200
|
||||
case WAT; tz=+0100
|
||||
case WDT; tz=+0900
|
||||
case WEST; tz=+0100
|
||||
case WET; tz=+0000
|
||||
case WFT; tz=+1200
|
||||
case WGST; tz=-0200
|
||||
case WGT; tz=-0300
|
||||
case WIB; tz=+0700
|
||||
case WIT; tz=+0900
|
||||
case WITA; tz=+0800
|
||||
case WST; tz=+0800
|
||||
case WT; tz=+0000
|
||||
case X; tz=-1100
|
||||
case Y; tz=-1200
|
||||
case YAKST; tz=+1000
|
||||
case YAKT; tz=+0900
|
||||
case YAPT; tz=+1000
|
||||
case YEKST; tz=+0600
|
||||
case YEKT; tz=+0500
|
||||
case Z; tz=+0000
|
||||
}
|
||||
switch($1){
|
||||
case -a # rfc3339
|
||||
tz=`{echo $tz | sed 's/00$/:00/'}
|
||||
echo $date(6)^-$mo-$da^T^$date(4)^$tz
|
||||
case -i # iso-8601 lite
|
||||
echo $date(6)^-$mo-$da
|
||||
case -m # rfc2822
|
||||
echo $date(1)^, $da $date(2) $date(6) $date(4) $tz
|
||||
case -t # iso-8601
|
||||
echo $date(6)^-$mo-$da^T^$date(4)^$tz
|
||||
}
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
##########################################################################
|
||||
#app_blog_methods = ( _post index.rss )
|
||||
#fn app_blog__post {
|
||||
# echo
|
||||
#}
|
||||
#
|
||||
#app_blog___default {
|
||||
# if (~ $blog)
|
||||
# call_app blogpost
|
||||
#}
|
||||
#
|
||||
## --
|
||||
#app_blogpost_methods = ( comment _edit )
|
||||
#
|
||||
#fn app_blogpost_comment {
|
||||
# call_app comments
|
||||
#}
|
||||
#
|
||||
## --
|
||||
#app_comments_methods = ( _post _edit )
|
||||
#
|
||||
#fn app_comments___default {
|
||||
#
|
||||
#}
|
Loading…
Add table
Add a link
Reference in a new issue