{"version":3,"file":"assets/chunk.a36d5a5215f7d24de347.js","mappings":"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","sources":["webpack://volta/./components/bv-external-link/index.hbs","webpack://volta/./components/bv-external-link/index.js","webpack://volta/./components/login-form/index.hbs","webpack://volta/./components/login-form/index.ts","webpack://volta/./_pods/login/template.hbs","webpack://volta/./_pods/application/route.ts","webpack://volta/./_pods/login/route.ts","webpack://volta/./assets/_route_/login.js","webpack://volta/./node_modules/ember-cli-string-helpers/helpers/capitalize.js"],"sourcesContent":["import { hbs } from 'ember-cli-htmlbars';\nexport default hbs(\"\\n \\n {{#if @iconLeft}}\\n \\n {{/if}}\\n \\n {{@text}}\\n \\n \\n\")","import templateOnlyComponent from '@ember/component/template-only';\nexport default templateOnlyComponent();","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs(\"{{! login form; the fields must be named \\\"login\\\" and \\\"password\\\"; the controller action is \\\"authenticate\\\" }}\\n
\\n \\n {{#if this.authorizedProviders}}\\n \\n
\\n \\n {{t \\\"loginPage.or\\\"}}\\n \\n
\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\")","import { Changeset } from 'ember-changeset';\nimport lookupValidator from 'ember-changeset-validations';\nimport { validatePresence } from 'ember-changeset-validations/validators';\nimport { BufferedChangeset } from 'ember-changeset/types';\nimport { task } from 'ember-concurrency';\nimport Config from 'volta/config/environment';\n\nimport EmberObject from '@ember/object';\nimport { later } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\n\nimport type BvFlashService from 'volta/services/bv-flash';\nimport type BvMetricsService from 'volta/services/bv-metrics';\nimport type StoreService from 'volta/services/store';\nimport type { IAjaxError } from 'volta/utils/error-utils';\n\nimport type SessionService from 'ember-simple-auth/services/session';\nimport type { TProvider } from 'volta/models/types/user';\nconst Authentication = EmberObject.extend({\n login: null,\n password: null\n});\n\nconst Validations = {\n login: [validatePresence(true)],\n password: [validatePresence(true)]\n};\n\ninterface IArgs {\n config: {\n tenantId: string;\n env: string;\n authorizedProviders: TProvider[];\n };\n}\n\ntype AuthentificationChangeSet = BufferedChangeset & EmberObject;\n\nexport default class LoginForm extends Component {\n // Services\n // ~~~~~\n\n @service declare store: StoreService;\n @service declare session: SessionService;\n @service declare bvFlash: BvFlashService;\n @service declare bvMetrics: BvMetricsService;\n\n // Properties\n // ~~~~~\n\n @tracked authentication: any;\n @tracked authChangeset?: AuthentificationChangeSet;\n @tracked isError = false;\n\n // Computed Properties\n // ~~~~~\n\n get authorizedProviders() {\n if (!this.args || !this.args.config || !this.args.config.authorizedProviders) {\n return undefined;\n } else {\n return this.args.config.authorizedProviders.map((provider) => ({\n key: provider,\n url: `${Config.api.host}/${Config.api.namespace}/authenticate/${provider}`,\n icon: provider\n }));\n }\n }\n\n // Lifecycle Hooks\n // ~~~~~\n\n constructor(owner: any, args: IArgs) {\n super(owner, args);\n this.authentication = Authentication.create();\n this.initChangeset(this.authentication);\n }\n\n // Actions\n // ~~~~~\n\n authenticate = task(async () => {\n if (!this.authChangeset) {\n return;\n }\n const { login, password } = this.authChangeset.getProperties('login', 'password');\n this.bvMetrics.trackAction(this, 'login', login as string);\n await this.authChangeset.validate();\n if (this.authChangeset.isValid) {\n this.authChangeset.execute();\n const data = {\n login,\n password,\n rememberMe: true\n };\n try {\n await this.session.authenticate('authenticator:jwt', data);\n } catch (error) {\n this._onAuthenticateError(error);\n }\n }\n });\n\n // Helper Function\n // ~~~~~\n\n initChangeset(auth: typeof Authentication) {\n this.authChangeset = Changeset(\n auth,\n lookupValidator(Validations),\n Validations\n ) as AuthentificationChangeSet;\n }\n\n // Private Callbacks\n // ~~~~~\n\n _onAuthenticateError(reason: IAjaxError) {\n if (this.isDestroying || this.isDestroyed) {\n return;\n }\n this.bvFlash.ajaxError(reason);\n this.session.store?.clear();\n this.isError = true;\n later(\n this,\n () => {\n this.isError = false;\n },\n 1000\n );\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs(\"{{page-title (t \\\"loginPage.formTitle\\\")}}\\n\\n \\n\")","import Transition from '@ember/routing/-private/transition';\nimport Route from '@ember/routing/route';\nimport { inject as service } from '@ember/service';\nimport type IntlService from 'ember-intl/services/intl';\n\nimport type LocalizationService from 'volta/services/localization';\n\nexport default class ApplicationRoute extends Route {\n // Services\n // ~~~~~\n\n @service declare localization: LocalizationService;\n @service declare intl: IntlService;\n\n // Lifecycle Hooks\n // ~~~~~\n\n async beforeModel(_transition: Transition) {\n if (!this.localization.initialTranslations) {\n const locale = this.localization.defaultLocale;\n const translations = await fetch(`/translations/${locale.value.toLowerCase()}.json`);\n this.localization.initialTranslations = await translations.json();\n this.intl.addTranslations(\n this.localization.defaultLocale.value,\n this.localization.initialTranslations\n );\n this.localization.setLocale(locale.value);\n }\n }\n}\n","import Config from 'volta/config/environment';\n\nimport { action } from '@ember/object';\nimport ApplicationRoute from '../application/route';\nimport { inject as service } from '@ember/service';\n\nimport type RouterService from '@ember/routing/router-service';\n// @ts-ignore\nimport type CookiesService from 'ember-cookies/services/cookies';\nimport type IntlService from 'ember-intl/services/intl';\nimport type SessionService from 'ember-simple-auth/services/session';\n\nimport type AppSettings from 'volta/services/app-settings';\nimport type BvFlashService from 'volta/services/bv-flash';\nimport type StoreService from 'volta/services/store';\n\ntype Transition = ReturnType;\n\nconst SESSION_COOKIE_NAME: string = Config.auth.sessionCookieName;\n\nexport default class LoginRoute extends ApplicationRoute {\n @service cookies!: CookiesService;\n @service store!: StoreService;\n @service bvFlash!: BvFlashService;\n @service intl!: IntlService;\n @service appSettings!: AppSettings;\n @service session!: SessionService;\n\n queryParams = {\n state: { refreshModel: false }\n };\n\n async beforeModel(transition: Transition) {\n await super.beforeModel(transition);\n this.session.prohibitAuthentication('protected.dashboard');\n }\n\n async model() {\n const res = await this.appSettings.fetchBaseTenant.perform();\n if (!this.cookies.exists(SESSION_COOKIE_NAME)) {\n await delay(1400);\n }\n return res;\n }\n\n // Allow error and loading template to be shown\n @action\n error() {\n return true;\n }\n\n @action\n loading() {\n return true;\n }\n\n afterModel(model: {}, transition: Transition) {\n super.afterModel(model, transition);\n const queryParams = transition.to?.queryParams;\n return this.checkSession(queryParams);\n }\n\n // This route can be redirected to from the backend after a external provider (like Okta) authentication\n // The request should carry a cookie with the stringified JWT session\n // If it exists we just need to parse it and authorize the session\n // with ember-simple-auth like we would do normally\n async checkSession(queryParams?: { state?: string }) {\n // If Okta user is not linked to a Volta session, throws a error\n if (queryParams?.state) {\n this.bvFlash.error(this.intl.t(atob(queryParams.state)));\n this.replaceWith('login', { queryParams: { state: undefined } });\n return;\n }\n try {\n if (this.cookies.exists(SESSION_COOKIE_NAME)) {\n const sessionCookie = this.cookies.read(SESSION_COOKIE_NAME);\n const session = JSON.parse(sessionCookie);\n if (session) {\n this.cookies.clear(SESSION_COOKIE_NAME);\n await this.session.authenticate('authenticator:session', session);\n }\n }\n } catch (error) {\n this.session.store?.clear();\n throw error;\n }\n }\n}\n\nfunction delay(ms: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n","\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\nd(\"volta/_pods/login/template\", function(){ return i(\"../../_pods/login/template.hbs\");});\nd(\"volta/_pods/login/route\", function(){ return i(\"../../_pods/login/route.ts\");});\n","import { helper } from '@ember/component/helper';\nimport { capitalize as _capitalize } from '@ember/string';\nimport createStringHelperFunction from '../-private/create-string-helper';\n\nexport const capitalize = createStringHelperFunction(_capitalize);\nexport default helper(capitalize);\n"],"names":["templateOnlyComponent","Authentication","EmberObject","login","password","Validations","validatePresence","LoginForm","Component","authorizedProviders","this","args","config","map","provider","key","url","Config","icon","constructor","owner","super","authChangeset","getProperties","bvMetrics","trackAction","validate","isValid","execute","data","rememberMe","session","authenticate","error","_onAuthenticateError","authentication","create","initChangeset","auth","Changeset","lookupValidator","reason","isDestroying","isDestroyed","bvFlash","ajaxError","store","clear","isError","later","service","tracked","ApplicationRoute","Route","async","_transition","localization","initialTranslations","locale","defaultLocale","translations","fetch","value","toLowerCase","json","intl","addTranslations","setLocale","SESSION_COOKIE_NAME","LoginRoute","state","refreshModel","transition","beforeModel","prohibitAuthentication","res","appSettings","fetchBaseTenant","perform","cookies","exists","Promise","resolve","setTimeout","loading","afterModel","model","queryParams","to","checkSession","t","atob","replaceWith","undefined","sessionCookie","read","JSON","parse","action","d","window","define","capitalize","createStringHelperFunction","_capitalize","helper"],"sourceRoot":""}