@program weblogin.htmuf 1 1000 d i $include $lib/cgiparse $include $lib/alynna $include $muf/cron $def astr dup int? if dup not if pop "" then then $def myip descr descripnum $def myref "target" getwebuser dup not if pop #-1 then $def myname "name" getwebuser dup not if pop "" then $pubdef myip descr descripnum $pubdef myref "target" getwebuser dup not if pop #-1 then $pubdef myname "name" getwebuser dup not if pop "" then $pubdef astr dup int? if dup not if pop "" then then $def verbose prog "MOBILE" flag? if logstatus else pop then INCLUDE_WEBVARS lvar cmd lvar param : setwebuser[ value str:prop -- ] WWW { "/~login/" myip "/" prop @ }cat value @ setprop ; PUBLIC setwebuser $libdef setwebuser : getwebuser[ str:prop -- ] WWW { "/~login/" myip "/" prop @ }cat getprop ; PUBLIC getwebuser $libdef getwebuser : setstat[ value str:prop -- ] myref prop @ value @ setprop ; PUBLIC setstat $libdef setstat : getstat[ str:prop -- ] myref prop @ getprop ; PUBLIC getstat $libdef getstat : sys.reg WWW { "/~login/" myip "/referrer" }cat "Referer" head setprop { "

" "Host" head " register:

" }w { "
" }w { "
" }w { "Username: " }w { "
" }w { "Password: " }w { "
" }w { "Email: " }w { "
" }w { "" }w { "
" }w { "
" }w ; : sys.regauth "Username" post var! username "Password" post var! password "Email" post var! email var target username @ not password @ not email @ not or or if { "

A field was left empty.

" }w { "Try it again..." }w exit then username @ pname-ok? not if { "

The username was invalid or taken.

" }w { "Try it again..." }w { "WWW(Regauth): Username invalid '" username @ "'" }cat verbose exit then email @ "*@*.*" smatch not if { "

The email address was invalid.

" }w { "Try it again..." }w { "WWW(Regauth): Email invalid '" username @ " " email @ "'" }cat verbose exit then #-1 "*" "P" find_array "@/RegAddr" myip array_filter_prop array_count if { "

Register failure: You have already registered a character.

" }w { "Try it again..." }w { "WWW(Regauth): Already requested (IP match) '" username @ "'" }cat verbose exit then #-1 "*" "P" find_array "@/RegEmail" email @ array_filter_prop array_count if { "

Register failure: You have already registered a character.

" }w { "Try it again..." }w { "WWW(Regauth): Already requested (email match) '" username @ "'" }cat verbose exit then username @ password @ newplayer target ! WWW { "/~login/" myip "/name" }cat target @ name setprop WWW { "/~login/" myip "/target" }cat target @ setprop WWW { "/~login/" myip "/access" }cat systime setprop target @ "@/regAddr" myip setprop target @ "@/regEmail" email @ setprop { "

Registration and login successful.

" }w { "Continue..." }w { "WWW(Sysauth): User created and access granted '" username @ "'" }cat logstatus ; : sys.login WWW { "/~login/" myip "/referer" }cat "referrer" head setprop { "

" "Host" head " login:

" }w { "
" }w { "
" }w { "Username: " }w { "
" }w { "Password: " }w { "
" }w { "Remember me " }w { "" }w { "
" }w { "
" }w ; : sys.auth "Username" post var! username "Password" post var! password "Remember" raw var! remember var target username @ resolve target ! username @ pname-ok? if { "

The username was invalid.

" }w { "Try it again..." }w { "WWW(Regauth): Username invalid '" username @ "'" }cat verbose exit then target @ int 0 < if { "

Login failure: Object not found

" }w { "Try it again..." }w { "WWW(Sysauth): Object not found '" username @ "'" }cat verbose exit then target @ password @ checkpassword not if { "

Permission Denied

" }w { "Try it again..." }w { "WWW(Sysauth): Permission denied '" username @ "'" }cat logstatus exit then WWW { "/~login/" myip "/name" }cat target @ name setprop WWW { "/~login/" myip "/target" }cat target @ setprop remember @ if WWW { "/~login/" myip "/remember" }cat 1 setprop else WWW { "/~login/" myip "/remember" }cat 0 setprop then WWW { "/~login/" myip "/access" }cat systime setprop { "

Login successful.

" }w { "Continue..." }w { "WWW(Sysauth): Access granted '" username @ "'" }cat logstatus ; : sys.logout WWW { "/~login/" myip "/" }cat remove_prop { "

Logout successful.

" }w { "Return to home page..." }w { "WWW(Sysauth): logout '" myip "'" }cat logstatus ; : sys.ping WWW { "/~login/" myip "/access" }cat systime setprop WWW { "/~login/" myip "/path" }cat wpath @ setprop WWW { "/~login/" myip "/referrer" }cat "referer" head dup not if pop "/" then setprop { "PING: " myip " accessed path " wpath @ }cat logstatus ; : sys.cron var xp var ip { "CRON: Start login CRON" }cat verbose WWW "/_prefs/loginexpire" getpropval xp ! xp @ not if 900 xp ! then { "CRON: expiry time is " xp @ }cat verbose WWW "/~login/" array_get_propdirs foreach ip ! pop WWW { "/~login/" ip @ "/remember" }join getprop not if systime WWW { "/~login/" ip @ "/access" }join getpropval - xp @ > if WWW { "/~login/" ip @ "/" }join remove_prop { "CRON: " ip @ " is EXPIREDed " }cat verbose else { "CRON: " ip @ " is CURRENT " }cat verbose then else { "CRON: " ip @ " is REMEMBERed " }cat verbose then repeat ; : main dup mufcron? if pop sys.cron exit then " " split param ! cmd ! PARSE_HEADERS command @ "*mpi*" smatch if cmd @ case "ping" smatch when sys.ping "" end "get" smatch when param @ getwebuser astr end "set" smatch when param @ ":" split swap setwebuser param @ ":" split pop getwebuser astr end "uget" smatch when param @ getstat astr end "uset" smatch when param @ ":" split swap setstat param @ ":" split pop getstat astr end "myip" smatch when myip end "myref" smatch when myref dtos end "myname" smatch when myname end endcase exit then { WWW "_/www/header" mpilist }w wparam @ tolower case "login" smatch when sys.login end "auth" smatch when sys.auth end "ping" smatch when sys.ping end "register" smatch when sys.reg end "regauth" smatch when sys.regauth end "logout" smatch when sys.logout end endcase { WWW "_/www/footer" mpilist }w ; . c q @reg weblogin=web/login @set #0=_msgmacs/ping:{muf:$web/login,ping} @set #0=_msgmacs/wget:{muf:$web/login,get {:1}} @set #0=_msgmacs/wset:{muf:$web/login,set {:1}:{:2}} @set #0=_msgmacs/uget:{muf:$web/login,uget {:1}} @set #0=_msgmacs/uset:{muf:$web/login,uset {:1}:{:2}} @set #0=_msgmacs/myip:{muf:$web/login,myip} @set #0=_msgmacs/myref:{muf:$web/login,myref} @set #0=_msgmacs/myname:{muf:$web/login,myname}