UNPKG

@spartacus/storefront

Version:

Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.

69 lines 8.67 kB
import { Injectable } from '@angular/core'; import { PageType, } from '@spartacus/core'; import { from } from 'rxjs'; import { map, switchMap } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "@spartacus/core"; import * as i2 from "@angular/router"; /** * Guards the _logout_ route. * * Takes care of routing the user to a logout page (if available) or redirects to * the homepage. If the homepage is protected, the user is redirected * to the login route instead. */ export class LogoutGuard { constructor(auth, cms, semanticPathService, protectedRoutes, router, authRedirectService) { this.auth = auth; this.cms = cms; this.semanticPathService = semanticPathService; this.protectedRoutes = protectedRoutes; this.router = router; this.authRedirectService = authRedirectService; } canActivate() { // Logout route should never be remembered as a redirect url after login (that would cause logout right after login). this.authRedirectService.reportNotAuthGuard(); /** * First we want to complete logout process before redirecting to logout page * We want to avoid errors like `token is no longer valid` */ return from(this.logout()).pipe(switchMap(() => { return this.cms .hasPage({ id: this.semanticPathService.get('logout'), type: PageType.CONTENT_PAGE, }) .pipe(map((hasPage) => { if (!hasPage) { return this.getRedirectUrl(); } // TODO(#9385): Use CMS page guard here. return hasPage; })); })); } logout() { return this.auth.coreLogout(); } /** * Whenever there is no specific "logout" page configured in the CMS, * we redirect after the user is logged out. * * The user gets redirected to the homepage, unless the homepage is protected * (in case of a closed shop). We'll redirect to the login page instead. */ getRedirectUrl() { const cxRoute = this.protectedRoutes.shouldProtect ? 'login' : 'home'; return this.router.parseUrl(this.semanticPathService.get(cxRoute)); } } LogoutGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: LogoutGuard, deps: [{ token: i1.AuthService }, { token: i1.CmsService }, { token: i1.SemanticPathService }, { token: i1.ProtectedRoutesService }, { token: i2.Router }, { token: i1.AuthRedirectService }], target: i0.ɵɵFactoryTarget.Injectable }); LogoutGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: LogoutGuard, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: LogoutGuard, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i1.CmsService }, { type: i1.SemanticPathService }, { type: i1.ProtectedRoutesService }, { type: i2.Router }, { type: i1.AuthRedirectService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nb3V0Lmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RvcmVmcm9udGxpYi9jbXMtY29tcG9uZW50cy91c2VyL2xvZ291dC9sb2dvdXQuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBSUwsUUFBUSxHQUdULE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBRWhEOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBQ3RCLFlBQ1ksSUFBaUIsRUFDakIsR0FBZSxFQUNmLG1CQUF3QyxFQUN4QyxlQUF1QyxFQUN2QyxNQUFjLEVBQ2QsbUJBQXdDO1FBTHhDLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUNmLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO0lBQ2pELENBQUM7SUFFSixXQUFXO1FBQ1QscUhBQXFIO1FBQ3JILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlDOzs7V0FHRztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDN0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUc7aUJBQ1osT0FBTyxDQUFDO2dCQUNQLEVBQUUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDMUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxZQUFZO2FBQzVCLENBQUM7aUJBQ0QsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNkLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ1osT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQzlCO2dCQUNELHdDQUF3QztnQkFDeEMsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRVMsTUFBTTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sY0FBYztRQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdEUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQzs7d0dBbkRVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5BY3RpdmF0ZSwgUm91dGVyLCBVcmxUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEF1dGhSZWRpcmVjdFNlcnZpY2UsXG4gIEF1dGhTZXJ2aWNlLFxuICBDbXNTZXJ2aWNlLFxuICBQYWdlVHlwZSxcbiAgUHJvdGVjdGVkUm91dGVzU2VydmljZSxcbiAgU2VtYW50aWNQYXRoU2VydmljZSxcbn0gZnJvbSAnQHNwYXJ0YWN1cy9jb3JlJztcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIEd1YXJkcyB0aGUgX2xvZ291dF8gcm91dGUuXG4gKlxuICogVGFrZXMgY2FyZSBvZiByb3V0aW5nIHRoZSB1c2VyIHRvIGEgbG9nb3V0IHBhZ2UgKGlmIGF2YWlsYWJsZSkgb3IgcmVkaXJlY3RzIHRvXG4gKiB0aGUgaG9tZXBhZ2UuIElmIHRoZSBob21lcGFnZSBpcyBwcm90ZWN0ZWQsIHRoZSB1c2VyIGlzIHJlZGlyZWN0ZWRcbiAqIHRvIHRoZSBsb2dpbiByb3V0ZSBpbnN0ZWFkLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTG9nb3V0R3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBhdXRoOiBBdXRoU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY21zOiBDbXNTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzZW1hbnRpY1BhdGhTZXJ2aWNlOiBTZW1hbnRpY1BhdGhTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBwcm90ZWN0ZWRSb3V0ZXM6IFByb3RlY3RlZFJvdXRlc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgIHByb3RlY3RlZCBhdXRoUmVkaXJlY3RTZXJ2aWNlOiBBdXRoUmVkaXJlY3RTZXJ2aWNlXG4gICkge31cblxuICBjYW5BY3RpdmF0ZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB7XG4gICAgLy8gTG9nb3V0IHJvdXRlIHNob3VsZCBuZXZlciBiZSByZW1lbWJlcmVkIGFzIGEgcmVkaXJlY3QgdXJsIGFmdGVyIGxvZ2luICh0aGF0IHdvdWxkIGNhdXNlIGxvZ291dCByaWdodCBhZnRlciBsb2dpbikuXG4gICAgdGhpcy5hdXRoUmVkaXJlY3RTZXJ2aWNlLnJlcG9ydE5vdEF1dGhHdWFyZCgpO1xuICAgIC8qKlxuICAgICAqIEZpcnN0IHdlIHdhbnQgdG8gY29tcGxldGUgbG9nb3V0IHByb2Nlc3MgYmVmb3JlIHJlZGlyZWN0aW5nIHRvIGxvZ291dCBwYWdlXG4gICAgICogV2Ugd2FudCB0byBhdm9pZCBlcnJvcnMgbGlrZSBgdG9rZW4gaXMgbm8gbG9uZ2VyIHZhbGlkYFxuICAgICAqL1xuICAgIHJldHVybiBmcm9tKHRoaXMubG9nb3V0KCkpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jbXNcbiAgICAgICAgICAuaGFzUGFnZSh7XG4gICAgICAgICAgICBpZDogdGhpcy5zZW1hbnRpY1BhdGhTZXJ2aWNlLmdldCgnbG9nb3V0JyksXG4gICAgICAgICAgICB0eXBlOiBQYWdlVHlwZS5DT05URU5UX1BBR0UsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoaGFzUGFnZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWhhc1BhZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWRpcmVjdFVybCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFRPRE8oIzkzODUpOiBVc2UgQ01TIHBhZ2UgZ3VhcmQgaGVyZS5cbiAgICAgICAgICAgICAgcmV0dXJuIGhhc1BhZ2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbG9nb3V0KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aC5jb3JlTG9nb3V0KCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbmV2ZXIgdGhlcmUgaXMgbm8gc3BlY2lmaWMgXCJsb2dvdXRcIiBwYWdlIGNvbmZpZ3VyZWQgaW4gdGhlIENNUyxcbiAgICogd2UgcmVkaXJlY3QgYWZ0ZXIgdGhlIHVzZXIgaXMgbG9nZ2VkIG91dC5cbiAgICpcbiAgICogVGhlIHVzZXIgZ2V0cyByZWRpcmVjdGVkIHRvIHRoZSBob21lcGFnZSwgdW5sZXNzIHRoZSBob21lcGFnZSBpcyBwcm90ZWN0ZWRcbiAgICogKGluIGNhc2Ugb2YgYSBjbG9zZWQgc2hvcCkuIFdlJ2xsIHJlZGlyZWN0IHRvIHRoZSBsb2dpbiBwYWdlIGluc3RlYWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0UmVkaXJlY3RVcmwoKTogVXJsVHJlZSB7XG4gICAgY29uc3QgY3hSb3V0ZSA9IHRoaXMucHJvdGVjdGVkUm91dGVzLnNob3VsZFByb3RlY3QgPyAnbG9naW4nIDogJ2hvbWUnO1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnNlbWFudGljUGF0aFNlcnZpY2UuZ2V0KGN4Um91dGUpKTtcbiAgfVxufVxuIl19