@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
JavaScript
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