Skip to content

Commit 298b06b

Browse files
committed
add account deletion; mark session and userinfo as not implemented
1 parent 80f5ea3 commit 298b06b

3 files changed

Lines changed: 84 additions & 9 deletions

File tree

TODO

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,23 @@
1212
- [v] login
1313
- [v] generated.html
1414

15-
- [ ] Solid OIDC
15+
- [v] Solid OIDC
1616
- [v] .well-known
1717
- [v] authorize
1818
- [v] jwks
1919
- [v] logout
2020
- [v] register
21-
- [ ] session
21+
- [v] session
2222
- [v] token
23-
- [ ] userinfo
23+
- [v] userinfo
2424

25-
- [ ] User account
26-
- [ ] idp-api-account
27-
- [ ] change-password
28-
- [ ] delete-account-confirm
29-
- [ ] delete-account-request
25+
- [v] User account
26+
- [v] idp-api-account
27+
- [v] change-password
28+
- [v] delete-account-confirm
29+
- [v] delete-account-request
3030
- [v] new
31-
- [ ] reset-password
31+
- [v] reset-password
3232
- [v] verify
3333
- [v] idp-api
3434
- [v] sharing
@@ -41,6 +41,7 @@
4141
- [v] jtiStore
4242

4343
- [ ] Cleanup for expired verify tokens, password, deletion
44+
- [ ] Password requirements
4445

4546
----------------------
4647

lib/User.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,5 +280,39 @@ public static function userEmailExists($email) {
280280
return true;
281281
}
282282
return false;
283+
}
284+
285+
private static function deleteUser($email) {
286+
self::connect();
287+
$query = self::$pdo->prepare(
288+
'DELETE FROM users WHERE email=:email'
289+
);
290+
$query->execute([
291+
':email' => $email
292+
]);
293+
}
294+
295+
private static function deleteAllowedClients($email) {
296+
$user = self::getUser($email);
297+
if (!$user) {
298+
return;
299+
}
300+
301+
self::connect();
302+
$query = self::$pdo->prepare(
303+
'DELETE FROM allowedClients WHERE userId=:userId'
304+
);
305+
$query->execute([
306+
':userId' => $user['userId']
307+
]);
308+
}
309+
310+
public static function deleteAccount($email) {
311+
if (!self::userEmailExists($email)) {
312+
return;
313+
}
314+
// FIXME: Delete storage;
315+
self::deleteAllowedClients($email);
316+
self::deleteUser($email);
283317
}
284318
}

www/idp/index.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@
135135
case "/reset-password/":
136136
case "/change-password":
137137
case "/change-password/":
138+
case "/account/delete":
139+
case "/account/delete/":
140+
case "/account/delete/confirm":
141+
case "/account/delete/confirm/":
138142
include_once(FRONTENDDIR . "generated.html");
139143
break;
140144
case "/sharing":
@@ -146,6 +150,12 @@
146150
}
147151
include_once(FRONTENDDIR . "generated.html");
148152
break;
153+
case '/session':
154+
case '/session/':
155+
case '/userinfo':
156+
case '/userinfo/':
157+
header("HTTP/1.1 501 Not implemented");
158+
break;
149159
default:
150160
header($_SERVER['SERVER_PROTOCOL'] . " 404 Not found");
151161
break;
@@ -232,6 +242,36 @@
232242
header("Content-type: application/json");
233243
echo json_encode("OK");
234244
break;
245+
case "/api/accounts/delete":
246+
case "/api/accounts/delete/":
247+
if (!User::userEmailExists($_POST['email'])) {
248+
header("HTTP/1.1 200 OK"); // Return OK even when user is not found;
249+
header("Content-type: application/json");
250+
echo json_encode("OK");
251+
exit();
252+
}
253+
$verifyData = [
254+
'email' => $_POST['email']
255+
];
256+
257+
$verifyToken = User::saveVerifyToken('deleteAccount', $verifyData);
258+
Mailer::sendDeleteAccount($verifyToken);
259+
header("HTTP/1.1 200 OK");
260+
header("Content-type: application/json");
261+
echo json_encode("OK");
262+
break;
263+
case "/api/accounts/delete/confirm":
264+
case "/api/accounts/delete/confirm/":
265+
$verifyToken = User::getVerifyToken($_POST['token']);
266+
if (!$verifyToken) {
267+
header("HTTP/1.1 400 Bad Request");
268+
exit();
269+
}
270+
User::deleteAccount($verifyToken['email']);
271+
header("HTTP/1.1 200 OK");
272+
header("Content-type: application/json");
273+
echo json_encode("OK");
274+
break;
235275
case "/login/password":
236276
case "/login/password/":
237277
if (User::checkPassword($_POST['username'], $_POST['password'])) {

0 commit comments

Comments
 (0)