Skip to content
This repository was archived by the owner on Jul 13, 2023. It is now read-only.

Commit 813527a

Browse files
committed
Add migration flag to be managed with user
Signed-off-by: Bernd.Rederlechner@t-systems.com <bernd.rederlechner@t-systems.com>
1 parent da1ed9d commit 813527a

File tree

5 files changed

+89
-34
lines changed

5 files changed

+89
-34
lines changed

README.md

+6-2
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ Get the details for an username or id.
7979
"email" : "primeolli@pattern.cloud",
8080
"quota" : "25GB",
8181
"altemail" : "secolli@pattern.cloud", // optional
82+
"migrated" : false, // optional parameter, default = true
8283
"enabled" : false // optional parameter, default = true
8384
}
8485
```
@@ -112,10 +113,13 @@ Update all information about a user without changing id or username.
112113
"email" : "primeolli@pattern.biz",
113114
"quota" : "1TB",
114115
"altemail" : "secolli@pattern.cloud",
115-
"enabled" : true
116+
"migrated" : false,
117+
"enabled" : true
116118
}
117119
```
118-
You can selectively send any combination of fields.
120+
You can selectively send any combination of fields, except 'enabled'.
121+
If you want to keep a disabled user disabled, you have to explicitly set ''enabled': false'
122+
again.
119123

120124
### Success Responses
121125
**Code** : `200 OK`

appinfo/info.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<name>NextMagentaCloud OpenID Connect user management util</name>
66
<summary>Utility app for NextMagentaCloud to create OpenID connect users</summary>
77
<description>This utility app supports NextMagentaCloud migration to create OpenID users with file content before actual first login.</description>
8-
<version>0.1.1</version>
8+
<version>0.2.1</version>
99
<licence>agpl</licence>
1010
<author>Bernd Rederlechner</author>
1111
<namespace>NextMagentaCloud</namespace>

lib/Controller/NmcUserApiController.php

+9-5
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ public function show($providername, $id) {
9191
* @param string|null $email
9292
* @param string|null $altemail
9393
* @param string $quota
94+
* @param bool $migrated
9495
* @param bool $enabled
9596
*/
9697
public function create(string $providername,
@@ -99,9 +100,10 @@ public function create(string $providername,
99100
$email = null,
100101
$altemail = null,
101102
string $quota = "3GB",
103+
bool $migrated = true,
102104
bool $enabled = true) {
103-
return $this->handleAlreadyExists(function () use ($providername, $username, $displayname, $email, $altemail, $quota, $enabled) {
104-
return $this->service->create($providername, $username, $displayname, $email, $altemail, $quota, $enabled);
105+
return $this->handleAlreadyExists(function () use ($providername, $username, $displayname, $email, $altemail, $quota, $migrated, $enabled) {
106+
return $this->service->create($providername, $username, $displayname, $email, $altemail, $quota, $migrated, $enabled);
105107
});
106108
}
107109

@@ -116,17 +118,19 @@ public function create(string $providername,
116118
* @param string|null $email
117119
* @param string|null $altemail
118120
* @param string|null $quota
119-
* @param bool $enabled
121+
* @param bool|null $migrated
122+
* @param bool|null $enabled
120123
*/
121124
public function update(string $providername,
122125
string $id,
123126
$displayname,
124127
$email,
125128
$altemail,
126129
$quota,
130+
$migrated,
127131
bool $enabled = true) {
128-
return $this->handleNotFound(function () use ($providername, $id, $displayname, $email, $altemail, $quota, $enabled) {
129-
return $this->service->update($providername, $id, $displayname, $email, $altemail, $quota, $enabled);
132+
return $this->handleNotFound(function () use ($providername, $id, $displayname, $email, $altemail, $quota, $migrated, $enabled) {
133+
return $this->service->update($providername, $id, $displayname, $email, $altemail, $quota, $migrated, $enabled);
130134
});
131135
}
132136

lib/Service/NmcUserService.php

+35-6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace OCA\NextMagentaCloud\Service;
44

5+
use OCP\IConfig;
56
use OCP\IUserManager;
67
use OCP\IServerContainer;
78
use OCP\Accounts\IAccountManager;
@@ -20,7 +21,7 @@
2021
use OCP\AppFramework\Db\DoesNotExistException;
2122
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
2223

23-
24+
use OCA\NextMagentaCloud\AppInfo\Application;
2425

2526
use RuntimeException;
2627

@@ -35,6 +36,9 @@ class NmcUserService {
3536
/** @var IServerContainer */
3637
private $serverc;
3738

39+
/** @var IConfig */
40+
private $config;
41+
3842
/** @var UserMapper */
3943
private $oidcUserMapper;
4044

@@ -50,13 +54,15 @@ class NmcUserService {
5054
public function __construct(IUserManager $userManager,
5155
IAccountManager $accountManager,
5256
IServerContainer $serverContainer,
57+
IConfig $config,
5358
UserMapper $oidcUserMapper,
5459
ProviderMapper $oidcProviderMapper,
5560
IProvider $tokenProvider,
5661
ISecureRandom $random) {
5762
$this->userManager = $userManager;
5863
$this->accountManager = $accountManager;
5964
$this->serverc = $serverContainer;
65+
$this->config = $config;
6066
$this->oidcUserMapper = $oidcUserMapper;
6167
$this->oidcProviderMapper = $oidcProviderMapper;
6268
$this->tokenProvider = $tokenProvider;
@@ -129,6 +135,20 @@ protected function userExists(string $provider, string $username) {
129135
}
130136
}
131137

138+
/**
139+
* Set migration flag to user settings $user->getUID()
140+
*/
141+
protected function setMigrationFlag($userId, bool $flag) {
142+
$this->config->setUserValue($userId, Application::APP_NAME, 'migrated', $flag ? 1 : 0 );
143+
}
144+
145+
/**
146+
* get migration flag to user settings
147+
*/
148+
protected function getMigrationFlag($userId) {
149+
return $this->config->getUserValue($userId, Application::APP_NAME, 'migrated', 0) == 1 ? true : false ;
150+
}
151+
132152
/**
133153
* Get openid user data based on username in id system or
134154
* by the generic hash id used by NextCloud user_oidc
@@ -145,6 +165,7 @@ public function find(string $provider, string $username) {
145165
'altemail' => $userAccount->getProperty(IAccountManager::PROPERTY_ADDRESS)->getValue(), // tmp location only
146166
'quota' => $user->getQuota(),
147167
'enabled' => $user->isEnabled(),
168+
'migrated' => $this->getMigrationFlag($user->getUID())
148169
];
149170
} catch (DoesNotExistException | MultipleObjectsReturnedException $eNotFound) {
150171
throw new NotFoundException($eNotFound->getMessage());
@@ -181,6 +202,7 @@ protected function createDbUser(string $providerId, string $username) {
181202
return $this->oidcUserMapper->insert($user);
182203
}
183204

205+
184206
/**
185207
* Create a compliant user for
186208
*/
@@ -190,10 +212,11 @@ public function create(string $provider,
190212
$email = null,
191213
$altemail = null,
192214
string $quota = "3 GB",
215+
bool $migrated = true,
193216
bool $enabled = true) {
194217
$providerId = $this->findProviderByIdentifier($provider);
195218
if ($this->userExists($providerId, $username)) {
196-
throw new UserExistException("OpenID user " . $username . "," . $oidcUserId . " already exists!");
219+
throw new UserExistException("OpenID user " . $provider . ":" . $username . " already exists!");
197220
}
198221

199222
$oidcUser = $this->createDbUser($providerId, $username);
@@ -214,6 +237,7 @@ public function create(string $provider,
214237

215238
$user->setQuota($quota);
216239
$user->setEnabled($enabled);
240+
$this->setMigrationFlag($user->getUID(), $migrated);
217241

218242
try {
219243
$userFolder = $this->serverc->getUserFolder($user->getUID());
@@ -242,7 +266,8 @@ public function update(string $provider,
242266
$email = null,
243267
$altemail = null,
244268
$quota = null,
245-
bool $enabled = true) {
269+
$migrated = null,
270+
bool $enabled = null) {
246271
$user = $this->findUser($provider, $username);
247272
$oidcUser = $this->oidcUserMapper->getUser($user->getUID());
248273
$userAccount = $this->accountManager->getAccount($user);
@@ -259,10 +284,13 @@ public function update(string $provider,
259284
if ($quota !== null) {
260285
$user->setQuota($quota);
261286
}
262-
$user->setEnabled($enabled);
263-
287+
if ($migrated !== null) {
288+
$this->setMigrationFlag($user->getUID(), $migrated);
289+
}
290+
if ($enabled !== null) {
291+
$user->setEnabled($enabled);
292+
}
264293
if ($displayname !== null) {
265-
$oidcUser->setDisplayName($displayname);
266294
$oidcUser->setDisplayName($displayname);
267295
$this->oidcUserMapper->update($oidcUser);
268296
}
@@ -274,6 +302,7 @@ public function update(string $provider,
274302
'altemail' => $userAccount->getProperty(IAccountManager::PROPERTY_ADDRESS)->getValue(), // tmp location only
275303
'quota' => $user->getQuota(),
276304
'enabled' => $user->isEnabled(),
305+
'migrated' => $this->getMigrationFlag($user->getUID())
277306
];
278307
}
279308

tests/README.md

+38-20
Original file line numberDiff line numberDiff line change
@@ -6,100 +6,118 @@ tail -f /var/log/nextcloud/nextcloud.json.log |jq 'select(.user=="apitest")'
66
# Some example tests with curl:
77
- GET, user not found:
88
```
9-
curl -i -u apitest:qL***u -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/12345
9+
curl -i -u apitest:qL*** u -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/12345
1010
```
1111

1212
- GET, provider not found:
1313
```
14-
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/o2/2f9cee4eab29cd216733b3ddde2o2c693730131c9fb1b2f6c893e1ec9b8
14+
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/o2/2f9cee4eab29cd216733b3ddde2o2c693730131c9fb1b2f6c893e1ec9b8
1515
```
1616

1717
- GET, existing user. anid/username key
1818
```
19-
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
19+
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
2020
```
2121

2222
- GET, no limit
2323
```
24-
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom
24+
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom
2525
```
2626

2727
- GET list, limit
2828
```
29-
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom?limit=1
29+
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom?limit=1
3030
```
3131

3232
- GET list, offset
3333
```
34-
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom?offset=1
34+
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom?offset=1
3535
```
3636

3737
- GET list, offset, limit
3838
```
39-
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom?offset=1&limit=3
39+
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom?offset=1&limit=3
4040
```
4141

4242

4343
- CREATE, with known anid/username, no email:
4444
```
45-
curl -i -u apitest:*** -X POST -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{"username": "120049010000000006612061", "displayname": "User, Test", "quota": "3GB" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom
45+
curl -i -u apitest:*** -X POST -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{"username": "120049010000000006612061", "displayname": "User, Test", "quota": "3GB" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom
4646
```
4747
On second call, there should be a `409 CONFLICT` because user already exists
4848

49+
- CREATE, with known anid/username, no quota, email, altemail, migrated, disabled:
50+
```
51+
curl -i -u apitest:*** -X POST -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{"username": "120049010000000006615089", "displayname": "User, Test", "email": "nmcloud03@ver.sul.t-online.de", "altemail": "fool@fool.cloud", "enabled": false, "migrated": true}' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom
52+
```
53+
4954
- CREATE, with known anid/username, no quota, email, altemail:
5055
```
51-
curl -i -u apitest:*** -X POST -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{"username": "120049010000000006613061", "displayname": "User, Test", "email": "nmcloud03@ver.sul.t-online.de", "altemail": "fool@fool.cloud"}' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom
56+
curl -i -u apitest:*** -X POST -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{"username": "120049010000000006613061", "displayname": "User, Test", "email": "nmcloud03@ver.sul.t-online.de", "altemail": "fool@fool.cloud"}' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom
5257
```
5358

5459

60+
5561
- PUT update, user not found:
56-
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "displayname": "User, Test2" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/12345
62+
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "displayname": "User, Test2" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/12345
5763

5864
- PUT update, provider not found:
59-
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "displayname": "User, Test2" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/o2/120049010000000006612061
65+
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "displayname": "User, Test2" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/o2/120049010000000006612061
6066

6167
- PUT update, anid/username key, displayname change only
6268
```
63-
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "displayname": "User, Test2" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
69+
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "displayname": "User, Test2" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
70+
```
71+
72+
- PUT update, anid/username key, disable only
73+
```
74+
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "enabled": true }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
75+
```
76+
77+
- PUT update, anid/username key, migration flag
78+
```
79+
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "migrated": true }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
6480
```
6581

82+
83+
6684
- PUT update, anid/username key, account changes on quota only
6785
```
68-
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "quota": "1TB" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
86+
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "quota": "1TB" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
6987
```
7088

7189
- PUT update, anid/username key, changes on displayname, email and altemail only
7290
```
73-
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "email": "nmcloud02@ver.sul.magenta.de", "altemail": "fool2@foolish.org" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
91+
curl -i -u apitest:*** -X PUT -H "Content-Type: application/json" -H "Accept: application/json" --data-raw '{ "email": "nmcloud02@ver.sul.magenta.de", "altemail": "fool2@foolish.org" }' https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
7492
```
7593

7694

7795
- DELETE, not found
7896
```
79-
curl -i -u apitest:*** -X DELETE https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/12345
97+
curl -i -u apitest:*** -X DELETE https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/12345
8098
```
8199

82100
- DELETE, existing user with id
83101
```
84-
curl -i -u apitest:*** -X DELETE https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/2f9cee4eab29cd216733b3ddde29ab209ec693730131c9fb1b2f6c893e1ec9b8
102+
curl -i -u apitest:*** -X DELETE https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/2f9cee4eab29cd216733b3ddde29ab209ec693730131c9fb1b2f6c893e1ec9b8
85103
```
86104

87105
- DELETE, existing user with anid/username
88106
```
89-
curl -i -u apitest:*** -X DELETE https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
107+
curl -i -u apitest:*** -X DELETE https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/nmcusers/telekom/120049010000000006612061
90108
```
91109

92110
- GET token, not found
93111
```
94-
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/token/telekom/12345
112+
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/token/telekom/12345
95113
```
96114

97115
- GET token, existing user by id hash:
98116
```
99-
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/token/telekom/2f9cee4eab29cd216733b3ddde29ab209ec693730131c9fb1b2f6c893e1ec9b8
117+
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/token/telekom/2f9cee4eab29cd216733b3ddde29ab209ec693730131c9fb1b2f6c893e1ec9b8
100118
```
101119

102120
- GET token, existing user by anid/username:
103121
```
104-
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/token/telekom/120049010000000006612061
122+
curl -i -u apitest:*** -X GET https://dev2.next.magentacloud.de/apps/nmcuser_oidc/api/1.1/token/telekom/120049010000000006612061
105123
```

0 commit comments

Comments
 (0)