@acorex-platform/module-auth-client 0.0.25 → 0.0.30
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.
- package/fesm2022/{acorex-platform-module-auth-client-acorex-platform-module-auth-client-CYmUn-lw.mjs → acorex-platform-module-auth-client-acorex-platform-module-auth-client-BJduAePW.mjs} +32 -36
- package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-BJduAePW.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-BVbu-f8h.mjs → acorex-platform-module-auth-client-app-chooser.component-BeXTcP-B.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-app-chooser.component-BVbu-f8h.mjs.map → acorex-platform-module-auth-client-app-chooser.component-BeXTcP-B.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-DIM_d7RO.mjs → acorex-platform-module-auth-client-change-password.command-BiAjSn5C.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-change-password.command-DIM_d7RO.mjs.map → acorex-platform-module-auth-client-change-password.command-BiAjSn5C.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-CYGqrJV0.mjs → acorex-platform-module-auth-client-change-photo.command-BrQVX8wA.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-change-photo.command-CYGqrJV0.mjs.map → acorex-platform-module-auth-client-change-photo.command-BrQVX8wA.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-get-user-activity.query-BTpibxe9.mjs → acorex-platform-module-auth-client-get-user-activity.query-ChzxVhRM.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-get-user-activity.query-BTpibxe9.mjs.map → acorex-platform-module-auth-client-get-user-activity.query-ChzxVhRM.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-Br9O4b5c.mjs → acorex-platform-module-auth-client-lock-screen.command-tuEnmBqT.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-lock-screen.command-Br9O4b5c.mjs.map → acorex-platform-module-auth-client-lock-screen.command-tuEnmBqT.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-login.module-DJVL3bAF.mjs → acorex-platform-module-auth-client-login.module-CXYUlOPx.mjs} +7 -7
- package/fesm2022/acorex-platform-module-auth-client-login.module-CXYUlOPx.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-master.layout-DZUYm22p.mjs → acorex-platform-module-auth-client-master.layout-WlPLf7po.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-master.layout-DZUYm22p.mjs.map → acorex-platform-module-auth-client-master.layout-WlPLf7po.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-LZKM9fgo.mjs → acorex-platform-module-auth-client-open-sessions.command-DcMF_kGc.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-open-sessions.command-LZKM9fgo.mjs.map → acorex-platform-module-auth-client-open-sessions.command-DcMF_kGc.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-password.component-CNKRWfuG.mjs → acorex-platform-module-auth-client-password.component-DPPz48en.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-password.component-CNKRWfuG.mjs.map → acorex-platform-module-auth-client-password.component-DPPz48en.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-activity-chart.component-CtSrYARX.mjs → acorex-platform-module-auth-client-profile-activity-chart.component-BPcaNq3h.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-profile-activity-chart.component-CtSrYARX.mjs.map → acorex-platform-module-auth-client-profile-activity-chart.component-BPcaNq3h.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-6lNx6bKI.mjs → acorex-platform-module-auth-client-profile-page-component.provider-BkR63GX0.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-profile-page-component.provider-6lNx6bKI.mjs.map → acorex-platform-module-auth-client-profile-page-component.provider-BkR63GX0.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-profile-page.component-CdxseoJX.mjs → acorex-platform-module-auth-client-profile-page.component-jhc0ZSSB.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-profile-page.component-CdxseoJX.mjs.map → acorex-platform-module-auth-client-profile-page.component-jhc0ZSSB.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-register-password.component-D-tBrCJv.mjs → acorex-platform-module-auth-client-register-password.component-p_aNCzTQ.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-register-password.component-D-tBrCJv.mjs.map → acorex-platform-module-auth-client-register-password.component-p_aNCzTQ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-register.module-BrXqva0B.mjs → acorex-platform-module-auth-client-register.module-ht9ZxSLU.mjs} +7 -7
- package/fesm2022/acorex-platform-module-auth-client-register.module-ht9ZxSLU.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-uK04-h15.mjs → acorex-platform-module-auth-client-remove-pin-code.command-BHIn0igt.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-remove-pin-code.command-uK04-h15.mjs.map → acorex-platform-module-auth-client-remove-pin-code.command-BHIn0igt.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-BhsTAmVe.mjs → acorex-platform-module-auth-client-session-lock-overlay.component-Dy21tFJ1.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-session-lock-overlay.component-BhsTAmVe.mjs.map → acorex-platform-module-auth-client-session-lock-overlay.component-Dy21tFJ1.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-BJT7F-xz.mjs → acorex-platform-module-auth-client-set-pin-code.command-CHEfCVZU.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.command-BJT7F-xz.mjs.map → acorex-platform-module-auth-client-set-pin-code.command-CHEfCVZU.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-Cq4skm_3.mjs → acorex-platform-module-auth-client-set-pin-code.component-CrYXfzCf.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-set-pin-code.component-Cq4skm_3.mjs.map → acorex-platform-module-auth-client-set-pin-code.component-CrYXfzCf.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-CHmg7D5H.mjs → acorex-platform-module-auth-client-tenant-chooser.component-CmcpvQia.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-tenant-chooser.component-CHmg7D5H.mjs.map → acorex-platform-module-auth-client-tenant-chooser.component-CmcpvQia.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-auth-client-two-factor.module-_jYo6xXr.mjs → acorex-platform-module-auth-client-two-factor.module-BnH72Bob.mjs} +5 -5
- package/fesm2022/acorex-platform-module-auth-client-two-factor.module-BnH72Bob.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-ovj5rdHL.mjs → acorex-platform-module-auth-client-view-login-history.command-BnGwRAd-.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-auth-client-view-login-history.command-ovj5rdHL.mjs.map → acorex-platform-module-auth-client-view-login-history.command-BnGwRAd-.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-auth-client.mjs +1 -1
- package/package.json +4 -4
- package/types/acorex-platform-module-auth-client.d.ts +5 -5
- package/fesm2022/acorex-platform-module-auth-client-acorex-platform-module-auth-client-CYmUn-lw.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-login.module-DJVL3bAF.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-register.module-BrXqva0B.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-auth-client-two-factor.module-_jYo6xXr.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-auth-client-session-lock-overlay.component-BhsTAmVe.mjs","sources":["../../../../libs/modules/auth/client/src/lib/features/session-lock/session-lock-overlay.component.ts","../../../../libs/modules/auth/client/src/lib/features/session-lock/session-lock-overlay.component.html"],"sourcesContent":["import { AXFocusTrapDirective } from '@acorex/cdk/focus-trap';\nimport { AXClickEvent, AXComponentState } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXOtpCompletedEvent, AXOtpComponent, AXOtpModule } from '@acorex/components/otp';\nimport { AXPasswordBoxComponent, AXPasswordBoxModule } from '@acorex/components/password-box';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPUserAvatarComponent, AXPVirtualKeypadComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n Injector,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { defaultTo, first, get } from 'lodash';\nimport { AXP_AUTH_PIN_CODE_LENGTH, AXP_AUTH_PIN_CODE_PATTERN } from '../../shared/constants/pin-code.constants';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXMAuthCommandKeys } from '@acorex-platform/module-auth-client/contracts';\nimport { AXPIdleLockService } from '../../shared/services/idle-lock.service';\n\n//#region ---- Session lock overlay ----\n\ntype AXMSessionLockUnlockMode = 'pin' | 'password';\n\nconst SECURITY_MANAGEMENT_MODULE = 'SecurityManagement';\nconst SECURITY_MANAGEMENT_USER_ENTITY = 'User';\n\n@Component({\n selector: 'axm-session-lock-overlay',\n templateUrl: './session-lock-overlay.component.html',\n styleUrl: './session-lock-overlay.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXOtpModule,\n AXPasswordBoxModule,\n AXTranslationModule,\n AXPUserAvatarComponent,\n AXPVirtualKeypadComponent,\n AXFocusTrapDirective,\n ],\n host: {\n class: 'axm-session-lock-overlay-host',\n },\n})\nexport class AXMSessionLockOverlayComponent implements OnInit {\n //#region ---- Constants ----\n\n protected readonly pinLength = AXP_AUTH_PIN_CODE_LENGTH;\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly pinInput = signal('');\n protected readonly passwordInput = signal('');\n protected readonly pinError = signal(false);\n protected readonly passwordError = signal(false);\n protected readonly isVerifying = signal(false);\n protected readonly unlockMode = signal<AXMSessionLockUnlockMode>('pin');\n protected readonly userRoleTitle = signal('');\n\n protected readonly hasPinCode = computed(() => this.idleLockService.hasPinCode());\n\n protected readonly useDeviceKeyboard = computed(() => !this.deviceService.isDesktopDevice());\n protected readonly displayName = computed(() => defaultTo(this.sessionService.user?.title, ''));\n protected readonly userId = computed(() => this.sessionService.user?.id ?? '');\n protected readonly applicationBadge = computed(() => {\n const application = this.sessionService.application;\n return application?.title ?? application?.name ?? '';\n });\n protected readonly otpState = computed((): AXComponentState => (this.pinError() ? 'error' : 'clear'));\n\n //#endregion\n\n //#region ---- View children ----\n\n private readonly otpInput = viewChild(AXOtpComponent);\n private readonly passwordBox = viewChild(AXPasswordBoxComponent);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly idleLockService = inject(AXPIdleLockService);\n protected readonly sessionService = inject(AXPSessionService);\n private readonly deviceService = inject(AXPDeviceService);\n private readonly entityService = inject(AXPEntityService);\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n private readonly commandService = inject(AXPCommandService);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n ngOnInit(): void {\n void this.initializeUnlockMode();\n void this.loadUserRoleTitle();\n this.bindRefocusOnInteraction();\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected onOverlayClick(): void {\n if (!this.isUnlockEntryFocused()) {\n this.focusUnlockEntry();\n }\n }\n\n protected onDesktopPinChange(value: string): void {\n const normalized = defaultTo(value, '');\n\n if (this.pinError() && normalized.length > 0) {\n this.pinError.set(false);\n }\n\n this.pinInput.set(normalized);\n }\n\n protected onDesktopPinCompleted(event: AXOtpCompletedEvent): void {\n if (!event.isCompleted || this.isVerifying()) {\n return;\n }\n\n this.pinInput.set(defaultTo(event.value, ''));\n void this.submitPin();\n }\n\n protected onMobilePinDigit(digit: number): void {\n if (this.isVerifying()) {\n return;\n }\n\n const current = this.pinInput();\n if (current.length >= AXP_AUTH_PIN_CODE_LENGTH) {\n return;\n }\n\n const next = `${current}${digit}`;\n\n if (this.pinError() && next.length > 0) {\n this.pinError.set(false);\n }\n\n this.pinInput.set(next);\n\n if (next.length === AXP_AUTH_PIN_CODE_LENGTH) {\n void this.submitPin();\n }\n }\n\n protected onMobilePinBackspace(): void {\n if (this.isVerifying()) {\n return;\n }\n\n const current = this.pinInput();\n if (!current.length) {\n return;\n }\n\n const next = current.slice(0, -1);\n\n if (this.pinError() && next.length > 0) {\n this.pinError.set(false);\n }\n\n this.pinInput.set(next);\n }\n\n protected onPasswordChange(value: string): void {\n this.passwordInput.set(defaultTo(value, ''));\n this.passwordError.set(false);\n }\n\n protected showPasswordUnlock(event?: AXClickEvent): void {\n event?.nativeEvent.stopPropagation();\n this.unlockMode.set('password');\n this.resetPinInput();\n this.focusUnlockEntry();\n }\n\n protected showPinUnlock(event?: AXClickEvent): void {\n event?.nativeEvent.stopPropagation();\n\n if (!this.hasPinCode()) {\n return;\n }\n\n this.unlockMode.set('pin');\n this.passwordInput.set('');\n this.passwordError.set(false);\n this.focusUnlockEntry();\n }\n\n protected submitPassword(): void {\n void this.verifyPasswordAndUnlock();\n }\n\n protected signOut(event?: AXClickEvent): void {\n event?.nativeEvent.stopPropagation();\n void this.commandService.execute(AXMAuthCommandKeys.Session.Signout, {});\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async initializeUnlockMode(): Promise<void> {\n await this.idleLockService.refreshPinState();\n this.resetUnlockState();\n this.focusUnlockEntry();\n }\n\n private getDefaultUnlockMode(): AXMSessionLockUnlockMode {\n return this.idleLockService.hasPinCode() ? 'pin' : 'password';\n }\n\n private async loadUserRoleTitle(): Promise<void> {\n const userId = this.sessionService.user?.id;\n if (!userId || !this.sessionService.isReadyForAppScopedApi) {\n this.userRoleTitle.set('');\n return;\n }\n\n try {\n const user = await this.entityService\n .withEntity(SECURITY_MANAGEMENT_MODULE, SECURITY_MANAGEMENT_USER_ENTITY)\n .data<string>()\n .byKey(userId);\n\n const roleTitle = defaultTo(get(first(get(user, 'roles', [])), 'title'), '');\n this.userRoleTitle.set(roleTitle);\n } catch (error) {\n console.error('Failed to load user role for session lock overlay', error);\n this.userRoleTitle.set('');\n }\n }\n\n private async submitPin(): Promise<void> {\n if (this.isVerifying()) {\n return;\n }\n\n const pin = this.pinInput();\n if (!AXP_AUTH_PIN_CODE_PATTERN.test(pin)) {\n return;\n }\n\n this.isVerifying.set(true);\n try {\n if (this.idleLockService.verifyPin(pin)) {\n this.idleLockService.unlock();\n this.resetUnlockState();\n return;\n }\n\n await this.showIncorrectPinError();\n this.applyPinValidationError();\n } finally {\n this.isVerifying.set(false);\n }\n }\n\n private async verifyPasswordAndUnlock(): Promise<void> {\n if (this.isVerifying() || !this.passwordInput()) {\n return;\n }\n\n this.isVerifying.set(true);\n try {\n if (await this.idleLockService.verifyPassword(this.passwordInput())) {\n this.idleLockService.unlock();\n this.resetUnlockState();\n return;\n }\n\n await this.showIncorrectPasswordError();\n this.triggerPasswordError();\n this.passwordInput.set('');\n this.focusUnlockEntry();\n } finally {\n this.isVerifying.set(false);\n }\n }\n\n private resetUnlockState(): void {\n this.unlockMode.set(this.getDefaultUnlockMode());\n this.resetPinInput();\n this.passwordInput.set('');\n this.passwordError.set(false);\n this.pinError.set(false);\n }\n\n private resetPinInput(clearError = true): void {\n if (clearError) {\n this.pinError.set(false);\n }\n\n this.pinInput.set('');\n this.otpInput()?.reset();\n }\n\n private applyPinValidationError(): void {\n this.resetPinInput(false);\n\n afterNextRender(\n () => {\n this.pinError.set(true);\n this.syncOtpErrorState();\n\n if (!this.useDeviceKeyboard()) {\n this.otpInput()?.focus();\n }\n },\n { injector: this.injector },\n );\n }\n\n private syncOtpErrorState(): void {\n const otp = this.otpInput();\n if (otp) {\n otp.state = 'error';\n }\n }\n\n private focusUnlockEntry(): void {\n afterNextRender(\n () => {\n if (this.unlockMode() === 'password') {\n this.focusPasswordInput();\n return;\n }\n\n if (!this.useDeviceKeyboard()) {\n this.otpInput()?.focus();\n }\n },\n { injector: this.injector },\n );\n }\n\n private focusPasswordInput(): void {\n const attemptFocus = (): boolean => {\n const passwordBox = this.passwordBox();\n if (!passwordBox) {\n return false;\n }\n\n passwordBox.focus();\n\n requestAnimationFrame(() => {\n if (!this.isUnlockEntryFocused()) {\n passwordBox.focus();\n }\n });\n\n return true;\n };\n\n if (!attemptFocus()) {\n afterNextRender(() => attemptFocus(), { injector: this.injector });\n }\n }\n\n private bindRefocusOnInteraction(): void {\n const onKeydown = (event: KeyboardEvent): void => {\n if (this.isUnlockEntryFocused() || event.defaultPrevented) {\n return;\n }\n\n this.focusUnlockEntry();\n };\n\n document.addEventListener('keydown', onKeydown, true);\n this.destroyRef.onDestroy(() => {\n document.removeEventListener('keydown', onKeydown, true);\n });\n }\n\n private isUnlockEntryFocused(): boolean {\n const active = document.activeElement;\n if (!(active instanceof HTMLElement)) {\n return false;\n }\n\n if (this.unlockMode() === 'password') {\n return active.closest('ax-password-box') !== null;\n }\n\n if (this.useDeviceKeyboard()) {\n return active.closest('axp-virtual-keypad') !== null;\n }\n\n return active.closest('ax-otp') !== null;\n }\n\n private triggerPasswordError(): void {\n this.passwordError.set(true);\n setTimeout(() => this.passwordError.set(false), 450);\n }\n\n private async showIncorrectPinError(): Promise<void> {\n const content = await this.translateService.translateAsync('@auth:session-lock.messages.incorrect-pin');\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n this.toastService.show({ color: 'danger', title, content, closeButton: true });\n }\n\n private async showIncorrectPasswordError(): Promise<void> {\n const content = await this.translateService.translateAsync('@auth:session-lock.messages.incorrect-password');\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n this.toastService.show({ color: 'danger', title, content, closeButton: true });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-session-lock-overlay\" [class.axm-session-lock-overlay--desktop]=\"!useDeviceKeyboard()\"\n [class.axm-session-lock-overlay--mobile]=\"useDeviceKeyboard()\" (click)=\"onOverlayClick()\">\n <div class=\"axm-session-lock-overlay__panel\" axFocusTrap tabindex=\"-1\" (click)=\"$event.stopPropagation()\">\n <div class=\"axm-session-lock-overlay__profile\">\n <div class=\"axm-session-lock-overlay__avatar-wrap\">\n @if (userId(); as resolvedUserId) {\n <axp-user-avatar [size]=\"useDeviceKeyboard() ? 64 : 80\" [userId]=\"resolvedUserId\"></axp-user-avatar>\n }\n </div>\n\n @if (displayName()) {\n <p class=\"axm-session-lock-overlay__name m-0\">\n {{ displayName() }}\n </p>\n }\n\n <!-- @if (userRoleTitle()) {\n <p class=\"axm-session-lock-overlay__role m-0\">\n {{ userRoleTitle() }}\n </p>\n } -->\n\n @if (applicationBadge()) {\n <div class=\"axm-session-lock-overlay__user-badge\">\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n <span>{{ applicationBadge() | translate | async }}</span>\n </div>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__divider\" aria-hidden=\"true\"></div>\n\n <div class=\"axm-session-lock-overlay__body\">\n <div class=\"axm-session-lock-overlay__body-main\">\n <div class=\"axm-session-lock-overlay__lock-badge\" aria-hidden=\"true\">\n <i class=\"fa-light fa-lock\"></i>\n </div>\n\n <h2 class=\"axm-session-lock-overlay__title m-0\">\n {{ '@auth:session-lock.title' | translate | async }}\n </h2>\n\n @if (unlockMode() === 'pin' && hasPinCode()) {\n <p class=\"axm-session-lock-overlay__instruction m-0\">\n {{ '@auth:session-lock.pin-instruction' | translate | async }}\n </p>\n\n <div class=\"axm-session-lock-overlay__otp\" [class.axm-session-lock-overlay__otp--error]=\"pinError()\">\n <ax-otp class=\"w-full block\" [type]=\"'number'\" [mode]=\"'star'\" [length]=\"pinLength\" [state]=\"otpState()\"\n [readonly]=\"useDeviceKeyboard()\" [disabled]=\"isVerifying()\" [ngModel]=\"pinInput()\"\n (ngModelChange)=\"onDesktopPinChange($event)\" (onCompleted)=\"onDesktopPinCompleted($event)\"></ax-otp>\n </div>\n } @else {\n <p class=\"axm-session-lock-overlay__instruction m-0\">\n {{ '@auth:session-lock.password-instruction' | translate | async }}\n </p>\n\n <div class=\"axm-session-lock-overlay__password\"\n [class.axm-session-lock-overlay__password--error]=\"passwordError()\">\n <ax-password-box class=\"axm-session-lock-overlay__password-input w-full\" look=\"outline\"\n [disabled]=\"isVerifying()\" [ngModel]=\"passwordInput()\" (ngModelChange)=\"onPasswordChange($event)\"\n (keydown.enter)=\"submitPassword()\" [placeholder]=\"'@auth:password' | translate | async\"></ax-password-box>\n </div>\n\n <div class=\"axm-session-lock-overlay__actions\">\n <ax-button class=\"axm-session-lock-overlay__action w-full rounded-lg\" look=\"solid\" color=\"primary\"\n [disabled]=\"isVerifying() || !passwordInput()\" [text]=\"'@auth:session-lock.unlock' | translate | async\"\n (onClick)=\"submitPassword()\"></ax-button>\n </div>\n }\n </div>\n\n @if (useDeviceKeyboard() && unlockMode() === 'pin' && hasPinCode()) {\n <axp-virtual-keypad class=\"axm-session-lock-overlay__keypad\" look=\"solid\" [disabled]=\"isVerifying()\"\n (digitPress)=\"onMobilePinDigit($event)\" (backspace)=\"onMobilePinBackspace()\">\n </axp-virtual-keypad>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__footer\">\n <div class=\"axm-session-lock-overlay__footer-actions\">\n @if (hasPinCode()) {\n <div class=\"axm-session-lock-overlay__footer-action\">\n @if (unlockMode() === 'pin') {\n <ax-button class=\"w-full\" look=\"blank\" color=\"primary\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.use-password-instead' | translate | async\"\n (onClick)=\"showPasswordUnlock($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n } @else {\n <ax-button class=\"w-full\" look=\"blank\" color=\"primary\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.use-pin-instead' | translate | async\" (onClick)=\"showPinUnlock($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__footer-divider\" aria-hidden=\"true\"></div>\n }\n\n <div class=\"axm-session-lock-overlay__footer-action\">\n <ax-button class=\"w-full\" look=\"blank\" color=\"danger\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.sign-out' | translate | async\" (onClick)=\"signOut($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-arrow-right-from-bracket\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n </div>\n</div>"],"names":["i5","i6","i7"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-auth-client-session-lock-overlay.component-Dy21tFJ1.mjs","sources":["../../../../libs/modules/auth/client/src/lib/features/session-lock/session-lock-overlay.component.ts","../../../../libs/modules/auth/client/src/lib/features/session-lock/session-lock-overlay.component.html"],"sourcesContent":["import { AXFocusTrapDirective } from '@acorex/cdk/focus-trap';\nimport { AXClickEvent, AXComponentState } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXOtpCompletedEvent, AXOtpComponent, AXOtpModule } from '@acorex/components/otp';\nimport { AXPasswordBoxComponent, AXPasswordBoxModule } from '@acorex/components/password-box';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPUserAvatarComponent, AXPVirtualKeypadComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n Injector,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { defaultTo, first, get } from 'lodash';\nimport { AXP_AUTH_PIN_CODE_LENGTH, AXP_AUTH_PIN_CODE_PATTERN } from '../../shared/constants/pin-code.constants';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXMAuthCommandKeys } from '@acorex-platform/module-auth-client/contracts';\nimport { AXPIdleLockService } from '../../shared/services/idle-lock.service';\n\n//#region ---- Session lock overlay ----\n\ntype AXMSessionLockUnlockMode = 'pin' | 'password';\n\nconst SECURITY_MANAGEMENT_MODULE = 'SecurityManagement';\nconst SECURITY_MANAGEMENT_USER_ENTITY = 'User';\n\n@Component({\n selector: 'axm-session-lock-overlay',\n templateUrl: './session-lock-overlay.component.html',\n styleUrl: './session-lock-overlay.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXOtpModule,\n AXPasswordBoxModule,\n AXTranslationModule,\n AXPUserAvatarComponent,\n AXPVirtualKeypadComponent,\n AXFocusTrapDirective,\n ],\n host: {\n class: 'axm-session-lock-overlay-host',\n },\n})\nexport class AXMSessionLockOverlayComponent implements OnInit {\n //#region ---- Constants ----\n\n protected readonly pinLength = AXP_AUTH_PIN_CODE_LENGTH;\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly pinInput = signal('');\n protected readonly passwordInput = signal('');\n protected readonly pinError = signal(false);\n protected readonly passwordError = signal(false);\n protected readonly isVerifying = signal(false);\n protected readonly unlockMode = signal<AXMSessionLockUnlockMode>('pin');\n protected readonly userRoleTitle = signal('');\n\n protected readonly hasPinCode = computed(() => this.idleLockService.hasPinCode());\n\n protected readonly useDeviceKeyboard = computed(() => !this.deviceService.isDesktopDevice());\n protected readonly displayName = computed(() => defaultTo(this.sessionService.user?.title, ''));\n protected readonly userId = computed(() => this.sessionService.user?.id ?? '');\n protected readonly applicationBadge = computed(() => {\n const application = this.sessionService.application;\n return application?.title ?? application?.name ?? '';\n });\n protected readonly otpState = computed((): AXComponentState => (this.pinError() ? 'error' : 'clear'));\n\n //#endregion\n\n //#region ---- View children ----\n\n private readonly otpInput = viewChild(AXOtpComponent);\n private readonly passwordBox = viewChild(AXPasswordBoxComponent);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly idleLockService = inject(AXPIdleLockService);\n protected readonly sessionService = inject(AXPSessionService);\n private readonly deviceService = inject(AXPDeviceService);\n private readonly entityService = inject(AXPEntityService);\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n private readonly commandService = inject(AXPCommandService);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n ngOnInit(): void {\n void this.initializeUnlockMode();\n void this.loadUserRoleTitle();\n this.bindRefocusOnInteraction();\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected onOverlayClick(): void {\n if (!this.isUnlockEntryFocused()) {\n this.focusUnlockEntry();\n }\n }\n\n protected onDesktopPinChange(value: string): void {\n const normalized = defaultTo(value, '');\n\n if (this.pinError() && normalized.length > 0) {\n this.pinError.set(false);\n }\n\n this.pinInput.set(normalized);\n }\n\n protected onDesktopPinCompleted(event: AXOtpCompletedEvent): void {\n if (!event.isCompleted || this.isVerifying()) {\n return;\n }\n\n this.pinInput.set(defaultTo(event.value, ''));\n void this.submitPin();\n }\n\n protected onMobilePinDigit(digit: number): void {\n if (this.isVerifying()) {\n return;\n }\n\n const current = this.pinInput();\n if (current.length >= AXP_AUTH_PIN_CODE_LENGTH) {\n return;\n }\n\n const next = `${current}${digit}`;\n\n if (this.pinError() && next.length > 0) {\n this.pinError.set(false);\n }\n\n this.pinInput.set(next);\n\n if (next.length === AXP_AUTH_PIN_CODE_LENGTH) {\n void this.submitPin();\n }\n }\n\n protected onMobilePinBackspace(): void {\n if (this.isVerifying()) {\n return;\n }\n\n const current = this.pinInput();\n if (!current.length) {\n return;\n }\n\n const next = current.slice(0, -1);\n\n if (this.pinError() && next.length > 0) {\n this.pinError.set(false);\n }\n\n this.pinInput.set(next);\n }\n\n protected onPasswordChange(value: string): void {\n this.passwordInput.set(defaultTo(value, ''));\n this.passwordError.set(false);\n }\n\n protected showPasswordUnlock(event?: AXClickEvent): void {\n event?.nativeEvent.stopPropagation();\n this.unlockMode.set('password');\n this.resetPinInput();\n this.focusUnlockEntry();\n }\n\n protected showPinUnlock(event?: AXClickEvent): void {\n event?.nativeEvent.stopPropagation();\n\n if (!this.hasPinCode()) {\n return;\n }\n\n this.unlockMode.set('pin');\n this.passwordInput.set('');\n this.passwordError.set(false);\n this.focusUnlockEntry();\n }\n\n protected submitPassword(): void {\n void this.verifyPasswordAndUnlock();\n }\n\n protected signOut(event?: AXClickEvent): void {\n event?.nativeEvent.stopPropagation();\n void this.commandService.execute(AXMAuthCommandKeys.Session.Signout, {});\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async initializeUnlockMode(): Promise<void> {\n await this.idleLockService.refreshPinState();\n this.resetUnlockState();\n this.focusUnlockEntry();\n }\n\n private getDefaultUnlockMode(): AXMSessionLockUnlockMode {\n return this.idleLockService.hasPinCode() ? 'pin' : 'password';\n }\n\n private async loadUserRoleTitle(): Promise<void> {\n const userId = this.sessionService.user?.id;\n if (!userId || !this.sessionService.isReadyForAppScopedApi) {\n this.userRoleTitle.set('');\n return;\n }\n\n try {\n const user = await this.entityService\n .withEntity(SECURITY_MANAGEMENT_MODULE, SECURITY_MANAGEMENT_USER_ENTITY)\n .data<string>()\n .byKey(userId);\n\n const roleTitle = defaultTo(get(first(get(user, 'roles', [])), 'title'), '');\n this.userRoleTitle.set(roleTitle);\n } catch (error) {\n console.error('Failed to load user role for session lock overlay', error);\n this.userRoleTitle.set('');\n }\n }\n\n private async submitPin(): Promise<void> {\n if (this.isVerifying()) {\n return;\n }\n\n const pin = this.pinInput();\n if (!AXP_AUTH_PIN_CODE_PATTERN.test(pin)) {\n return;\n }\n\n this.isVerifying.set(true);\n try {\n if (this.idleLockService.verifyPin(pin)) {\n this.idleLockService.unlock();\n this.resetUnlockState();\n return;\n }\n\n await this.showIncorrectPinError();\n this.applyPinValidationError();\n } finally {\n this.isVerifying.set(false);\n }\n }\n\n private async verifyPasswordAndUnlock(): Promise<void> {\n if (this.isVerifying() || !this.passwordInput()) {\n return;\n }\n\n this.isVerifying.set(true);\n try {\n if (await this.idleLockService.verifyPassword(this.passwordInput())) {\n this.idleLockService.unlock();\n this.resetUnlockState();\n return;\n }\n\n await this.showIncorrectPasswordError();\n this.triggerPasswordError();\n this.passwordInput.set('');\n this.focusUnlockEntry();\n } finally {\n this.isVerifying.set(false);\n }\n }\n\n private resetUnlockState(): void {\n this.unlockMode.set(this.getDefaultUnlockMode());\n this.resetPinInput();\n this.passwordInput.set('');\n this.passwordError.set(false);\n this.pinError.set(false);\n }\n\n private resetPinInput(clearError = true): void {\n if (clearError) {\n this.pinError.set(false);\n }\n\n this.pinInput.set('');\n this.otpInput()?.reset();\n }\n\n private applyPinValidationError(): void {\n this.resetPinInput(false);\n\n afterNextRender(\n () => {\n this.pinError.set(true);\n this.syncOtpErrorState();\n\n if (!this.useDeviceKeyboard()) {\n this.otpInput()?.focus();\n }\n },\n { injector: this.injector },\n );\n }\n\n private syncOtpErrorState(): void {\n const otp = this.otpInput();\n if (otp) {\n otp.state = 'error';\n }\n }\n\n private focusUnlockEntry(): void {\n afterNextRender(\n () => {\n if (this.unlockMode() === 'password') {\n this.focusPasswordInput();\n return;\n }\n\n if (!this.useDeviceKeyboard()) {\n this.otpInput()?.focus();\n }\n },\n { injector: this.injector },\n );\n }\n\n private focusPasswordInput(): void {\n const attemptFocus = (): boolean => {\n const passwordBox = this.passwordBox();\n if (!passwordBox) {\n return false;\n }\n\n passwordBox.focus();\n\n requestAnimationFrame(() => {\n if (!this.isUnlockEntryFocused()) {\n passwordBox.focus();\n }\n });\n\n return true;\n };\n\n if (!attemptFocus()) {\n afterNextRender(() => attemptFocus(), { injector: this.injector });\n }\n }\n\n private bindRefocusOnInteraction(): void {\n const onKeydown = (event: KeyboardEvent): void => {\n if (this.isUnlockEntryFocused() || event.defaultPrevented) {\n return;\n }\n\n this.focusUnlockEntry();\n };\n\n document.addEventListener('keydown', onKeydown, true);\n this.destroyRef.onDestroy(() => {\n document.removeEventListener('keydown', onKeydown, true);\n });\n }\n\n private isUnlockEntryFocused(): boolean {\n const active = document.activeElement;\n if (!(active instanceof HTMLElement)) {\n return false;\n }\n\n if (this.unlockMode() === 'password') {\n return active.closest('ax-password-box') !== null;\n }\n\n if (this.useDeviceKeyboard()) {\n return active.closest('axp-virtual-keypad') !== null;\n }\n\n return active.closest('ax-otp') !== null;\n }\n\n private triggerPasswordError(): void {\n this.passwordError.set(true);\n setTimeout(() => this.passwordError.set(false), 450);\n }\n\n private async showIncorrectPinError(): Promise<void> {\n const content = await this.translateService.translateAsync('@auth:session-lock.messages.incorrect-pin');\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n this.toastService.show({ color: 'danger', title, content, closeButton: true });\n }\n\n private async showIncorrectPasswordError(): Promise<void> {\n const content = await this.translateService.translateAsync('@auth:session-lock.messages.incorrect-password');\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n this.toastService.show({ color: 'danger', title, content, closeButton: true });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-session-lock-overlay\" [class.axm-session-lock-overlay--desktop]=\"!useDeviceKeyboard()\"\n [class.axm-session-lock-overlay--mobile]=\"useDeviceKeyboard()\" (click)=\"onOverlayClick()\">\n <div class=\"axm-session-lock-overlay__panel\" axFocusTrap tabindex=\"-1\" (click)=\"$event.stopPropagation()\">\n <div class=\"axm-session-lock-overlay__profile\">\n <div class=\"axm-session-lock-overlay__avatar-wrap\">\n @if (userId(); as resolvedUserId) {\n <axp-user-avatar [size]=\"useDeviceKeyboard() ? 64 : 80\" [userId]=\"resolvedUserId\"></axp-user-avatar>\n }\n </div>\n\n @if (displayName()) {\n <p class=\"axm-session-lock-overlay__name m-0\">\n {{ displayName() }}\n </p>\n }\n\n <!-- @if (userRoleTitle()) {\n <p class=\"axm-session-lock-overlay__role m-0\">\n {{ userRoleTitle() }}\n </p>\n } -->\n\n @if (applicationBadge()) {\n <div class=\"axm-session-lock-overlay__user-badge\">\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n <span>{{ applicationBadge() | translate | async }}</span>\n </div>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__divider\" aria-hidden=\"true\"></div>\n\n <div class=\"axm-session-lock-overlay__body\">\n <div class=\"axm-session-lock-overlay__body-main\">\n <div class=\"axm-session-lock-overlay__lock-badge\" aria-hidden=\"true\">\n <i class=\"fa-light fa-lock\"></i>\n </div>\n\n <h2 class=\"axm-session-lock-overlay__title m-0\">\n {{ '@auth:session-lock.title' | translate | async }}\n </h2>\n\n @if (unlockMode() === 'pin' && hasPinCode()) {\n <p class=\"axm-session-lock-overlay__instruction m-0\">\n {{ '@auth:session-lock.pin-instruction' | translate | async }}\n </p>\n\n <div class=\"axm-session-lock-overlay__otp\" [class.axm-session-lock-overlay__otp--error]=\"pinError()\">\n <ax-otp class=\"w-full block\" [type]=\"'number'\" [mode]=\"'star'\" [length]=\"pinLength\" [state]=\"otpState()\"\n [readonly]=\"useDeviceKeyboard()\" [disabled]=\"isVerifying()\" [ngModel]=\"pinInput()\"\n (ngModelChange)=\"onDesktopPinChange($event)\" (onCompleted)=\"onDesktopPinCompleted($event)\"></ax-otp>\n </div>\n } @else {\n <p class=\"axm-session-lock-overlay__instruction m-0\">\n {{ '@auth:session-lock.password-instruction' | translate | async }}\n </p>\n\n <div class=\"axm-session-lock-overlay__password\"\n [class.axm-session-lock-overlay__password--error]=\"passwordError()\">\n <ax-password-box class=\"axm-session-lock-overlay__password-input w-full\" look=\"outline\"\n [disabled]=\"isVerifying()\" [ngModel]=\"passwordInput()\" (ngModelChange)=\"onPasswordChange($event)\"\n (keydown.enter)=\"submitPassword()\" [placeholder]=\"'@auth:password' | translate | async\"></ax-password-box>\n </div>\n\n <div class=\"axm-session-lock-overlay__actions\">\n <ax-button class=\"axm-session-lock-overlay__action w-full rounded-lg\" look=\"solid\" color=\"primary\"\n [disabled]=\"isVerifying() || !passwordInput()\" [text]=\"'@auth:session-lock.unlock' | translate | async\"\n (onClick)=\"submitPassword()\"></ax-button>\n </div>\n }\n </div>\n\n @if (useDeviceKeyboard() && unlockMode() === 'pin' && hasPinCode()) {\n <axp-virtual-keypad class=\"axm-session-lock-overlay__keypad\" look=\"solid\" [disabled]=\"isVerifying()\"\n (digitPress)=\"onMobilePinDigit($event)\" (backspace)=\"onMobilePinBackspace()\">\n </axp-virtual-keypad>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__footer\">\n <div class=\"axm-session-lock-overlay__footer-actions\">\n @if (hasPinCode()) {\n <div class=\"axm-session-lock-overlay__footer-action\">\n @if (unlockMode() === 'pin') {\n <ax-button class=\"w-full\" look=\"blank\" color=\"primary\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.use-password-instead' | translate | async\"\n (onClick)=\"showPasswordUnlock($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n } @else {\n <ax-button class=\"w-full\" look=\"blank\" color=\"primary\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.use-pin-instead' | translate | async\" (onClick)=\"showPinUnlock($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-lock\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n }\n </div>\n\n <div class=\"axm-session-lock-overlay__footer-divider\" aria-hidden=\"true\"></div>\n }\n\n <div class=\"axm-session-lock-overlay__footer-action\">\n <ax-button class=\"w-full\" look=\"blank\" color=\"danger\" [disabled]=\"isVerifying()\"\n [text]=\"'@auth:session-lock.sign-out' | translate | async\" (onClick)=\"signOut($event)\">\n <ax-prefix>\n <i class=\"fa-light fa-arrow-right-from-bracket\" aria-hidden=\"true\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n </div>\n</div>"],"names":["i5","i6","i7"],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { AXPPlatformScope } from '@acorex-platform/framework-shared/core';
|
|
|
7
7
|
import { AXPAuthSettings } from '@acorex-platform/module-auth-client/contracts';
|
|
8
8
|
import * as i0 from '@angular/core';
|
|
9
9
|
import { inject, Injectable } from '@angular/core';
|
|
10
|
-
import { i as AXPIdleLockService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-
|
|
10
|
+
import { i as AXPIdleLockService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-BJduAePW.mjs';
|
|
11
11
|
|
|
12
12
|
//#region ---- Set PIN code command ----
|
|
13
13
|
/** Opens the step-by-step security PIN setup popup for the current user. */
|
|
@@ -24,7 +24,7 @@ class AXPSetPinCodeCommand {
|
|
|
24
24
|
//#endregion
|
|
25
25
|
//#region ---- Command ----
|
|
26
26
|
async execute() {
|
|
27
|
-
const { AXMSetPinCodeComponent } = await import('./acorex-platform-module-auth-client-set-pin-code.component-
|
|
27
|
+
const { AXMSetPinCodeComponent } = await import('./acorex-platform-module-auth-client-set-pin-code.component-CrYXfzCf.mjs');
|
|
28
28
|
const popupResult = await this.popupService.open(AXMSetPinCodeComponent, {
|
|
29
29
|
title: await this.translateService.translateAsync('@auth:profile-page.commands.set-pin-code.dialog.title'),
|
|
30
30
|
size: 'sm',
|
|
@@ -113,4 +113,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
113
113
|
}] });
|
|
114
114
|
|
|
115
115
|
export { AXPSetPinCodeCommand };
|
|
116
|
-
//# sourceMappingURL=acorex-platform-module-auth-client-set-pin-code.command-
|
|
116
|
+
//# sourceMappingURL=acorex-platform-module-auth-client-set-pin-code.command-CHEfCVZU.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-auth-client-set-pin-code.command-
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-auth-client-set-pin-code.command-CHEfCVZU.mjs","sources":["../../../../libs/modules/auth/client/src/lib/commands/set-pin-code.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXPAuthSettings } from '@acorex-platform/module-auth-client/contracts';\n\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXPIdleLockService } from '../shared/services/idle-lock.service';\n\n//#region ---- Set PIN code command ----\n\n/** Opens the step-by-step security PIN setup popup for the current user. */\n@Injectable({ providedIn: 'root' })\nexport class AXPSetPinCodeCommand implements AXPCommand {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly dialogService = inject(AXDialogService);\n private readonly translateService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly idleLockService = inject(AXPIdleLockService);\n\n //#endregion\n\n //#region ---- Command ----\n\n async execute(): AXPCommandExecuteResultPromise<void> {\n const { AXMSetPinCodeComponent } = await import('../pages/account/set-pin-code/set-pin-code.component');\n\n const popupResult = await this.popupService.open(AXMSetPinCodeComponent, {\n title: await this.translateService.translateAsync('@auth:profile-page.commands.set-pin-code.dialog.title'),\n size: 'sm',\n });\n\n if (this.idleLockService.consumeLockScreenOffer() || this.isSuccessfulPinSave(popupResult)) {\n await this.afterPinSaved();\n }\n\n return { success: true, kind: 'object', data: undefined };\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private isSuccessfulPinSave(popupResult: unknown): boolean {\n if (!popupResult || typeof popupResult !== 'object') {\n return false;\n }\n\n const root = popupResult as Record<string, unknown>;\n if (root['success'] === true) {\n return true;\n }\n\n const data = root['data'];\n if (!data || typeof data !== 'object') {\n return false;\n }\n\n const nested = data as Record<string, unknown>;\n if (nested['success'] === true) {\n return true;\n }\n\n const inner = nested['data'];\n return Boolean(inner && typeof inner === 'object' && (inner as Record<string, unknown>)['success'] === true);\n }\n\n private async afterPinSaved(): Promise<void> {\n await this.idleLockService.refreshLockMenuState();\n\n if (this.idleLockService.canLock()) {\n await this.idleLockService.notifyPinChanged();\n await this.showLockActiveAlert();\n return;\n }\n\n await this.offerLockScreenActivation();\n }\n\n private async offerLockScreenActivation(): Promise<void> {\n const dialogResult = await this.dialogService.show({\n title: '@auth:profile-page.commands.set-pin-code.activate-lock-screen.dialog.title',\n content: '@auth:profile-page.commands.set-pin-code.activate-lock-screen.dialog.description',\n type: 'primary',\n orientation: 'horizontal',\n buttons: [\n {\n name: 'confirm',\n text: '@auth:profile-page.commands.set-pin-code.activate-lock-screen.actions.activate',\n color: 'primary',\n autofocus: true,\n },\n {\n name: 'cancel',\n text: '@auth:profile-page.commands.set-pin-code.activate-lock-screen.actions.not-now',\n color: 'default',\n },\n ],\n });\n\n if (dialogResult?.name !== 'confirm') {\n return;\n }\n\n try {\n await this.settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPAuthSettings.LockWhenIdleEnabled, true, { flush: true });\n await this.idleLockService.notifyPinChanged();\n await this.showLockActiveAlert();\n } catch (error) {\n console.error('Failed to activate lock screen after PIN setup', error);\n const content = await this.translateService.translateAsync(\n '@auth:profile-page.commands.set-pin-code.activate-lock-screen.messages.activate-failed',\n );\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n this.toastService.show({ color: 'danger', title, content, closeButton: true });\n }\n }\n\n private async showLockActiveAlert(): Promise<void> {\n await this.dialogService.alert(\n '@auth:profile-page.commands.set-pin-code.activate-lock-screen.alert.title',\n '@auth:profile-page.commands.set-pin-code.activate-lock-screen.alert.description',\n 'success',\n 'horizontal',\n );\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ import * as i1 from '@angular/forms';
|
|
|
20
20
|
import { FormsModule } from '@angular/forms';
|
|
21
21
|
import { defaultTo, isNil, get, isEmpty } from 'lodash';
|
|
22
22
|
import { A as AXP_AUTH_PIN_CODE_LENGTH, a as AXP_AUTH_PIN_CODE_PATTERN } from './acorex-platform-module-auth-client-pin-code.constants-CRsFG7fg.mjs';
|
|
23
|
-
import { i as AXPIdleLockService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-
|
|
23
|
+
import { i as AXPIdleLockService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-BJduAePW.mjs';
|
|
24
24
|
|
|
25
25
|
//#endregion
|
|
26
26
|
class AXMSetPinCodeComponent extends AXBasePageComponent {
|
|
@@ -194,4 +194,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
194
194
|
}], ctorParameters: () => [], propDecorators: { otpInput: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXOtpComponent), { isSignal: true }] }] } });
|
|
195
195
|
|
|
196
196
|
export { AXMSetPinCodeComponent };
|
|
197
|
-
//# sourceMappingURL=acorex-platform-module-auth-client-set-pin-code.component-
|
|
197
|
+
//# sourceMappingURL=acorex-platform-module-auth-client-set-pin-code.component-CrYXfzCf.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-auth-client-set-pin-code.component-Cq4skm_3.mjs","sources":["../../../../libs/modules/auth/client/src/lib/pages/account/set-pin-code/set-pin-code.component.ts","../../../../libs/modules/auth/client/src/lib/pages/account/set-pin-code/set-pin-code.component.html"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXOtpCompletedEvent, AXOtpComponent, AXOtpModule } from '@acorex/components/otp';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport {RootConfig as SecurityManagementRootConfig} from '@acorex-platform/module-security-management-client/contracts'\nimport {AXMSecurityManagementUsersEntityModel} from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { defaultTo, get, isEmpty, isNil } from 'lodash';\nimport { AXP_AUTH_PIN_CODE_LENGTH, AXP_AUTH_PIN_CODE_PATTERN } from '../../../shared/constants/pin-code.constants';\nimport { AXPIdleLockService } from '../../../shared/services/idle-lock.service';\n\n//#region ---- Types ----\n\ntype SetPinCodeStep = 'verify-current' | 'enter' | 'confirm';\n\n//#endregion\n\n@Component({\n selector: 'axm-set-pin-code',\n templateUrl: './set-pin-code.component.html',\n styleUrl: './set-pin-code.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, FormsModule, AXFormModule, AXButtonModule, AXDecoratorModule, AXOtpModule, AXTranslationModule],\n})\nexport class AXMSetPinCodeComponent extends AXBasePageComponent {\n //#region ---- Constants ----\n\n protected readonly pinLength = AXP_AUTH_PIN_CODE_LENGTH;\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly step = signal<SetPinCodeStep>('enter');\n protected readonly pinInput = signal('');\n protected readonly draftPin = signal('');\n protected readonly hasExistingPin = signal(false);\n protected readonly isSaving = signal(false);\n protected readonly storedPinCode = signal('');\n\n private isAdvancing = false;\n\n protected readonly canProceed = computed(() => AXP_AUTH_PIN_CODE_PATTERN.test(this.pinInput()));\n\n //#endregion\n\n //#region ---- View children ----\n\n private readonly otpInput = viewChild(AXOtpComponent);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly idleLockService = inject(AXPIdleLockService);\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n super();\n void this.loadExistingPinState();\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected onPinInputChange(value: string): void {\n this.pinInput.set(defaultTo(value, ''));\n }\n\n protected onPinCompleted(event: AXOtpCompletedEvent): void {\n if (!event.isCompleted || this.isSaving() || this.isAdvancing) {\n return;\n }\n\n this.pinInput.set(defaultTo(event.value, ''));\n void this.onNext();\n }\n\n protected onBack(): void {\n this.draftPin.set('');\n this.goToStep('enter');\n }\n\n protected async onNext(): Promise<void> {\n if (this.isAdvancing || this.isSaving()) {\n return;\n }\n\n this.isAdvancing = true;\n\n try {\n const pin = this.pinInput();\n\n if (!AXP_AUTH_PIN_CODE_PATTERN.test(pin)) {\n await this.showError('@auth:profile-page.commands.set-pin-code.messages.invalid-pin');\n this.focusOtp();\n return;\n }\n\n const currentStep = this.step();\n\n if (currentStep === 'verify-current') {\n if (pin !== this.storedPinCode()) {\n await this.showError('@auth:profile-page.commands.set-pin-code.messages.incorrect-current');\n this.resetPinInput();\n return;\n }\n\n this.goToStep('enter');\n return;\n }\n\n if (currentStep === 'enter') {\n this.draftPin.set(pin);\n this.goToStep('confirm');\n return;\n }\n\n if (pin !== this.draftPin()) {\n await this.showError('@auth:profile-page.commands.set-pin-code.messages.mismatch');\n this.resetPinInput();\n return;\n }\n\n await this.savePin(pin);\n } finally {\n this.isAdvancing = false;\n }\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async loadExistingPinState(): Promise<void> {\n const userId = this.sessionService.user?.id;\n if (isNil(userId)) {\n return;\n }\n\n try {\n const user = await this.getUserData().byKey(userId);\n const pinCode = defaultTo(get(user, 'pinCode'), '');\n const hasPin = !isEmpty(pinCode);\n\n this.storedPinCode.set(pinCode);\n this.hasExistingPin.set(hasPin);\n this.step.set(hasPin ? 'verify-current' : 'enter');\n this.focusOtp();\n } catch (error) {\n console.error('Failed to load user PIN state', error);\n this.step.set('enter');\n this.focusOtp();\n }\n }\n\n private goToStep(step: SetPinCodeStep): void {\n this.step.set(step);\n this.resetPinInput();\n }\n\n private resetPinInput(): void {\n this.pinInput.set('');\n this.otpInput()?.reset();\n this.focusOtp();\n }\n\n private focusOtp(): void {\n queueMicrotask(() => {\n this.otpInput()?.focus();\n });\n }\n\n private async savePin(pin: string): Promise<void> {\n const userId = this.sessionService.user?.id;\n if (isNil(userId)) {\n await this.showError('@auth:profile-page.commands.set-pin-code.messages.not-signed-in');\n return;\n }\n\n this.isSaving.set(true);\n try {\n await this.getUserData().update(userId, {\n pinCode: pin,\n pinChangedAt: new Date().toISOString(),\n });\n\n const successTitle = await this.translateService.translateAsync(\n '@auth:profile-page.commands.set-pin-code.messages.success',\n );\n this.toastService.show({ color: 'success', title: successTitle });\n this.idleLockService.requestLockScreenOffer();\n this.close({ success: true });\n } catch (error) {\n console.error('Failed to save PIN code', error);\n await this.showError('@auth:profile-page.commands.set-pin-code.messages.save-failed');\n } finally {\n this.isSaving.set(false);\n }\n }\n\n private getUserData() {\n return this.entityService\n .withEntity(SecurityManagementRootConfig.module.name, SecurityManagementRootConfig.entities.users.name)\n .data<string, AXMSecurityManagementUsersEntityModel>();\n }\n\n private async showError(messageKey: string): Promise<void> {\n const content = await this.translateService.translateAsync(messageKey);\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n this.toastService.show({ color: 'danger', title, content, closeButton: true });\n }\n\n //#endregion\n}\n","<ax-content>\n <div class=\"axm-set-pin-code__content flex flex-col items-center gap-4 p-6 text-center\">\n <div class=\"axm-set-pin-code__intro flex flex-col gap-2\">\n <h2 class=\"m-0 text-base font-semibold text-on-lightest\">\n @switch (step()) {\n @case ('verify-current') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.verify-current.title' | translate | async }}\n }\n @case ('enter') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.enter.title' | translate | async }}\n }\n @case ('confirm') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.confirm.title' | translate | async }}\n }\n }\n </h2>\n <p class=\"m-0 text-sm text-on-lighter-surface\">\n @switch (step()) {\n @case ('verify-current') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.verify-current.description' | translate | async }}\n }\n @case ('enter') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.enter.description' | translate | async }}\n }\n @case ('confirm') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.confirm.description' | translate | async }}\n }\n }\n </p>\n </div>\n\n <div class=\"axm-set-pin-code__otp w-full max-w-xs\">\n <ax-otp\n class=\"w-full block\"\n type=\"number\"\n [length]=\"pinLength\"\n [ngModel]=\"pinInput()\"\n (ngModelChange)=\"onPinInputChange($event)\"\n (onCompleted)=\"onPinCompleted($event)\"\n ></ax-otp>\n </div>\n </div>\n</ax-content>\n\n<ax-footer>\n <ax-suffix>\n @if (step() === 'confirm') {\n <ax-button\n look=\"solid\"\n color=\"default\"\n [text]=\"'@general:actions.back.title' | translate | async\"\n [disabled]=\"isSaving()\"\n (onClick)=\"onBack()\"\n ></ax-button>\n }\n\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"\n (step() === 'confirm'\n ? '@auth:profile-page.commands.set-pin-code.actions.save'\n : '@general:actions.next.title'\n )\n | translate\n | async\n \"\n [disabled]=\"!canProceed() || isSaving()\"\n (onClick)=\"onNext()\"\n ></ax-button>\n </ax-suffix>\n</ax-footer>\n"],"names":["SecurityManagementRootConfig","i2","i5","i6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-auth-client-set-pin-code.component-CrYXfzCf.mjs","sources":["../../../../libs/modules/auth/client/src/lib/pages/account/set-pin-code/set-pin-code.component.ts","../../../../libs/modules/auth/client/src/lib/pages/account/set-pin-code/set-pin-code.component.html"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXOtpCompletedEvent, AXOtpComponent, AXOtpModule } from '@acorex/components/otp';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport {RootConfig as SecurityManagementRootConfig} from '@acorex-platform/module-security-management-client/contracts'\nimport {AXMSecurityManagementUsersEntityModel} from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { defaultTo, get, isEmpty, isNil } from 'lodash';\nimport { AXP_AUTH_PIN_CODE_LENGTH, AXP_AUTH_PIN_CODE_PATTERN } from '../../../shared/constants/pin-code.constants';\nimport { AXPIdleLockService } from '../../../shared/services/idle-lock.service';\n\n//#region ---- Types ----\n\ntype SetPinCodeStep = 'verify-current' | 'enter' | 'confirm';\n\n//#endregion\n\n@Component({\n selector: 'axm-set-pin-code',\n templateUrl: './set-pin-code.component.html',\n styleUrl: './set-pin-code.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, FormsModule, AXFormModule, AXButtonModule, AXDecoratorModule, AXOtpModule, AXTranslationModule],\n})\nexport class AXMSetPinCodeComponent extends AXBasePageComponent {\n //#region ---- Constants ----\n\n protected readonly pinLength = AXP_AUTH_PIN_CODE_LENGTH;\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly step = signal<SetPinCodeStep>('enter');\n protected readonly pinInput = signal('');\n protected readonly draftPin = signal('');\n protected readonly hasExistingPin = signal(false);\n protected readonly isSaving = signal(false);\n protected readonly storedPinCode = signal('');\n\n private isAdvancing = false;\n\n protected readonly canProceed = computed(() => AXP_AUTH_PIN_CODE_PATTERN.test(this.pinInput()));\n\n //#endregion\n\n //#region ---- View children ----\n\n private readonly otpInput = viewChild(AXOtpComponent);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly idleLockService = inject(AXPIdleLockService);\n private readonly toastService = inject(AXToastService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n super();\n void this.loadExistingPinState();\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected onPinInputChange(value: string): void {\n this.pinInput.set(defaultTo(value, ''));\n }\n\n protected onPinCompleted(event: AXOtpCompletedEvent): void {\n if (!event.isCompleted || this.isSaving() || this.isAdvancing) {\n return;\n }\n\n this.pinInput.set(defaultTo(event.value, ''));\n void this.onNext();\n }\n\n protected onBack(): void {\n this.draftPin.set('');\n this.goToStep('enter');\n }\n\n protected async onNext(): Promise<void> {\n if (this.isAdvancing || this.isSaving()) {\n return;\n }\n\n this.isAdvancing = true;\n\n try {\n const pin = this.pinInput();\n\n if (!AXP_AUTH_PIN_CODE_PATTERN.test(pin)) {\n await this.showError('@auth:profile-page.commands.set-pin-code.messages.invalid-pin');\n this.focusOtp();\n return;\n }\n\n const currentStep = this.step();\n\n if (currentStep === 'verify-current') {\n if (pin !== this.storedPinCode()) {\n await this.showError('@auth:profile-page.commands.set-pin-code.messages.incorrect-current');\n this.resetPinInput();\n return;\n }\n\n this.goToStep('enter');\n return;\n }\n\n if (currentStep === 'enter') {\n this.draftPin.set(pin);\n this.goToStep('confirm');\n return;\n }\n\n if (pin !== this.draftPin()) {\n await this.showError('@auth:profile-page.commands.set-pin-code.messages.mismatch');\n this.resetPinInput();\n return;\n }\n\n await this.savePin(pin);\n } finally {\n this.isAdvancing = false;\n }\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async loadExistingPinState(): Promise<void> {\n const userId = this.sessionService.user?.id;\n if (isNil(userId)) {\n return;\n }\n\n try {\n const user = await this.getUserData().byKey(userId);\n const pinCode = defaultTo(get(user, 'pinCode'), '');\n const hasPin = !isEmpty(pinCode);\n\n this.storedPinCode.set(pinCode);\n this.hasExistingPin.set(hasPin);\n this.step.set(hasPin ? 'verify-current' : 'enter');\n this.focusOtp();\n } catch (error) {\n console.error('Failed to load user PIN state', error);\n this.step.set('enter');\n this.focusOtp();\n }\n }\n\n private goToStep(step: SetPinCodeStep): void {\n this.step.set(step);\n this.resetPinInput();\n }\n\n private resetPinInput(): void {\n this.pinInput.set('');\n this.otpInput()?.reset();\n this.focusOtp();\n }\n\n private focusOtp(): void {\n queueMicrotask(() => {\n this.otpInput()?.focus();\n });\n }\n\n private async savePin(pin: string): Promise<void> {\n const userId = this.sessionService.user?.id;\n if (isNil(userId)) {\n await this.showError('@auth:profile-page.commands.set-pin-code.messages.not-signed-in');\n return;\n }\n\n this.isSaving.set(true);\n try {\n await this.getUserData().update(userId, {\n pinCode: pin,\n pinChangedAt: new Date().toISOString(),\n });\n\n const successTitle = await this.translateService.translateAsync(\n '@auth:profile-page.commands.set-pin-code.messages.success',\n );\n this.toastService.show({ color: 'success', title: successTitle });\n this.idleLockService.requestLockScreenOffer();\n this.close({ success: true });\n } catch (error) {\n console.error('Failed to save PIN code', error);\n await this.showError('@auth:profile-page.commands.set-pin-code.messages.save-failed');\n } finally {\n this.isSaving.set(false);\n }\n }\n\n private getUserData() {\n return this.entityService\n .withEntity(SecurityManagementRootConfig.module.name, SecurityManagementRootConfig.entities.users.name)\n .data<string, AXMSecurityManagementUsersEntityModel>();\n }\n\n private async showError(messageKey: string): Promise<void> {\n const content = await this.translateService.translateAsync(messageKey);\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n this.toastService.show({ color: 'danger', title, content, closeButton: true });\n }\n\n //#endregion\n}\n","<ax-content>\n <div class=\"axm-set-pin-code__content flex flex-col items-center gap-4 p-6 text-center\">\n <div class=\"axm-set-pin-code__intro flex flex-col gap-2\">\n <h2 class=\"m-0 text-base font-semibold text-on-lightest\">\n @switch (step()) {\n @case ('verify-current') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.verify-current.title' | translate | async }}\n }\n @case ('enter') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.enter.title' | translate | async }}\n }\n @case ('confirm') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.confirm.title' | translate | async }}\n }\n }\n </h2>\n <p class=\"m-0 text-sm text-on-lighter-surface\">\n @switch (step()) {\n @case ('verify-current') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.verify-current.description' | translate | async }}\n }\n @case ('enter') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.enter.description' | translate | async }}\n }\n @case ('confirm') {\n {{ '@auth:profile-page.commands.set-pin-code.steps.confirm.description' | translate | async }}\n }\n }\n </p>\n </div>\n\n <div class=\"axm-set-pin-code__otp w-full max-w-xs\">\n <ax-otp\n class=\"w-full block\"\n type=\"number\"\n [length]=\"pinLength\"\n [ngModel]=\"pinInput()\"\n (ngModelChange)=\"onPinInputChange($event)\"\n (onCompleted)=\"onPinCompleted($event)\"\n ></ax-otp>\n </div>\n </div>\n</ax-content>\n\n<ax-footer>\n <ax-suffix>\n @if (step() === 'confirm') {\n <ax-button\n look=\"solid\"\n color=\"default\"\n [text]=\"'@general:actions.back.title' | translate | async\"\n [disabled]=\"isSaving()\"\n (onClick)=\"onBack()\"\n ></ax-button>\n }\n\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"\n (step() === 'confirm'\n ? '@auth:profile-page.commands.set-pin-code.actions.save'\n : '@general:actions.next.title'\n )\n | translate\n | async\n \"\n [disabled]=\"!canProceed() || isSaving()\"\n (onClick)=\"onNext()\"\n ></ax-button>\n </ax-suffix>\n</ax-footer>\n"],"names":["SecurityManagementRootConfig","i2","i5","i6"],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ import { AXPUserAvatarComponent } from '@acorex-platform/framework-client/layout
|
|
|
19
19
|
import * as i3 from '@angular/common';
|
|
20
20
|
import { CommonModule } from '@angular/common';
|
|
21
21
|
import { Router } from '@angular/router';
|
|
22
|
-
import { u as AXPTenantChooserListComponent } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-
|
|
22
|
+
import { u as AXPTenantChooserListComponent } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-BJduAePW.mjs';
|
|
23
23
|
|
|
24
24
|
class AXPAuthTenantChooserComponent {
|
|
25
25
|
constructor() {
|
|
@@ -64,4 +64,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
64
64
|
}], ctorParameters: () => [] });
|
|
65
65
|
|
|
66
66
|
export { AXPAuthTenantChooserComponent };
|
|
67
|
-
//# sourceMappingURL=acorex-platform-module-auth-client-tenant-chooser.component-
|
|
67
|
+
//# sourceMappingURL=acorex-platform-module-auth-client-tenant-chooser.component-CmcpvQia.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-auth-client-tenant-chooser.component-
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-auth-client-tenant-chooser.component-CmcpvQia.mjs","sources":["../../../../libs/modules/auth/client/src/lib/pages/account/tenant-chooser/tenant-chooser.component.ts","../../../../libs/modules/auth/client/src/lib/pages/account/tenant-chooser/tenant-chooser.component.html"],"sourcesContent":["import { Component, ViewEncapsulation, inject, ChangeDetectionStrategy, signal } from '@angular/core';\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPPlatformBrandingService } from '@acorex-platform/framework-client/common';\nimport { AXPLogoComponent } from '@acorex-platform/framework-client/core';\nimport { AXPUserAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { AXPTenantChooserListComponent } from './tenant-chooser-list.component';\n\n@Component({\n selector: 'axp-auth-tenant-chooser',\n templateUrl: './tenant-chooser.component.html',\n styleUrls: ['../shared/auth-chooser.layout.css', './tenant-chooser.component.css'],\n imports: [\n CommonModule,\n AXFormModule,\n AXTextBoxModule,\n AXButtonModule,\n AXLabelModule,\n AXCheckBoxModule,\n AXImageModule,\n AXDecoratorModule,\n AXPLogoComponent,\n AXLoadingModule,\n AXSkeletonModule,\n AXTranslationModule,\n AXPUserAvatarComponent,\n AXPTenantChooserListComponent,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPAuthTenantChooserComponent {\n private router = inject(Router);\n private readonly platformBranding = inject(AXPPlatformBrandingService);\n protected readonly platformTitle = signal('');\n private sessionService = inject(AXPSessionService);\n\n constructor() {\n void this.platformBranding.resolvePlatformTitle().then((title) => this.platformTitle.set(title));\n }\n\n protected user = this.sessionService.user;\n protected catalogLoading = signal(true);\n\n handleCatalogLoading(loading: boolean): void {\n this.catalogLoading.set(loading);\n }\n\n async handleSignout() {\n await this.sessionService.signout();\n this.router.navigate(['/auth/login']);\n }\n}\n","<main *translate=\"let t\" class=\"axp-auth-chooser\">\n <div class=\"axp-auth-chooser__inner\">\n <!-- ----- Platform branding ----- -->\n <section class=\"axp-auth-chooser__brand\">\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onLight\"\n format=\"full\"\n [size]=\"260\"\n [attr.alt]=\"platformTitle()\"\n ></axp-logo>\n </section>\n <!-- ----- Tenant selection card ----- -->\n <section class=\"axp-auth-chooser__card-wrap\">\n <div class=\"axp-auth-chooser__card\">\n <!-- ----- Profile header while catalog loads ----- -->\n @if (catalogLoading()) {\n <ax-skeleton [animated]=\"true\" class=\"size-[72px] rounded-full shrink-0\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"h-6 w-56 max-w-full\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"h-4 w-64 max-w-full\"></ax-skeleton>\n } @else {\n <axp-user-avatar\n [size]=\"72\"\n [userId]=\"$safeNavigationMigration(user?.id)!\"\n [showPresence]=\"false\"\n ></axp-user-avatar>\n <h2 class=\"md:text-lg font-medium\">\n {{ '@auth:welcome.message' | translate | async }}, {{ user?.title }}\n </h2>\n <p class=\"text-neutral-500 text-sm md:text-base font-medium\">\n {{ '@auth:tenant-chooser.description' | translate | async }}\n </p>\n }\n <div class=\"mt-3 w-full\">\n <axp-tenant-chooser-list (loadingChange)=\"handleCatalogLoading($event)\"></axp-tenant-chooser-list>\n </div>\n </div>\n </section>\n <!-- ----- Sign-out footer ----- -->\n <section class=\"axp-auth-chooser__footer\">\n <p class=\"text-neutral-400 text-sm\">\n {{ '@auth:tenant-chooser.footer' | translate | async }}\n <a (click)=\"handleSignout()\" class=\"text-primary cursor-pointer hover:underline font-medium\">\n {{ '@auth:backLogin' | translate | async }}\n </a>\n </p>\n </section>\n </div>\n</main>\n"],"names":["i2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;MA2Ca,6BAA6B,CAAA;AAMxC,IAAA,WAAA,GAAA;AALQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACd,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,0BAA0B,CAAC;QACnD,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,EAAE;0FAAC;AACrC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAMxC,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI;QAC/B,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,IAAI;2FAAC;QAJrC,KAAK,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClG;AAKA,IAAA,oBAAoB,CAAC,OAAgB,EAAA;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;IAClC;AAEA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC;IACvC;8GApBW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3C1C,2hEAiDA,EAAA,MAAA,EAAA,CAAA,4yIAAA,EAAA,4QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxBI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,sBAAsB,wIACtB,6BAA6B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKpB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAvBzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,OAAA,EAG1B;wBACP,YAAY;wBACZ,YAAY;wBACZ,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,gBAAgB;wBAChB,aAAa;wBACb,iBAAiB;wBACjB,gBAAgB;wBAChB,eAAe;wBACf,gBAAgB;wBAChB,mBAAmB;wBACnB,sBAAsB;wBACtB,6BAA6B;AAC9B,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,KAAK,EAAA,aAAA,EAC/B,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,2hEAAA,EAAA,MAAA,EAAA,CAAA,4yIAAA,EAAA,4QAAA,CAAA,EAAA;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { NgModule } from '@angular/core';
|
|
3
|
-
import {
|
|
3
|
+
import { ROUTES } from '@angular/router';
|
|
4
4
|
|
|
5
5
|
function routesFacory() {
|
|
6
6
|
const routes = [
|
|
@@ -13,20 +13,20 @@ function routesFacory() {
|
|
|
13
13
|
}
|
|
14
14
|
class AXPTwoFactorModule {
|
|
15
15
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTwoFactorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
16
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXPTwoFactorModule
|
|
16
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXPTwoFactorModule }); }
|
|
17
17
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTwoFactorModule, providers: [
|
|
18
18
|
{
|
|
19
19
|
provide: ROUTES,
|
|
20
20
|
multi: true,
|
|
21
21
|
useFactory: routesFacory,
|
|
22
22
|
},
|
|
23
|
-
]
|
|
23
|
+
] }); }
|
|
24
24
|
}
|
|
25
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTwoFactorModule, decorators: [{
|
|
26
26
|
type: NgModule,
|
|
27
27
|
args: [{
|
|
28
28
|
declarations: [],
|
|
29
|
-
imports: [
|
|
29
|
+
imports: [],
|
|
30
30
|
exports: [],
|
|
31
31
|
providers: [
|
|
32
32
|
{
|
|
@@ -39,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
39
39
|
}] });
|
|
40
40
|
|
|
41
41
|
export { AXPTwoFactorModule };
|
|
42
|
-
//# sourceMappingURL=acorex-platform-module-auth-client-two-factor.module-
|
|
42
|
+
//# sourceMappingURL=acorex-platform-module-auth-client-two-factor.module-BnH72Bob.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-auth-client-two-factor.module-BnH72Bob.mjs","sources":["../../../../libs/modules/auth/client/src/lib/pages/two-factor/two-factor.module.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { ROUTES, Routes } from '@angular/router';\n\nfunction routesFacory() {\n const routes: Routes = [\n {\n path: 'two-step',\n loadComponent: () =>\n import('./two-factor-code/two-factor-code.component').then((c) => c.AXPAuthTwoFactorCodeComponent),\n },\n ];\n return routes;\n}\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n ],\n})\nexport class AXPTwoFactorModule {}\n"],"names":[],"mappings":";;;;AAGA,SAAS,YAAY,GAAA;AACnB,IAAA,MAAM,MAAM,GAAW;AACrB,QAAA;AACE,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,aAAa,EAAE,MACb,OAAO,6EAA6C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,6BAA6B,CAAC;AACrG,SAAA;KACF;AACD,IAAA,OAAO,MAAM;AACf;MAca,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAlB,kBAAkB,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,SAAA,EARlB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,UAAU,EAAE,YAAY;AACzB,aAAA;AACF,SAAA,EAAA,CAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,UAAU,EAAE,YAAY;AACzB,yBAAA;AACF,qBAAA;AACF,iBAAA;;;;;"}
|
|
@@ -3,7 +3,7 @@ import { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layou
|
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { inject, Injectable } from '@angular/core';
|
|
5
5
|
import { isEmpty } from 'lodash';
|
|
6
|
-
import { q as AXPLoginHistoryService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-
|
|
6
|
+
import { q as AXPLoginHistoryService } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-BJduAePW.mjs';
|
|
7
7
|
|
|
8
8
|
//#region ---- View login history command ----
|
|
9
9
|
/** Opens a read-only dialog listing recent sign-in attempts for the current user. */
|
|
@@ -107,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
107
107
|
}] });
|
|
108
108
|
|
|
109
109
|
export { AXPViewLoginHistoryCommand };
|
|
110
|
-
//# sourceMappingURL=acorex-platform-module-auth-client-view-login-history.command-
|
|
110
|
+
//# sourceMappingURL=acorex-platform-module-auth-client-view-login-history.command-BnGwRAd-.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-auth-client-view-login-history.command-
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-auth-client-view-login-history.command-BnGwRAd-.mjs","sources":["../../../../libs/modules/auth/client/src/lib/commands/view-login-history.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';\n\nimport { inject, Injectable } from '@angular/core';\nimport { isEmpty } from 'lodash';\nimport { AXPLoginHistoryEntry, AXPLoginHistoryService } from '../shared/services/login-history.service';\n\n//#region ---- View login history command ----\n\n/** Opens a read-only dialog listing recent sign-in attempts for the current user. */\n@Injectable({ providedIn: 'root' })\nexport class AXPViewLoginHistoryCommand implements AXPCommand {\n //#region ---- Services & Dependencies ----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly loginHistoryService = inject(AXPLoginHistoryService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Command ----\n\n async execute(): AXPCommandExecuteResultPromise<void> {\n const entries = await this.loginHistoryService.getEntries();\n const rows = await this.buildRows(entries);\n\n const dialogTitle = await this.translateService.translateAsync(\n '@auth:profile-page.commands.view-login-history.dialog.title',\n );\n\n await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog.setTitle(dialogTitle).setSize('lg').setCloseButton(true);\n\n if (isEmpty(rows)) {\n dialog.setMessage('@auth:profile-page.commands.view-login-history.empty');\n } else {\n dialog.content((layout) => {\n layout.list((list) => {\n list\n .setDataSource(rows)\n .setColumns([\n {\n name: 'lastLoginDate',\n title: '@auth:profile-page.commands.view-login-history.columns.date',\n width: '180px',\n widget: {\n type: 'date-time-editor',\n path: 'lastLoginDate',\n options: { format: 'datetime', readOnly: true },\n },\n },\n {\n name: 'device',\n title: '@auth:profile-page.commands.view-login-history.columns.device',\n widget: { type: 'text-editor', path: 'device', options: { readOnly: true } },\n },\n {\n name: 'location',\n title: '@auth:profile-page.commands.view-login-history.columns.location',\n widget: { type: 'text-editor', path: 'location', options: { readOnly: true } },\n },\n {\n name: 'ipAddress',\n title: '@auth:profile-page.commands.view-login-history.columns.ip-address',\n width: '140px',\n widget: { type: 'text-editor', path: 'ipAddress', options: { readOnly: true } },\n },\n {\n name: 'browser',\n title: '@auth:profile-page.commands.view-login-history.columns.browser',\n widget: { type: 'text-editor', path: 'browser', options: { readOnly: true } },\n },\n {\n name: 'statusLabel',\n title: '@auth:profile-page.commands.view-login-history.columns.status',\n width: '120px',\n widget: { type: 'text-editor', path: 'statusLabel', options: { readOnly: true } },\n },\n ])\n .setPaging(true)\n .setShowHeader(true)\n .setAllowSelection(false)\n .setMinHeight(360);\n });\n });\n }\n\n dialog.setActions((actions) => {\n actions.cancel('@general:actions.close.title');\n });\n })\n .show();\n\n return {\n success: true,\n kind: 'object',\n data: undefined,\n metadata: { refresh: false },\n };\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private async buildRows(\n entries: AXPLoginHistoryEntry[],\n ): Promise<Array<AXPLoginHistoryEntry & { statusLabel: string }>> {\n return Promise.all(\n entries.map(async (entry) => ({\n ...entry,\n statusLabel: await this.translateService.translateAsync(\n `@auth:profile-page.commands.view-login-history.status.${entry.status}`,\n ),\n })),\n );\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { D as AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT, E as AUTH_USER_ACTIVITY_DEFAULT_WEEKS, F as AXMAuthErrorHandler, G as AXMAuthModule, s as AXMAuthPlatformSettingsService, B as AXMAuthenticationTypes, H as AXMDefaultAuthConfigs, I as AXM_AUTH_CONFIG_TOKEN, t as AXM_LOGIN_GUARD_TOKEN, l as AXPAuthPasswordChangeTrackingService, i as AXPIdleLockService, z as AXPLoginExternalProvidersComponent, q as AXPLoginHistoryService, j as AXPUserAvatarSyncService, P as PROFILE_PAGE_GROUPS_HOOK, b as PROFILE_PAGE_HEADER_META_HOOK, a as PROFILE_PAGE_SECTIONS_HOOK, J as aggregateDailySessionCounts, h as buildUserActivityDataSourceItem, K as buildUserActivityWeeks, L as canActivateLogin, M as computeUserActivityStats, N as configAuthModule, O as countToActivityLevel, Q as extractUserActivityEndDate, R as extractUserActivityStartDate, S as extractUserActivityUserId, y as formatCompactActivityCount, T as isUserProfileGroupComponent, U as isUserProfileSectionsGroupRequested, V as parseAuthCredentialType, g as resolveDefaultUserActivityDateRange, r as resolveDefaultUserProfileSectionAction, c as resolveUserProfileSectionContent, v as visibleUserProfileSectionActions } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-
|
|
1
|
+
export { D as AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT, E as AUTH_USER_ACTIVITY_DEFAULT_WEEKS, F as AXMAuthErrorHandler, G as AXMAuthModule, s as AXMAuthPlatformSettingsService, B as AXMAuthenticationTypes, H as AXMDefaultAuthConfigs, I as AXM_AUTH_CONFIG_TOKEN, t as AXM_LOGIN_GUARD_TOKEN, l as AXPAuthPasswordChangeTrackingService, i as AXPIdleLockService, z as AXPLoginExternalProvidersComponent, q as AXPLoginHistoryService, j as AXPUserAvatarSyncService, P as PROFILE_PAGE_GROUPS_HOOK, b as PROFILE_PAGE_HEADER_META_HOOK, a as PROFILE_PAGE_SECTIONS_HOOK, J as aggregateDailySessionCounts, h as buildUserActivityDataSourceItem, K as buildUserActivityWeeks, L as canActivateLogin, M as computeUserActivityStats, N as configAuthModule, O as countToActivityLevel, Q as extractUserActivityEndDate, R as extractUserActivityStartDate, S as extractUserActivityUserId, y as formatCompactActivityCount, T as isUserProfileGroupComponent, U as isUserProfileSectionsGroupRequested, V as parseAuthCredentialType, g as resolveDefaultUserActivityDateRange, r as resolveDefaultUserProfileSectionAction, c as resolveUserProfileSectionContent, v as visibleUserProfileSectionActions } from './acorex-platform-module-auth-client-acorex-platform-module-auth-client-BJduAePW.mjs';
|
|
2
2
|
//# sourceMappingURL=acorex-platform-module-auth-client.mjs.map
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acorex-platform/module-auth-client",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.30",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@acorex-platform/module-security-management-client": "0.0.
|
|
7
|
-
"@angular/common": "^21.0.0",
|
|
8
|
-
"@angular/core": "^21.0.0"
|
|
6
|
+
"@acorex-platform/module-security-management-client": "0.0.30",
|
|
7
|
+
"@angular/common": "^21.0.0 || ^22.0.0",
|
|
8
|
+
"@angular/core": "^21.0.0 || ^22.0.0"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"tslib": "^2.3.0"
|
|
@@ -3,12 +3,12 @@ import * as i0 from '@angular/core';
|
|
|
3
3
|
import { InjectionToken } from '@angular/core';
|
|
4
4
|
import { AXMSecurityManagementDeviceSessionsEntityModel } from '@acorex-platform/module-security-management-client/contracts';
|
|
5
5
|
import { AXDataSourceFilterOption } from '@acorex/cdk/common';
|
|
6
|
-
import * as i2
|
|
6
|
+
import * as i2 from '@acorex-platform/framework-client/common';
|
|
7
7
|
import { AXPErrorHandler } from '@acorex-platform/framework-client/common';
|
|
8
|
-
import * as
|
|
8
|
+
import * as i3 from '@angular/router';
|
|
9
9
|
import { CanActivateFn } from '@angular/router';
|
|
10
10
|
import * as i1$2 from '@angular/common';
|
|
11
|
-
import * as
|
|
11
|
+
import * as i1 from '@acorex-platform/framework-client/core';
|
|
12
12
|
import * as i1$1 from '@acorex/core/validation';
|
|
13
13
|
|
|
14
14
|
declare const PROFILE_PAGE_GROUPS_HOOK = "profile-page.groups";
|
|
@@ -254,7 +254,7 @@ declare class AXMAuthPlatformSettingsService {
|
|
|
254
254
|
|
|
255
255
|
declare class AXPAccountModule {
|
|
256
256
|
static ɵfac: i0.ɵɵFactoryDeclaration<AXPAccountModule, never>;
|
|
257
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<AXPAccountModule, never, [typeof i1.
|
|
257
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<AXPAccountModule, never, [typeof i1.AXPComponentSlotModule], never>;
|
|
258
258
|
static ɵinj: i0.ɵɵInjectorDeclaration<AXPAccountModule>;
|
|
259
259
|
}
|
|
260
260
|
|
|
@@ -267,7 +267,7 @@ declare class AXMAuthValidationRulesModule {
|
|
|
267
267
|
declare class AXMAuthModule {
|
|
268
268
|
constructor();
|
|
269
269
|
static ɵfac: i0.ɵɵFactoryDeclaration<AXMAuthModule, never>;
|
|
270
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<AXMAuthModule, never, [typeof i1$2.CommonModule, typeof i2
|
|
270
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<AXMAuthModule, never, [typeof i1$2.CommonModule, typeof i2.AXPCommonModule, typeof i3.RouterModule, typeof AXPAccountModule, typeof AXMAuthValidationRulesModule], never>;
|
|
271
271
|
static ɵinj: i0.ɵɵInjectorDeclaration<AXMAuthModule>;
|
|
272
272
|
}
|
|
273
273
|
|