aboutsummaryrefslogtreecommitdiffstats
path: root/app/Controllers/Http/DashboardController.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/Controllers/Http/DashboardController.js')
-rw-r--r--app/Controllers/Http/DashboardController.js155
1 files changed, 155 insertions, 0 deletions
diff --git a/app/Controllers/Http/DashboardController.js b/app/Controllers/Http/DashboardController.js
new file mode 100644
index 0000000..aa8127f
--- /dev/null
+++ b/app/Controllers/Http/DashboardController.js
@@ -0,0 +1,155 @@
1'use strict'
2
3const {
4 validateAll
5} = use('Validator');
6
7const crypto = require('crypto');
8
9class DashboardController {
10 async login({
11 request,
12 response,
13 auth,
14 session
15 }) {
16 const validation = await validateAll(request.all(), {
17 mail: 'required|email',
18 password: 'required',
19 });
20 if (validation.fails()) {
21 session.withErrors({
22 type: 'danger',
23 message: 'Invalid mail or password'
24 }).flashExcept(['password']);
25 return response.redirect('back');
26 }
27
28 let {
29 mail,
30 password
31 } = request.all()
32
33 const hashedPassword = crypto.createHash('sha256').update(password).digest('base64');
34
35 try {
36 await auth.authenticator('session').attempt(mail, hashedPassword)
37 } catch (error) {
38 session.flash({
39 type: 'danger',
40 message: 'Invalid mail or password'
41 })
42 return response.redirect('back');
43 }
44 return response.redirect('/user/account');
45 }
46
47 async account({
48 auth,
49 view
50 }) {
51 try {
52 await auth.check()
53 } catch (error) {
54 return response.redirect('/user/login');
55 }
56
57 return view.render('dashboard.account', {
58 username: auth.user.username,
59 email: auth.user.email
60 });
61 }
62
63 async edit({
64 auth,
65 request,
66 session,
67 view,
68 response
69 }) {
70 let validation = await validateAll(request.all(), {
71 username: 'required',
72 email: 'required'
73 });
74 if (validation.fails()) {
75 session.withErrors(validation.messages()).flashExcept(['password']);
76 return response.redirect('back');
77 }
78
79 // Check new username
80 if (request.input('username') !== auth.user.username) {
81 validation = await validateAll(request.all(), {
82 username: 'required|unique:users,username',
83 email: 'required'
84 });
85 if (validation.fails()) {
86 session.withErrors(validation.messages()).flashExcept(['password']);
87 return response.redirect('back');
88 }
89 }
90
91 // Check new email
92 if (request.input('email') !== auth.user.email) {
93 validation = await validateAll(request.all(), {
94 username: 'required',
95 email: 'required|email|unique:users,email'
96 });
97 if (validation.fails()) {
98 session.withErrors(validation.messages()).flashExcept(['password']);
99 return response.redirect('back');
100 }
101 }
102
103 // Update user account
104 auth.user.username = request.input('username');
105 auth.user.email = request.input('email');
106 if (!!request.input('password')) {
107 const hashedPassword = crypto.createHash('sha256').update(request.input('password')).digest('base64');
108 auth.user.password = hashedPassword;
109 }
110 auth.user.save();
111
112 return view.render('dashboard.account', {
113 username: auth.user.username,
114 email: auth.user.email,
115 success: true
116 });
117 }
118
119 async data({
120 auth,
121 view
122 }) {
123 const general = auth.user;
124 const services = (await auth.user.services().fetch()).toJSON();
125 const workspaces = (await auth.user.workspaces().fetch()).toJSON();
126
127 return view.render('dashboard.data', {
128 username: general.username,
129 mail: general.email,
130 created: general.created_at,
131 updated: general.updated_at,
132 services,
133 workspaces,
134 });
135 }
136
137 logout({
138 auth,
139 response
140 }) {
141 auth.authenticator('session').logout();
142 return response.redirect('/user/login');
143 }
144
145 delete({
146 auth,
147 response
148 }) {
149 auth.user.delete();
150 auth.authenticator('session').logout();
151 return response.redirect('/user/login');
152 }
153}
154
155module.exports = DashboardController