Blame view

sources/settings/changepassword/controller.php 3.63 KB
31b7f2792   Kload   Upgrade to ownclo...
1
2
3
4
5
6
7
8
9
  <?php
  
  namespace OC\Settings\ChangePassword;
  
  class Controller {
  	public static function changePersonalPassword($args) {
  		// Check if we are an user
  		\OC_JSON::callCheck();
  		\OC_JSON::checkLoggedIn();
31b7f2792   Kload   Upgrade to ownclo...
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  		$username = \OC_User::getUser();
  		$password = isset($_POST['personal-password']) ? $_POST['personal-password'] : null;
  		$oldPassword = isset($_POST['oldpassword']) ? $_POST['oldpassword'] : '';
  
  		if (!\OC_User::checkPassword($username, $oldPassword)) {
  			$l = new \OC_L10n('settings');
  			\OC_JSON::error(array("data" => array("message" => $l->t("Wrong password")) ));
  			exit();
  		}
  		if (!is_null($password) && \OC_User::setPassword($username, $password)) {
  			\OC_JSON::success();
  		} else {
  			\OC_JSON::error();
  		}
  	}
  
  	public static function changeUserPassword($args) {
  		// Check if we are an user
  		\OC_JSON::callCheck();
  		\OC_JSON::checkLoggedIn();
31b7f2792   Kload   Upgrade to ownclo...
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  		if (isset($_POST['username'])) {
  			$username = $_POST['username'];
  		} else {
  			$l = new \OC_L10n('settings');
  			\OC_JSON::error(array('data' => array('message' => $l->t('No user supplied')) ));
  			exit();
  		}
  
  		$password = isset($_POST['password']) ? $_POST['password'] : null;
  		$recoveryPassword = isset($_POST['recoveryPassword']) ? $_POST['recoveryPassword'] : null;
  
  		if (\OC_User::isAdminUser(\OC_User::getUser())) {
  			$userstatus = 'admin';
  		} elseif (\OC_SubAdmin::isUserAccessible(\OC_User::getUser(), $username)) {
  			$userstatus = 'subadmin';
  		} else {
  			$l = new \OC_L10n('settings');
  			\OC_JSON::error(array('data' => array('message' => $l->t('Authentication error')) ));
  			exit();
  		}
  
  		if (\OC_App::isEnabled('files_encryption')) {
  			//handle the recovery case
6d9380f96   Cédric Dupont   Update sources OC...
53
  			$util = new \OCA\Encryption\Util(new \OC\Files\View('/'), $username);
31b7f2792   Kload   Upgrade to ownclo...
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
  			$recoveryAdminEnabled = \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled');
  
  			$validRecoveryPassword = false;
  			$recoveryPasswordSupported = false;
  			if ($recoveryAdminEnabled) {
  				$validRecoveryPassword = $util->checkRecoveryPassword($recoveryPassword);
  				$recoveryEnabledForUser = $util->recoveryEnabledForUser();
  			}
  
  			if ($recoveryEnabledForUser && $recoveryPassword === '') {
  				$l = new \OC_L10n('settings');
  				\OC_JSON::error(array('data' => array(
  					'message' => $l->t('Please provide an admin recovery password, otherwise all user data will be lost')
  				)));
  			} elseif ($recoveryEnabledForUser && ! $validRecoveryPassword) {
  				$l = new \OC_L10n('settings');
  				\OC_JSON::error(array('data' => array(
  					'message' => $l->t('Wrong admin recovery password. Please check the password and try again.')
  				)));
  			} else { // now we know that everything is fine regarding the recovery password, let's try to change the password
  				$result = \OC_User::setPassword($username, $password, $recoveryPassword);
  				if (!$result && $recoveryPasswordSupported) {
  					$l = new \OC_L10n('settings');
  					\OC_JSON::error(array(
  						"data" => array(
  							"message" => $l->t("Back-end doesn't support password change, but the users encryption key was successfully updated.")
  						)
  					));
  				} elseif (!$result && !$recoveryPasswordSupported) {
  					$l = new \OC_L10n('settings');
  					\OC_JSON::error(array("data" => array( "message" => $l->t("Unable to change password" ) )));
  				} else {
  					\OC_JSON::success(array("data" => array( "username" => $username )));
  				}
  
  			}
  		} else { // if encryption is disabled, proceed
  			if (!is_null($password) && \OC_User::setPassword($username, $password)) {
  				\OC_JSON::success(array('data' => array('username' => $username)));
  			} else {
  				$l = new \OC_L10n('settings');
  				\OC_JSON::error(array('data' => array('message' => $l->t('Unable to change password'))));
  			}
  		}
  	}
  }