aboutsummaryrefslogtreecommitdiffstats
path: root/app/Controllers/Http/Dashboard/AccountController.ts
diff options
context:
space:
mode:
Diffstat (limited to 'app/Controllers/Http/Dashboard/AccountController.ts')
-rw-r--r--app/Controllers/Http/Dashboard/AccountController.ts80
1 files changed, 80 insertions, 0 deletions
diff --git a/app/Controllers/Http/Dashboard/AccountController.ts b/app/Controllers/Http/Dashboard/AccountController.ts
new file mode 100644
index 0000000..3c4e919
--- /dev/null
+++ b/app/Controllers/Http/Dashboard/AccountController.ts
@@ -0,0 +1,80 @@
1import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
2import { schema, rules, validator } from '@ioc:Adonis/Core/Validator';
3import crypto from 'node:crypto';
4
5export default class AccountController {
6 /**
7 * Shows the user account page
8 */
9 public async show({ auth, view }: HttpContextContract) {
10 return view.render('dashboard/account', {
11 username: auth.user?.username,
12 email: auth.user?.email,
13 lastname: auth.user?.lastname,
14 });
15 }
16
17 /**
18 * Stores user account data
19 */
20 public async store({
21 auth,
22 request,
23 response,
24 session,
25 view,
26 }: HttpContextContract) {
27 try {
28 await validator.validate({
29 schema: schema.create({
30 username: schema.string([
31 rules.required(),
32 rules.unique({
33 table: 'users',
34 column: 'username',
35 caseInsensitive: true,
36 whereNot: { id: auth.user?.id },
37 }),
38 ]),
39 email: schema.string([
40 rules.required(),
41 rules.unique({
42 table: 'users',
43 column: 'email',
44 caseInsensitive: true,
45 whereNot: { id: auth.user?.id },
46 }),
47 ]),
48 lastname: schema.string([rules.required()]),
49 }),
50 data: request.only(['username', 'email', 'lastname']),
51 });
52 } catch (error) {
53 session.flash(error.messages);
54 return response.redirect('/user/account');
55 }
56
57 // Update user account
58 const { user } = auth;
59 if (user) {
60 user.username = request.input('username');
61 user.lastname = request.input('lastname');
62 user.email = request.input('email');
63 if (request.input('password')) {
64 const hashedPassword = crypto
65 .createHash('sha256')
66 .update(request.input('password'))
67 .digest('base64');
68 user.password = hashedPassword;
69 }
70 await user.save();
71 }
72
73 return view.render('dashboard/account', {
74 username: user?.username,
75 lastname: user?.lastname,
76 email: user?.email,
77 success: user !== undefined,
78 });
79 }
80}