{"version":3,"file":"vendure-admin-ui-login.mjs","sources":["../../src/lib/login/src/components/login/login.component.ts","../../src/lib/login/src/components/login/login.component.html","../../src/lib/login/src/providers/login.guard.ts","../../src/lib/login/src/login.routes.ts","../../src/lib/login/src/login.module.ts","../../src/lib/login/src/public_api.ts","../../src/lib/login/src/vendure-admin-ui-login.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n    ADMIN_UI_VERSION,\n    AuthService,\n    AUTH_REDIRECT_PARAM,\n    getAppConfig,\n    LocalizationDirectionType,\n    LocalizationService,\n} from '@vendure/admin-ui/core';\n\n@Component({\n    selector: 'vdr-login',\n    templateUrl: './login.component.html',\n    styleUrls: ['./login.component.scss'],\n    standalone: false,\n})\nexport class LoginComponent implements OnInit {\n    direction$: LocalizationDirectionType;\n\n    username = '';\n    password = '';\n    rememberMe = false;\n    version = ADMIN_UI_VERSION;\n    errorMessage: string | undefined;\n    brand = getAppConfig().brand;\n    hideVendureBranding = getAppConfig().hideVendureBranding;\n    customImageUrl = getAppConfig().loginImageUrl;\n    imageUrl = '';\n    imageUnsplashUrl = '';\n    imageLocation = '';\n    imageCreator = '';\n    imageCreatorUrl = '';\n\n    constructor(\n        private authService: AuthService,\n        private router: Router,\n        private httpClient: HttpClient,\n        private localizationService: LocalizationService,\n    ) {\n        if (this.customImageUrl) {\n            this.imageUrl = this.customImageUrl;\n        } else {\n            this.loadImage();\n        }\n    }\n    ngOnInit(): void {\n        this.direction$ = this.localizationService.direction$;\n    }\n\n    logIn(): void {\n        this.errorMessage = undefined;\n        this.authService.logIn(this.username, this.password, this.rememberMe).subscribe(result => {\n            switch (result.__typename) {\n                case 'CurrentUser':\n                    const redirect = this.getRedirectRoute();\n                    this.router.navigateByUrl(redirect ? redirect : '/');\n                    break;\n                case 'InvalidCredentialsError':\n                case 'NativeAuthStrategyError':\n                    this.errorMessage = result.message;\n                    break;\n            }\n        });\n    }\n\n    loadImage() {\n        this.httpClient\n            .get('https://login-image.vendure.io')\n            .toPromise()\n            .then(res => {\n                this.updateImage(res);\n            });\n    }\n\n    updateImage(res: any) {\n        const user: any = (res as any).user;\n        const location: any = (res as any).location;\n\n        this.imageUrl = res.urls.regular + '?utm_source=Vendure+Login+Image&utm_medium=referral';\n        this.imageCreator = user.name;\n        this.imageLocation = location.name;\n        this.imageCreatorUrl = user.links.html + '?utm_source=Vendure+Login+Image&utm_medium=referral';\n        this.imageUnsplashUrl = res.links.html;\n    }\n\n    /**\n     * Attempts to read a redirect param from the current url and parse it into a\n     * route from which the user was redirected after a 401 error.\n     */\n    private getRedirectRoute(): string | undefined {\n        let redirectTo: string | undefined;\n        const re = new RegExp(`${AUTH_REDIRECT_PARAM}=(.*)`);\n        try {\n            const redirectToParam = window.location.search.match(re);\n            if (redirectToParam && 1 < redirectToParam.length) {\n                redirectTo = atob(decodeURIComponent(redirectToParam[1]));\n            }\n        } catch (e: any) {\n            // ignore\n        }\n        return redirectTo;\n    }\n}\n","<div class=\"login-wrapper\" [dir]=\"direction$ | async\">\n    <div class=\"login-wrapper-inner\">\n        <div class=\"login-wrapper-image\">\n            <div class=\"login-wrapper-image-content\">\n                <div class=\"login-wrapper-image-title\">\n                    {{ 'common.login-image-title' | translate }}\n                </div>\n                <div class=\"login-wrapper-image-copyright\">\n                    <p *ngIf=\"imageCreator\" class=\"creator\">\n                        Photo by <a [href]=\"imageCreatorUrl\" target=\"_blank\">{{ imageCreator }}</a> on\n                        <a [href]=\"imageUnsplashUrl\" target=\"_blank\">Unsplash</a>\n                    </p>\n                    <p *ngIf=\"imageLocation\" class=\"location\">{{ imageLocation }}</p>\n                </div>\n            </div>\n            <img *ngIf=\"imageUrl\" [src]=\"imageUrl\" [alt]=\"imageUrl\" />\n        </div>\n        <div class=\"login-wrapper-form\">\n            <p class=\"login-title\">\n                {{ 'common.login-title' | translate : { brand: hideVendureBranding ? brand : 'Vendure' } }}\n            </p>\n            <form class=\"login-form\">\n                <div class=\"login-group\">\n                    <input\n                        class=\"username\"\n                        type=\"text\"\n                        name=\"username\"\n                        id=\"login_username\"\n                        [(ngModel)]=\"username\"\n                        [placeholder]=\"'common.username' | translate\"\n                    />\n                    <input\n                        class=\"password\"\n                        name=\"password\"\n                        type=\"password\"\n                        id=\"login_password\"\n                        [(ngModel)]=\"password\"\n                        [placeholder]=\"'common.password' | translate\"\n                    />\n                    <clr-alert\n                        [clrAlertType]=\"'danger'\"\n                        [clrAlertClosable]=\"false\"\n                        [class.visible]=\"errorMessage\"\n                        class=\"login-error\"\n                    >\n                        <clr-alert-item>\n                            <span class=\"alert-text\">\n                                {{ errorMessage }}\n                            </span>\n                        </clr-alert-item>\n                    </clr-alert>\n                    <clr-checkbox-wrapper>\n                        <input\n                            type=\"checkbox\"\n                            clrCheckbox\n                            id=\"rememberme\"\n                            name=\"rememberme\"\n                            [(ngModel)]=\"rememberMe\"\n                        />\n                        <label>{{ 'common.remember-me' | translate }}</label>\n                    </clr-checkbox-wrapper>\n                    <div>\n                        <button\n                            type=\"submit\"\n                            class=\"button primary login-button\"\n                            (click)=\"logIn()\"\n                            [disabled]=\"!username || !password\"\n                        >\n                            {{ 'common.login' | translate }}\n                        </button>\n                    </div>\n                </div>\n            </form>\n        </div>\n        <img class=\"login-wrapper-logo\" src=\"assets/logo-login.webp\" *ngIf=\"!hideVendureBranding\" />\n    </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { AuthService } from '@vendure/admin-ui/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * This guard prevents loggen-in users from navigating to the login screen.\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class LoginGuard  {\n    constructor(private router: Router, private authService: AuthService) {}\n\n    canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {\n        return this.authService.checkAuthenticatedStatus().pipe(\n            map(authenticated => {\n                if (authenticated) {\n                    this.router.navigate(['/']);\n                }\n                return !authenticated;\n            }),\n        );\n    }\n}\n","import { Routes } from '@angular/router';\n\nimport { LoginComponent } from './components/login/login.component';\nimport { LoginGuard } from './providers/login.guard';\n\nexport const loginRoutes: Routes = [\n    {\n        path: '',\n        component: LoginComponent,\n        pathMatch: 'full',\n        canActivate: [LoginGuard],\n    },\n];\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SharedModule } from '@vendure/admin-ui/core';\n\nimport { LoginComponent } from './components/login/login.component';\nimport { loginRoutes } from './login.routes';\n\n@NgModule({\n    imports: [SharedModule, RouterModule.forChild(loginRoutes)],\n    exports: [],\n    declarations: [LoginComponent],\n})\nexport class LoginModule {}\n","// This file was generated by the build-public-api.ts script\nexport * from './components/login/login.component';\nexport * from './login.module';\nexport * from './login.routes';\nexport * from './providers/login.guard';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1"],"mappings":"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"}