From dd938962d819ab4a617d8d6aaa08a7ab96bb1a0b Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@nibio.no> Date: Tue, 2 May 2023 14:17:22 +0200 Subject: [PATCH] Add func for user password reset --- src/components/CommonUtil.vue | 2 ++ src/components/DeleteUserForm.vue | 1 - src/components/LoginSystem.vue | 53 +++++++++++++++++++++++++++---- src/locales/en.json | 7 +++- src/locales/nb.json | 5 +++ static/css/vipsobsapp.css | 16 ++++++---- 6 files changed, 69 insertions(+), 15 deletions(-) diff --git a/src/components/CommonUtil.vue b/src/components/CommonUtil.vue index ecff902..bbd64eb 100644 --- a/src/components/CommonUtil.vue +++ b/src/components/CommonUtil.vue @@ -41,6 +41,8 @@ CONST_URL_AUTH_UUID: '/rest/auth/uuid', CONST_URL_AUTH_LOGIN: '/rest/auth/login', CONST_URL_LAST_TIMESTAMP: '/rest/observation/organismsystemupdated', + + CONST_URL_USER: '/user', CONST_URL_CROP_CATEGORY: '/rest/organism/cropcategory/', CONST_URL_CROP_LIST: '/rest/organism/crop/list', diff --git a/src/components/DeleteUserForm.vue b/src/components/DeleteUserForm.vue index c0571ec..e4ccef2 100644 --- a/src/components/DeleteUserForm.vue +++ b/src/components/DeleteUserForm.vue @@ -93,7 +93,6 @@ }, autoLogout: function() { this.$root.$emit("autoLogout"); - console.info("AutoLogout!") } } } diff --git a/src/components/LoginSystem.vue b/src/components/LoginSystem.vue index e062597..29992bd 100644 --- a/src/components/LoginSystem.vue +++ b/src/components/LoginSystem.vue @@ -43,12 +43,31 @@ :aria-label="$t('login.pwd.field.placeholder')" v-model="password" v-on:keyup.enter="handleLogin()" /> </div> - - <button class="btn btn-primary" type="button" v-on:click="handleLogin()" - v-on:keyup.enter="handleLogin()"> - {{ $t("login.button.label")}} - </button> - <router-link to="/RegisterUserForm" class="btn btn-warning" onclick="$('.offcanvas-collapse').toggleClass('open')">{{ $t("registeruser.button.label") }}</router-link> + <div class="form-group"> + <button class="btn btn-primary" type="button" v-on:click="handleLogin()" + v-on:keyup.enter="handleLogin()"> + {{ $t("login.button.label")}} + </button> + <router-link to="/RegisterUserForm" class="btn btn-warning" onclick="$('.offcanvas-collapse').toggleClass('open')">{{ $t("registeruser.button.label") }}</router-link> + </div> + <div v-show="!showForgottenPasswordForm && !showForgottenPasswordSubmitSuccessMsg" class="form-group" v-on:click="showForgottenPasswordForm=true"><a href="#" class="card-link">{{ $t("login.forgotpassword.label") }}</a></div> + <div v-show="showForgottenPasswordForm" > + <h4>{{ $t("login.forgotpassword.label") }}</h4> + {{ $t("login.forgotpassword.description")}} + <div class="form-group"> + <input type="text" class="form-control" v-model="email" :placeholder="$t('login.forgotpassword.field.placeholder')"/> + </div> + <div class="form-group"> + <button class="btn btn-primary" type="button" v-on:click="handleForgottenPassword()"> + {{ $t("login.forgotpassword.button.label")}} + </button> + </div> + </div> + <div v-show="showForgottenPasswordSubmitSuccessMsg" class="form-group"> + <h4>{{ $t("login.forgotpassword.label") }}</h4> + {{ $t("login.forgotpassword.success.msg")}} + </div> + <div v-show="errMsg" class="alert alert-warning alert-dismissible fade show"> {{errMsg}} <button type="button" class="close" data-dismiss="alert" aria-label="Close"> @@ -92,6 +111,9 @@ isSyncNeeded: false, errMsg: '', isLogginFail: false, + email: "", + showForgottenPasswordForm: false, + showForgottenPasswordSubmitSuccessMsg: false }; }, //emits: {}, @@ -249,6 +271,25 @@ $('.offcanvas-collapse').removeClass('open'); this.$router.push('/Logout'); }, + handleForgottenPassword: async function(){ + const formData = new URLSearchParams(); + formData.append("email", this.email); + const response = await fetch( + CommonUtil.CONST_URL_DOMAIN + CommonUtil.CONST_URL_USER + "?action=resetPasswordRequestFormSubmit", + { + method: "POST", + body: formData + } + ); + if(response.status != 200) + { + alert("Something went wrong. Status code = " + response.status + ". Please contact your system administrator"); + return false; + } + this.showForgottenPasswordForm = false; + this.showForgottenPasswordSubmitSuccessMsg = true; + + }, /** Remove stored data on logout */ removeStoredData() { /* Remove localstorage */ diff --git a/src/locales/en.json b/src/locales/en.json index e583f7a..8ef9b1c 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -10,7 +10,12 @@ "login.pwd.field.placeholder": "Password", "login.systems.wrong.credential": "Wrong username and/or password. Please try again.", "logout.header.text": "Logout", - "logout.success.text": "You successfully log out ", + "logout.success.text": "You have successfully logged out ", + "login.forgotpassword.label": "Forgotten password", + "login.forgotpassword.description": "An email will be sent to the provided address, with instructions on how to reset your password.", + "login.forgotpassword.field.placeholder": "E-mail address", + "login.forgotpassword.button.label": "Send e-mail address", + "login.forgotpassword.success.msg": "Your request has been accepted. An e-mail with further instructions has been sent.", "observation.date.label": "Observation Date", "observation.quantification.label": "Quantify", "observation.quantification.form.label": "Observasjon quantification", diff --git a/src/locales/nb.json b/src/locales/nb.json index 526944b..2f59934 100644 --- a/src/locales/nb.json +++ b/src/locales/nb.json @@ -11,6 +11,11 @@ "login.systems.wrong.credential": "Feil brukernavn og/eller passord. Vennligst prøv igjen.", "logout.header.text": "Logg ut", "logout.success.text": "Du er nå utlogget", + "login.forgotpassword.label": "Glemt passord", + "login.forgotpassword.description": "En e-post sendes til den adressen du registrerer her med informasjon om hvordan du nullstiller nåværende passord og oppretter et nytt.", + "login.forgotpassword.field.placeholder": "E-postadresse", + "login.forgotpassword.button.label": "Send e-postadresse", + "login.forgotpassword.success.msg": "Din henvendelse er behandlet og akseptert. En e-post med flere instruksjoner har blitt sendt til den registrerte e-postadressen.", "observation.date.label": "Observasjonsdato", "observation.quantification.label": "Tell/kvantifiser", "observation.quantification.form.label": "Observasjonsspesifikke detaljer", diff --git a/static/css/vipsobsapp.css b/static/css/vipsobsapp.css index 5e460ef..a8186a8 100644 --- a/static/css/vipsobsapp.css +++ b/static/css/vipsobsapp.css @@ -63,13 +63,15 @@ div.addItem { bottom: 25px; right: 25px; z-index: 1000; - } - div.addItem button { - background-color: #3d8052 !important; - border-radius: 25px; - border: 0px; - font-weight: bolder; - } +} + +div.addItem button { + background-color: #3d8052 !important; + border-radius: 25px; + border: 0px; + font-weight: bolder; +} + #divAbout { padding: 10px; border: 1px solid #3d8052; -- GitLab