aboutsummaryrefslogtreecommitdiffstats
path: root/start
diff options
context:
space:
mode:
authorLibravatar vantezzen <hello@vantezzen.io>2020-04-02 17:09:11 +0200
committerLibravatar vantezzen <hello@vantezzen.io>2020-04-02 17:09:11 +0200
commit6ed9da44690d5f68a5bb4e398c0a4ad4083ed6fa (patch)
tree77778897d7411d7c273d1b1bdf7caf7ba75f85e2 /start
parentUpgrade dependencies (diff)
downloadferdium-server-6ed9da44690d5f68a5bb4e398c0a4ad4083ed6fa.tar.gz
ferdium-server-6ed9da44690d5f68a5bb4e398c0a4ad4083ed6fa.tar.zst
ferdium-server-6ed9da44690d5f68a5bb4e398c0a4ad4083ed6fa.zip
#16 Implement Password reset
Diffstat (limited to 'start')
-rw-r--r--start/app.js2
-rw-r--r--start/events.js23
-rw-r--r--start/routes.js23
3 files changed, 47 insertions, 1 deletions
diff --git a/start/app.js b/start/app.js
index d0986fe..62a5ac3 100644
--- a/start/app.js
+++ b/start/app.js
@@ -20,6 +20,8 @@ const providers = [
20 '@adonisjs/framework/providers/ViewProvider', 20 '@adonisjs/framework/providers/ViewProvider',
21 '@adonisjs/session/providers/SessionProvider', 21 '@adonisjs/session/providers/SessionProvider',
22 '@adonisjs/shield/providers/ShieldProvider', 22 '@adonisjs/shield/providers/ShieldProvider',
23 '@adonisjs/persona/providers/PersonaProvider',
24 '@adonisjs/mail/providers/MailProvider',
23]; 25];
24 26
25/* 27/*
diff --git a/start/events.js b/start/events.js
new file mode 100644
index 0000000..0b7e28a
--- /dev/null
+++ b/start/events.js
@@ -0,0 +1,23 @@
1const Event = use('Event');
2const Mail = use('Mail');
3const Env = use('Env');
4
5Event.on('forgot::password', async ({ user, token }) => {
6 const body = `
7Hello ${user.username},
8we just recieved a request to reset your password of your Ferdi account.
9Use the link below to reset your password. If you havn't requested this, please ignore this message.
10
11${Env.get('APP_URL')}/user/reset?token=${encodeURIComponent(token)}
12
13This message was sent automatically. Please do not reply.
14`;
15console.log('Sending message', body);
16 try {
17 await Mail.raw(body, (message) => {
18 message.subject('[Ferdi] Reset your password')
19 message.from('noreply@getferdi.com')
20 message.to(user.email)
21 });
22 } catch(e) {}
23}); \ No newline at end of file
diff --git a/start/routes.js b/start/routes.js
index b96fa16..1c2d4f3 100644
--- a/start/routes.js
+++ b/start/routes.js
@@ -65,16 +65,37 @@ if (Env.get('IS_DASHBOARD_ENABLED') != 'false') {
65 // Auth 65 // Auth
66 Route.get('login', ({ view }) => view.render('dashboard.login')).middleware('guest'); 66 Route.get('login', ({ view }) => view.render('dashboard.login')).middleware('guest');
67 Route.post('login', 'DashboardController.login').middleware('guest').as('login'); 67 Route.post('login', 'DashboardController.login').middleware('guest').as('login');
68 68
69 // Reset password
70 Route.get('forgot', ({ view }) => view.render('dashboard.forgotPassword')).middleware('guest');
71 Route.post('forgot', 'DashboardController.forgotPassword').middleware('guest');
72
73 Route.get('reset', ({ view, request }) => {
74 const token = request.get().token;
75 if (token) {
76 return view.render('dashboard.resetPassword', { token })
77 } else {
78 return view.render('others.message', {
79 heading: 'Invalid token',
80 text: 'Please make sure you are using a valid and recent link to reset your password.',
81 });
82 }
83 }).middleware('guest');
84 Route.post('reset', 'DashboardController.resetPassword').middleware('guest');
85
69 // Dashboard 86 // Dashboard
70 Route.get('account', 'DashboardController.account').middleware('auth:session'); 87 Route.get('account', 'DashboardController.account').middleware('auth:session');
71 Route.post('account', 'DashboardController.edit').middleware('auth:session'); 88 Route.post('account', 'DashboardController.edit').middleware('auth:session');
89
72 Route.get('data', 'DashboardController.data').middleware('auth:session'); 90 Route.get('data', 'DashboardController.data').middleware('auth:session');
91
73 Route.get('export', 'DashboardController.export').middleware('auth:session'); 92 Route.get('export', 'DashboardController.export').middleware('auth:session');
74 Route.post('transfer', 'DashboardController.import').middleware('auth:session'); 93 Route.post('transfer', 'DashboardController.import').middleware('auth:session');
75 Route.get('transfer', ({ view }) => view.render('dashboard.transfer')).middleware('auth:session'); 94 Route.get('transfer', ({ view }) => view.render('dashboard.transfer')).middleware('auth:session');
95
76 Route.get('delete', ({ view }) => view.render('dashboard.delete')).middleware('auth:session'); 96 Route.get('delete', ({ view }) => view.render('dashboard.delete')).middleware('auth:session');
77 Route.post('delete', 'DashboardController.delete').middleware('auth:session'); 97 Route.post('delete', 'DashboardController.delete').middleware('auth:session');
98
78 Route.get('logout', 'DashboardController.logout').middleware('auth:session'); 99 Route.get('logout', 'DashboardController.logout').middleware('auth:session');
79 100
80 Route.get('*', ({ response }) => response.redirect('/user/account')); 101 Route.get('*', ({ response }) => response.redirect('/user/account'));