{"version":3,"sources":["webpack:///./src/components/ChangePasswordDialogue.vue","webpack:///./src/model/PasswordChangeRequest.ts","webpack:///./src/components/ChangePasswordDialogue.vue?5688","webpack:///./src/components/ChangePasswordDialogue.vue?333f","webpack:///./src/components/ChangePasswordDialogue.vue?6557","webpack:///./src/views/Profile.vue","webpack:///./src/views/Profile.vue?6bb2","webpack:///./src/views/Profile.vue?31ef","webpack:///./src/views/Profile.vue?c159"],"names":["render","_vm","this","_c","_self","_setupProxy","attrs","scopedSlots","_u","key","fn","_v","proxy","staticClass","on","hide","staticStyle","$event","save","isShouldShowExisting","_f","$v","passwordChange","password","model","value","callback","$$v","$set","expression","$error","checkExisting","_e","newPassword","required","validatePassword","_s","invalidPasswordMessage","repeatPassword","passwordsMatch","staticRenderFns","PasswordChangeRequest","constructor","userID","ChangePasswordDialogue","Vue","shouldShowExisting","toLowerCase","show","Utils","resetObject","$reset","$bvModal","event","button","ButtonToggler","getButton","disableButton","isValid","toastr","enableButton","user","id","Authentication","signedInUser","response","ApiClient","post","message","alert","error","get","encodeURIComponent","isOkay","validations","$touch","waitForValidation","Promise","resolve","$pending","poll","setInterval","clearInterval","__decorate","Prop","default","User","Validations","Component","components","ApiButton","component","fullname","forename","surname","email","showChangePasswordDialogue","ref","Profile","store","state","dispatch","enumToLookups","UserRole","roleOptions","filter","l","role","description","dialogue","$refs","changePassword"],"mappings":"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","file":"js/chunk-54d4ec2d.66fd61c9.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('b-modal',{attrs:{\"id\":\"changePasswordDialogue\",\"centered\":\"\",\"no-close-on-backdrop\":\"\",\"size\":\"sm\"},scopedSlots:_vm._u([{key:\"modal-header\",fn:function(){return [_c('h5',[_vm._v(\"Change Password\")])]},proxy:true},{key:\"modal-footer\",fn:function(){return [_c('div',{staticClass:\"w-100\"},[_c('div',{staticClass:\"float-left\"},[_c('div',{staticClass:\"btn-toolbar\",attrs:{\"role\":\"toolbar\"}},[_c('div',{attrs:{\"role\":\"group\"}},[_c('api-button',{attrs:{\"variant\":\"outline-secondary\",\"icon\":\"fa-ban\"},on:{\"click\":_vm.hide}},[_vm._v(\"Cancel\")])],1)])]),_c('div',{staticClass:\"float-right\"},[_c('div',{staticClass:\"btn-toolbar\",attrs:{\"role\":\"toolbar\"}},[_c('div',{attrs:{\"role\":\"group\"}},[_c('api-button',{staticClass:\"mr-3\",staticStyle:{\"background-color\":\"#1731c2\"},attrs:{\"icon\":\"fa-save\"},on:{\"click\":function($event){return _vm.save($event)}}},[_vm._v(\"Change\")])],1)])])])]},proxy:true}])},[(_vm.isShouldShowExisting)?_c('div',{staticClass:\"mb-2\"},[_c('small',[_vm._v(\"Existing password\")]),_c('b-form-input',{attrs:{\"type\":\"password\",\"id\":\"passwordChange.existingPassword\",\"autocomplete\":\"new-password\",\"state\":_vm._f(\"validationState\")(_vm.$v.passwordChange.password),\"trim\":\"\"},model:{value:(_vm.passwordChange.password),callback:function ($$v) {_vm.$set(_vm.passwordChange, \"password\", $$v)},expression:\"passwordChange.password\"}}),(_vm.$v.passwordChange.password.$error && !_vm.$v.passwordChange.password.checkExisting)?_c('b-tooltip',{attrs:{\"target\":\"passwordChange.existingPassword\",\"triggers\":\"hover\",\"placement\":\"right\"}},[_vm._v(\"Existing password is incorrect\")]):_vm._e()],1):_vm._e(),_c('div',{staticClass:\"mb-2\"},[_c('small',[_vm._v(\"New password\")]),_c('b-form-input',{attrs:{\"type\":\"password\",\"id\":\"passwordChange.newPassword\",\"autocomplete\":\"new-password\",\"state\":_vm._f(\"validationState\")(_vm.$v.passwordChange.newPassword),\"trim\":\"\"},model:{value:(_vm.passwordChange.newPassword),callback:function ($$v) {_vm.$set(_vm.passwordChange, \"newPassword\", $$v)},expression:\"passwordChange.newPassword\"}}),(_vm.$v.passwordChange.newPassword.$error && !_vm.$v.passwordChange.newPassword.required)?_c('b-tooltip',{attrs:{\"target\":\"passwordChange.newPassword\",\"triggers\":\"hover\",\"placement\":\"right\"}},[_vm._v(\"Enter a new password\")]):_vm._e(),(_vm.$v.passwordChange.newPassword.$error && !_vm.$v.passwordChange.newPassword.validatePassword)?_c('b-tooltip',{attrs:{\"target\":\"passwordChange.newPassword\",\"triggers\":\"hover\",\"placement\":\"right\"}},[_vm._v(_vm._s(_vm.invalidPasswordMessage))]):_vm._e()],1),_c('div',{staticClass:\"mb-2\"},[_c('small',[_vm._v(\"Repeat password\")]),_c('b-form-input',{attrs:{\"type\":\"password\",\"id\":\"passwordChange.repeatPassword\",\"autocomplete\":\"new-password\",\"state\":_vm._f(\"validationState\")(_vm.$v.passwordChange.repeatPassword),\"trim\":\"\"},model:{value:(_vm.passwordChange.repeatPassword),callback:function ($$v) {_vm.$set(_vm.passwordChange, \"repeatPassword\", $$v)},expression:\"passwordChange.repeatPassword\"}}),(_vm.$v.passwordChange.repeatPassword.$error && !_vm.$v.passwordChange.repeatPassword.passwordsMatch)?_c('b-tooltip',{attrs:{\"target\":\"passwordChange.repeatPassword\",\"triggers\":\"hover\",\"placement\":\"right\"}},[_vm._v(\"Passwords must match\")]):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export class PasswordChangeRequest {\r\n userID: number = 0;\r\n password: string = \"\";\r\n newPassword: string = \"\";\r\n repeatPassword: string = \"\";\r\n}","\r\n import Vue from \"vue\";\r\n import Component from \"vue-class-component\";\r\n import ApiButton from \"@/components/ApiButton.vue\";\r\n import { required } from \"vuelidate/lib/validators\";\r\n import { Validations } from \"vuelidate-property-decorators\";\r\n import { Prop } from \"vue-property-decorator\";\r\n import * as toastr from \"toastr\";\r\n\r\n import { Authentication } from \"@/utilities/Authentication\";\r\n import { ApiClient } from \"@/utilities/ApiClient\";\r\n import { User } from \"@/model/User\";\r\n import { ButtonToggler } from \"@/utilities/ButtonToggler\";\r\n import { Utils } from \"@/utilities/Utils\";\r\n import { PasswordChangeRequest } from '../model/PasswordChangeRequest';\r\n\r\n interface IPasswordCheckResult {\r\n isOkay: boolean;\r\n message: string;\r\n }\r\n\r\n @Component({\r\n components: { ApiButton }\r\n })\r\n export default class ChangePasswordDialogue extends Vue {\r\n\r\n //\r\n // -- properties\r\n //\r\n\r\n // If user is changing their _own_ password, they need to enter the old one\r\n // but if if this is in the admin section, user will be set and there's no need to know the old password\r\n // (seems that prop values passed as HTML attributes are always strings)\r\n @Prop({ default: \"true\" })\r\n shouldShowExisting!: string;\r\n\r\n @Prop({ required: true })\r\n @Prop({}) private user !: User;\r\n\r\n // boolean alias for string-typed prop (https://stackoverflow.com/questions/42715136/invalid-prop-type-check-failed-for-prop)\r\n get isShouldShowExisting(): boolean {\r\n return this.shouldShowExisting.toLowerCase() === \"true\";\r\n }\r\n\r\n passwordChange = new PasswordChangeRequest();\r\n\r\n invalidPasswordMessage: string = \"\";\r\n\r\n show() {\r\n Utils.resetObject(this.passwordChange);\r\n this.$v.$reset();\r\n this.$bvModal.show(\"changePasswordDialogue\");\r\n }\r\n\r\n hide() {\r\n this.$bvModal.hide(\"changePasswordDialogue\");\r\n Utils.resetObject(this.passwordChange);\r\n }\r\n\r\n async save(event: Event) {\r\n\r\n // validation goes off to server here - so show button spinner\r\n // (see company for non-async approach)\r\n const button = ButtonToggler.getButton(event);\r\n ButtonToggler.disableButton(button);\r\n if (!await this.isValid()) {\r\n toastr.info(\"Please fix the highlighted errors\");\r\n ButtonToggler.enableButton(button);\r\n return;\r\n }\r\n ButtonToggler.enableButton(button); // if we don't re-enable now, css is wrong when we try and re-enable later\r\n\r\n // signed-in user or other user?\r\n this.passwordChange.userID = this.user\r\n ? this.user.id\r\n : Authentication.signedInUser()?.id || 0;\r\n\r\n const response = await ApiClient.post(\"/api/user/changePassword\", this.passwordChange, event);\r\n\r\n if (response.message === \"ok\") {\r\n toastr.success(\"Changed Password\");\r\n this.hide();\r\n }\r\n else {\r\n //TODO - figure this out\r\n alert(response.error);\r\n }\r\n }\r\n\r\n //\r\n // -- validation\r\n //\r\n\r\n // Gahh! Apparently you can't debounce or throttle a validator function...\r\n // https://github.com/vuelidate/vuelidate/issues/242\r\n // (seems it might be in a future release)\r\n\r\n //private validatePassword = Utils.debounce(async (password: string) => {\r\n // const response: IPasswordCheckResult = await ApiClient.get(\"/api/user/validatePassword?password=\" + encodeURIComponent(password));\r\n // this.invalidPasswordMessage = response.message;\r\n // return response.isOkay;\r\n //}, 200);\r\n\r\n private async validatePassword(password: string): Promise {\r\n const response: IPasswordCheckResult = await ApiClient.get(\"/api/user/validatePassword?password=\" + encodeURIComponent(password));\r\n this.invalidPasswordMessage = response.message;\r\n return response.isOkay;\r\n }\r\n\r\n private async checkExisting(password: string): Promise {\r\n if (!this.isShouldShowExisting) return true;\r\n const response: IPasswordCheckResult = await ApiClient.get(\"/api/authentication/verifyPassword?password=\" + encodeURIComponent(password));\r\n this.invalidPasswordMessage = response.message;\r\n return response.isOkay;\r\n }\r\n\r\n @Validations()\r\n validations() {\r\n const validations = {\r\n passwordChange: {} as any // eslint-disable-line @typescript-eslint/no-explicit-any\r\n };\r\n validations.passwordChange.password = { checkExisting: this.checkExisting };\r\n validations.passwordChange.newPassword = { required, validatePassword: this.validatePassword };\r\n validations.passwordChange.repeatPassword = {\r\n passwordsMatch: (value: string, model: PasswordChangeRequest) => {\r\n return model.newPassword === model.repeatPassword;\r\n }\r\n };\r\n return validations;\r\n }\r\n\r\n // from https://github.com/vuelidate/vuelidate/issues/179\r\n private async isValid(): Promise {\r\n this.$v.$reset();\r\n this.$v.$touch();\r\n await this.waitForValidation();\r\n return Promise.resolve(!this.$v.$error);\r\n }\r\n\r\n // from https://github.com/vuelidate/vuelidate/issues/179\r\n private waitForValidation() {\r\n return new Promise(resolve => {\r\n if (this.$v.$error || !this.$v.$pending) {\r\n return resolve();\r\n }\r\n const poll = setInterval(() => {\r\n if (!this.$v.$pending) {\r\n clearInterval(poll)\r\n resolve()\r\n }\r\n }, 200);\r\n })\r\n }\r\n }\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChangePasswordDialogue.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChangePasswordDialogue.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ChangePasswordDialogue.vue?vue&type=template&id=5f142fa6&scoped=true&\"\nimport script from \"./ChangePasswordDialogue.vue?vue&type=script&lang=ts&\"\nexport * from \"./ChangePasswordDialogue.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5f142fa6\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',[_c('h2',{staticClass:\"mb-5\"},[_c('i',{staticClass:\"fas fa-user mr-3\"}),_vm._v(\" \"+_vm._s(_vm.user.fullname))]),_c('b-container',[_c('b-row',{staticClass:\"mb-1\"},[_c('b-col',{attrs:{\"cols\":\"4\"}},[_vm._v(\"Forename\")]),_c('b-col',[_c('b-form-input',{attrs:{\"readonly\":\"\"},model:{value:(_vm.user.forename),callback:function ($$v) {_vm.$set(_vm.user, \"forename\", $$v)},expression:\"user.forename\"}})],1)],1),_c('b-row',{staticClass:\"mb-1\"},[_c('b-col',{attrs:{\"cols\":\"4\"}},[_vm._v(\"Surname\")]),_c('b-col',[_c('b-form-input',{attrs:{\"readonly\":\"\"},model:{value:(_vm.user.surname),callback:function ($$v) {_vm.$set(_vm.user, \"surname\", $$v)},expression:\"user.surname\"}})],1)],1),_c('b-row',{staticClass:\"mb-1\"},[_c('b-col',{attrs:{\"cols\":\"4\"}},[_vm._v(\"Email address\")]),_c('b-col',[_c('b-form-input',{attrs:{\"readonly\":\"\"},model:{value:(_vm.user.email),callback:function ($$v) {_vm.$set(_vm.user, \"email\", $$v)},expression:\"user.email\"}})],1)],1),_c('b-row',{staticClass:\"mb-1\"},[_c('b-col',{attrs:{\"cols\":\"4\"}},[_vm._v(\"Password\")]),_c('b-col',[_c('b-button',{attrs:{\"variant\":\"outline-primary\"},on:{\"click\":_vm.showChangePasswordDialogue}},[_vm._v(\"Change Password\")])],1)],1)],1),_c('ChangePasswordDialogue',{ref:\"changePassword\",attrs:{\"user\":_vm.user,\"shouldShowExisting\":\"true\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n import Vue from \"vue\";\r\n import Component from \"vue-class-component\";\r\n import store from \"../store/store\";\r\n import { Utils } from \"../utilities/Utils\";\r\n import { UserRole } from \"../model/Enums\";\r\n import { User } from \"../model/User\";\r\n import { LookupItem } from '@/model/LookupItem';\r\n import ChangePasswordDialogue from \"@/components/ChangePasswordDialogue.vue\";\r\n \r\n @Component({\r\n components: { ChangePasswordDialogue }\r\n })\r\n\r\n export default class Profile extends Vue {\r\n\r\n user = new User();\r\n\r\n async mounted() {\r\n if (store.state.signedInUser == null) {\r\n await store.dispatch(\"loadSignedInUser\");\r\n }\r\n if (store.state.signedInUser !== null) {\r\n this.user = store.state.signedInUser;\r\n }\r\n }\r\n\r\n get roleOptions(): Array {\r\n return Utils.enumToLookups(UserRole);\r\n }\r\n\r\n get roleText() {\r\n return this.roleOptions.filter(l => l.id === this.user?.role)[0].description;\r\n }\r\n\r\n showChangePasswordDialogue() {\r\n const dialogue: ChangePasswordDialogue = this.$refs.changePassword as ChangePasswordDialogue;\r\n dialogue.show();\r\n }\r\n\r\n }\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Profile.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Profile.vue?vue&type=template&id=7527b789&scoped=true&\"\nimport script from \"./Profile.vue?vue&type=script&lang=ts&\"\nexport * from \"./Profile.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7527b789\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}