*/ class htaccess{ var $authType; // authentification type var $authName; // authentification name var $admin_files; // array of files limited to the administrators var $modo_files; // array of files limited to the moderators var $file_Htpasswd; // .htpasswd file (AuthUserFile) var $file_Htgroup; // .htgroup file (AuthGroupFile) var $file_Htaccess; // .htaccess file function htaccess(){ $this->authType = "Basic"; $this->authName = "PhpFreeChat Admin Zone"; $this->admin_files = array("admin.php", "admin2.php"); $this->modo_files = array("mod.php", "mod2.php"); $this->file_Htpasswd = dirname(__FILE__)."/.htpasswd"; if(!file_exists($this->file_Htpasswd)) touch($this->file_Htpasswd); $this->file_Htgroup = dirname(__FILE__)."/.htgroup"; if(!file_exists($this->file_Htgroup)) { touch($this->file_Htgroup); $this->addGroup("admin"); $this->addGroup("modo"); } $this->file_Htaccess = dirname(__FILE__)."/.htaccess"; } /***************************************/ /* SET AND GET */ /***************************************/ /** * Set the AuthType * @param string $authtype - AuthType is Basic or Digest (crypted) */ function setAuthType($authtype){ $this->authType=$authtype; } /** * Get the AuthType * @return string $authtype - AuthType is Basic or Digest (crypted) */ function getAuthType(){ return $this->authType; } /** * Set the AuthName message * @param string $authname - AuthName message is the text display in the dialog box */ function setAuthName($authname){ $this->authName=$authname; } /** * Get the AuthName message * @return string $authname - AuthName message is the text display in the dialog box */ function getAuthName(){ return $this->authName; } /** * Set the .htaccess file * @param string $filename - absolute file-path */ function set_file_Htaccess($filename){ $this->file_Htaccess=$filename; } /** * Get the .htaccess file * @return string $filename - absolute file-path */ function get_file_Htaccess(){ return $this->file_Htaccess; } /** * Set the .htpasswd file (AuthUserFile) * @param string $filename - absolute file-path */ function set_file_Htpasswd($filename){ $this->file_Htpasswd=$filename; } /** * Get the .htpasswd file (AuthUserFile) * @return string $filename - absolute file-path */ function get_file_Htpasswd(){ return $this->file_Htpasswd; } /** * Set the .htgroup file (AuthGroupFile) * @param string $filename - absolute file-path */ function set_file_Htgroup($filename){ $this->file_Htgroup=$filename; } /** * Get the .htgroup file (AuthGroupFile) * @return string $filename - absolute file-path */ function get_file_Htgroup(){ return $this->file_Htgroup; } /***************************************/ /* USER METHODS */ /***************************************/ /** * Check if the user exists * @param string $username - Username * @return boolean $UserExist - Returns true it the user exists, false if not */ function isUser($username){ $UserExist = false; $file = fopen($this->file_Htpasswd,"r"); while($line = fgets($file)){ $lineArr=explode(":",$line); if($username==$lineArr[0]){ fclose($file); return true; // the user exists } } fclose($file); return false; // the user does not exist } /** * Add a user to the password file * @param string $username - Username * @param string $password - Password for Username * @return boolean $created - Returns true if ok, false if the user already exists */ function addUser($username,$password){ if($this->isUser($username)==false){ $file=fopen($this->file_Htpasswd,"a"); if(strtolower(substr(getenv("OS"),0,7))!="windows"){ $password=crypt($password); } $newLine=$username.":".$password."\n"; fputs($file,$newLine); fclose($file); return true; } else{ return false; // the user already exists } } /** * Delete a user in the password file * @param string $username - Username to delete * @return boolean $deleted - Returns true if user have been deleted otherwise false */ function delUser($username){ // Read names from file $file=fopen($this->file_Htpasswd,"r"); $i=0; $deleted = false; while($line=fgets($file)){ $lineArr=explode(":",trim($line)); if($username!=$lineArr[0]){ $newUserlist[$i][0]=$lineArr[0]; $newUserlist[$i][1]=$lineArr[1]; $i++; }else{ $deleted=true; } } fclose($file); if($deleted==true){ if($i==0) { // There are no more users unlink($this->file_Htpasswd); touch($this->file_Htpasswd); } else{ // Writing names back to file (without the user to delete) $file=fopen($this->file_Htpasswd,"w"); for($i=0;$ifile_Htpasswd,"r"); for($i=0;$line=fgets($file);$i++) { $lineArr=explode(":",$line); if($lineArr[0]!="") { $userlist[$i]=$lineArr[0]; } } fclose($file); if (!empty($userlist)==0) return 0; else return $userlist; } /** * Return the number of users * @return integer - the number of users */ function getNumberOfUsers() { $users=$this->getUsers(); if($users==0) return 0; else return count($users); } /** * Sets a password to the given username * @param string $username - The name of the User for changing password * @param string $password - New Password for the User * @return boolean $isSet - Returns true if password have been set */ function setPasswd($username,$new_password){ if($this->isUser($username)==true){ $this->delUser($username); $this->addUser($username,$new_password); return true; } else{ return false; } } /***************************************/ /* GROUP METHODS */ /***************************************/ /** * Check if the group exists * @param string $groupname - Groupname * @return boolean $GroupExist - Returns true it the group exists, false otherwise */ function isGroup($groupname){ $GroupExist = false; $file = fopen($this->file_Htgroup,"r"); while($line = fgets($file)){ $lineArr=explode(":",trim($line)); if($groupname==trim($lineArr[0])){ fclose($file); return true; // the group exists } } fclose($file); return false; // the group does not exist } /** * Add a group to the group file * @param string $groupname - Groupname * @return boolean $created - Returns false if the group already exists */ function addGroup($groupname){ if($this->isGroup($groupname)==false){ $file=fopen($this->file_Htgroup,"a"); $newLine=$groupname.": "."\n"; // Take care, it should not have a space before : fputs($file,$newLine); fclose($file); return true; } else{ return false; // the group already exists } } /** * Delete a group in the group file * @param string $groupname - Groupname to delete * @return boolean $deleted - Returns true if group have been deleted otherwise false */ function delGroup($groupname){ // Read names from file $file=fopen($this->file_Htgroup,"r"); $i=0; $newGrouplist=0; while($line=fgets($file)){ $lineArr=explode(":",trim($line)); if($groupname!=trim($lineArr[0])){ $newGrouplist[$i]=trim($line); $i++; }else{ $deleted=true; } } fclose($file); if($deleted==true){ if($i==0) { // There are no more users unlink($this->file_Htpasswd); touch($this->file_Htpasswd); } else{ // Writing names back to file (without the user to delete) $file=fopen($this->file_Htgroup,"w"); for($i=0;$ifile_Htgroup,"r"); for($i=0;$line=fgets($file);$i++) { $lineArr=explode(":",trim($line)); if($lineArr[0]!="") { $grouplist[$i]=trim($lineArr[0]); } } fclose($file); if (!empty($grouplist)==0) return 0; else return $grouplist; } /***************************************/ /* USER AND GROUP METHODs */ /***************************************/ /** * Check if the user is in the group * @param string $username - Username * @param string $groupname - Groupname * @return boolean $exist - Returns true it the user is in the group */ function isUserInGroup($username,$groupname){ $file = fopen($this->file_Htgroup,"r"); while($line = fgets($file)){ $lineArr=explode(":",trim($line)); if($groupname==trim($lineArr[0])){ $lineArrUser=explode(" ",trim($lineArr[1])); for($i=0;$iisGroup($groupname)==false){ $this->addGroup($groupname); } if($this->isUserInGroup($username,$groupname)==false){ // Read names from file $file = fopen($this->file_Htgroup,"r"); $i=0; while($line = fgets($file)){ $lineArr=explode(":",trim($line)); if($groupname==trim($lineArr[0])){ $newlist[$i]=trim($line)." ".$username; } else{ $newlist[$i]=trim($line); } $i++; } fclose($file); // Writing names back to file (without the user to delete) $file=fopen($this->file_Htgroup,"w"); for($i=0;$iisUserInGroup($username,$groupname)==true){ // Read names from file $file = fopen($this->file_Htgroup,"r"); $i=0; while($line = fgets($file)){ $lineArr=explode(":",trim($line)); if($groupname==trim($lineArr[0])){ $lineArrUser=explode(" ",trim($lineArr[1])); $newlist[$i]=$groupname." : "; for($j=0;$jfile_Htgroup,"w"); for($i=0;$ifile_Htgroup,"r"); $i=0; //$grouplist=0; while($line = fgets($file)){ $lineArr=explode(":",trim($line)); $lineArrUser=explode(" ",trim($lineArr[1])); for($j=0;$jfile_Htaccess,"w+"); fputs($file,"AuthName \"".$this->authName."\"\n"); fputs($file,"AuthType ".$this->authType."\n"); fputs($file,"AuthUserFile \"".$this->file_Htpasswd."\"\n"); fputs($file,"AuthGroupFile \"".$this->file_Htgroup."\"\n\n"); fputs($file,"\nrequire valid-user\n"); for($i=0;$iadmin_files);$i++){ fputs($file,"\nadmin_files[$i].">\n"); fputs($file," require group admin\n"); fputs($file,"\n"); } for($i=0;$imodo_files);$i++){ fputs($file,"\nmodo_files[$i].">\n"); fputs($file," require group modo\n"); fputs($file,"\n"); } fclose($file); } /** * Deletes the protection of the given directory */ function delHtaccess(){ unlink($this->file_Htaccess); } } ?>