diff --git a/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/account-service/account.service.js b/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/account-service/account.service.js
index b72e2c1e350cf29c51f7531b7b07ef628652826b..4b2cc3ae32d157a4d003ccb3a592bb08aab23589 100644
--- a/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/account-service/account.service.js
+++ b/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/account-service/account.service.js
@@ -42,23 +42,15 @@ export class AccountServiceClient {
     this.mailPassUrl = this.kcSvc.authServerUrl() + 'realms/' + this.kcSvc.realm() + '/mailpass/roleauth/compute-password-hash';
   }
 
-  checkToken() {
-    return this.kcSvc.authenticated();
-  }
-
-  checkRealmRole(role) {
-    return this.kcSvc.realmRole(role);
-  }
-
-  async doPost2(endpoint, body, config) {
-    return this.doRequest2(endpoint, { ...config,
+  async doMailPassPost(endpoint, body, config) {
+    return this.doMailPassRequest(endpoint, { ...config,
       body: JSON.stringify(body),
       method: 'post'
     });
   }
 
-  async doRequest2(endpoint, config) {
-    const response = await fetch(this.makeUrl2(endpoint, config).toString(), (await this.makeConfig(config)));
+  async doMailPassRequest(endpoint, config) {
+    const response = await fetch(this.makeMailPassUrl(endpoint, config).toString(), await this.makeConfig(config));
     let data = "";
 
     try {
@@ -74,7 +66,7 @@ export class AccountServiceClient {
     return data;
   }
 
-  makeUrl2(endpoint, config) {
+  makeMailPassUrl(endpoint, config) {
     if (endpoint.startsWith('http')) return new URL(endpoint);
     const url = new URL(this.mailPassUrl + endpoint); // add request params
 
@@ -113,7 +105,7 @@ export class AccountServiceClient {
   }
 
   async doRequest(endpoint, config) {
-    const response = await fetch(this.makeUrl(endpoint, config).toString(), (await this.makeConfig(config)));
+    const response = await fetch(this.makeUrl(endpoint, config).toString(), await this.makeConfig(config));
 
     try {
       response.data = await response.json();
diff --git a/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/account-service/account.service.js.map b/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/account-service/account.service.js.map
index 8a59ecf2f7a85aa612ff9154b226f20d011ec2fb..d48c76d1c89239507da7ca31f41f60c775742b4d 100644
--- a/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/account-service/account.service.js.map
+++ b/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/account-service/account.service.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../src/app/account-service/account.service.ts"],"names":["ContentAlert","AccountServiceError","Error","constructor","response","statusText","AccountServiceClient","keycloakService","kcSvc","accountUrl","authServerUrl","realm","mailPassUrl","checkToken","authenticated","checkRealmRole","role","realmRole","doPost2","endpoint","body","config","doRequest2","JSON","stringify","method","fetch","makeUrl2","toString","makeConfig","data","text","e","ok","handleError","startsWith","URL","url","hasOwnProperty","params","Object","keys","forEach","key","searchParams","append","doGet","doRequest","doDelete","doPost","doPut","makeUrl","json","status","login","window","location","href","baseUrl","danger","Promise","resolve","getToken","then","token","headers","Authorization","catch","addEventListener","event","promise","error","preventDefault"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat Inc. and/or its affiliates and other contributors\n * as indicated by the @author tags. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nimport {KeycloakService} from '../keycloak-service/keycloak.service';\nimport {ContentAlert} from '../content/ContentAlert';\n\ndeclare const baseUrl: string;\n\ntype ConfigResolve = (config: RequestInit) => void;\n\nexport interface HttpResponse<T = {}> extends Response {\n    data?: T;\n}\n\nexport interface RequestInitWithParams extends RequestInit {\n    params?: {[name: string]: string | number};\n}\n\nexport class AccountServiceError extends Error {\n    constructor(public response: HttpResponse) {\n        super(response.statusText);\n    }\n}\n\n/**\n *\n * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.\n */\nexport class AccountServiceClient {\n    private kcSvc: KeycloakService;\n    private accountUrl: string;\n    private mailPassUrl: string;\n\n    public constructor(keycloakService: KeycloakService) {\n        this.kcSvc = keycloakService;\n        this.accountUrl = this.kcSvc.authServerUrl() + 'realms/' + this.kcSvc.realm() + '/account';\n        this.mailPassUrl = this.kcSvc.authServerUrl() + 'realms/' + this.kcSvc.realm() + '/mailpass/roleauth/compute-password-hash';\n    };\n\n    public checkToken() {\n        return this.kcSvc.authenticated();\n    }\n\n    public checkRealmRole(role:string) {\n        return this.kcSvc.realmRole(role);\n    }\n\n    public async doPost2<T>(endpoint: string,\n                          body: string | {},\n                          config?: RequestInitWithParams): Promise<string> {\n        return this.doRequest2(endpoint, {...config, body: JSON.stringify(body), method: 'post'});\n    }\n\n    public async doRequest2<T>(endpoint: string,\n                              config?: RequestInitWithParams): Promise<string> {\n\n        const response: HttpResponse<T> = await fetch(this.makeUrl2(endpoint, config).toString(),\n                                                      await this.makeConfig(config));\n\n        let data = \"\";\n        try {\n            data = await response.text();\n        } catch (e) {} // ignore.  Might be empty\n\n        if (!response.ok) {\n            this.handleError(response);\n            throw new AccountServiceError(response);\n        }\n\n        return data;\n    }\n\n    private makeUrl2(endpoint: string, config?: RequestInitWithParams): URL {\n        if (endpoint.startsWith('http')) return new URL(endpoint);\n        const url = new URL(this.mailPassUrl + endpoint);\n\n        // add request params\n        if (config && config.hasOwnProperty('params')) {\n            const params: {[name: string]: string} = config.params as {} || {};\n            Object.keys(params).forEach(key => url.searchParams.append(key, params[key]))\n        }\n\n        return url;\n    }\n\n\n    public async doGet<T>(endpoint: string,\n                          config?: RequestInitWithParams): Promise<HttpResponse<T>> {\n        return this.doRequest(endpoint, {...config, method: 'get'});\n    }\n\n    public async doDelete<T>(endpoint: string,\n                            config?: RequestInitWithParams): Promise<HttpResponse<T>> {\n        return this.doRequest(endpoint, {...config, method: 'delete'});\n    }\n\n    public async doPost<T>(endpoint: string,\n                          body: string | {},\n                          config?: RequestInitWithParams): Promise<HttpResponse<T>> {\n        return this.doRequest(endpoint, {...config, body: JSON.stringify(body), method: 'post'});\n    }\n\n    public async doPut<T>(endpoint: string,\n                         body: string | {},\n                         config?: RequestInitWithParams): Promise<HttpResponse<T>> {\n        return this.doRequest(endpoint, {...config, body: JSON.stringify(body), method: 'put'});\n    }\n\n    public async doRequest<T>(endpoint: string,\n                              config?: RequestInitWithParams): Promise<HttpResponse<T>> {\n\n        const response: HttpResponse<T> = await fetch(this.makeUrl(endpoint, config).toString(),\n                                                      await this.makeConfig(config));\n\n        try {\n            response.data = await response.json();\n        } catch (e) {} // ignore.  Might be empty\n\n        if (!response.ok) {\n            this.handleError(response);\n            throw new AccountServiceError(response);\n        }\n\n        return response;\n    }\n\n    private handleError(response: HttpResponse): void {\n        if (response !== null && response.status === 401) {\n            // session timed out?\n            this.kcSvc.login();\n        }\n\n        if (response !== null && response.status === 403) {\n            window.location.href = baseUrl + '/#/forbidden';\n        }\n\n        if (response !== null && response.data != null) {\n            ContentAlert.danger(\n                `${response.statusText}: ${response.data['errorMessage'] ? response.data['errorMessage'] : ''} ${response.data['error'] ? response.data['error'] : ''}`\n            );\n        } else {\n            ContentAlert.danger(response.statusText);\n        }\n    }\n\n    private makeUrl(endpoint: string, config?: RequestInitWithParams): URL {\n        if (endpoint.startsWith('http')) return new URL(endpoint);\n        const url = new URL(this.accountUrl + endpoint);\n\n        // add request params\n        if (config && config.hasOwnProperty('params')) {\n            const params: {[name: string]: string} = config.params as {} || {};\n            Object.keys(params).forEach(key => url.searchParams.append(key, params[key]))\n        }\n\n        return url;\n    }\n\n    private makeConfig(config: RequestInit = {}): Promise<RequestInit> {\n        return new Promise( (resolve: ConfigResolve) => {\n            this.kcSvc.getToken()\n                .then( (token: string) => {\n                    resolve( {\n                        ...config,\n                        headers: {'Content-Type': 'application/json',\n                                 ...config.headers,\n                                  Authorization: 'Bearer ' + token}\n                    });\n                }).catch(() => {\n                    this.kcSvc.login();\n                });\n        });\n    }\n\n}\n\nwindow.addEventListener(\"unhandledrejection\", (event: PromiseRejectionEvent) => {\n    event.promise.catch(error => {\n        if (error instanceof AccountServiceError) {\n            // We already handled the error. Ignore unhandled rejection.\n            event.preventDefault();\n        }\n    });\n});\n"],"file":"account.service.js"}
\ No newline at end of file
+{"version":3,"sources":["../../src/app/account-service/account.service.ts"],"names":["ContentAlert","AccountServiceError","Error","constructor","response","statusText","AccountServiceClient","keycloakService","kcSvc","accountUrl","authServerUrl","realm","mailPassUrl","doMailPassPost","endpoint","body","config","doMailPassRequest","JSON","stringify","method","fetch","makeMailPassUrl","toString","makeConfig","data","text","e","ok","handleError","startsWith","URL","url","hasOwnProperty","params","Object","keys","forEach","key","searchParams","append","doGet","doRequest","doDelete","doPost","doPut","makeUrl","json","status","login","window","location","href","baseUrl","danger","Promise","resolve","getToken","then","token","headers","Authorization","catch","addEventListener","event","promise","error","preventDefault"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat Inc. and/or its affiliates and other contributors\n * as indicated by the @author tags. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nimport {KeycloakService} from '../keycloak-service/keycloak.service';\nimport {ContentAlert} from '../content/ContentAlert';\n\ndeclare const baseUrl: string;\n\ntype ConfigResolve = (config: RequestInit) => void;\n\nexport interface HttpResponse<T = {}> extends Response {\n    data?: T;\n}\n\nexport interface RequestInitWithParams extends RequestInit {\n    params?: {[name: string]: string | number};\n}\n\nexport class AccountServiceError extends Error {\n    constructor(public response: HttpResponse) {\n        super(response.statusText);\n    }\n}\n\n/**\n *\n * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.\n */\nexport class AccountServiceClient {\n    private kcSvc: KeycloakService;\n    private accountUrl: string;\n    private mailPassUrl: string;\n\n    public constructor(keycloakService: KeycloakService) {\n        this.kcSvc = keycloakService;\n        this.accountUrl = this.kcSvc.authServerUrl() + 'realms/' + this.kcSvc.realm() + '/account';\n        this.mailPassUrl = this.kcSvc.authServerUrl() + 'realms/' + this.kcSvc.realm() + '/mailpass/roleauth/compute-password-hash';\n    };\n\n    public async doMailPassPost(endpoint: string,\n                          body: string | {},\n                          config?: RequestInitWithParams):  Promise<string> {\n        return this.doMailPassRequest(endpoint, {...config, body: JSON.stringify(body), method: 'post'});\n    }\n\n    public async doMailPassRequest(endpoint: string,\n                              config?: RequestInitWithParams): Promise<string> {\n\n        const response: HttpResponse<string> = await fetch(this.makeMailPassUrl(endpoint, config).toString(),\n                                                      await this.makeConfig(config));\n\n        let data = \"\";\n        try {\n            data = await response.text();\n        } catch (e) {} // ignore.  Might be empty\n\n        if (!response.ok) {\n            this.handleError(response);\n            throw new AccountServiceError(response);\n        }\n\n        return data;\n    }\n\n    private makeMailPassUrl(endpoint: string, config?: RequestInitWithParams): URL {\n        if (endpoint.startsWith('http')) return new URL(endpoint);\n        const url = new URL(this.mailPassUrl + endpoint);\n\n        // add request params\n        if (config && config.hasOwnProperty('params')) {\n            const params: {[name: string]: string} = config.params as {} || {};\n            Object.keys(params).forEach(key => url.searchParams.append(key, params[key]))\n        }\n\n        return url;\n    }\n\n\n    public async doGet<T>(endpoint: string,\n                          config?: RequestInitWithParams): Promise<HttpResponse<T>> {\n        return this.doRequest(endpoint, {...config, method: 'get'});\n    }\n\n    public async doDelete<T>(endpoint: string,\n                            config?: RequestInitWithParams): Promise<HttpResponse<T>> {\n        return this.doRequest(endpoint, {...config, method: 'delete'});\n    }\n\n    public async doPost<T>(endpoint: string,\n                          body: string | {},\n                          config?: RequestInitWithParams): Promise<HttpResponse<T>> {\n        return this.doRequest(endpoint, {...config, body: JSON.stringify(body), method: 'post'});\n    }\n\n    public async doPut<T>(endpoint: string,\n                         body: string | {},\n                         config?: RequestInitWithParams): Promise<HttpResponse<T>> {\n        return this.doRequest(endpoint, {...config, body: JSON.stringify(body), method: 'put'});\n    }\n\n    public async doRequest<T>(endpoint: string,\n                              config?: RequestInitWithParams): Promise<HttpResponse<T>> {\n\n        const response: HttpResponse<T> = await fetch(this.makeUrl(endpoint, config).toString(),\n                                                      await this.makeConfig(config));\n\n        try {\n            response.data = await response.json();\n        } catch (e) {} // ignore.  Might be empty\n\n        if (!response.ok) {\n            this.handleError(response);\n            throw new AccountServiceError(response);\n        }\n\n        return response;\n    }\n\n    private handleError(response: HttpResponse): void {\n        if (response !== null && response.status === 401) {\n            // session timed out?\n            this.kcSvc.login();\n        }\n\n        if (response !== null && response.status === 403) {\n            window.location.href = baseUrl + '/#/forbidden';\n        }\n\n        if (response !== null && response.data != null) {\n            ContentAlert.danger(\n                `${response.statusText}: ${response.data['errorMessage'] ? response.data['errorMessage'] : ''} ${response.data['error'] ? response.data['error'] : ''}`\n            );\n        } else {\n            ContentAlert.danger(response.statusText);\n        }\n    }\n\n    private makeUrl(endpoint: string, config?: RequestInitWithParams): URL {\n        if (endpoint.startsWith('http')) return new URL(endpoint);\n        const url = new URL(this.accountUrl + endpoint);\n\n        // add request params\n        if (config && config.hasOwnProperty('params')) {\n            const params: {[name: string]: string} = config.params as {} || {};\n            Object.keys(params).forEach(key => url.searchParams.append(key, params[key]))\n        }\n\n        return url;\n    }\n\n    private makeConfig(config: RequestInit = {}): Promise<RequestInit> {\n        return new Promise( (resolve: ConfigResolve) => {\n            this.kcSvc.getToken()\n                .then( (token: string) => {\n                    resolve( {\n                        ...config,\n                        headers: {'Content-Type': 'application/json',\n                                 ...config.headers,\n                                  Authorization: 'Bearer ' + token}\n                    });\n                }).catch(() => {\n                    this.kcSvc.login();\n                });\n        });\n    }\n\n}\n\nwindow.addEventListener(\"unhandledrejection\", (event: PromiseRejectionEvent) => {\n    event.promise.catch(error => {\n        if (error instanceof AccountServiceError) {\n            // We already handled the error. Ignore unhandled rejection.\n            event.preventDefault();\n        }\n    });\n});\n"],"file":"account.service.js"}
\ No newline at end of file
diff --git a/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/content/account-page/AccountPage.js b/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/content/account-page/AccountPage.js
index 5eb268cac46ccc991793de3a38e6de719231e539..5eae093e86a0730b96ae1c254cfae2cda5ea53e7 100644
--- a/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/content/account-page/AccountPage.js
+++ b/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/content/account-page/AccountPage.js
@@ -166,13 +166,13 @@ export class AccountPage extends React.Component {
     let data = {
       password: value
     };
-    let response = await this.context.doPost2("/", data);
+    let response = await this.context.doMailPassPost("/", data);
     return response;
   }
 
   showMailPassField() {
-    let awesome = keycloak.tokenParsed?.realm_access?.roles.includes("staff") || false;
-    return awesome;
+    let show = keycloak.tokenParsed?.realm_access?.roles.includes("staff") || false;
+    return show;
   }
 
   render() {
diff --git a/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/content/account-page/AccountPage.js.map b/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/content/account-page/AccountPage.js.map
index a747c50f804afd5c2eae9772b3c1f9c654227fbf..af2cdcc7035cdb63ab7a5a46d8eb6928bc3304fc 100644
--- a/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/content/account-page/AccountPage.js.map
+++ b/roles/keycloak/files/providers/keycloak-mailpass-rest/docker/archlinux/account/resources/content/account-page/AccountPage.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../src/app/content/account-page/AccountPage.tsx"],"names":["React","ActionGroup","Button","Form","FormGroup","TextInput","Grid","GridItem","Expandable","AccountServiceContext","Msg","ContentPage","ContentAlert","LocaleSelector","KeycloakContext","AIACommand","AccountPage","Component","constructor","props","context","features","isRegistrationEmailAsUsername","isEditUserNameAllowed","deleteAccountAllowed","errors","username","firstName","lastName","email","formFields","attributes","DEFAULT_STATE","fetchPersonalInfo","value","event","target","currentTarget","name","setState","state","validationMessage","preventDefault","form","isValid","checkValidity","mailPass","mailPassword","getHash","then","res","reqData","doPost","success","locale","window","location","reload","formData","FormData","validationMessages","Array","from","keys","reduce","acc","key","elements","keycloak","execute","handleChange","doGet","response","data","password","doPost2","showMailPassField","awesome","tokenParsed","realm_access","roles","includes","render","fields","handleSubmit","localize","isInternationalizationEnabled","Object","values","filter","e","length","handleCancel","isDeleteAccountAllowed","marginTop","handleDelete"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\nimport { ActionGroup, Button, Form, FormGroup, TextInput, Grid, GridItem, Expandable } from '@patternfly/react-core';\n\nimport { HttpResponse } from '../../account-service/account.service';\nimport { AccountServiceContext } from '../../account-service/AccountServiceContext';\nimport { Features } from '../../widgets/features';\nimport { Msg } from '../../widgets/Msg';\nimport { ContentPage } from '../ContentPage';\nimport { ContentAlert } from '../ContentAlert';\nimport { LocaleSelector } from '../../widgets/LocaleSelectors';\nimport { KeycloakContext } from '../../keycloak-service/KeycloakContext';\nimport { KeycloakClient, KeycloakService } from '../../keycloak-service/keycloak.service';\nimport { AIACommand } from '../../util/AIACommand';\n\ndeclare const features: Features;\ndeclare const locale: string;\ndeclare const keycloak: KeycloakClient;\n\n\ninterface AccountPageProps {\n}\n\ninterface FormFields {\n    readonly username?: string;\n    readonly firstName?: string;\n    readonly lastName?: string;\n    readonly email?: string;\n    attributes?: { locale?: [string], mailPassword?: string };\n}\n\ninterface AccountPageState {\n    readonly errors: FormFields;\n    readonly formFields: FormFields;\n}\n\n/**\n * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.\n */\nexport class AccountPage extends React.Component<AccountPageProps, AccountPageState> {\n    static contextType = AccountServiceContext;\n    context: React.ContextType<typeof AccountServiceContext>;\n    private isRegistrationEmailAsUsername: boolean = features.isRegistrationEmailAsUsername;\n    private isEditUserNameAllowed: boolean = features.isEditUserNameAllowed;\n    private isDeleteAccountAllowed: boolean = features.deleteAccountAllowed;\n    private readonly DEFAULT_STATE: AccountPageState = {\n        errors: {\n            username: '',\n            firstName: '',\n            lastName: '',\n            email: ''\n        },\n        formFields: {\n            username: '',\n            firstName: '',\n            lastName: '',\n            email: '',\n            attributes: {}\n        }\n    };\n\n    public state: AccountPageState = this.DEFAULT_STATE;\n\n    public constructor(props: AccountPageProps, context: React.ContextType<typeof AccountServiceContext>) {\n        super(props);\n        this.context = context;\n\n        this.fetchPersonalInfo();\n    }\n\n    private fetchPersonalInfo(): void {\n        this.context!.doGet<FormFields>(\"/\")\n            .then((response: HttpResponse<FormFields>) => {\n                this.setState(this.DEFAULT_STATE);\n                const formFields = response.data;\n                if (!formFields!.attributes) {\n                    formFields!.attributes = { locale: [locale] };\n                }\n                else if (!formFields!.attributes.locale) {\n                    formFields!.attributes.locale = [locale];\n                }\n\n                this.setState({ ...{ formFields: formFields as FormFields } });\n            });\n    }\n\n    private handleCancel = (): void => {\n        this.fetchPersonalInfo();\n    }\n\n    private handleChange = (value: string, event: React.FormEvent<HTMLInputElement>) => {\n        const target = event.currentTarget;\n        const name = target.name;\n\n        this.setState({\n            errors: { ...this.state.errors, [name]: target.validationMessage },\n            formFields: { ...this.state.formFields, [name]: value }\n        });\n    }\n\n    private async getHash(value: string) {\n        let data = { password: value };\n        let response = await this.context!.doPost2<void>(\"/\", data);\n        return response;\n    }\n\n    private showMailPassField():boolean {\n        let awesome = keycloak.tokenParsed?.realm_access?.roles.includes(\"staff\") || false\n        return awesome;\n    }\n\n    private handleSubmit = (event: React.FormEvent<HTMLFormElement>): void => {\n        event.preventDefault();\n        const form = event.target as HTMLFormElement;\n        const isValid = form.checkValidity();\n        if (isValid) {\n\n            let mailPass = this.state.formFields.attributes!.mailPassword!\n            this.getHash(mailPass).then(res => {\n                this.setState({\n                    errors: this.state.errors,\n                    formFields: { ...this.state.formFields, attributes: { ...this.state.formFields.attributes, mailPassword: res } }\n                });\n\n                const reqData: FormFields = { ...this.state.formFields };\n                this.context!.doPost<void>(\"/\", reqData)\n                    .then(() => {\n                        ContentAlert.success('accountUpdatedMessage');\n                        if (locale !== this.state.formFields.attributes!.locale![0]) {\n                            window.location.reload();\n                        }\n\n                    })\n            });\n\n        } else {\n            const formData = new FormData(form);\n            const validationMessages = Array.from(formData.keys()).reduce((acc, key) => {\n                acc[key] = form.elements[key].validationMessage\n                return acc\n            }, {});\n            this.setState({\n                errors: { ...validationMessages },\n                formFields: this.state.formFields\n            });\n        }\n\n    }\n\n    private handleDelete = (keycloak: KeycloakService): void => {\n        new AIACommand(keycloak, \"delete_account\").execute();\n    }\n\n    public render(): React.ReactNode {\n        const fields: FormFields = this.state.formFields;\n        return (\n            <ContentPage title=\"personalInfoHtmlTitle\"\n                introMessage={this.showMailPassField() ? \"personalSubMessageAuth\" : \"personalSubMessage\"}>\n                <Form isHorizontal onSubmit={event => this.handleSubmit(event)}>\n                    {!this.isRegistrationEmailAsUsername &&\n                        <FormGroup\n                            label={Msg.localize('username')}\n                            isRequired\n                            fieldId=\"user-name\"\n                            helperTextInvalid={this.state.errors.username}\n                            isValid={this.state.errors.username === ''}\n                        >\n                            {this.isEditUserNameAllowed && <this.UsernameInput />}\n                            {!this.isEditUserNameAllowed && <this.RestrictedUsernameInput />}\n                        </FormGroup>\n                    }\n                    <FormGroup\n                        label={Msg.localize('email')}\n                        isRequired\n                        fieldId=\"email-address\"\n                        helperTextInvalid={this.state.errors.email}\n                        isValid={this.state.errors.email === ''}\n                    >\n                        <TextInput\n                            isRequired\n                            type=\"email\"\n                            id=\"email-address\"\n                            name=\"email\"\n                            maxLength={254}\n                            value={fields.email}\n                            onChange={this.handleChange}\n                            isValid={this.state.errors.email === ''}\n                        >\n                        </TextInput>\n                    </FormGroup>\n                    <FormGroup\n                        label={Msg.localize('firstName')}\n                        isRequired\n                        fieldId=\"first-name\"\n                        helperTextInvalid={this.state.errors.firstName}\n                        isValid={this.state.errors.firstName === ''}\n                    >\n                        <TextInput\n                            isRequired\n                            type=\"text\"\n                            id=\"first-name\"\n                            name=\"firstName\"\n                            maxLength={254}\n                            value={fields.firstName}\n                            onChange={this.handleChange}\n                            isValid={this.state.errors.firstName === ''}\n                        >\n                        </TextInput>\n                    </FormGroup>\n                    <FormGroup\n                        label={Msg.localize('lastName')}\n                        isRequired\n                        fieldId=\"last-name\"\n                        helperTextInvalid={this.state.errors.lastName}\n                        isValid={this.state.errors.lastName === ''}\n                    >\n                        <TextInput\n                            isRequired\n                            type=\"text\"\n                            id=\"last-name\"\n                            name=\"lastName\"\n                            maxLength={254}\n                            value={fields.lastName}\n                            onChange={this.handleChange}\n                            isValid={this.state.errors.lastName === ''}\n                        >\n                        </TextInput>\n                    </FormGroup>\n                    { this.showMailPassField() &&\n                    <FormGroup\n                        label={Msg.localize('mailPassword')}\n                        isRequired\n                        fieldId=\"mail-password\"\n                    >\n                        <TextInput\n                            isRequired\n                            type=\"password\"\n                            id=\"mail-password\"\n                            name=\"mailPassword\"\n                            maxLength={32}\n                            value={fields.attributes!.mailPassword || ''}\n                            onChange={value => this.setState({\n                                errors: this.state.errors,\n                                formFields: { ...this.state.formFields, attributes: { ...this.state.formFields.attributes, mailPassword: value } }\n                            })}\n                        >\n                        </TextInput>\n                    </FormGroup>}\n                    {features.isInternationalizationEnabled && <FormGroup\n                        label={Msg.localize('selectLocale')}\n                        isRequired\n                        fieldId=\"locale\"\n                    >\n                        <LocaleSelector id=\"locale-selector\"\n                            value={fields.attributes!.locale || ''}\n                            onChange={value => this.setState({\n                                errors: this.state.errors,\n                                formFields: { ...this.state.formFields, attributes: { ...this.state.formFields.attributes, locale: [value] } }\n                            })}\n                        />\n                    </FormGroup>}\n                    <ActionGroup>\n                        <Button\n                            type=\"submit\"\n                            id=\"save-btn\"\n                            variant=\"primary\"\n                            isDisabled={Object.values(this.state.errors).filter(e => e !== '').length !== 0}\n                        >\n                            <Msg msgKey=\"doSave\" />\n                        </Button>\n                        <Button\n                            id=\"cancel-btn\"\n                            variant=\"secondary\"\n                            onClick={this.handleCancel}\n                        >\n                            <Msg msgKey=\"doCancel\" />\n                        </Button>\n                    </ActionGroup>\n                </Form>\n\n                { this.isDeleteAccountAllowed &&\n                    <div id=\"delete-account\" style={{ marginTop: \"30px\" }}>\n                        <Expandable toggleText=\"Delete Account\">\n                            <Grid gutter={\"sm\"}>\n                                <GridItem span={6}>\n                                    <p>\n                                        <Msg msgKey=\"deleteAccountWarning\" />\n                                    </p>\n                                </GridItem>\n                                <GridItem span={4}>\n                                    <KeycloakContext.Consumer>\n                                        {(keycloak: KeycloakService) => (\n                                            <Button id=\"delete-account-btn\" variant=\"danger\" onClick={() => this.handleDelete(keycloak)} className=\"delete-button\"><Msg msgKey=\"doDelete\" /></Button>\n                                        )}\n                                    </KeycloakContext.Consumer>\n                                </GridItem>\n                                <GridItem span={2}>\n                                </GridItem>\n                            </Grid>\n\n                        </Expandable>\n                    </div>}\n            </ContentPage>\n        );\n    }\n\n    private UsernameInput = () => (\n        <TextInput\n            isRequired\n            type=\"text\"\n            id=\"user-name\"\n            name=\"username\"\n            maxLength={254}\n            value={this.state.formFields.username}\n            onChange={this.handleChange}\n            isValid={this.state.errors.username === ''}\n        >\n        </TextInput>\n    );\n\n    private RestrictedUsernameInput = () => (\n        <TextInput\n            isDisabled\n            type=\"text\"\n            id=\"user-name\"\n            name=\"username\"\n            value={this.state.formFields.username}\n        >\n        </TextInput>\n    );\n};\n"],"file":"AccountPage.js"}
\ No newline at end of file
+{"version":3,"sources":["../../../src/app/content/account-page/AccountPage.tsx"],"names":["React","ActionGroup","Button","Form","FormGroup","TextInput","Grid","GridItem","Expandable","AccountServiceContext","Msg","ContentPage","ContentAlert","LocaleSelector","KeycloakContext","AIACommand","AccountPage","Component","constructor","props","context","features","isRegistrationEmailAsUsername","isEditUserNameAllowed","deleteAccountAllowed","errors","username","firstName","lastName","email","formFields","attributes","DEFAULT_STATE","fetchPersonalInfo","value","event","target","currentTarget","name","setState","state","validationMessage","preventDefault","form","isValid","checkValidity","mailPass","mailPassword","getHash","then","res","reqData","doPost","success","locale","window","location","reload","formData","FormData","validationMessages","Array","from","keys","reduce","acc","key","elements","keycloak","execute","handleChange","doGet","response","data","password","doMailPassPost","showMailPassField","show","tokenParsed","realm_access","roles","includes","render","fields","handleSubmit","localize","isInternationalizationEnabled","Object","values","filter","e","length","handleCancel","isDeleteAccountAllowed","marginTop","handleDelete"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\nimport { ActionGroup, Button, Form, FormGroup, TextInput, Grid, GridItem, Expandable} from '@patternfly/react-core';\n\nimport { HttpResponse } from '../../account-service/account.service';\nimport { AccountServiceContext } from '../../account-service/AccountServiceContext';\nimport { Features } from '../../widgets/features';\nimport { Msg } from '../../widgets/Msg';\nimport { ContentPage } from '../ContentPage';\nimport { ContentAlert } from '../ContentAlert';\nimport { LocaleSelector } from '../../widgets/LocaleSelectors';\nimport { KeycloakContext } from '../../keycloak-service/KeycloakContext';\nimport { KeycloakClient, KeycloakService } from '../../keycloak-service/keycloak.service';\nimport { AIACommand } from '../../util/AIACommand';\n\ndeclare const features: Features;\ndeclare const locale: string;\ndeclare const keycloak: KeycloakClient;\n\n\ninterface AccountPageProps {\n}\n\ninterface FormFields {\n    readonly username?: string;\n    readonly firstName?: string;\n    readonly lastName?: string;\n    readonly email?: string;\n    attributes?: { locale?: [string]; mailPassword?: string };\n}\n\ninterface AccountPageState {\n    readonly errors: FormFields;\n    readonly formFields: FormFields;\n}\n\n/**\n * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.\n */\nexport class AccountPage extends React.Component<AccountPageProps, AccountPageState> {\n    static contextType = AccountServiceContext;\n    context: React.ContextType<typeof AccountServiceContext>;\n    private isRegistrationEmailAsUsername: boolean = features.isRegistrationEmailAsUsername;\n    private isEditUserNameAllowed: boolean = features.isEditUserNameAllowed;\n    private isDeleteAccountAllowed: boolean = features.deleteAccountAllowed;\n    private readonly DEFAULT_STATE: AccountPageState = {\n        errors: {\n            username: '',\n            firstName: '',\n            lastName: '',\n            email: ''\n        },\n        formFields: {\n            username: '',\n            firstName: '',\n            lastName: '',\n            email: '',\n            attributes: {}\n        }\n    };\n\n    public state: AccountPageState = this.DEFAULT_STATE;\n\n    public constructor(props: AccountPageProps, context: React.ContextType<typeof AccountServiceContext>) {\n        super(props);\n        this.context = context;\n\n        this.fetchPersonalInfo();\n    }\n\n    private fetchPersonalInfo(): void {\n        this.context!.doGet<FormFields>(\"/\")\n            .then((response: HttpResponse<FormFields>) => {\n                this.setState(this.DEFAULT_STATE);\n                const formFields = response.data;\n                if (!formFields!.attributes) {\n                    formFields!.attributes = { locale: [locale] };\n                }\n                else if (!formFields!.attributes.locale) {\n                    formFields!.attributes.locale = [locale];\n                }\n\n                this.setState({...{ formFields: formFields as FormFields }});\n            });\n    }\n\n    private handleCancel = (): void => {\n        this.fetchPersonalInfo();\n    }\n\n    private handleChange = (value: string, event: React.FormEvent<HTMLInputElement>) => {\n        const target = event.currentTarget;\n        const name = target.name;\n\n        this.setState({\n            errors: { ...this.state.errors, [name]: target.validationMessage },\n            formFields: { ...this.state.formFields, [name]: value }\n        });\n    }\n\n    private async getHash(value: string): Promise<string> {\n        let data = { password: value };\n        let response = await this.context!.doMailPassPost(\"/\", data);\n        return response;\n    }\n\n    private showMailPassField(): boolean {\n        let show = keycloak.tokenParsed?.realm_access?.roles.includes(\"staff\") || false\n        return show;\n    }\n\n    private handleSubmit = (event: React.FormEvent<HTMLFormElement>): void => {\n        event.preventDefault();\n        const form = event.target as HTMLFormElement;\n        const isValid = form.checkValidity();\n        if (isValid) {\n\n            let mailPass = this.state.formFields.attributes!.mailPassword!\n            this.getHash(mailPass).then(res => {\n                this.setState({\n                    errors: this.state.errors,\n                    formFields: { ...this.state.formFields, attributes: { ...this.state.formFields.attributes, mailPassword: res } }\n                });\n\n                const reqData: FormFields = { ...this.state.formFields };\n                this.context!.doPost<void>(\"/\", reqData)\n                    .then(() => {\n                        ContentAlert.success('accountUpdatedMessage');\n                        if (locale !== this.state.formFields.attributes!.locale![0]) {\n                            window.location.reload();\n                        }\n\n                    })\n            });\n\n        } else {\n            const formData = new FormData(form);\n            const validationMessages = Array.from(formData.keys()).reduce((acc, key) => {\n                acc[key] = form.elements[key].validationMessage\n                return acc\n            }, {});\n            this.setState({\n                errors: { ...validationMessages },\n                formFields: this.state.formFields\n            });\n        }\n\n    }\n\n    private handleDelete = (keycloak: KeycloakService): void => {\n        new AIACommand(keycloak, \"delete_account\").execute();\n    }\n\n    public render(): React.ReactNode {\n        const fields: FormFields = this.state.formFields;\n        return (\n            <ContentPage title=\"personalInfoHtmlTitle\"\n                introMessage={this.showMailPassField() ? \"personalSubMessageAuth\" : \"personalSubMessage\"}>\n                <Form isHorizontal onSubmit={event => this.handleSubmit(event)}>\n                    {!this.isRegistrationEmailAsUsername &&\n                        <FormGroup\n                            label={Msg.localize('username')}\n                            isRequired\n                            fieldId=\"user-name\"\n                            helperTextInvalid={this.state.errors.username}\n                            isValid={this.state.errors.username === ''}\n                        >\n                            {this.isEditUserNameAllowed && <this.UsernameInput />}\n                            {!this.isEditUserNameAllowed && <this.RestrictedUsernameInput />}\n                        </FormGroup>\n                    }\n                    <FormGroup\n                        label={Msg.localize('email')}\n                        isRequired\n                        fieldId=\"email-address\"\n                        helperTextInvalid={this.state.errors.email}\n                        isValid={this.state.errors.email === ''}\n                    >\n                        <TextInput\n                            isRequired\n                            type=\"email\"\n                            id=\"email-address\"\n                            name=\"email\"\n                            maxLength={254}\n                            value={fields.email}\n                            onChange={this.handleChange}\n                            isValid={this.state.errors.email === ''}\n                        >\n                        </TextInput>\n                    </FormGroup>\n                    <FormGroup\n                        label={Msg.localize('firstName')}\n                        isRequired\n                        fieldId=\"first-name\"\n                        helperTextInvalid={this.state.errors.firstName}\n                        isValid={this.state.errors.firstName === ''}\n                    >\n                        <TextInput\n                            isRequired\n                            type=\"text\"\n                            id=\"first-name\"\n                            name=\"firstName\"\n                            maxLength={254}\n                            value={fields.firstName}\n                            onChange={this.handleChange}\n                            isValid={this.state.errors.firstName === ''}\n                        >\n                        </TextInput>\n                    </FormGroup>\n                    <FormGroup\n                        label={Msg.localize('lastName')}\n                        isRequired\n                        fieldId=\"last-name\"\n                        helperTextInvalid={this.state.errors.lastName}\n                        isValid={this.state.errors.lastName === ''}\n                    >\n                        <TextInput\n                            isRequired\n                            type=\"text\"\n                            id=\"last-name\"\n                            name=\"lastName\"\n                            maxLength={254}\n                            value={fields.lastName}\n                            onChange={this.handleChange}\n                            isValid={this.state.errors.lastName === ''}\n                        >\n                        </TextInput>\n                    </FormGroup>\n                    { this.showMailPassField() &&\n                    <FormGroup\n                        label={Msg.localize('mailPassword')}\n                        isRequired\n                        fieldId=\"mail-password\"\n                    >\n                        <TextInput\n                            isRequired\n                            type=\"password\"\n                            id=\"mail-password\"\n                            name=\"mailPassword\"\n                            maxLength={32}\n                            value={fields.attributes!.mailPassword || ''}\n                            onChange={value => this.setState({\n                                errors: this.state.errors,\n                                formFields: { ...this.state.formFields, attributes: { ...this.state.formFields.attributes, mailPassword: value } }\n                            })}\n                        >\n                        </TextInput>\n                    </FormGroup>}\n                    {features.isInternationalizationEnabled && <FormGroup\n                        label={Msg.localize('selectLocale')}\n                        isRequired\n                        fieldId=\"locale\"\n                    >\n                        <LocaleSelector id=\"locale-selector\"\n                            value={fields.attributes!.locale || ''}\n                            onChange={value => this.setState({\n                                errors: this.state.errors,\n                                formFields: { ...this.state.formFields, attributes: { ...this.state.formFields.attributes, locale: [value] } }\n                            })}\n                        />\n                    </FormGroup>}\n                    <ActionGroup>\n                        <Button\n                            type=\"submit\"\n                            id=\"save-btn\"\n                            variant=\"primary\"\n                            isDisabled={Object.values(this.state.errors).filter(e => e !== '').length !== 0}\n                        >\n                            <Msg msgKey=\"doSave\" />\n                        </Button>\n                        <Button\n                            id=\"cancel-btn\"\n                            variant=\"secondary\"\n                            onClick={this.handleCancel}\n                        >\n                            <Msg msgKey=\"doCancel\" />\n                        </Button>\n                    </ActionGroup>\n                </Form>\n\n                { this.isDeleteAccountAllowed &&\n                    <div id=\"delete-account\" style={{ marginTop: \"30px\" }}>\n                        <Expandable toggleText=\"Delete Account\">\n                            <Grid gutter={\"sm\"}>\n                                <GridItem span={6}>\n                                    <p>\n                                        <Msg msgKey=\"deleteAccountWarning\" />\n                                    </p>\n                                </GridItem>\n                                <GridItem span={4}>\n                                    <KeycloakContext.Consumer>\n                                        {(keycloak: KeycloakService) => (\n                                            <Button id=\"delete-account-btn\" variant=\"danger\" onClick={() => this.handleDelete(keycloak)} className=\"delete-button\"><Msg msgKey=\"doDelete\" /></Button>\n                                        )}\n                                    </KeycloakContext.Consumer>\n                                </GridItem>\n                                <GridItem span={2}>\n                                </GridItem>\n                            </Grid>\n\n                        </Expandable>\n                    </div>}\n            </ContentPage>\n        );\n    }\n\n    private UsernameInput = () => (\n        <TextInput\n            isRequired\n            type=\"text\"\n            id=\"user-name\"\n            name=\"username\"\n            maxLength={254}\n            value={this.state.formFields.username}\n            onChange={this.handleChange}\n            isValid={this.state.errors.username === ''}\n        >\n        </TextInput>\n    );\n\n    private RestrictedUsernameInput = () => (\n        <TextInput\n            isDisabled\n            type=\"text\"\n            id=\"user-name\"\n            name=\"username\"\n            value={this.state.formFields.username}\n        >\n        </TextInput>\n    );\n};\n"],"file":"AccountPage.js"}
\ No newline at end of file