You've already forked joomla_test
							
							
		
			
	
	
		
			241 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			241 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | /** | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  Client | ||
|  |  * | ||
|  |  * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved. | ||
|  |  * @license     GNU General Public License version 2 or later; see LICENSE | ||
|  |  */ | ||
|  | 
 | ||
|  | defined('JPATH_PLATFORM') or die; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Client helper class | ||
|  |  * | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  Client | ||
|  |  * @since       11.1 | ||
|  |  */ | ||
|  | class JClientHelper | ||
|  | { | ||
|  | 	/** | ||
|  | 	 * Method to return the array of client layer configuration options | ||
|  | 	 * | ||
|  | 	 * @param   string   $client  Client name, currently only 'ftp' is supported | ||
|  | 	 * @param   boolean  $force   Forces re-creation of the login credentials. Set this to | ||
|  | 	 *                            true if login credentials in the session storage have changed | ||
|  | 	 * | ||
|  | 	 * @return  array    Client layer configuration options, consisting of at least | ||
|  | 	 *                   these fields: enabled, host, port, user, pass, root | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public static function getCredentials($client, $force = false) | ||
|  | 	{ | ||
|  | 		static $credentials = array(); | ||
|  | 
 | ||
|  | 		$client = strtolower($client); | ||
|  | 
 | ||
|  | 		if (!isset($credentials[$client]) || $force) | ||
|  | 		{ | ||
|  | 			$config = JFactory::getConfig(); | ||
|  | 
 | ||
|  | 			// Fetch the client layer configuration options for the specific client
 | ||
|  | 			switch ($client) | ||
|  | 			{ | ||
|  | 				case 'ftp': | ||
|  | 					$options = array( | ||
|  | 						'enabled' => $config->get('ftp_enable'), | ||
|  | 						'host' => $config->get('ftp_host'), | ||
|  | 						'port' => $config->get('ftp_port'), | ||
|  | 						'user' => $config->get('ftp_user'), | ||
|  | 						'pass' => $config->get('ftp_pass'), | ||
|  | 						'root' => $config->get('ftp_root')); | ||
|  | 					break; | ||
|  | 
 | ||
|  | 				default: | ||
|  | 					$options = array('enabled' => false, 'host' => '', 'port' => '', 'user' => '', 'pass' => '', 'root' => ''); | ||
|  | 					break; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			// If user and pass are not set in global config lets see if they are in the session
 | ||
|  | 			if ($options['enabled'] == true && ($options['user'] == '' || $options['pass'] == '')) | ||
|  | 			{ | ||
|  | 				$session = JFactory::getSession(); | ||
|  | 				$options['user'] = $session->get($client . '.user', null, 'JClientHelper'); | ||
|  | 				$options['pass'] = $session->get($client . '.pass', null, 'JClientHelper'); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			// If user or pass are missing, disable this client
 | ||
|  | 			if ($options['user'] == '' || $options['pass'] == '') | ||
|  | 			{ | ||
|  | 				$options['enabled'] = false; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			// Save the credentials for later use
 | ||
|  | 			$credentials[$client] = $options; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return $credentials[$client]; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Method to set client login credentials | ||
|  | 	 * | ||
|  | 	 * @param   string  $client  Client name, currently only 'ftp' is supported | ||
|  | 	 * @param   string  $user    Username | ||
|  | 	 * @param   string  $pass    Password | ||
|  | 	 * | ||
|  | 	 * @return  boolean  True if the given login credentials have been set and are valid | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public static function setCredentials($client, $user, $pass) | ||
|  | 	{ | ||
|  | 		$return = false; | ||
|  | 		$client = strtolower($client); | ||
|  | 
 | ||
|  | 		// Test if the given credentials are valid
 | ||
|  | 		switch ($client) | ||
|  | 		{ | ||
|  | 			case 'ftp': | ||
|  | 				$config = JFactory::getConfig(); | ||
|  | 				$options = array('enabled' => $config->get('ftp_enable'), 'host' => $config->get('ftp_host'), 'port' => $config->get('ftp_port')); | ||
|  | 
 | ||
|  | 				if ($options['enabled']) | ||
|  | 				{ | ||
|  | 					$ftp = JClientFtp::getInstance($options['host'], $options['port']); | ||
|  | 
 | ||
|  | 					// Test the connection and try to log in
 | ||
|  | 					if ($ftp->isConnected()) | ||
|  | 					{ | ||
|  | 						if ($ftp->login($user, $pass)) | ||
|  | 						{ | ||
|  | 							$return = true; | ||
|  | 						} | ||
|  | 						$ftp->quit(); | ||
|  | 					} | ||
|  | 				} | ||
|  | 				break; | ||
|  | 
 | ||
|  | 			default: | ||
|  | 				break; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if ($return) | ||
|  | 		{ | ||
|  | 			// Save valid credentials to the session
 | ||
|  | 			$session = JFactory::getSession(); | ||
|  | 			$session->set($client . '.user', $user, 'JClientHelper'); | ||
|  | 			$session->set($client . '.pass', $pass, 'JClientHelper'); | ||
|  | 
 | ||
|  | 			// Force re-creation of the data saved within JClientHelper::getCredentials()
 | ||
|  | 			self::getCredentials($client, true); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return $return; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Method to determine if client login credentials are present | ||
|  | 	 * | ||
|  | 	 * @param   string  $client  Client name, currently only 'ftp' is supported | ||
|  | 	 * | ||
|  | 	 * @return  boolean  True if login credentials are available | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 */ | ||
|  | 	public static function hasCredentials($client) | ||
|  | 	{ | ||
|  | 		$return = false; | ||
|  | 		$client = strtolower($client); | ||
|  | 
 | ||
|  | 		// Get (unmodified) credentials for this client
 | ||
|  | 		switch ($client) | ||
|  | 		{ | ||
|  | 			case 'ftp': | ||
|  | 				$config = JFactory::getConfig(); | ||
|  | 				$options = array('enabled' => $config->get('ftp_enable'), 'user' => $config->get('ftp_user'), 'pass' => $config->get('ftp_pass')); | ||
|  | 				break; | ||
|  | 
 | ||
|  | 			default: | ||
|  | 				$options = array('enabled' => false, 'user' => '', 'pass' => ''); | ||
|  | 				break; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if ($options['enabled'] == false) | ||
|  | 		{ | ||
|  | 			// The client is disabled in global config, so let's pretend we are OK
 | ||
|  | 			$return = true; | ||
|  | 		} | ||
|  | 		elseif ($options['user'] != '' && $options['pass'] != '') | ||
|  | 		{ | ||
|  | 			// Login credentials are available in global config
 | ||
|  | 			$return = true; | ||
|  | 		} | ||
|  | 		else | ||
|  | 		{ | ||
|  | 			// Check if login credentials are available in the session
 | ||
|  | 			$session = JFactory::getSession(); | ||
|  | 			$user = $session->get($client . '.user', null, 'JClientHelper'); | ||
|  | 			$pass = $session->get($client . '.pass', null, 'JClientHelper'); | ||
|  | 
 | ||
|  | 			if ($user != '' && $pass != '') | ||
|  | 			{ | ||
|  | 				$return = true; | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return $return; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Determine whether input fields for client settings need to be shown | ||
|  | 	 * | ||
|  | 	 * If valid credentials were passed along with the request, they are saved to the session. | ||
|  | 	 * This functions returns an exception if invalid credentials have been given or if the | ||
|  | 	 * connection to the server failed for some other reason. | ||
|  | 	 * | ||
|  | 	 * @param   string  $client  The name of the client. | ||
|  | 	 * | ||
|  | 	 * @return  mixed  True, if FTP settings; JError if using legacy tree. | ||
|  | 	 * | ||
|  | 	 * @since   11.1 | ||
|  | 	 * @throws  InvalidArgumentException if credentials invalid | ||
|  | 	 */ | ||
|  | 	public static function setCredentialsFromRequest($client) | ||
|  | 	{ | ||
|  | 		// Determine whether FTP credentials have been passed along with the current request
 | ||
|  | 		$input = JFactory::getApplication()->input; | ||
|  | 		$user = $input->post->getString('username', null); | ||
|  | 		$pass = $input->post->getString('password', null); | ||
|  | 
 | ||
|  | 		if ($user != '' && $pass != '') | ||
|  | 		{ | ||
|  | 			// Add credentials to the session
 | ||
|  | 			if (self::setCredentials($client, $user, $pass)) | ||
|  | 			{ | ||
|  | 				$return = false; | ||
|  | 			} | ||
|  | 			else | ||
|  | 			{ | ||
|  | 				if (class_exists('JError')) | ||
|  | 				{ | ||
|  | 					$return = JError::raiseWarning('SOME_ERROR_CODE', JText::_('JLIB_CLIENT_ERROR_HELPER_SETCREDENTIALSFROMREQUEST_FAILED')); | ||
|  | 				} | ||
|  | 				else | ||
|  | 				{ | ||
|  | 					throw new InvalidArgumentException('Invalid user credentials'); | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 		else | ||
|  | 		{ | ||
|  | 			// Just determine if the FTP input fields need to be shown
 | ||
|  | 			$return = !self::hasCredentials('ftp'); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return $return; | ||
|  | 	} | ||
|  | } |