From 1626f28f2063d680c0c29d0d7da5d3634f34376a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 10 Dec 2021 00:39:57 +0100 Subject: [PATCH 1/7] an incorrect login should always result in an error not in a request to reset the password --- frontend/src/views/Pages/Login.vue | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/frontend/src/views/Pages/Login.vue b/frontend/src/views/Pages/Login.vue index d5d3e25a4..0d51cc4c6 100755 --- a/frontend/src/views/Pages/Login.vue +++ b/frontend/src/views/Pages/Login.vue @@ -104,13 +104,8 @@ export default { this.$router.push('/overview') loader.hide() }) - .catch((error) => { - if (error.message.includes('No user with this credentials')) { - this.$toasted.global.error(this.$t('error.no-account')) - } else { - // : this.$t('error.no-email-verify') - this.$router.push('/reset/login') - } + .catch(() => { + this.$toasted.global.error(this.$t('error.no-account')) loader.hide() }) }, From 83a2269a42c413e68efd8d4c63e88464f526c389 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 10 Dec 2021 14:51:10 +0100 Subject: [PATCH 2/7] Update frontend/src/views/Pages/Login.vue Co-authored-by: Hannes Heine --- frontend/src/views/Pages/Login.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frontend/src/views/Pages/Login.vue b/frontend/src/views/Pages/Login.vue index 0d51cc4c6..8364f15ab 100755 --- a/frontend/src/views/Pages/Login.vue +++ b/frontend/src/views/Pages/Login.vue @@ -104,8 +104,11 @@ export default { this.$router.push('/overview') loader.hide() }) - .catch(() => { + .catch((error) => { this.$toasted.global.error(this.$t('error.no-account')) + if (error.message.uncludes('User email not validated')) { + this.$router.push('/reset/login') + } loader.hide() }) }, From 508bb774def07ba8381d942b8e60523cadd7eb79 Mon Sep 17 00:00:00 2001 From: Hannes Heine Date: Sat, 11 Dec 2021 06:17:45 +0100 Subject: [PATCH 3/7] Update Login.vue Correct own typo --- frontend/src/views/Pages/Login.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/views/Pages/Login.vue b/frontend/src/views/Pages/Login.vue index 8364f15ab..3f434268a 100755 --- a/frontend/src/views/Pages/Login.vue +++ b/frontend/src/views/Pages/Login.vue @@ -106,7 +106,7 @@ export default { }) .catch((error) => { this.$toasted.global.error(this.$t('error.no-account')) - if (error.message.uncludes('User email not validated')) { + if (error.message.includes('User email not validated')) { this.$router.push('/reset/login') } loader.hide() From 7b8426593eead482a43046ec50dd00f0e2b78267 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 13 Dec 2021 10:38:05 +0100 Subject: [PATCH 4/7] Test redirect when no password is present --- frontend/src/views/Pages/Login.spec.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/frontend/src/views/Pages/Login.spec.js b/frontend/src/views/Pages/Login.spec.js index 34175d8b3..9e8be9342 100644 --- a/frontend/src/views/Pages/Login.spec.js +++ b/frontend/src/views/Pages/Login.spec.js @@ -251,6 +251,25 @@ describe('Login', () => { it('toasts an error message', () => { expect(toastErrorMock).toBeCalledWith('error.no-account') }) + + describe('login fails with "User email not validated"', () => { + beforeEach(async () => { + apolloQueryMock.mockRejectedValue({ + message: 'User email not validated', + }) + wrapper = Wrapper() + jest.clearAllMocks() + await wrapper.find('input[placeholder="Email"]').setValue('user@example.org') + await wrapper.find('input[placeholder="form.password"]').setValue('1234') + await flushPromises() + await wrapper.find('form').trigger('submit') + await flushPromises() + }) + + it('redirects to /reset/login', () => { + expect(mockRouterPush).toBeCalledWith('/reset/login') + }) + }) }) }) }) From 7341515dad84839c62ac9694d33ebcec32139e54 Mon Sep 17 00:00:00 2001 From: elweyn Date: Mon, 13 Dec 2021 12:02:21 +0100 Subject: [PATCH 5/7] Send to /thx/login not /reset/login so the user get's a message to check to validate his account. --- frontend/src/views/Pages/Login.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/views/Pages/Login.vue b/frontend/src/views/Pages/Login.vue index 3f434268a..d7f09ea4c 100755 --- a/frontend/src/views/Pages/Login.vue +++ b/frontend/src/views/Pages/Login.vue @@ -107,7 +107,7 @@ export default { .catch((error) => { this.$toasted.global.error(this.$t('error.no-account')) if (error.message.includes('User email not validated')) { - this.$router.push('/reset/login') + this.$router.push('/thx/login') } loader.hide() }) From f1b28a640e5d27e2e51903165cec5a5fc10ad98b Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 14 Dec 2021 08:09:47 +0100 Subject: [PATCH 6/7] In case where their is no password set now we need to send the user to a page to change his password. --- frontend/src/views/Pages/Login.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/src/views/Pages/Login.vue b/frontend/src/views/Pages/Login.vue index d7f09ea4c..4d2b75d2a 100755 --- a/frontend/src/views/Pages/Login.vue +++ b/frontend/src/views/Pages/Login.vue @@ -108,6 +108,8 @@ export default { this.$toasted.global.error(this.$t('error.no-account')) if (error.message.includes('User email not validated')) { this.$router.push('/thx/login') + } else if (error.message.includes('User has no password set yet')) { + this.$router.push('/reset/login') } loader.hide() }) From 56802e967fe894f52566c313b86941778b73813e Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 21 Dec 2021 15:32:13 +0100 Subject: [PATCH 7/7] Change the Test of login.vue so we check the redirections. --- frontend/src/views/Pages/Login.spec.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/frontend/src/views/Pages/Login.spec.js b/frontend/src/views/Pages/Login.spec.js index 9e8be9342..f9fde0e1e 100644 --- a/frontend/src/views/Pages/Login.spec.js +++ b/frontend/src/views/Pages/Login.spec.js @@ -266,6 +266,25 @@ describe('Login', () => { await flushPromises() }) + it('redirects to /thx/login', () => { + expect(mockRouterPush).toBeCalledWith('/thx/login') + }) + }) + + describe('login fails with "User has no password set yet"', () => { + beforeEach(async () => { + apolloQueryMock.mockRejectedValue({ + message: 'User has no password set yet', + }) + wrapper = Wrapper() + jest.clearAllMocks() + await wrapper.find('input[placeholder="Email"]').setValue('user@example.org') + await wrapper.find('input[placeholder="form.password"]').setValue('1234') + await flushPromises() + await wrapper.find('form').trigger('submit') + await flushPromises() + }) + it('redirects to /reset/login', () => { expect(mockRouterPush).toBeCalledWith('/reset/login') })