00001 <?php
00010 class zHttpAuth extends zCore{
00016 var $cntrl;
00017 var $mode;
00018 var $data = array();
00019 var $dataCon;
00020 var $cancelText = null;
00021 var $realm = null;
00022
00023 function zHttpAuth(&$cntrl){
00024 $this->attachController($cntrl);
00025 if(!defined('Z_HTTP_AUTH_MODE_RAW'))define('Z_HTTP_AUTH_MODE_RAW', true);
00026 if(!defined('Z_HTTP_AUTH_MODE_DB'))define('Z_HTTP_AUTH_MODE_DB', false);
00027 }
00028 function attachController(&$cntrl){
00029 $this->cntrl = &$cntrl;
00030 }
00036 function setRawCredentials($usr, $psw){
00037 $this->mode = Z_HTTP_AUTH_MODE_RAW;
00038 $this->data = array($usr, $psw);
00039 }
00045 function setCredentialsDataCon($conName){
00046 $this->mode = Z_HTTP_AUTH_MODE_DB;
00047 $this->dataCon = $conName;
00048 }
00056 function setCredentialsDataCol($tableName, $usrCol, $pswCol){
00057 $this->mode = Z_HTTP_AUTH_MODE_DB;
00058 $this->data = array($tableName, $usrCol, $pswCol);
00059 }
00065 function validate(){
00066 if(count($this->data) < 2){
00067 perror("<code>zigmoyd.HttpAuth.validate</code><br />Credentials are Not set");
00068 return false;
00069 }
00070 if(!isset($_SERVER['PHP_AUTH_USER'])){
00071 $this->sendHeaders();
00072 }else{
00073 switch($this->mode){
00074 case Z_HTTP_AUTH_MODE_RAW:
00075 if(count($this->data) != 2){
00076 perror("<code>zigmoyd.HttpAuth.validate</code><br />unexpected Credentials<br />Expecting UserName and Password Pair as the validation mode is set to RAW<br />But the Credentials are TableName UserCol and PswCol (like DB)");
00077 return false;
00078 }
00079
00080
00081 return ($_SERVER['PHP_AUTH_USER'] == $this->data[0] && $_SERVER['PHP_AUTH_PW'] == $this->data[1]);
00082 break;
00083 case Z_HTTP_AUTH_MODE_DB:
00084 if(count($this->data) != 3){
00085 perror("<code>zigmoyd.HttpAuth.validate</code><br />unexpected Credentials<br />Expecting TableName UserCol and PasswordCol as the validation mode is set to DB<br />But the Credentials are UserName and PswName (like RAW)");
00086 return false;
00087 }
00088 load_module('dbAccess');
00089 $db = new zDbAccess($this->dataCon, $this->data[0]);
00090 $db->fetch($this->data[1]);
00091 $db->fetch($this->data[2]);
00092 $db->identifyBy($this->data[1], $_SERVER['PHP_AUTH_USER']);
00093 $db->identifyBy($this->data[2], $_SERVER['PHP_AUTH_PW']);
00094 $retSet = $db->export();
00095 return(is_array($retSet) && count($retSet) >= 1);
00096 break;
00097 }
00098 }
00099 }
00104 function noCache(){
00105 $this->cntrl->setHeader("Pragma: no-cache");
00106 $this->cntrl->setHeader("Cache-Control: no-cache, must-revalidate");
00107 $this->cntrl->setHeader("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
00108 }
00113 function setRealm($realmText){
00114 $this->realm = $realmText;
00115 }
00120 function sendHeaders(){
00121 if(is_null($this->realm))$this->realm = '/'.implode('/', url_segment(ZIG_URL_SEGMENT_PATH));
00122 $this->cntrl->setHeader('WWW-Authenticate: Basic realm="'.$this->realm.'"');
00123 $this->cntrl->setHeader('HTTP/1.0 401 Unauthorized');
00124 if(is_null($this->cancelText))$this->ifCanceled();
00125 $this->forward401();
00126 }
00131 function forward401(){
00132 exit(zTemplate::sysNumeric('401', $this->cancelText));
00133 }
00138 function loop(){
00139 $this->sendHeaders();
00140 }
00145 function ifCanceled($cancelText="UnAuthorized Access"){
00146 $this->cancelText = $cancelText;
00147 }
00152 function isOk(){
00153 return $this->validate();
00154 }
00155 }
00157 ?>