1, 'markup' => "(:username:$1:)", 'filter' => 'check_username');
function check_username($pagename, $fn, &$new) {
global $MessagesFmt, $EnablePost, $AuthUserSearchPatterns, $GroupDelimiter;
if(!@$new[$fn]) return;
if(PageTextVar($pagename,"password")){
$pages=@ListPages($AuthUserSearchPatterns);
foreach ($pages as $pn) {
if($pn!=$pagename and PageTextVar($pn,"username")==$new[$fn]){
$MessagesFmt[] = "
$[That username is taken. Please choose another.]
";
$EnablePost=false;
return;
}
}
if(preg_match('/('.$GroupDelimiter.'|[, ])/',$new[$fn])){
$MessagesFmt[] = "$[$GroupDelimiter, commas, and whitespaces are not allowed in your username.]
";
$EnablePost=false;
return;
}
}
else{
$MessagesFmt[] = "$[Enter a password using the (:password:(:encrypt MyNewPassword:):) markup.]
";
$EnablePost=false;
return;
}
}
if ( $action == 'edit' ) require_once("$FarmD/cookbook/editattr.php");
if (@$_POST['authid']) {
$id=stripmagic(@$_POST['authid']);
$pass=stripmagic(@$_POST['authpw']);
$pw=crypt($pass,$pass);
$authid='';
$pages=@ListPages($AuthUserSearchPatterns);
foreach ($pages as $pn) {
if(PageTextVar($pn,"username")==$id && PageTextVar($pn,"password")==$pw){
$authid = $id;
$authgroup=FmtPageName('$Group', $pn);
foreach((array)$authgroup as $g){
$authlist[$GroupDelimiter.$g] = true;
$authlist['-'.$GroupDelimiter.$g] = false;
}
break;
}
}
if (!$authid) $GLOBALS['InvalidLogin'] = true;
else{
if (!isset($AuthId)) $AuthId = $authid;
SessionAuth($pagename, array('authid' => $authid, 'authlist' => $authlist));
}
}
else SessionAuth($pagename);
/*
if(PageTextVar($pagename,"username")){
if(PageTextVar($pagename,"password")){
if(PageTextVar($pagename,"username")==$AuthId && in_array(PageTextVar($pagename,"password"),$AuthPw)) $HandleAuth['edit']='';
else $HandleAuth['source'] = 'admin';
}
}
*/
$AuthFunction='UserAuth';
function UserAuth($pagename, $level, $authprompt=true, $since=0) {
global $DefaultPasswords, $GroupAttributesFmt, $AllowName, $SitePrefix, $GroupDelimiter,
$AuthCascade, $FmtV, $AuthPromptFmt, $PageStartFmt, $PageEndFmt,
$AuthId, $AuthList, $NoHTMLCache;
static $authcache;
SDV($GroupAttributesFmt,'$Group/GroupAttributes');
SDV($AllowName,'@nopass');
$page = ReadPage($pagename, $since);
if (!$page) { return false; }
if (!isset($authcache))
SessionAuth($pagename, (@$_POST['authpw'])
? array('authpw' => array($_POST['authpw'] => 1))
: '');
if (@$AuthId) {
$AuthList[$AuthId] = true;
$AuthList["-$AuthId"] = false;
}
## To allow @edit in GroupAttributes, we cache it first
if (!isset($authcache['site'])) {
foreach(array_keys($DefaultPasswords) as $k) {
$page['=passwd'][$k]=$GroupDelimiter.$SitePrefix.$k;
if(@$AuthList[$page['=passwd'][$k]]) $authcache['site'][$k]=$AuthList[$GroupDelimiter.$SitePrefix.$k];
elseif($DefaultPasswords[$k]==$AllowName or !$DefaultPasswords[$k]) $authcache['site'][$k]=true;
else $authcache['site'][$k]=false;
$page['=pwsource'][$k]='site';
}
}
$gn = FmtPageName($GroupAttributesFmt, $pagename);
if (!isset($authcache[$gn])) {
$gp = ReadPage($gn, READPAGE_CURRENT);
foreach(array_keys($DefaultPasswords) as $k) {
if(@$gp["passwd$k"]) {
$authcache[$gn][$k] = UserIsAuthorized($gp["passwd$k"]);
$page['=pwsource'][$k]='group';
$page['=passwd'][$k]=$gp["passwd$k"];
}
else $authcache[$gn][$k]=$authcache['site'][$k];
}
}
foreach(array_keys($DefaultPasswords) as $k){
if(@$page["passwd$k"]) {
$page['=auth'][$k]=UserIsAuthorized($page["passwd$k"]);
$page['=pwsource'][$k]='page';
$page['=passwd'][$k]=$page["passwd$k"];
}
else $page['=auth'][$k]=$authcache[$gn][$k];
if(@$AuthList[$GroupDelimiter.$SitePrefix.$k]) $page['=auth'][$k]=true;
}
AuthCascade($page);
if (@$AuthList[$GroupDelimiter.$SitePrefix.'admin']) {
foreach(array_keys($DefaultPasswords) as $k){$page['=auth'][$k]=true;}
}
if (@$page['=passwd']['read']) $NoHTMLCache |= 2;
if ($level=='ALWAYS' || @$page['=auth'][$level] || (@$AuthId && @$AuthId==PageTextVar($pagename, "username"))) return $page;
if (!$authprompt) return false;
$GLOBALS['AuthNeeded'] = (@$_POST['authpw'])
? $page['=pwsource'][$level] . ' ' . $level : '';
PCache($pagename, $page);
$postvars = '';
foreach($_POST as $k=>$v) {
if ($k == 'authpw' || $k == 'authid') continue;
$k = htmlspecialchars(stripmagic($k), ENT_QUOTES);
$v = str_replace('$', '$',
htmlspecialchars(stripmagic($v), ENT_COMPAT));
$postvars .= "\n";
}
$FmtV['$PostVars'] = $postvars;
$r = str_replace("'", '%37', stripmagic($_SERVER['REQUEST_URI']));
SDV($AuthPromptFmt,array(&$PageStartFmt,
"$[Password required]
", &$PageEndFmt));
PrintFmt($pagename,$AuthPromptFmt);
exit;
}
function UserIsAuthorized($args) {
global $AuthList, $AllowName;
foreach(preg_split("/[\s,]+/", $args) as $name) {
if(@$AuthList[$name] || $name==$AllowName) {return true;}
}
return false;
}
function AuthCascade(&$page){
global $AuthCascade;
foreach($AuthCascade as $k=>$v){
if (@$page['=auth'][$k]){
foreach((array)$v as $value){
if(!@$page['=auth'][$value]){
$page['=auth'][$value] = $page['=auth'][$k];
if ($page['=passwd'][$value] = $page['=passwd'][$k]) # assign
$page['=pwsource'][$value] = "cascade:$k";
AuthCascade($page);
}
}
}
}
}