00001 <?php 00032 class DigestAuth implements AuthInterface { 00033 00039 private $filename; 00040 00046 private $server; 00047 00053 private $username; 00054 00060 private $password; 00061 00067 private $realm; 00068 00069 00076 public function __construct($auth, $extra_args){ 00077 foreach(array('filename') as $param){ 00078 if(isset($extra_args[$param])){ 00079 $this->$param = $extra_args[$param]; 00080 } else { 00081 throw new AuthException("Debe especificar el parametro '$param' en los parámetros"); 00082 } 00083 } 00084 foreach(array('username', 'password') as $param){ 00085 if(isset($extra_args[$param])){ 00086 $this->$param = $extra_args[$param]; 00087 } 00088 } 00089 } 00090 00095 public function get_identity(){ 00096 $identity = array("username" => $this->username, "realm" => $this->realm); 00097 return $identity; 00098 } 00099 00105 public function authenticate(){ 00106 $this->resource = @fopen($this->filename, "r"); 00107 if($this->resource===false){ 00108 throw new AuthException("No existe o no se puede cargar el archivo '{$this->filename}'"); 00109 } 00110 00111 $exists_user = false; 00112 while(!feof($this->resource)){ 00113 $line = fgets($this->resource); 00114 $data = explode(":", $line); 00115 00116 if($data[0]==$this->username){ 00117 if(trim($data[2])==md5($this->password)){ 00118 $this->realm = $data[1]; 00119 $exists_user = true; 00120 break; 00121 } 00122 } 00123 } 00124 return $exists_user; 00125 } 00126 00127 00133 public function set_params($extra_args){ 00134 foreach(array('filename', 'username', 'password') as $param){ 00135 if(isset($extra_args[$param])){ 00136 $this->$param = $extra_args[$param]; 00137 } 00138 } 00139 } 00140 00141 00146 public function __destruct(){ 00147 @fclose($this->resource); 00148 } 00149 00150 }