@idea-ionic/auth 6.3.3 → 6.4.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.
@@ -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 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\">\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)=\"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"],"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/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 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\">\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)=\"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","i5","i2","i3","i4.IDEAAuthService","i6"],"mappings":"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"}