Blame view

sources/apps/user_external/lib/ftp.php 1.74 KB
d1bafeea1   Kload   [fix] Upgrade to ...
1
2
3
4
5
6
7
  <?php
  /**
   * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
   * This file is licensed under the Affero General Public License version 3 or
   * later.
   * See the COPYING-README file.
   */
6d9380f96   Cédric Dupont   Update sources OC...
8
9
10
11
12
13
14
15
16
17
  /**
   * User authentication against a FTP/FTPS server
   *
   * @category Apps
   * @package  UserExternal
   * @author   Robin Appelman <icewind@owncloud.com>
   * @license  http://www.gnu.org/licenses/agpl AGPL
   * @link     http://github.com/owncloud/apps
   */
  class OC_User_FTP extends \OCA\user_external\Base{
d1bafeea1   Kload   [fix] Upgrade to ...
18
19
20
  	private $host;
  	private $secure;
  	private $protocol;
6d9380f96   Cédric Dupont   Update sources OC...
21
22
23
24
25
26
  	/**
  	 * Create new FTP authentication provider
  	 *
  	 * @param string  $host   Hostname or IP of FTP server
  	 * @param boolean $secure TRUE to enable SSL
  	 */
d1bafeea1   Kload   [fix] Upgrade to ...
27
28
29
30
31
32
33
  	public function __construct($host,$secure=false) {
  		$this->host=$host;
  		$this->secure=$secure;
  		$this->protocol='ftp';
  		if($this->secure) {
  			$this->protocol.='s';
  		}
6d9380f96   Cédric Dupont   Update sources OC...
34
  		parent::__construct($this->protocol . '://' . $this->host);
d1bafeea1   Kload   [fix] Upgrade to ...
35
36
37
  	}
  
  	/**
d1bafeea1   Kload   [fix] Upgrade to ...
38
  	 * Check if the password is correct without logging in the user
6d9380f96   Cédric Dupont   Update sources OC...
39
40
41
42
43
  	 *
  	 * @param string $uid      The username
  	 * @param string $password The password
  	 *
  	 * @return true/false
d1bafeea1   Kload   [fix] Upgrade to ...
44
45
  	 */
  	public function checkPassword($uid, $password) {
6d9380f96   Cédric Dupont   Update sources OC...
46
47
48
49
50
51
52
53
54
  		if (false === array_search($this->protocol, stream_get_wrappers())) {
  			OCP\Util::writeLog(
  				'user_external',
  				'ERROR: Stream wrapper not available: ' . $this->protocol, OCP\Util::ERROR
  			);
  			return false;
  		}
  		// opendir handles the as %-encoded string, but this is not true for usernames and passwords, encode them before passing them
  		$url = sprintf('%s://%s:%s@%s/', $this->protocol, urlencode($uid), urlencode($password), $this->host);
d1bafeea1   Kload   [fix] Upgrade to ...
55
56
  		$result=@opendir($url);
  		if(is_resource($result)) {
6d9380f96   Cédric Dupont   Update sources OC...
57
  			$this->storeUser($uid);
d1bafeea1   Kload   [fix] Upgrade to ...
58
59
60
61
62
  			return $uid;
  		}else{
  			return false;
  		}
  	}
d1bafeea1   Kload   [fix] Upgrade to ...
63
  }