diff options
| author | Aleksander Machniak <alec@alec.pl> | 2013-11-04 08:53:42 -0800 | 
|---|---|---|
| committer | Aleksander Machniak <alec@alec.pl> | 2013-11-04 08:53:42 -0800 | 
| commit | d4f27d90d57b62a833e643fa9e823d4a8aaa1dcf (patch) | |
| tree | 4d21a4b640ddaca5dffca2ba2e82daf903bfd7cb | |
| parent | a8b004e8d8f040d868e4b19da9527c177be9959d (diff) | |
| parent | 910a3581be47da1d19eb15a68ea6b51c2c31ef67 (diff) | |
Merge pull request #136 from tillkruess/extend-df-password-driver
Extend domainfactory password driver
| -rw-r--r-- | plugins/password/drivers/domainfactory.php | 117 | 
1 files changed, 68 insertions, 49 deletions
| diff --git a/plugins/password/drivers/domainfactory.php b/plugins/password/drivers/domainfactory.php index 7f6b8860e..9128720c9 100644 --- a/plugins/password/drivers/domainfactory.php +++ b/plugins/password/drivers/domainfactory.php @@ -4,9 +4,9 @@   * domainFACTORY Password Driver   *   * Driver to change passwords with the hosting provider domainFACTORY. - * See: http://www.df.eu/ + * http://www.df.eu/   * - * @version 2.0 + * @version 2.1   * @author Till Krüss <me@tillkruess.com>   * @link http://tillkruess.com/projects/roundcube/   * @@ -14,57 +14,76 @@  class rcube_domainfactory_password  { -    function save($curpass, $passwd) -    { -	    $rcmail = rcmail::get_instance(); +	function save($curpass, $passwd) +	{ +		$rcmail = rcmail::get_instance(); -	    if (is_null($curpass)) { -		    $curpass = $rcmail->decrypt($_SESSION['password']); -	    } +		if (is_null($curpass)) { +			$curpass = $rcmail->decrypt($_SESSION['password']); +		} -    	if ($ch = curl_init()) { -    		// initial login -	    	curl_setopt_array($ch, array( -		    	CURLOPT_RETURNTRANSFER => true, -    			CURLOPT_URL => 'https://ssl.df.eu/chmail.php', -	    		CURLOPT_POST => true, -		    	CURLOPT_POSTFIELDS => array( -			    	'login' => $rcmail->user->get_username(), -				    'pwd' => $curpass, -    				'action' => 'change' -	    		) -		    )); +		if ($ch = curl_init()) { -    		if ($result = curl_exec($ch)) { -    			// login successful, get token! -	    		$postfields = array( -		    		'pwd1' => $passwd, -			    	'pwd2' => $passwd, -				    'action[update]' => 'Speichern' -    			); +			// initial login +			curl_setopt_array($ch, array( +				CURLOPT_RETURNTRANSFER => true, +				CURLOPT_URL => 'https://ssl.df.eu/chmail.php', +				CURLOPT_POST => true, +				CURLOPT_POSTFIELDS => array( +					'login' => $rcmail->user->get_username(), +					'pwd' => $curpass, +					'action' => 'change' +				) +			)); -    			preg_match_all('~<input name="(.+?)" type="hidden" value="(.+?)">~i', $result, $fields); -	    		foreach ($fields[1] as $field_key => $field_name) { -		    		$postfields[$field_name] = $fields[2][$field_key]; -			    } +			if ($result = curl_exec($ch)) { +				// login successful, get token! +				$postfields = array( +					'pwd1' => $passwd, +					'pwd2' => $passwd, +					'action[update]' => 'Speichern' +				); -    			// change password -	    		$ch = curl_copy_handle($ch); -		    	curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); -			    if ($result = curl_exec($ch)) { -    				if (strpos($result, 'Einstellungen erfolgreich') !== false) { -	    				return PASSWORD_SUCCESS; -		    		} -    			} else { -	    			return PASSWORD_CONNECT_ERROR; -		    	} -    		} else { -	    		return PASSWORD_CONNECT_ERROR; -		    } -    	} else { -	    	return PASSWORD_CONNECT_ERROR; -	    } +				preg_match_all('~<input name="(.+?)" type="hidden" value="(.+?)">~i', $result, $fields); +				foreach ($fields[1] as $field_key => $field_name) { +					$postfields[$field_name] = $fields[2][$field_key]; +				} -    	return PASSWORD_ERROR; -    } +				// change password +				$ch = curl_copy_handle($ch); +				curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); +				if ($result = curl_exec($ch)) { + +					// has the password been changed? +					if (strpos($result, 'Einstellungen erfolgreich') !== false) { +						return PASSWORD_SUCCESS; +					} + +					// show error message(s) if possible +					if (strpos($result, '<div class="d-msg-text">') !== false) { +						preg_match_all('#<div class="d-msg-text">(.*?)</div>#s', $result, $errors); +						if (isset($errors[1])) { +							$error_message = ''; +							foreach ( $errors[1] as $error ) { +								$error_message .= trim(mb_convert_encoding( $error, 'UTF-8', 'ISO-8859-15' )).' '; +							} +							return array('code' => PASSWORD_ERROR, 'message' => $error_message); +						} +					} + + +				} else { +					return PASSWORD_CONNECT_ERROR; +				} + +			} else { +				return PASSWORD_CONNECT_ERROR; +			} + +		} else { +			return PASSWORD_CONNECT_ERROR; +		} + +		return PASSWORD_ERROR; +	}  } | 
