-
-
Notifications
You must be signed in to change notification settings - Fork 4.8k
Expand file tree
/
Copy pathUtil.php
More file actions
127 lines (111 loc) · 2.81 KB
/
Util.php
File metadata and controls
127 lines (111 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
/**
* SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCA\Encryption;
use OC\Files\Storage\Storage;
use OC\Files\View;
use OCA\Encryption\Crypto\Crypt;
use OCP\Files\Storage\IStorage;
use OCP\IAppConfig;
use OCP\IConfig;
use OCP\IUser;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\PreConditionNotMetException;
class Util {
private IUser|false $user;
public function __construct(
private View $files,
private Crypt $crypt,
IUserSession $userSession,
private IConfig $config,
private IAppConfig $appConfig,
private IUserManager $userManager,
) {
$this->user = $userSession->isLoggedIn() ? $userSession->getUser() : false;
}
/**
* check if recovery key is enabled for user
*
* @param string $uid
* @return bool
*/
public function isRecoveryEnabledForUser($uid) {
$recoveryMode = $this->config->getUserValue($uid,
'encryption',
'recoveryEnabled',
'0');
return ($recoveryMode === '1');
}
/**
* check if the home storage should be encrypted
*
* @return bool
*/
public function shouldEncryptHomeStorage() {
return $this->appConfig->getValueBool('encryption', 'encryptHomeStorage', true);
}
/**
* set the home storage encryption on/off
*
* @param bool $encryptHomeStorage
*/
public function setEncryptHomeStorage($encryptHomeStorage) {
$this->appConfig->setValueBool('encryption', 'encryptHomeStorage', (bool)$encryptHomeStorage);
}
/**
* check if master key is enabled
*/
public function isMasterKeyEnabled(): bool {
$userMasterKey = $this->config->getAppValue('encryption', 'useMasterKey', '1');
return ($userMasterKey === '1');
}
/**
* @param $enabled
* @return bool
*/
public function setRecoveryForUser($enabled) {
$value = $enabled ? '1' : '0';
try {
$this->config->setUserValue($this->user->getUID(),
'encryption',
'recoveryEnabled',
$value);
return true;
} catch (PreConditionNotMetException $e) {
return false;
}
}
/**
* @param string $uid
* @return bool
*/
public function userHasFiles($uid) {
return $this->files->file_exists($uid . '/files');
}
/**
* get owner from give path, path relative to data/ expected
*
* @param string $path relative to data/
* @return string
* @throws \BadMethodCallException
*/
public function getOwner($path) {
$owner = '';
$parts = explode('/', $path, 3);
if (count($parts) > 1) {
$owner = $parts[1];
if ($this->userManager->userExists($owner) === false) {
throw new \BadMethodCallException('Unknown user: '
. 'method expects path to a user folder relative to the data folder');
}
}
return $owner;
}
public function getStorage(string $path): ?IStorage {
return $this->files->getMount($path)->getStorage();
}
}