@idea-ionic/auth 6.11.1 → 6.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/environment.d.ts +1 -0
  2. package/esm2020/environment.mjs +3 -2
  3. package/esm2020/public-api.mjs +4 -1
  4. package/esm2020/src/auth.module.mjs +19 -6
  5. package/esm2020/src/auth.service.mjs +167 -42
  6. package/esm2020/src/confirmPassword.page.mjs +16 -22
  7. package/esm2020/src/forgotPassword.page.mjs +17 -24
  8. package/esm2020/src/mfaChallenge.page.mjs +45 -0
  9. package/esm2020/src/newPassword.page.mjs +18 -25
  10. package/esm2020/src/resendLink.page.mjs +12 -17
  11. package/esm2020/src/setupMFA/setupMFA.module.mjs +22 -0
  12. package/esm2020/src/setupMFA/setupMFAButton.component.mjs +43 -0
  13. package/esm2020/src/setupMFA/setupMFAModal.component.mjs +77 -0
  14. package/esm2020/src/setupMFA.page.mjs +24 -0
  15. package/esm2020/src/signIn.page.mjs +36 -47
  16. package/esm2020/src/signUp.page.mjs +18 -32
  17. package/fesm2015/idea-ionic-auth.mjs +485 -211
  18. package/fesm2015/idea-ionic-auth.mjs.map +1 -1
  19. package/fesm2020/idea-ionic-auth.mjs +470 -211
  20. package/fesm2020/idea-ionic-auth.mjs.map +1 -1
  21. package/package.json +2 -1
  22. package/public-api.d.ts +3 -0
  23. package/src/auth.module.d.ts +9 -6
  24. package/src/auth.service.d.ts +54 -13
  25. package/src/confirmPassword.page.d.ts +11 -30
  26. package/src/forgotPassword.page.d.ts +6 -19
  27. package/src/mfaChallenge.page.d.ts +20 -0
  28. package/src/newPassword.page.d.ts +7 -28
  29. package/src/resendLink.page.d.ts +5 -17
  30. package/src/setupMFA/setupMFA.module.d.ts +12 -0
  31. package/src/setupMFA/setupMFAButton.component.d.ts +26 -0
  32. package/src/setupMFA/setupMFAModal.component.d.ts +20 -0
  33. package/src/setupMFA.page.d.ts +10 -0
  34. package/src/signIn.page.d.ts +9 -51
  35. package/src/signUp.page.d.ts +8 -29
@@ -1 +1 @@
1
- {"version":3,"file":"idea-ionic-auth.mjs","sources":["../../../modules/auth/src/auth.service.ts","../../../modules/auth/src/signIn.page.ts","../../../modules/auth/src/signIn.page.html","../../../modules/auth/src/signUp.page.ts","../../../modules/auth/src/signUp.page.html","../../../modules/auth/src/newPassword.page.ts","../../../modules/auth/src/newPassword.page.html","../../../modules/auth/src/resendLink.page.ts","../../../modules/auth/src/resendLink.page.html","../../../modules/auth/src/forgotPassword.page.ts","../../../modules/auth/src/forgotPassword.page.html","../../../modules/auth/src/confirmPassword.page.ts","../../../modules/auth/src/confirmPassword.page.html","../../../modules/auth/src/auth.module.ts","../../../modules/auth/idea-ionic-auth.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n AuthenticationDetails,\n CognitoUser,\n CognitoUserAttribute,\n CognitoUserPool,\n CognitoRefreshToken,\n CognitoUserSession,\n ISignUpResult\n} from 'amazon-cognito-identity-js';\n\nimport { IDEAStorageService } from '@idea-ionic/common';\n\nimport { environment as env } from '@env';\n\n/**\n * The name of the Cognito's user attribute which contains the key of the last device to login in this project.\n */\nconst DEVICE_KEY_ATTRIBUTE = 'custom:'.concat(env.idea.project);\n\n/**\n * Cognito wrapper to manage the authentication flow.\n *\n * Note: in IDEA's Cognito users pools, the email is an alias of the username.\n */\n@Injectable({ providedIn: 'root' })\nexport class IDEAAuthService {\n protected userPool: CognitoUserPool;\n\n constructor(protected storage: IDEAStorageService) {\n this.userPool = new CognitoUserPool({\n UserPoolId: env.aws.cognito.userPoolId,\n ClientId: env.aws.cognito.userPoolClientId\n });\n }\n\n /**\n * Prepare the necessary structure to get authorized in Cognito.\n */\n protected prepareAuthDetails(username: string, pwd: string): AuthenticationDetails {\n return new AuthenticationDetails({ Username: username, Password: pwd });\n }\n /**\n * Prepare the necessary structure to identify a Cognito user.\n */\n protected prepareCognitoUser(username: string): CognitoUser {\n return new CognitoUser({ Username: username, Pool: this.userPool });\n }\n /**\n * Prepare a user attribute (they are all strings) in Cognito's format.\n */\n protected prepareUserAttribute(name: string, value: string): CognitoUserAttribute {\n return new CognitoUserAttribute({ Name: name, Value: value });\n }\n\n /**\n * Perform a login through username and password.\n */\n public login(username: string, password: string): Promise<boolean> {\n return new Promise((resolve, reject) => {\n // get a cognito user and try to authenticate\n this.prepareCognitoUser(username).authenticateUser(this.prepareAuthDetails(username, password), {\n onSuccess: () => resolve(false),\n onFailure: (err: Error) => reject(err),\n newPasswordRequired: () => resolve(true)\n });\n });\n }\n /**\n * Complete a complete new password flow in the authentication.\n */\n public confirmNewPassword(username: string, tempPassword: string, newPassword: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // login with the old password\n const user = this.prepareCognitoUser(username);\n user.authenticateUser(this.prepareAuthDetails(username, tempPassword), {\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err),\n newPasswordRequired: () =>\n // complete the new password challenge\n user.completeNewPasswordChallenge(\n newPassword,\n {},\n {\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err)\n }\n )\n });\n });\n }\n /**\n * Register a new user a set its default attributes.\n */\n public register(username: string, password: string, attributes?: any): Promise<CognitoUser> {\n attributes = attributes || {};\n return new Promise((resolve, reject) => {\n // add attributes like the email address and the fullname\n const attrs = [];\n for (const prop in attributes)\n if (attributes[prop]) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n // add the email, which is equal to the username for most of our Pools\n if (!attributes.email) attrs.push(this.prepareUserAttribute('email', username));\n // register the new user to the pool\n this.userPool.signUp(username, password, attrs, null, (err: Error, res: ISignUpResult) =>\n err ? reject(err) : resolve(res.user)\n );\n });\n }\n /**\n * Confirm a new registration through the confirmation code sent by Cognito.\n */\n public confirmRegistration(username: string, code: string): Promise<void> {\n return new Promise((resolve, reject) => {\n this.prepareCognitoUser(username).confirmRegistration(code, true, (err: Error) =>\n err ? reject(err) : resolve()\n );\n });\n }\n /**\n * Send again a confirmation code for a new registration.\n */\n public resendConfirmationCode(username: string): Promise<void> {\n return new Promise((resolve, reject) => {\n this.prepareCognitoUser(username).resendConfirmationCode((err: Error) => (err ? reject(err) : resolve()));\n });\n }\n /**\n * Logout the currently signed-in user.\n */\n public logout(options?: { global: boolean }): Promise<void> {\n options = Object.assign({ global: false }, options);\n return new Promise((resolve, reject) => {\n // remove the refresh token previosly saved\n this.storage.remove('AuthRefreshToken').then(() =>\n // remove the optional auth details\n this.storage.remove('AuthUserDetails').then(() => {\n // get the user and the session\n const user = this.userPool.getCurrentUser();\n user.getSession(async (err: Error) => {\n // if the session is active, run the online sign-out; otherwise, only the local data has been deleted\n if (err) return resolve();\n // if a reference to the device was saved, forget it\n if (env.idea.auth.singleSimultaneousSession) await this.setCurrentDeviceForProject(null);\n // sign-out from the pool (terminate the current session or all the sessions)\n if (options.global) user.globalSignOut({ onSuccess: () => resolve(), onFailure: err => reject(err) });\n else {\n user.signOut();\n resolve();\n }\n });\n })\n );\n });\n }\n /**\n * Send a password reset request.\n */\n public forgotPassword(username: string): Promise<void> {\n return new Promise((resolve, reject) => {\n this.prepareCognitoUser(username).forgotPassword({\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err)\n });\n });\n }\n /**\n * Confirm a new password after a password reset request.\n */\n public confirmPassword(username: string, code: string, newPwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // get the user and confirm a new password\n this.prepareCognitoUser(username).confirmPassword(code, newPwd, {\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(err)\n });\n });\n }\n /**\n * Check if a user is currently authenticated.\n * @param offlineAllowed if set and if offline, skip authentication and retrieve data locally\n * @param getFreshIdTokenOnExp cb function to execute when the idToken is refreshed\n */\n public isAuthenticated(offlineAllowed: boolean, getFreshIdTokenOnExp?: (freshIdToken: string) => void): Promise<any> {\n return new Promise((resolve, reject) => {\n if (offlineAllowed && !navigator.onLine) {\n this.storage.get('AuthUserDetails').then(userDetails => resolve({ idToken: null, userDetails }));\n // re-execute the method when back online, so that you can retrieve a token to make requests\n window.addEventListener('online', () =>\n this.isAuthenticated(true, getFreshIdTokenOnExp)\n // set the new token as if it was refreshed\n .then(result => getFreshIdTokenOnExp(result.idToken))\n );\n } else {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error, session: CognitoUserSession) => {\n if (err) return reject(err);\n // get user attributes\n user.getUserAttributes((e: Error, attributes: CognitoUserAttribute[]) => {\n if (e) return reject(e);\n // remap user attributes\n const userDetails: any = {};\n attributes.forEach((a: CognitoUserAttribute) => (userDetails[a.getName()] = a.getValue()));\n // add the user's groups to the attributes\n const sessionInfo = session.getAccessToken().decodePayload();\n const groups: string[] = sessionInfo['cognito:groups'] || [];\n userDetails['groups'] = groups;\n // run some checks considering the user's groups and devices (based on the project's configuration)\n this.runPostAuthChecks(userDetails, err => {\n // in case some check failed, reject the authorisation flow\n if (err) return reject(err);\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // set a timer to manage the autorefresh of the idToken (through the refreshToken)\n setTimeout(\n () => this.refreshSession(user, session.getRefreshToken().getToken(), getFreshIdTokenOnExp),\n 15 * 60 * 1000\n ); // every 15 minutes\n // (async) if offlineAllowed, save data locally, to use it next time we'll be offline\n if (offlineAllowed) this.storage.set('AuthUserDetails', userDetails);\n // return the idToken (to use with API)\n resolve({ idToken: session.getIdToken().getJwtToken(), userDetails });\n });\n });\n });\n }\n });\n }\n /**\n * Helper to refresh the session every N minutes.\n */\n protected refreshSession(user: CognitoUser, refreshToken: string, callback: (freshIdToken: string) => void) {\n user.refreshSession(\n new CognitoRefreshToken({ RefreshToken: refreshToken }),\n (err: Error, session: CognitoUserSession) => {\n if (err) {\n // try again in 1 minute\n setTimeout(() => this.refreshSession(user, refreshToken, callback), 1 * 60 * 1000);\n } else {\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // repeat every 15 minutes\n setTimeout(() => this.refreshSession(user, session.getRefreshToken().getToken(), callback), 15 * 60 * 1000);\n // run the callback action, if set\n if (callback) callback(session.getIdToken().getJwtToken());\n }\n }\n );\n }\n /**\n * Run some post-auth checks, based on the users groups and on the app's configuration:\n * - users in the Cognito's \"admins\" grup skip all the following rules.\n * - users in the Cognito's \"robots\" group can't sign-into front-ends (they serve only back-end purposes).\n * - if `env.idea.auth.singleSimultaneousSession` is on, make sure there is only one active session per user.\n */\n protected runPostAuthChecks(userDetails: any, callback: (err?: Error) => void) {\n const groups: string[] = userDetails['groups'];\n // skip checks if the user is in the \"admins\" group\n const isAdmin = groups.some(x => x === 'admins');\n if (isAdmin) return callback();\n // users in the \"robots\" group can't sign-into front-ends (they serve only back-end purposes)\n const isRobot = groups.some(x => x === 'robots');\n if (isRobot) return callback(new Error('ROBOT_USER'));\n // in case the project limits each account to only one simultaneous session, run a check\n if (env.idea.auth.singleSimultaneousSession) return this.checkForSimultaneousSessions(userDetails, callback);\n // otherwise, we're done\n callback();\n }\n /**\n * Check whether the user signed-into multiple devices.\n */\n protected async checkForSimultaneousSessions(userDetails: any, callback: (err?: Error) => void) {\n // get or create a key for the current device (~random)\n let currentDeviceKey = await this.storage.get('AuthDeviceKey');\n if (!currentDeviceKey) {\n const randomKey = Math.random().toString(36).substring(10);\n currentDeviceKey = randomKey.concat(String(Date.now()));\n await this.storage.set('AuthDeviceKey', currentDeviceKey);\n }\n // check whether the last device to sign-into this project (if any) is the current one\n const lastDeviceToSignIntoThisProject = userDetails[DEVICE_KEY_ATTRIBUTE];\n // if it's the first user's device to sign-in, save the reference in Cognito and resolve\n if (!lastDeviceToSignIntoThisProject) {\n this.setCurrentDeviceForProject(currentDeviceKey)\n .then(() => callback())\n .catch(() => callback(new Error('CANT_SET_DEVICE')));\n // if the device didn't change, resolve\n } else if (lastDeviceToSignIntoThisProject === currentDeviceKey) callback();\n // othwerwise, report there is more than one simultaneous session\n else callback(new Error('SIMULTANEOUS_SESSION'));\n }\n /**\n * Set (or reset) the current user's device (by key) in the current project (stored in Cognito).\n */\n protected setCurrentDeviceForProject(deviceKey?: string): Promise<void> {\n const attributes: any = {};\n // note: an empty string will remove the attribute from Cognito\n attributes[DEVICE_KEY_ATTRIBUTE] = deviceKey || '';\n return this.updateUserAttributes(attributes);\n }\n /**\n * Update the currently logged in user's attributes.\n */\n public updateUserAttributes(attributes: any): Promise<void> {\n return new Promise((resolve, reject) => {\n // prepare the attributes we want to change\n const attrs = new Array<any>();\n for (const prop in attributes)\n if (attributes[prop] !== undefined) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n // we need to get the session before to make changes\n user.getSession((err: Error) => {\n if (err) reject(err);\n else user.updateAttributes(attrs, (e: Error) => (e ? reject(e) : resolve()));\n });\n });\n }\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { Browser } from '@capacitor/browser';\nimport { IDEAMessageService, IDEALoadingService, IDEATinCanService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\nimport { environment as env } from '@env';\n\n@Component({\n selector: 'idea-sign-in',\n templateUrl: 'signIn.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignInPage {\n /**\n * The title of the project.\n */\n public title: string;\n /**\n * Whether the public registration is allowed for the project.\n */\n public registrationPossible: boolean;\n /**\n * Whether the project has an intro (explanatory) page.\n */\n public hasIntroPage: boolean;\n /**\n * The URL to IDEA's website.\n */\n public website: string;\n /**\n * The email address to identify a user.\n */\n public email: string;\n /**\n * The password to login for the email selected.\n */\n public password: string;\n /**\n * Whether the agreements have been accepted.\n */\n public agreementsCheck: boolean;\n /**\n * Whether a new account was just created through the SignUp page.\n */\n public newAccountRegistered: boolean;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n constructor(\n public navCtrl: NavController,\n public tc: IDEATinCanService,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {\n this.title = env.idea.app.title;\n this.registrationPossible = env.idea.auth.registrationIsPossible;\n this.hasIntroPage = env.idea.app.hasIntroPage;\n this.website = env.idea.website;\n this.agreementsCheck = true;\n }\n public ionViewDidEnter() {\n // manage the scenario in which we just created a new account (show a explanatory message: email must be confirmed)\n if (this.tc.get('newAccountRegistered')) {\n this.newAccountRegistered = true;\n this.email = this.tc.get('newAccountRegistered', true);\n }\n }\n\n /**\n * Sign-in with the auth details provided.\n */\n public async login() {\n if (!this.agreementsCheck) return;\n this.errorMsg = null;\n await this.loading.show();\n this.auth\n .login(this.email, this.password)\n .then(needNewPassword => {\n if (needNewPassword) {\n this.tc.set('email', this.email);\n this.tc.set('password', this.password);\n this.navCtrl.navigateForward(['auth/new-password']);\n } else window.location.assign(''); // hard reload\n })\n .catch(err => {\n if (err.name === 'UserNotConfirmedException') this.errorMsg = this.t._('IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN');\n else if (err.name === 'UserLambdaValidationException' && err.message?.includes('@IDEA_COGNITO_TRANSITION'))\n this.errorMsg = this.t._('IDEA_AUTH.CHANGE_YOUR_PASSWORD_TO_LOGIN');\n this.message.error('IDEA_AUTH.AUTHENTICATION_FAILED');\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to the homepage.\n */\n public goToIntro() {\n this.navCtrl.navigateBack(['intro']);\n }\n /**\n * Go to the forgot password page.\n */\n public goToForgotPassword() {\n this.navCtrl.navigateForward(['auth/forgot-password']);\n }\n /**\n * Go to registration page.\n */\n public goToRegistration() {\n this.tc.set('email', this.email);\n this.tc.set('password', this.password);\n this.navCtrl.navigateForward(['auth', 'sign-up']);\n }\n\n /**\n * Open a URL in the browser.\n */\n public openLink(url: string) {\n Browser.open({ url });\n }\n}\n","<ion-content>\n <ion-card color=\"warning\" *ngIf=\"newAccountRegistered\">\n <ion-card-content>{{ 'IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN' | translate }}</ion-card-content>\n </ion-card>\n <form class=\"flexBox\">\n <div>\n <ion-card class=\"authCard\">\n <ion-img\n [title]=\"t._('IDEA_AUTH.SERVICE_LOGO')\"\n [src]=\"darkMode ? 'assets/icons/icon-auth-alt.svg' : 'assets/icons/icon-auth.svg'\"\n ></ion-img>\n <ion-card-header>\n <ion-card-title color=\"primary\" *ngIf=\"title\">{{ title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"t._('IDEA_VARIABLES.TAGLINE')\">\n {{ 'IDEA_VARIABLES.TAGLINE' | translate }}\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\"><b>{{ 'IDEA_AUTH.WARNING' | translate }}.</b> {{ errorMsg }}</p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"> </ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"t._('IDEA_AUTH.EMAIL')\"\n [title]=\"t._('IDEA_AUTH.EMAIL_HINT')\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"login()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n id=\"current-password\"\n type=\"password\"\n pattern=\".{8,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"current-password\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"t._('IDEA_AUTH.PASSWORD')\"\n [title]=\"t._('IDEA_AUTH.PASSWORD_HINT')\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"password\"\n (keyup.enter)=\"login()\"\n ></ion-input>\n </ion-item>\n <ion-row\n class=\"agreementsAcceptanceRow\"\n *ngIf=\"\n !registrationPossible &&\n (t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || t._('IDEA_VARIABLES.PRIVACY_POLICY_URL'))\n \"\n >\n <ion-col>\n <ion-checkbox\n size=\"small\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"agreementsCheck\"\n ></ion-checkbox>\n {{ 'IDEA_AUTH.AGREEMENTS_CHECK_LOGIN' | translate }}:\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n [title]=\"t._('IDEA_AUTH.TERMS_AND_CONDITIONS_HINT')\"\n [href]=\"t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n >\n {{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}\n </a>\n <ion-text\n *ngIf=\"\n t._('IDEA_VARIABLES.PRIVACY_POLICY_URL') && t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\n \"\n >\n &\n </ion-text>\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n [title]=\"t._('IDEA_AUTH.PRIVACY_POLICY_HINT')\"\n [href]=\"t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n >\n {{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}\n </a>\n </ion-col>\n </ion-row>\n <ion-button\n expand=\"block\"\n [disabled]=\"!agreementsCheck\"\n [title]=\"t._('IDEA_AUTH.SIGN_IN_HINT')\"\n (click)=\"login()\"\n >\n {{ 'IDEA_AUTH.SIGN_IN' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n *ngIf=\"registrationPossible\"\n [title]=\"t._('IDEA_AUTH.CREATE_AN_ACCOUNT_HINT')\"\n (click)=\"goToRegistration()\"\n >\n {{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"t._('IDEA_AUTH.I_FORGOT_MY_PASSWORD_HINT')\"\n (click)=\"goToForgotPassword()\"\n >\n {{ 'IDEA_AUTH.I_FORGOT_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n color=\"medium\"\n class=\"smallCaseButton\"\n *ngIf=\"hasIntroPage\"\n [title]=\"t._('IDEA_AUTH.BACK_TO_INTRO_HINT')\"\n (click)=\"goToIntro()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_INTRO' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n <ion-img\n class=\"ideaLogo\"\n *ngIf=\"website\"\n [src]=\"darkMode ? './assets/icons/idea-alt.png' : './assets/icons/idea.png'\"\n [title]=\"t._('IDEA_AUTH.IDEA_TAGLINE')\"\n (click)=\"openLink(website)\"\n ></ion-img>\n </div>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { isEmpty } from 'idea-toolbox';\nimport { IDEAMessageService, IDEALoadingService, IDEATinCanService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\nimport { environment as env } from '@env';\n\n@Component({\n selector: 'idea-sign-up',\n templateUrl: 'signUp.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignUpPage implements OnInit {\n /**\n * The email address used to identify the new account.\n */\n public email: string;\n /**\n * The password of the new account.\n */\n public password: string;\n /**\n * Whether the agreements have been accepted.\n */\n public agreementsCheck: boolean;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public tc: IDEATinCanService,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {\n this.email = this.tc.get('email', true);\n this.password = this.tc.get('password', true);\n this.agreementsCheck = false;\n }\n public ngOnInit() {\n if (!env.idea.auth.registrationIsPossible) return this.goToAuth();\n // if there isn't any agreement to agree to, set the check true\n this.agreementsCheck =\n this.t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || this.t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')\n ? this.agreementsCheck\n : true;\n }\n\n /**\n * Register the new user in cognito (note DynamoDB still need to be managed).\n */\n public async register() {\n this.errorMsg = null;\n // check the fields\n if (isEmpty(this.email, 'email')) this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n else if (!this.password || this.password.length < 8)\n this.errorMsg = this.t._('IDEA_AUTH.PASSWORD_POLICY_VIOLATION', { n: 8 });\n // output the error, if there was one\n if (this.errorMsg) return this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n // start the registration\n await this.loading.show();\n this.auth\n .register(this.email, this.password)\n .then(() => {\n this.message.success('IDEA_AUTH.REGISTRATION_COMPLETED');\n this.tc.set('newAccountRegistered', this.email);\n this.goToAuth();\n })\n .catch(err => {\n // show the unexpected error on screen (english)\n this.errorMsg = err.message;\n this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to the resend link page.\n */\n public goToResendLink() {\n this.navCtrl.navigateForward(['auth/resend-link']);\n }\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.NEW_ACCOUNT' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.REGISTER_A_NEW_ACCOUNT_TO_THE_SYSTEM' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"> </ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [placeholder]=\"t._('IDEA_AUTH.EMAIL')\"\n [title]=\"t._('IDEA_AUTH.REGISTRATION_EMAIL_HINT')\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"register()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n pattern=\".{8,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"t._('IDEA_AUTH.PASSWORD')\"\n [title]=\"t._('IDEA_AUTH.CHOOSE_A_PASSWORD')\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"password\"\n (keyup.enter)=\"register()\"\n ></ion-input>\n </ion-item>\n <ion-row\n class=\"agreementsAcceptanceRow\"\n *ngIf=\"t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n >\n <ion-col>\n <ion-checkbox\n size=\"small\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"agreementsCheck\"\n ></ion-checkbox>\n {{ 'IDEA_AUTH.AGREEMENTS_CHECK_REGISTRATION' | translate }}:\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n [title]=\"t._('IDEA_AUTH.TERMS_AND_CONDITIONS_HINT')\"\n [href]=\"t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n >\n {{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}\n </a>\n <ion-text\n *ngIf=\"\n t._('IDEA_VARIABLES.PRIVACY_POLICY_URL') && t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\n \"\n >\n &\n </ion-text>\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n [title]=\"t._('IDEA_AUTH.PRIVACY_POLICY_HINT')\"\n [href]=\"t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n >\n {{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}\n </a>\n </ion-col>\n </ion-row>\n <ion-button\n expand=\"block\"\n [disabled]=\"!agreementsCheck\"\n [title]=\"t._('IDEA_AUTH.CREATE_AN_ACCOUNT_HINT')\"\n (click)=\"register()\"\n >\n {{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"t._('IDEA_AUTH.HAVEN_T_RECEIVED_CONFIRMATION_LINK_HINT')\"\n (click)=\"goToResendLink()\"\n >\n {{ 'IDEA_AUTH.HAVEN_T_RECEIVED_CONFIRMATION_LINK' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"t._('IDEA_AUTH.BACK_TO_SIGN_IN_HINT')\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATinCanService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-new-password',\n templateUrl: 'newPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEANewPasswordPage implements OnInit {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n /**\n * The current temporary password.\n */\n public password: string;\n /**\n * The new password for the account.\n */\n public newPassword: string;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public tc: IDEATinCanService,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {}\n public ngOnInit() {\n this.email = this.tc.get('email', true);\n this.password = this.tc.get('password', true);\n if (!this.email || !this.password) this.goToAuth();\n }\n\n /**\n * Confirm a new password (auth flow that follows a registration or a password reset).\n */\n public async confirmNewPassword() {\n this.errorMsg = null;\n await this.loading.show();\n this.auth\n .confirmNewPassword(this.email, this.password, this.newPassword)\n // we are logged in\n .then(() => window.location.assign(''))\n .catch(() => {\n this.errorMsg = this.t._('IDEA_AUTH.PASSWORD_POLICY_VIOLATION', { n: 8 });\n this.message.error(this.errorMsg, true);\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.YOU_NEED_TO_CHOOSE_A_NEW_PASSWORD' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n pattern=\".{8,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"new-password\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"t._('IDEA_AUTH.PASSWORD')\"\n [title]=\"t._('IDEA_AUTH.CHOOSE_A_PASSWORD')\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"newPassword\"\n (keyup.enter)=\"confirmNewPassword()\"\n ></ion-input>\n </ion-item>\n <ion-button expand=\"block\" [title]=\"t._('IDEA_AUTH.CONFIRM_NEW_PASSWORD_HINT')\" (click)=\"confirmNewPassword()\">\n {{ 'IDEA_AUTH.CONFIRM_NEW_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"t._('IDEA_AUTH.BACK_TO_SIGN_IN_HINT')\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-resend-link',\n templateUrl: 'resendLink.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAResendLinkPage {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {}\n\n /**\n * Resend the link to confirm the email address.\n */\n public async resendConfirmationLink() {\n this.errorMsg = null;\n if (!this.email) {\n this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n return;\n }\n await this.loading.show();\n this.auth\n .resendConfirmationCode(this.email)\n .then(() => {\n this.message.success('IDEA_AUTH.CONFIRMATION_LINK_SENT');\n this.goToAuth();\n })\n .catch(() => {\n this.errorMsg = this.t._('IDEA_AUTH.IS_THE_EMAIL_CORRECT');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CONFIRM_ACCOUNT' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.RESEND_CONFIRMATION_LINK_HINT' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"> </ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"t._('IDEA_AUTH.EMAIL')\"\n [title]=\"t._('IDEA_AUTH.EMAIL_HINT')\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"resendConfirmationLink()\"\n ></ion-input>\n </ion-item>\n <ion-button expand=\"block\" [title]=\"t._('IDEA_AUTH.RESEND_LINK_HINT')\" (click)=\"resendConfirmationLink()\">\n {{ 'IDEA_AUTH.RESEND_LINK' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"t._('IDEA_AUTH.BACK_TO_SIGN_IN_HINT')\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAAuthService } from './auth.service';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-forgot-password',\n templateUrl: 'forgotPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAForgotPasswordPage {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n\n constructor(\n public navCtrl: NavController,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {}\n\n /**\n * \"I forgot my password\" procedure.\n */\n public async forgotPassword() {\n await this.loading.show();\n this.auth\n .forgotPassword(this.email)\n .then(() => {\n this.message.success('IDEA_AUTH.PASSWORD_RESET_CODE_SENT');\n this.goToConfirmPassword();\n })\n .catch(() => this.message.error('IDEA_AUTH.USER_NOT_FOUND'))\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to the confirm password page.\n */\n public goToConfirmPassword() {\n this.navCtrl.navigateForward(['auth/confirm-password'], { queryParams: { email: this.email || null } });\n }\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.PASSWORD_RESET' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.PASSWORD_RESET_HINT' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"> </ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"t._('IDEA_AUTH.EMAIL')\"\n [title]=\"t._('IDEA_AUTH.EMAIL_HINT')\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"forgotPassword()\"\n ></ion-input>\n </ion-item>\n <ion-button expand=\"block\" [title]=\"t._('IDEA_AUTH.RESET_MY_PASSWORD_HINT')\" (click)=\"forgotPassword()\">\n {{ 'IDEA_AUTH.RESET_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"t._('IDEA_AUTH.ALREADY_HAVE_A_RESET_CODE_HINT')\"\n (click)=\"goToConfirmPassword()\"\n >\n {{ 'IDEA_AUTH.ALREADY_HAVE_A_RESET_CODE' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"t._('IDEA_AUTH.BACK_TO_SIGN_IN_HINT')\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { IDEAAuthService } from './auth.service';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-confirm-password',\n templateUrl: 'confirmPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAConfirmPasswordPage {\n /**\n * The email address used to identify the account.\n */\n public email: string;\n /**\n * The code (received via email), to use for confirming the account.\n */\n public code: string;\n /**\n * The new password for the account.\n */\n public newPassword: string;\n /**\n * The error message to display in the UI, if any.\n */\n public errorMsg: string;\n\n constructor(\n public navCtrl: NavController,\n public route: ActivatedRoute,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public auth: IDEAAuthService,\n public t: IDEATranslationsService\n ) {\n this.email = this.route.snapshot.queryParamMap.get('email') || null;\n if (!this.email && this.route.snapshot.queryParams.user)\n this.email = decodeURIComponent(this.route.snapshot.queryParams.user);\n this.code = this.route.snapshot.queryParams.code;\n }\n\n /**\n * Confirm new password.\n */\n public async confirmPassword() {\n this.errorMsg = null;\n await this.loading.show();\n this.auth\n .confirmPassword(this.email, this.code, this.newPassword)\n .then(() => {\n this.message.success('IDEA_AUTH.PASSWORD_CHANGED');\n this.goToAuth();\n })\n .catch(() => {\n this.errorMsg = this.t._('IDEA_AUTH.CONFIRM_PASSWORD_ERROR', { n: 8 });\n this.message.error(this.errorMsg, true);\n })\n .finally(() => this.loading.hide());\n }\n\n /**\n * Go to forgot password page.\n */\n public goToForgotPassword() {\n this.navCtrl.navigateBack(['auth/forgot-password']);\n }\n /**\n * Go to auth page.\n */\n public goToAuth() {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CHANGE_THE_PASSWORD' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.CHANGE_THE_PASSWORD_HINT' | translate: { n: 8 } }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"> </ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"t._('IDEA_AUTH.EMAIL')\"\n [title]=\"t._('IDEA_AUTH.EMAIL_HINT')\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"disc\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"text\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [placeholder]=\"t._('IDEA_AUTH.RESET_CODE')\"\n [title]=\"t._('IDEA_AUTH.RESET_CODE_HINT')\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"code\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n pattern=\".{8,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"new-password\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"t._('IDEA_AUTH.NEW_PASSWORD')\"\n [title]=\"t._('IDEA_AUTH.CHOOSE_A_PASSWORD')\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"newPassword\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n </ion-item>\n <ion-button expand=\"block\" [title]=\"t._('IDEA_AUTH.CHANGE_MY_PASSWORD_HINT')\" (click)=\"confirmPassword()\">\n {{ 'IDEA_AUTH.CHANGE_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"t._('IDEA_AUTH.HAVEN_T_RECEIVED_A_RESET_CODE_HINT')\"\n (click)=\"goToForgotPassword()\"\n >\n {{ 'IDEA_AUTH.HAVEN_T_RECEIVED_A_RESET_CODE' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"t._('IDEA_AUTH.BACK_TO_SIGN_IN_HINT')\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { RouterModule } from '@angular/router';\n\nimport { IDEATranslationsModule } from '@idea-ionic/common';\n\nimport { IDEASignInPage } from './signIn.page';\nimport { IDEASignUpPage } from './signUp.page';\nimport { IDEANewPasswordPage } from './newPassword.page';\nimport { IDEAResendLinkPage } from './resendLink.page';\nimport { IDEAForgotPasswordPage } from './forgotPassword.page';\nimport { IDEAConfirmPasswordPage } from './confirmPassword.page';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n IDEATranslationsModule,\n RouterModule.forChild([\n { path: '', redirectTo: 'sign-in', pathMatch: 'full' },\n { path: 'sign-in', component: IDEASignInPage },\n { path: 'sign-up', component: IDEASignUpPage },\n { path: 'new-password', component: IDEANewPasswordPage },\n { path: 'resend-link', component: IDEAResendLinkPage },\n { path: 'forgot-password', component: IDEAForgotPasswordPage },\n { path: 'confirm-password', component: IDEAConfirmPasswordPage }\n ])\n ],\n declarations: [\n IDEASignInPage,\n IDEASignUpPage,\n IDEANewPasswordPage,\n IDEAResendLinkPage,\n IDEAForgotPasswordPage,\n IDEAConfirmPasswordPage\n ]\n})\nexport class IDEAAuthModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["env","i1","i3.IDEAAuthService","i4","i2","i3","i4.IDEAAuthService","i5","i6"],"mappings":"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"}
1
+ {"version":3,"file":"idea-ionic-auth.mjs","sources":["../../../modules/auth/src/auth.service.ts","../../../modules/auth/src/signIn.page.ts","../../../modules/auth/src/signIn.page.html","../../../modules/auth/src/signUp.page.ts","../../../modules/auth/src/signUp.page.html","../../../modules/auth/src/newPassword.page.ts","../../../modules/auth/src/newPassword.page.html","../../../modules/auth/src/resendLink.page.ts","../../../modules/auth/src/resendLink.page.html","../../../modules/auth/src/forgotPassword.page.ts","../../../modules/auth/src/forgotPassword.page.html","../../../modules/auth/src/confirmPassword.page.ts","../../../modules/auth/src/confirmPassword.page.html","../../../modules/auth/src/mfaChallenge.page.ts","../../../modules/auth/src/mfaChallenge.page.html","../../../modules/auth/src/setupMFA/setupMFAModal.component.ts","../../../modules/auth/src/setupMFA/setupMFAModal.component.html","../../../modules/auth/src/setupMFA/setupMFAButton.component.ts","../../../modules/auth/src/setupMFA/setupMFAButton.component.html","../../../modules/auth/src/setupMFA.page.ts","../../../modules/auth/src/setupMFA.page.html","../../../modules/auth/src/setupMFA/setupMFA.module.ts","../../../modules/auth/src/auth.module.ts","../../../modules/auth/idea-ionic-auth.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n AuthenticationDetails,\n CognitoUser,\n CognitoUserAttribute,\n CognitoUserPool,\n CognitoRefreshToken,\n CognitoUserSession,\n ISignUpResult,\n ChallengeName\n} from 'amazon-cognito-identity-js';\nimport { IDEAStorageService } from '@idea-ionic/common';\n\nimport { environment as env } from '@env';\n\n/**\n * The name of the Cognito's user attribute which contains the key of the last device to login in this project.\n */\nconst DEVICE_KEY_ATTRIBUTE = 'custom:'.concat(env.idea.project);\n\n/**\n * Cognito wrapper to manage the authentication flow.\n *\n * Note: in IDEA's Cognito users pools, the email is an alias of the username.\n */\n@Injectable({ providedIn: 'root' })\nexport class IDEAAuthService {\n private userPool: CognitoUserPool;\n\n challengeUsername: string;\n private challengePassword: string;\n\n private newAccountJustRegistered: string;\n\n private mfaProjectName = env.idea.app.title ?? env.idea.project;\n\n constructor(private storage: IDEAStorageService) {\n this.userPool = new CognitoUserPool({\n UserPoolId: env.aws.cognito.userPoolId,\n ClientId: env.aws.cognito.userPoolClientId\n });\n }\n\n /**\n * Prepare the necessary structure to get authorized in Cognito.\n */\n private prepareAuthDetails(username: string, pwd: string): AuthenticationDetails {\n return new AuthenticationDetails({ Username: username, Password: pwd });\n }\n /**\n * Prepare the necessary structure to identify a Cognito user.\n */\n prepareCognitoUser(username: string): CognitoUser {\n return new CognitoUser({ Username: username, Pool: this.userPool });\n }\n /**\n * Prepare a user attribute (they are all strings) in Cognito's format.\n */\n private prepareUserAttribute(name: string, value: string): CognitoUserAttribute {\n return new CognitoUserAttribute({ Name: name, Value: value });\n }\n\n /**\n * Perform a login through username and password.\n */\n login(username: string, password: string): Promise<LoginOutcomeActions> {\n return new Promise((resolve, reject): void => {\n const user = this.prepareCognitoUser(username);\n user.authenticateUser(this.prepareAuthDetails(username, password), {\n onSuccess: (): void =>\n resolve(env.idea.auth.forceLoginWithMFA ? LoginOutcomeActions.MFA_SETUP : LoginOutcomeActions.NONE),\n onFailure: (err: Error): void => reject(err),\n newPasswordRequired: (): void => {\n this.challengeUsername = username;\n this.challengePassword = password;\n resolve(LoginOutcomeActions.NEW_PASSWORD);\n },\n totpRequired: (): void => {\n this.challengeUsername = username;\n this.challengePassword = password;\n resolve(LoginOutcomeActions.MFA_CHALLENGE);\n }\n });\n });\n }\n /**\n * Complete the new password flow in the authentication.\n */\n confirmNewPassword(newPassword: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n const user = this.prepareCognitoUser(this.challengeUsername);\n user.authenticateUser(this.prepareAuthDetails(this.challengeUsername, this.challengePassword), {\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err),\n newPasswordRequired: (): void =>\n user.completeNewPasswordChallenge(\n newPassword,\n {},\n {\n onSuccess: (): void => {\n this.challengeUsername = null;\n this.challengePassword = null;\n resolve();\n },\n onFailure: (err: Error): void => reject(err)\n }\n )\n });\n });\n }\n /**\n * Complete the MFA challenge flow in the authentication.\n */\n completeMFAChallenge(otpCode: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n const user = this.prepareCognitoUser(this.challengeUsername);\n user.authenticateUser(this.prepareAuthDetails(this.challengeUsername, this.challengePassword), {\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err),\n totpRequired: (challengeName: ChallengeName): void =>\n user.sendMFACode(\n otpCode,\n {\n onSuccess: (): void => {\n this.challengeUsername = null;\n this.challengePassword = null;\n resolve();\n },\n onFailure: err => reject(err)\n },\n challengeName\n )\n });\n });\n }\n /**\n * Register a new user a set its default attributes.\n */\n register(username: string, password: string, attributes?: any): Promise<CognitoUser> {\n attributes = attributes || {};\n return new Promise((resolve, reject): void => {\n // add attributes like the email address and the fullname\n const attrs = [];\n for (const prop in attributes)\n if (attributes[prop]) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n // add the email, which is equal to the username for most of our Pools\n if (!attributes.email) attrs.push(this.prepareUserAttribute('email', username));\n // register the new user to the pool\n this.userPool.signUp(username, password, attrs, null, (err: Error, res: ISignUpResult): void => {\n if (err) return reject(err);\n this.newAccountJustRegistered = username;\n resolve(res.user);\n });\n });\n }\n /**\n * In case new account has just been registered, return the username.\n */\n getNewAccountJustRegistered(): string {\n return this.newAccountJustRegistered;\n }\n /**\n * Confirm a new registration through the confirmation code sent by Cognito.\n */\n confirmRegistration(username: string, code: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).confirmRegistration(code, true, (err: Error): void =>\n err ? reject(err) : resolve()\n );\n });\n }\n /**\n * Send again a confirmation code for a new registration.\n */\n resendConfirmationCode(username: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).resendConfirmationCode((err: Error): void => (err ? reject(err) : resolve()));\n });\n }\n /**\n * Logout the currently signed-in user.\n */\n logout(options?: { global: boolean }): Promise<void> {\n options = Object.assign({ global: false }, options);\n return new Promise((resolve, reject): void => {\n // remove the refresh token previosly saved\n this.storage.remove('AuthRefreshToken').then(\n (): Promise<void> =>\n // remove the optional auth details\n this.storage.remove('AuthUserDetails').then((): void => {\n // get the user and the session\n const user = this.userPool.getCurrentUser();\n user.getSession(async (err: Error): Promise<void> => {\n // if the session is active, run the online sign-out; otherwise, only the local data has been deleted\n if (err) return resolve();\n // if a reference to the device was saved, forget it\n if (env.idea.auth.singleSimultaneousSession) await this.setCurrentDeviceForProject(null);\n // sign-out from the pool (terminate the current session or all the sessions)\n if (options.global)\n user.globalSignOut({ onSuccess: (): void => resolve(), onFailure: err => reject(err) });\n else {\n user.signOut();\n resolve();\n }\n });\n })\n );\n });\n }\n /**\n * Send a password reset request.\n */\n forgotPassword(username: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).forgotPassword({\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err)\n });\n });\n }\n /**\n * Confirm a new password after a password reset request.\n */\n confirmPassword(username: string, code: string, newPwd: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n this.prepareCognitoUser(username).confirmPassword(code, newPwd, {\n onSuccess: (): void => resolve(),\n onFailure: (err: Error): void => reject(err)\n });\n });\n }\n /**\n * Gets the URL for enabling MFA. This URL can be used to generate a QR Code to read with an authenticator app.\n */\n getURLForEnablingMFA(): Promise<string> {\n return new Promise((resolve, reject): void => {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error): void => {\n if (err) return reject(err);\n user.associateSoftwareToken({\n associateSecretCode: (secretCode: string): void =>\n resolve(`otpauth://totp/${encodeURI(this.mfaProjectName)}?secret=${secretCode}`),\n onFailure: (err: any): void => reject(err)\n });\n });\n });\n }\n /**\n * Check whether the user has MFA enabled.\n */\n checkIfUserHasMFAEnabled(bypassCache = false): Promise<boolean> {\n return new Promise((resolve, reject): void => {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error): void => {\n if (err) return reject(err);\n user.getUserData(\n (err, data): void => {\n if (err) return reject(err);\n const isMFAEnabled = !!(data.UserMFASettingList && data.UserMFASettingList.includes('SOFTWARE_TOKEN_MFA'));\n resolve(isMFAEnabled);\n },\n { bypassCache }\n );\n });\n });\n }\n /**\n * Configure a MFA device for the user.\n */\n private setMFADevice(otp: string, mfaDeviceName: string, enabled = true, preferred = true): Promise<void> {\n return new Promise((resolve, reject): void => {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error): void => {\n if (err) return reject(err);\n user.verifySoftwareToken(otp, mfaDeviceName, {\n onSuccess: (): void =>\n user.setUserMfaPreference(null, { Enabled: enabled, PreferredMfa: preferred }, (err: Error): void =>\n err ? reject(err) : resolve()\n ),\n onFailure: (err): void => reject(err)\n });\n });\n });\n }\n /**\n * Enable a new MFA device for the user by inserting an OTP code generated by it.\n */\n enableMFA(otp: string, mfaDeviceName = 'default'): Promise<void> {\n return this.setMFADevice(otp, mfaDeviceName, true, true);\n }\n /**\n * Disable MFA for a user by inserting an OTP code generated by it.\n */\n disableMFA(otp: string, mfaDeviceName = 'default'): Promise<void> {\n return this.setMFADevice(otp, mfaDeviceName, false, false);\n }\n /**\n * Check if a user is currently authenticated.\n * @param offlineAllowed if set and if offline, skip authentication and retrieve data locally\n * @param getFreshIdTokenOnExp cb function to execute when the idToken is refreshed\n */\n isAuthenticated(offlineAllowed: boolean, getFreshIdTokenOnExp?: (freshIdToken: string) => void): Promise<any> {\n return new Promise((resolve, reject): void => {\n if (offlineAllowed && !navigator.onLine) {\n this.storage.get('AuthUserDetails').then(userDetails => resolve({ idToken: null, userDetails }));\n // re-execute the method when back online, so that you can retrieve a token to make requests\n window.addEventListener(\n 'online',\n (): Promise<void> =>\n this.isAuthenticated(true, getFreshIdTokenOnExp)\n // set the new token as if it was refreshed\n .then(result => getFreshIdTokenOnExp(result.idToken))\n );\n } else {\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n user.getSession((err: Error, session: CognitoUserSession): void => {\n if (err) return reject(err);\n user.getUserData(\n (err, data): void => {\n if (err) return reject(err);\n const isMFAEnabled = !!(\n data.UserMFASettingList && data.UserMFASettingList.includes('SOFTWARE_TOKEN_MFA')\n );\n if (!isMFAEnabled && env.idea.auth.forceLoginWithMFA)\n return reject(new Error(LoginOutcomeActions.MFA_SETUP));\n user.getUserAttributes((e: Error, attributes: CognitoUserAttribute[]): void => {\n if (e) return reject(e);\n // remap user attributes\n const userDetails: any = {};\n attributes.forEach((a: CognitoUserAttribute): string => (userDetails[a.getName()] = a.getValue()));\n // add the user's groups to the attributes\n const sessionInfo = session.getAccessToken().decodePayload();\n const groups: string[] = sessionInfo['cognito:groups'] || [];\n userDetails['groups'] = groups;\n // run some checks considering the user's groups and devices (based on the project's configuration)\n this.runPostAuthChecks(userDetails, err => {\n // in case some check failed, reject the authorisation flow\n if (err) return reject(err);\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // set a timer to manage the autorefresh of the idToken (through the refreshToken)\n setTimeout(\n (): void => this.refreshSession(user, session.getRefreshToken().getToken(), getFreshIdTokenOnExp),\n 15 * 60 * 1000\n ); // every 15 minutes\n // (async) if offlineAllowed, save data locally, to use it next time we'll be offline\n if (offlineAllowed) this.storage.set('AuthUserDetails', userDetails);\n // return the idToken (to use with API)\n resolve({ idToken: session.getIdToken().getJwtToken(), userDetails });\n });\n });\n },\n { bypassCache: true }\n );\n });\n }\n });\n }\n /**\n * Helper to refresh the session every N minutes.\n */\n private refreshSession(user: CognitoUser, refreshToken: string, callback: (freshIdToken: string) => void): void {\n user.refreshSession(\n new CognitoRefreshToken({ RefreshToken: refreshToken }),\n (err: Error, session: CognitoUserSession): void => {\n if (err) {\n // try again in 1 minute\n setTimeout((): void => this.refreshSession(user, refreshToken, callback), 1 * 60 * 1000);\n } else {\n // (async) save the refresh token so it can be accessed by other procedures\n this.storage.set('AuthRefreshToken', session.getRefreshToken().getToken());\n // repeat every 15 minutes\n setTimeout(\n (): void => this.refreshSession(user, session.getRefreshToken().getToken(), callback),\n 15 * 60 * 1000\n );\n // run the callback action, if set\n if (callback) callback(session.getIdToken().getJwtToken());\n }\n }\n );\n }\n /**\n * Run some post-auth checks, based on the users groups and on the app's configuration:\n * - users in the Cognito's \"admins\" grup skip all the following rules.\n * - users in the Cognito's \"robots\" group can't sign-into front-ends (they serve only back-end purposes).\n * - if `env.idea.auth.singleSimultaneousSession` is on, make sure there is only one active session per user.\n */\n private runPostAuthChecks(userDetails: any, callback: (err?: Error) => void): void | Promise<void> {\n const groups: string[] = userDetails['groups'];\n // skip checks if the user is in the \"admins\" group\n const isAdmin = groups.some(x => x === 'admins');\n if (isAdmin) return callback();\n // users in the \"robots\" group can't sign-into front-ends (they serve only back-end purposes)\n const isRobot = groups.some(x => x === 'robots');\n if (isRobot) return callback(new Error('ROBOT_USER'));\n // in case the project limits each account to only one simultaneous session, run a check\n if (env.idea.auth.singleSimultaneousSession) return this.checkForSimultaneousSessions(userDetails, callback);\n // otherwise, we're done\n callback();\n }\n /**\n * Check whether the user signed-into multiple devices.\n */\n private async checkForSimultaneousSessions(userDetails: any, callback: (err?: Error) => void): Promise<void> {\n // get or create a key for the current device (~random)\n let currentDeviceKey = await this.storage.get('AuthDeviceKey');\n if (!currentDeviceKey) {\n const randomKey = Math.random().toString(36).substring(10);\n currentDeviceKey = randomKey.concat(String(Date.now()));\n await this.storage.set('AuthDeviceKey', currentDeviceKey);\n }\n // check whether the last device to sign-into this project (if any) is the current one\n const lastDeviceToSignIntoThisProject = userDetails[DEVICE_KEY_ATTRIBUTE];\n // if it's the first user's device to sign-in, save the reference in Cognito and resolve\n if (!lastDeviceToSignIntoThisProject) {\n this.setCurrentDeviceForProject(currentDeviceKey)\n .then((): void => callback())\n .catch((): void => callback(new Error('CANT_SET_DEVICE')));\n // if the device didn't change, resolve\n } else if (lastDeviceToSignIntoThisProject === currentDeviceKey) callback();\n // othwerwise, report there is more than one simultaneous session\n else callback(new Error('SIMULTANEOUS_SESSION'));\n }\n /**\n * Set (or reset) the current user's device (by key) in the current project (stored in Cognito).\n */\n private setCurrentDeviceForProject(deviceKey?: string): Promise<void> {\n const attributes: any = {};\n // note: an empty string will remove the attribute from Cognito\n attributes[DEVICE_KEY_ATTRIBUTE] = deviceKey || '';\n return this.updateUserAttributes(attributes);\n }\n /**\n * Update the currently logged in user's attributes.\n */\n updateUserAttributes(attributes: any): Promise<void> {\n return new Promise((resolve, reject): void => {\n // prepare the attributes we want to change\n const attrs = new Array<any>();\n for (const prop in attributes)\n if (attributes[prop] !== undefined) attrs.push(this.prepareUserAttribute(prop, attributes[prop]));\n const user = this.userPool.getCurrentUser();\n if (!user) return reject();\n // we need to get the session before to make changes\n user.getSession((err: Error): void => {\n if (err) reject(err);\n else user.updateAttributes(attrs, (e: Error): void => (e ? reject(e) : resolve()));\n });\n });\n }\n}\n\n/**\n * The possible actions following a successful login.\n */\nexport enum LoginOutcomeActions {\n NONE = 'none',\n NEW_PASSWORD = 'newPassword',\n MFA_CHALLENGE = 'mfaChallenge',\n MFA_SETUP = 'mfaSetup'\n}\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { Browser } from '@capacitor/browser';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService, LoginOutcomeActions } from './auth.service';\n\nimport { environment as env } from '@env';\n\n@Component({\n selector: 'idea-sign-in',\n templateUrl: 'signIn.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignInPage {\n title = env.idea.app.title;\n registrationPossible = env.idea.auth.registrationIsPossible;\n hasIntroPage = env.idea.app.hasIntroPage;\n website = env.idea.website;\n\n email: string;\n password: string;\n agreementsCheck = true;\n newAccountRegistered = false;\n errorMsg: string;\n darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService,\n private t: IDEATranslationsService\n ) {}\n ionViewDidEnter(): void {\n // manage the scenario in which we just created a new account (show a explanatory message: email must be confirmed)\n this.newAccountRegistered = !!this.auth.getNewAccountJustRegistered();\n if (this.newAccountRegistered) this.email = this.auth.getNewAccountJustRegistered();\n }\n\n async login(): Promise<void> {\n if (!this.agreementsCheck) return;\n try {\n this.errorMsg = null;\n await this.loading.show();\n const loginAction = await this.auth.login(this.email, this.password);\n if (loginAction === LoginOutcomeActions.NEW_PASSWORD) this.navCtrl.navigateForward(['auth', 'new-password']);\n else if (loginAction === LoginOutcomeActions.MFA_CHALLENGE)\n this.navCtrl.navigateForward(['auth', 'mfa-challenge']);\n else if (loginAction === LoginOutcomeActions.MFA_SETUP) this.navCtrl.navigateForward(['auth', 'setup-mfa']);\n else window.location.assign('');\n } catch (err) {\n if ((err as any).name === 'UserNotConfirmedException')\n this.errorMsg = this.t._('IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN');\n else if (\n (err as any).name === 'UserLambdaValidationException' &&\n (err as any).message?.includes('@IDEA_COGNITO_TRANSITION')\n )\n this.errorMsg = this.t._('IDEA_AUTH.CHANGE_YOUR_PASSWORD_TO_LOGIN');\n this.message.error('IDEA_AUTH.AUTHENTICATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n goToIntro(): void {\n this.navCtrl.navigateBack(['intro']);\n }\n goToForgotPassword(): void {\n this.navCtrl.navigateForward(['auth/forgot-password']);\n }\n goToRegistration(): void {\n this.navCtrl.navigateForward(['auth', 'sign-up']);\n }\n\n translationExists(key: string): boolean {\n return !!this.t._(key);\n }\n\n async openLink(url: string): Promise<void> {\n await Browser.open({ url });\n }\n}\n","<ion-content>\n <ion-card color=\"warning\" *ngIf=\"newAccountRegistered\">\n <ion-card-content>{{ 'IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN' | translate }}</ion-card-content>\n </ion-card>\n <form class=\"flexBox\">\n <div>\n <ion-card class=\"authCard\">\n <ion-img\n [title]=\"'IDEA_AUTH.SERVICE_LOGO' | translate\"\n [src]=\"darkMode ? 'assets/icons/icon-auth-alt.svg' : 'assets/icons/icon-auth.svg'\"\n ></ion-img>\n <ion-card-header>\n <ion-card-title color=\"primary\" *ngIf=\"title\">{{ title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"translationExists('IDEA_VARIABLES.TAGLINE')\">\n {{ 'IDEA_VARIABLES.TAGLINE' | translate }}\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\"><b>{{ 'IDEA_AUTH.WARNING' | translate }}.</b> {{ errorMsg }}</p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"> </ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"login()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n id=\"current-password\"\n type=\"password\"\n pattern=\".{8,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"current-password\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.PASSWORD_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"password\"\n (keyup.enter)=\"login()\"\n ></ion-input>\n </ion-item>\n <ion-row\n class=\"agreementsAcceptanceRow\"\n *ngIf=\"\n !registrationPossible &&\n (translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL'))\n \"\n >\n <ion-col>\n <ion-checkbox\n size=\"small\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"agreementsCheck\"\n ></ion-checkbox>\n {{ 'IDEA_AUTH.AGREEMENTS_CHECK_LOGIN' | translate }}:\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n [title]=\"'IDEA_AUTH.TERMS_AND_CONDITIONS_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL' | translate\"\n >\n {{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}\n </a>\n <ion-text\n *ngIf=\"\n translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL') && translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\n \"\n >\n &\n </ion-text>\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n [title]=\"'IDEA_AUTH.PRIVACY_POLICY_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.PRIVACY_POLICY_URL' | translate\"\n >\n {{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}\n </a>\n </ion-col>\n </ion-row>\n <ion-button\n expand=\"block\"\n [disabled]=\"!agreementsCheck\"\n [title]=\"'IDEA_AUTH.SIGN_IN_HINT' | translate\"\n (click)=\"login()\"\n >\n {{ 'IDEA_AUTH.SIGN_IN' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n *ngIf=\"registrationPossible\"\n [title]=\"'IDEA_AUTH.CREATE_AN_ACCOUNT_HINT' | translate\"\n (click)=\"goToRegistration()\"\n >\n {{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.I_FORGOT_MY_PASSWORD_HINT' | translate\"\n (click)=\"goToForgotPassword()\"\n >\n {{ 'IDEA_AUTH.I_FORGOT_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n color=\"medium\"\n class=\"smallCaseButton\"\n *ngIf=\"hasIntroPage\"\n [title]=\"'IDEA_AUTH.BACK_TO_INTRO_HINT' | translate\"\n (click)=\"goToIntro()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_INTRO' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n <ion-img\n class=\"ideaLogo\"\n *ngIf=\"website\"\n [src]=\"darkMode ? './assets/icons/idea-alt.png' : './assets/icons/idea.png'\"\n [title]=\"'IDEA_AUTH.IDEA_TAGLINE' | translate\"\n (click)=\"openLink(website)\"\n ></ion-img>\n </div>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { isEmpty } from 'idea-toolbox';\n\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\nimport { IDEAAuthService } from './auth.service';\n\nimport { environment as env } from '@env';\n\n@Component({\n selector: 'idea-sign-up',\n templateUrl: 'signUp.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASignUpPage implements OnInit {\n email: string;\n password: string;\n agreementsCheck = false;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService,\n private t: IDEATranslationsService\n ) {}\n ngOnInit(): void {\n if (!env.idea.auth.registrationIsPossible) return this.goToAuth();\n this.agreementsCheck =\n this.t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || this.t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')\n ? this.agreementsCheck\n : true;\n }\n\n async register(): Promise<void> {\n this.errorMsg = null;\n if (isEmpty(this.email, 'email')) this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n else if (!this.password || this.password.length < 8)\n this.errorMsg = this.t._('IDEA_AUTH.PASSWORD_POLICY_VIOLATION', { n: 8 });\n if (this.errorMsg) return this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n\n try {\n await this.loading.show();\n await this.auth.register(this.email, this.password);\n this.message.success('IDEA_AUTH.REGISTRATION_COMPLETED');\n this.goToAuth();\n } catch (err) {\n this.errorMsg = (err as any).message;\n this.message.error('IDEA_AUTH.REGISTRATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n translationExists(key: string): boolean {\n return !!this.t._(key);\n }\n\n goToResendLink(): void {\n this.navCtrl.navigateForward(['auth/resend-link']);\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.NEW_ACCOUNT' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.REGISTER_A_NEW_ACCOUNT_TO_THE_SYSTEM' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"> </ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.REGISTRATION_EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"register()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n pattern=\".{8,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"password\"\n (keyup.enter)=\"register()\"\n ></ion-input>\n </ion-item>\n <ion-row\n class=\"agreementsAcceptanceRow\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n >\n <ion-col>\n <ion-checkbox\n size=\"small\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"agreementsCheck\"\n ></ion-checkbox>\n {{ 'IDEA_AUTH.AGREEMENTS_CHECK_REGISTRATION' | translate }}:\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n [title]=\"'IDEA_AUTH.TERMS_AND_CONDITIONS_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL' | translate\"\n >\n {{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}\n </a>\n <ion-text\n *ngIf=\"\n translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL') && translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\n \"\n >\n &\n </ion-text>\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n [title]=\"'IDEA_AUTH.PRIVACY_POLICY_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.PRIVACY_POLICY_URL' | translate\"\n >\n {{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}\n </a>\n </ion-col>\n </ion-row>\n <ion-button\n expand=\"block\"\n [disabled]=\"!agreementsCheck\"\n [title]=\"'IDEA_AUTH.CREATE_AN_ACCOUNT_HINT' | translate\"\n (click)=\"register()\"\n >\n {{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.HAVEN_T_RECEIVED_CONFIRMATION_LINK_HINT' | translate\"\n (click)=\"goToResendLink()\"\n >\n {{ 'IDEA_AUTH.HAVEN_T_RECEIVED_CONFIRMATION_LINK' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-new-password',\n templateUrl: 'newPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEANewPasswordPage implements OnInit {\n newPassword: string;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService,\n private t: IDEATranslationsService\n ) {}\n ngOnInit(): void {\n if (!this.auth.challengeUsername) this.goToAuth();\n }\n\n async confirmNewPassword(): Promise<void> {\n try {\n this.errorMsg = null;\n await this.loading.show();\n await this.auth.confirmNewPassword(this.newPassword);\n window.location.assign('');\n } catch (error) {\n this.errorMsg = this.t._('IDEA_AUTH.PASSWORD_POLICY_VIOLATION', { n: 8 });\n this.message.error(this.errorMsg, true);\n } finally {\n this.loading.hide();\n }\n }\n\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.YOU_NEED_TO_CHOOSE_A_NEW_PASSWORD' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n pattern=\".{8,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"new-password\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"newPassword\"\n (keyup.enter)=\"confirmNewPassword()\"\n ></ion-input>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.CONFIRM_NEW_PASSWORD_HINT' | translate\"\n (click)=\"confirmNewPassword()\"\n >\n {{ 'IDEA_AUTH.CONFIRM_NEW_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-resend-link',\n templateUrl: 'resendLink.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAResendLinkPage {\n email: string;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService,\n private t: IDEATranslationsService\n ) {}\n\n async resendConfirmationLink(): Promise<void> {\n this.errorMsg = null;\n if (!this.email) {\n this.errorMsg = this.t._('IDEA_AUTH.VALID_EMAIL_OBLIGATORY');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n return;\n }\n try {\n await this.loading.show();\n await this.auth.resendConfirmationCode(this.email);\n this.message.success('IDEA_AUTH.CONFIRMATION_LINK_SENT');\n this.goToAuth();\n } catch (error) {\n this.errorMsg = this.t._('IDEA_AUTH.IS_THE_EMAIL_CORRECT');\n this.message.error('IDEA_AUTH.SENDING_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CONFIRM_ACCOUNT' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.RESEND_CONFIRMATION_LINK_HINT' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"> </ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"resendConfirmationLink()\"\n ></ion-input>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.RESEND_LINK_HINT' | translate\"\n (click)=\"resendConfirmationLink()\"\n >\n {{ 'IDEA_AUTH.RESEND_LINK' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-forgot-password',\n templateUrl: 'forgotPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAForgotPasswordPage {\n email: string;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService\n ) {}\n\n async forgotPassword(): Promise<void> {\n try {\n await this.loading.show();\n await this.auth.forgotPassword(this.email);\n this.message.success('IDEA_AUTH.PASSWORD_RESET_CODE_SENT');\n this.goToConfirmPassword();\n } catch (error) {\n this.message.error('IDEA_AUTH.USER_NOT_FOUND');\n } finally {\n this.loading.hide();\n }\n }\n\n goToConfirmPassword(): void {\n this.navCtrl.navigateForward(['auth/confirm-password'], { queryParams: { email: this.email ?? null } });\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.PASSWORD_RESET' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.PASSWORD_RESET_HINT' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"> </ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"forgotPassword()\"\n ></ion-input>\n </ion-item>\n <ion-button expand=\"block\" [title]=\"'IDEA_AUTH.RESET_MY_PASSWORD_HINT' | translate\" (click)=\"forgotPassword()\">\n {{ 'IDEA_AUTH.RESET_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.ALREADY_HAVE_A_RESET_CODE_HINT' | translate\"\n (click)=\"goToConfirmPassword()\"\n >\n {{ 'IDEA_AUTH.ALREADY_HAVE_A_RESET_CODE' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { ActivatedRoute } from '@angular/router';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-confirm-password',\n templateUrl: 'confirmPassword.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAConfirmPasswordPage implements OnInit {\n email: string;\n newPassword: string;\n code: string;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private route: ActivatedRoute,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService,\n private t: IDEATranslationsService\n ) {}\n ngOnInit(): void {\n this.email = this.route.snapshot.queryParamMap.get('email') ?? null;\n if (!this.email && this.route.snapshot.queryParams.user)\n this.email = decodeURIComponent(this.route.snapshot.queryParams.user);\n this.code = this.route.snapshot.queryParams.code;\n }\n\n async confirmPassword(): Promise<void> {\n try {\n this.errorMsg = null;\n await this.loading.show();\n await this.auth.confirmPassword(this.email, this.code, this.newPassword);\n this.message.success('IDEA_AUTH.PASSWORD_CHANGED');\n this.goToAuth();\n } catch (error) {\n this.errorMsg = this.t._('IDEA_AUTH.CONFIRM_PASSWORD_ERROR', { n: 8 });\n this.message.error(this.errorMsg, true);\n } finally {\n this.loading.hide();\n }\n }\n\n goToForgotPassword(): void {\n this.navCtrl.navigateBack(['auth/forgot-password']);\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.CHANGE_THE_PASSWORD' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.CHANGE_THE_PASSWORD_HINT' | translate: { n: 8 } }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"> </ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"disc\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"text\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [placeholder]=\"'IDEA_AUTH.RESET_CODE' | translate\"\n [title]=\"'IDEA_AUTH.RESET_CODE_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"code\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n pattern=\".{8,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"new-password\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.NEW_PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"newPassword\"\n (keyup.enter)=\"confirmPassword()\"\n ></ion-input>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.CHANGE_MY_PASSWORD_HINT' | translate\"\n (click)=\"confirmPassword()\"\n >\n {{ 'IDEA_AUTH.CHANGE_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.HAVEN_T_RECEIVED_A_RESET_CODE_HINT' | translate\"\n (click)=\"goToForgotPassword()\"\n >\n {{ 'IDEA_AUTH.HAVEN_T_RECEIVED_A_RESET_CODE' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { IDEAMessageService, IDEALoadingService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEAAuthService } from './auth.service';\n\n@Component({\n selector: 'idea-mfa-challenge',\n templateUrl: 'mfaChallenge.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEAMFAChallengePage implements OnInit {\n otpCode: string;\n errorMsg: string;\n\n constructor(\n private navCtrl: NavController,\n private message: IDEAMessageService,\n private loading: IDEALoadingService,\n private auth: IDEAAuthService,\n private t: IDEATranslationsService\n ) {}\n ngOnInit(): void {\n if (!this.auth.challengeUsername) this.goToAuth();\n }\n\n async completeMFAChallenge(): Promise<void> {\n try {\n this.errorMsg = null;\n await this.loading.show();\n await this.auth.completeMFAChallenge(this.otpCode);\n window.location.assign('');\n } catch (error) {\n this.errorMsg = this.t._('IDEA_AUTH.INVALID_OTP_CODE');\n this.message.error(this.errorMsg, true);\n } finally {\n this.loading.hide();\n }\n }\n\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.ENTER_OTP_CODE' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.ENTER_OTP_CODE_I' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b>{{ 'IDEA_AUTH.ERROR' | translate }}.</b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n inputmode=\"numeric\"\n [placeholder]=\"'IDEA_AUTH.OTP_CODE' | translate\"\n [title]=\"'IDEA_AUTH.ENTER_OTP_CODE' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"otpCode\"\n (keyup.enter)=\"completeMFAChallenge()\"\n ></ion-input>\n </ion-item>\n <ion-button\n expand=\"block\"\n [title]=\"'IDEA_AUTH.CONFIRM_OTP_CODE_HINT' | translate\"\n (click)=\"completeMFAChallenge()\"\n >\n {{ 'IDEA_AUTH.CONFIRM_OTP_CODE' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { Component, OnInit } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\nimport { toCanvas } from 'qrcode';\n\nimport { IDEAAuthService } from '../auth.service';\nimport { IDEALoadingService, IDEAMessageService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-setup-mfa-modal',\n templateUrl: 'setupMFAModal.component.html',\n styleUrls: ['setupMFAModal.component.scss']\n})\nexport class IDEASetupMFAModalComponent implements OnInit {\n otpCode: string;\n isMFAEnabled: boolean;\n\n constructor(\n private modalCtrl: ModalController,\n private loading: IDEALoadingService,\n private message: IDEAMessageService,\n private auth: IDEAAuthService\n ) {}\n async ngOnInit(): Promise<void> {\n try {\n await this.loading.show();\n this.isMFAEnabled = await this.auth.checkIfUserHasMFAEnabled(true);\n if (!this.isMFAEnabled) {\n const url = await this.auth.getURLForEnablingMFA();\n await this.generateQRCodeCanvasByURL(url);\n }\n } catch (error) {\n this.message.error('COMMON.OPERATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n private generateQRCodeCanvasByURL(url: string): Promise<void> {\n return new Promise((resolve, reject): void => {\n const container = document.getElementById('qrCodeContainer');\n container.innerHTML = '';\n toCanvas(url, { errorCorrectionLevel: 'L' }, (err: Error, canvas: HTMLCanvasElement): void => {\n if (err) return reject(err);\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n canvas.style.borderRadius = '4px';\n container.appendChild(canvas);\n resolve();\n });\n });\n }\n\n async setMFA(enable: boolean): Promise<void> {\n if (!this.otpCode) return;\n try {\n await this.loading.show();\n if (enable) await this.auth.enableMFA(this.otpCode);\n else await this.auth.disableMFA(this.otpCode);\n this.isMFAEnabled = enable;\n this.message.success('COMMON.OPERATION_COMPLETED');\n this.modalCtrl.dismiss({ enabled: enable });\n } catch (error) {\n this.message.error('COMMON.OPERATION_FAILED');\n } finally {\n this.loading.hide();\n }\n }\n\n close(): void {\n this.modalCtrl.dismiss();\n }\n}\n","<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>{{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA' : 'IDEA_AUTH.SETUP_MFA') | translate }}</ion-title>\n </ion-toolbar>\n</ion-header>\n<ion-content class=\"ion-padding\">\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label class=\"ion-text-center\">\n <h2>{{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA_I' : 'IDEA_AUTH.SETUP_MFA_I') | translate }}</h2>\n <p>{{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA_II' : 'IDEA_AUTH.SETUP_MFA_II') | translate }}</p>\n </ion-label>\n </ion-list-header>\n <ion-card color=\"white\">\n <ion-card-content>\n <div id=\"qrCodeContainer\" *ngIf=\"!isMFAEnabled\"></div>\n <ion-item color=\"light\">\n <ion-label position=\"floating\">{{ 'IDEA_AUTH.OTP_CODE' | translate }}</ion-label>\n <ion-input type=\"text\" inputmode=\"numeric\" [(ngModel)]=\"otpCode\"></ion-input>\n </ion-item>\n <ion-button expand=\"block\" class=\"ion-margin-top\" [disabled]=\"!otpCode\" (click)=\"setMFA(!isMFAEnabled)\">\n {{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA' : 'IDEA_AUTH.ENABLE_MFA') | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </ion-list>\n</ion-content>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\n\nimport { IDEASetupMFAModalComponent } from './setupMFAModal.component';\n\nimport { IDEAAuthService } from '../auth.service';\n\n@Component({\n selector: 'idea-setup-mfa-button',\n templateUrl: 'setupMFAButton.component.html',\n styleUrls: ['setupMFAButton.component.scss']\n})\nexport class IDEASetupMFAButtonComponent implements OnInit {\n /**\n * The color of the button.\n */\n @Input() color: string;\n /**\n * The fill option for the button.\n */\n @Input() fill: string;\n /**\n * Trigger then the MFA setup changes.\n */\n @Output() change = new EventEmitter<boolean>();\n\n isMFAEnabled: boolean;\n\n constructor(private modalCtrl: ModalController, private auth: IDEAAuthService) {}\n async ngOnInit(): Promise<void> {\n this.isMFAEnabled = await this.auth.checkIfUserHasMFAEnabled(true);\n }\n\n async openMFAModal(): Promise<void> {\n const modal = await this.modalCtrl.create({ component: IDEASetupMFAModalComponent, backdropDismiss: false });\n modal.onDidDismiss().then(({ data }): void => {\n if (data) {\n this.isMFAEnabled = data.enabled;\n this.change.emit(data.enabled);\n }\n });\n await modal.present();\n }\n}\n","<ion-button *ngIf=\"isMFAEnabled !== undefined\" [color]=\"color\" [fill]=\"fill\" (click)=\"openMFAModal()\">\n {{ (isMFAEnabled ? 'IDEA_AUTH.DISABLE_MFA' : 'IDEA_AUTH.SETUP_MFA') | translate }}\n</ion-button>\n","import { Component } from '@angular/core';\nimport { NavController } from '@ionic/angular';\n\n@Component({\n selector: 'idea-mfa-setup',\n templateUrl: 'setupMFA.page.html',\n styleUrls: ['auth.scss']\n})\nexport class IDEASetupMFAPage {\n constructor(private navCtrl: NavController) {}\n\n reloadApp(): void {\n window.location.assign('');\n }\n goToAuth(): void {\n this.navCtrl.navigateBack(['auth']);\n }\n}\n","<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.SETUP_MFA' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.MFA_IS_MANDATORY' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <idea-setup-mfa-button (change)=\"reloadApp()\"></idea-setup-mfa-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from '@ionic/angular';\nimport { FormsModule } from '@angular/forms';\nimport { IDEATranslationsModule } from '@idea-ionic/common';\n\nimport { IDEASetupMFAModalComponent } from './setupMFAModal.component';\nimport { IDEASetupMFAButtonComponent } from './setupMFAButton.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, IonicModule, IDEATranslationsModule],\n declarations: [IDEASetupMFAModalComponent, IDEASetupMFAButtonComponent],\n exports: [IDEASetupMFAModalComponent, IDEASetupMFAButtonComponent]\n})\nexport class IDEASetupMFAModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { RouterModule } from '@angular/router';\n\nimport { IDEATranslationsModule } from '@idea-ionic/common';\n\nimport { IDEASignInPage } from './signIn.page';\nimport { IDEASignUpPage } from './signUp.page';\nimport { IDEANewPasswordPage } from './newPassword.page';\nimport { IDEAResendLinkPage } from './resendLink.page';\nimport { IDEAForgotPasswordPage } from './forgotPassword.page';\nimport { IDEAConfirmPasswordPage } from './confirmPassword.page';\nimport { IDEAMFAChallengePage } from './mfaChallenge.page';\nimport { IDEASetupMFAPage } from './setupMFA.page';\n\nimport { IDEASetupMFAModule } from './setupMFA/setupMFA.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n IDEATranslationsModule,\n RouterModule.forChild([\n { path: '', redirectTo: 'sign-in', pathMatch: 'full' },\n { path: 'sign-in', component: IDEASignInPage },\n { path: 'sign-up', component: IDEASignUpPage },\n { path: 'new-password', component: IDEANewPasswordPage },\n { path: 'mfa-challenge', component: IDEAMFAChallengePage },\n { path: 'setup-mfa', component: IDEASetupMFAPage },\n { path: 'resend-link', component: IDEAResendLinkPage },\n { path: 'forgot-password', component: IDEAForgotPasswordPage },\n { path: 'confirm-password', component: IDEAConfirmPasswordPage }\n ]),\n IDEASetupMFAModule\n ],\n declarations: [\n IDEASignInPage,\n IDEASignUpPage,\n IDEANewPasswordPage,\n IDEAResendLinkPage,\n IDEAForgotPasswordPage,\n IDEAConfirmPasswordPage,\n IDEAMFAChallengePage,\n IDEASetupMFAPage\n ]\n})\nexport class IDEAAuthModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["env","i1","i3.IDEAAuthService","i4","i2","i3","i4.IDEAAuthService","i5","i6","i2.IDEAAuthService","i3.IDEASetupMFAButtonComponent"],"mappings":"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"}