@delon/auth 12.4.2 → 13.0.0-beta.1
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/auth.d.ts +1 -0
- package/{esm2015/auth.js → esm2020/auth.mjs} +0 -0
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/src/auth.config.js → esm2020/src/auth.config.mjs} +0 -0
- package/esm2020/src/auth.module.mjs +12 -0
- package/esm2020/src/social/social.service.mjs +105 -0
- package/{esm2015/src/store/cookie-storage.service.js → esm2020/src/store/cookie-storage.service.mjs} +0 -0
- package/{esm2015/src/store/interface.js → esm2020/src/store/interface.mjs} +0 -0
- package/{esm2015/src/store/local-storage.service.js → esm2020/src/store/local-storage.service.mjs} +0 -0
- package/{esm2015/src/store/memory.service.js → esm2020/src/store/memory.service.mjs} +0 -0
- package/{esm2015/src/store/session-storage.service.js → esm2020/src/store/session-storage.service.mjs} +0 -0
- package/esm2020/src/token/base.interceptor.mjs +86 -0
- package/esm2020/src/token/helper.mjs +32 -0
- package/{esm2015/src/token/interface.js → esm2020/src/token/interface.mjs} +0 -0
- package/esm2020/src/token/jwt/jwt.guard.mjs +63 -0
- package/{esm2015/src/token/jwt/jwt.helper.js → esm2020/src/token/jwt/jwt.helper.mjs} +0 -0
- package/esm2020/src/token/jwt/jwt.interceptor.mjs +33 -0
- package/{esm2015/src/token/jwt/jwt.model.js → esm2020/src/token/jwt/jwt.model.mjs} +0 -0
- package/esm2020/src/token/simple/simple.guard.mjs +62 -0
- package/esm2020/src/token/simple/simple.interceptor.mjs +51 -0
- package/{esm2015/src/token/simple/simple.model.js → esm2020/src/token/simple/simple.model.mjs} +1 -1
- package/esm2020/src/token/token.service.mjs +92 -0
- package/fesm2015/{auth.js → auth.mjs} +80 -50
- package/fesm2015/auth.mjs.map +1 -0
- package/fesm2020/auth.mjs +717 -0
- package/fesm2020/auth.mjs.map +1 -0
- package/package.json +21 -9
- package/src/auth.module.d.ts +4 -0
- package/src/social/social.service.d.ts +3 -0
- package/src/token/base.interceptor.d.ts +3 -0
- package/src/token/jwt/jwt.guard.d.ts +3 -0
- package/src/token/jwt/jwt.interceptor.d.ts +3 -0
- package/src/token/simple/simple.guard.d.ts +3 -0
- package/src/token/simple/simple.interceptor.d.ts +3 -0
- package/src/token/simple/simple.model.d.ts +1 -1
- package/src/token/token.service.d.ts +4 -1
- package/auth.metadata.json +0 -1
- package/bundles/auth.umd.js +0 -1140
- package/bundles/auth.umd.js.map +0 -1
- package/esm2015/src/auth.module.js +0 -7
- package/esm2015/src/social/social.service.js +0 -96
- package/esm2015/src/token/base.interceptor.js +0 -84
- package/esm2015/src/token/helper.js +0 -30
- package/esm2015/src/token/jwt/jwt.guard.js +0 -63
- package/esm2015/src/token/jwt/jwt.interceptor.js +0 -30
- package/esm2015/src/token/simple/simple.guard.js +0 -62
- package/esm2015/src/token/simple/simple.interceptor.js +0 -48
- package/esm2015/src/token/token.service.js +0 -89
- package/fesm2015/auth.js.map +0 -1
package/bundles/auth.umd.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.umd.js","sources":["../../../../packages/auth/src/auth.config.ts","../../../../packages/auth/src/store/local-storage.service.ts","../../../../packages/auth/src/store/interface.ts","../../../../packages/auth/src/token/token.service.ts","../../../../packages/auth/src/token/interface.ts","../../../../packages/auth/src/social/social.service.ts","../../../../packages/auth/src/store/memory.service.ts","../../../../packages/auth/src/store/session-storage.service.ts","../../../../packages/auth/src/store/cookie-storage.service.ts","../../../../node_modules/tslib/tslib.es6.js","../../../../packages/auth/src/token/helper.ts","../../../../packages/auth/src/token/base.interceptor.ts","../../../../packages/auth/src/token/jwt/jwt.helper.ts","../../../../packages/auth/src/token/jwt/jwt.model.ts","../../../../packages/auth/src/token/jwt/jwt.interceptor.ts","../../../../packages/auth/src/token/jwt/jwt.guard.ts","../../../../packages/auth/src/token/simple/simple.model.ts","../../../../packages/auth/src/token/simple/simple.interceptor.ts","../../../../packages/auth/src/token/simple/simple.guard.ts","../../../../packages/auth/src/auth.module.ts","../../../../packages/auth/auth.ts"],"sourcesContent":["import { AlainAuthConfig, AlainConfigService } from '@delon/util/config';\n\nexport const AUTH_DEFAULT_CONFIG: AlainAuthConfig = {\n store_key: `_token`,\n token_invalid_redirect: true,\n token_exp_offset: 10,\n token_send_key: `token`,\n token_send_template: '${token}',\n token_send_place: 'header',\n login_url: '/login',\n ignores: [/\\/login/, /assets\\//, /passport\\//],\n allow_anonymous_key: `_allow_anonymous`,\n executeOtherInterceptors: true,\n refreshTime: 3000,\n refreshOffset: 6000\n};\n\nexport function mergeConfig(srv: AlainConfigService): AlainAuthConfig {\n return srv.merge('auth', AUTH_DEFAULT_CONFIG)!;\n}\n","import { ITokenModel } from '../token/interface';\nimport { IStore } from './interface';\n\nexport function DA_STORE_TOKEN_LOCAL_FACTORY(): IStore {\n return new LocalStorageStore();\n}\n\n/**\n * `localStorage` storage, **not lost after closing the browser**.\n *\n * ```ts\n * // global-config.module.ts\n * { provide: DA_STORE_TOKEN, useClass: LocalStorageStore }\n * ```\n */\nexport class LocalStorageStore implements IStore {\n get(key: string): ITokenModel {\n return JSON.parse(localStorage.getItem(key) || '{}') || {};\n }\n\n set(key: string, value: ITokenModel | null): boolean {\n localStorage.setItem(key, JSON.stringify(value));\n return true;\n }\n\n remove(key: string): void {\n localStorage.removeItem(key);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { ITokenModel } from '../token/interface';\nimport { DA_STORE_TOKEN_LOCAL_FACTORY } from './local-storage.service';\n\nexport const DA_STORE_TOKEN = new InjectionToken<IStore>('AUTH_STORE_TOKEN', {\n providedIn: 'root',\n factory: DA_STORE_TOKEN_LOCAL_FACTORY\n});\n\nexport interface IStore {\n get(key: string): ITokenModel;\n\n set(key: string, value: ITokenModel): boolean;\n\n remove(key: string): void;\n}\n","import { inject, Inject, Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, interval, Observable, Subject, Subscription } from 'rxjs';\nimport { filter, map, share } from 'rxjs/operators';\n\nimport { AlainAuthConfig, AlainConfigService } from '@delon/util/config';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { mergeConfig } from '../auth.config';\nimport { DA_STORE_TOKEN, IStore } from '../store/interface';\nimport { AuthReferrer, ITokenModel, ITokenService } from './interface';\n\nexport function DA_SERVICE_TOKEN_FACTORY(): ITokenService {\n return new TokenService(inject(AlainConfigService), inject(DA_STORE_TOKEN));\n}\n\n/**\n * 维护Token信息服务,[在线文档](https://ng-alain.com/auth)\n */\n@Injectable()\nexport class TokenService implements ITokenService, OnDestroy {\n private refresh$ = new Subject<ITokenModel>();\n private change$ = new BehaviorSubject<ITokenModel | null>(null);\n private interval$: Subscription;\n private _referrer: AuthReferrer = {};\n private _options: AlainAuthConfig;\n\n constructor(configSrv: AlainConfigService, @Inject(DA_STORE_TOKEN) private store: IStore) {\n this._options = mergeConfig(configSrv);\n }\n\n get refresh(): Observable<ITokenModel> {\n this.builderRefresh();\n return this.refresh$.pipe(share());\n }\n\n get login_url(): string | undefined {\n return this._options.login_url;\n }\n\n get referrer(): AuthReferrer {\n return this._referrer;\n }\n\n get options(): AlainAuthConfig {\n return this._options;\n }\n\n set(data: ITokenModel): boolean {\n const res = this.store.set(this._options.store_key!, data);\n this.change$.next(data);\n return res;\n }\n\n get(type?: NzSafeAny): NzSafeAny;\n get<T extends ITokenModel>(type?: new () => T): T {\n const data = this.store.get(this._options.store_key!);\n return type ? (Object.assign(new type(), data) as T) : (data as T);\n }\n\n clear(options: { onlyToken: boolean } = { onlyToken: false }): void {\n let data: ITokenModel | null = null;\n if (options.onlyToken === true) {\n data = this.get() as ITokenModel;\n data.token = ``;\n this.set(data);\n } else {\n this.store.remove(this._options.store_key!);\n }\n this.change$.next(data);\n }\n\n change(): Observable<ITokenModel | null> {\n return this.change$.pipe(share());\n }\n\n private builderRefresh(): void {\n const { refreshTime, refreshOffset } = this._options;\n this.cleanRefresh();\n this.interval$ = interval(refreshTime)\n .pipe(\n map(() => {\n const item = this.get() as ITokenModel;\n const expired = item.expired || item.exp || 0;\n if (expired <= 0) {\n return null;\n }\n\n const curTime = new Date().valueOf() + refreshOffset!;\n return expired <= curTime ? item : null;\n }),\n filter(v => v != null)\n )\n .subscribe(res => this.refresh$.next(res!));\n }\n\n private cleanRefresh(): void {\n if (this.interval$ && !this.interval$.closed) {\n this.interval$.unsubscribe();\n }\n }\n\n ngOnDestroy(): void {\n this.cleanRefresh();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { AlainAuthConfig } from '@delon/util/config';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { DA_SERVICE_TOKEN_FACTORY } from './token.service';\n\nexport const DA_SERVICE_TOKEN = new InjectionToken<ITokenService>('DA_SERVICE_TOKEN', {\n providedIn: 'root',\n factory: DA_SERVICE_TOKEN_FACTORY\n});\n\nexport interface ITokenModel {\n [key: string]: NzSafeAny;\n\n token: string | null | undefined;\n\n /**\n * 过期时间,单位:ms\n * - 不管Simple、JWT模式都必须指定\n */\n expired?: number;\n}\n\nexport interface AuthReferrer {\n url?: string | null | undefined;\n}\n\nexport interface ITokenService {\n /**\n * 授权失败后跳转路由路径(支持外部链接地址),通过设置[全局配置](https://ng-alain.com/docs/global-config)来改变\n */\n readonly login_url: string | undefined;\n\n /**\n * 当前请求页面的来源页面的地址\n */\n readonly referrer?: AuthReferrer;\n\n readonly options: AlainAuthConfig;\n\n /**\n * 订阅刷新,订阅时会自动产生一个定时器,每隔一段时间进行一些校验\n * - **注意** 会多次触发,请务必做好业务判断\n */\n readonly refresh: Observable<ITokenModel>;\n\n /**\n * 设置 Token 信息,当用户 Token 发生变动时都需要调用此方法重新刷新\n * - 如果需要监听过期,需要传递 `expired` 值\n */\n set(data: ITokenModel | null): boolean;\n\n /**\n * 获取Token,形式包括:\n * - `get()` 获取 Simple Token\n * - `get<JWTTokenModel>(JWTTokenModel)` 获取 JWT Token\n */\n get(type?: NzSafeAny): ITokenModel | null;\n\n /**\n * 获取Token,形式包括:\n * - `get()` 获取 Simple Token\n * - `get<JWTTokenModel>(JWTTokenModel)` 获取 JWT Token\n */\n get<T extends ITokenModel>(type?: NzSafeAny): T;\n\n /**\n * 清除 Token 信息,当用户退出登录时调用。\n * ```\n * // 清除所有 Token 信息\n * tokenService.clear();\n * // 只清除 token 字段\n * tokenService.clear({ onlyToken: true });\n * ```\n */\n clear(options?: { onlyToken: boolean }): void;\n\n /**\n * 订阅 Token 对象变更通知\n */\n change(): Observable<ITokenModel | null>;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable, Observer } from 'rxjs';\n\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { DA_SERVICE_TOKEN, ITokenModel, ITokenService } from '../token/interface';\n\nconst OPENTYPE = '_delonAuthSocialType';\nconst HREFCALLBACK = '_delonAuthSocialCallbackByHref';\n\nexport type SocialOpenType = 'href' | 'window';\n\n@Injectable()\nexport class SocialService implements OnDestroy {\n private _win: Window | null;\n private _winTime: NzSafeAny;\n private observer: Observer<ITokenModel | null>;\n\n constructor(\n @Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService,\n @Inject(DOCUMENT) private doc: NzSafeAny,\n private router: Router\n ) {}\n\n /**\n * 使用窗体打开授权页,返回值是 `Observable<ITokenModel>` 用于订阅授权后返回的结果\n *\n * @param url 获取授权地址\n * @param callback 回调路由地址\n * @param options.windowFeatures 等同 `window.open` 的 `features` 参数值\n */\n login(\n url: string,\n callback?: string,\n options?: {\n type?: 'window';\n windowFeatures?: string;\n }\n ): Observable<ITokenModel>;\n\n /**\n * 跳转至授权页\n *\n * @param url 获取授权地址\n * @param callback 回调路由地址\n */\n login(\n url: string,\n callback?: string,\n options?: {\n type?: 'href';\n }\n ): void;\n\n /**\n * 跳转至登录页,若为 `type=window` 时,返回值是 `Observable<ITokenModel>`\n *\n * @param url 获取授权地址\n * @param callback 当 `type=href` 成功时的回调路由地址\n * @param options.type 打开方式,默认 `window`\n * @param options.windowFeatures 等同 `window.open` 的 `features` 参数值\n */\n login(\n url: string,\n callback: string = '/',\n options: {\n type?: SocialOpenType;\n windowFeatures?: string;\n } = {}\n ): Observable<ITokenModel | null> | void {\n options = {\n type: 'window',\n windowFeatures: 'location=yes,height=570,width=520,scrollbars=yes,status=yes',\n ...options\n };\n localStorage.setItem(OPENTYPE, options.type!);\n localStorage.setItem(HREFCALLBACK, callback);\n if (options.type === 'href') {\n this.doc.location.href = url;\n return;\n }\n\n this._win = window.open(url, '_blank', options.windowFeatures);\n this._winTime = setInterval(() => {\n if (this._win && this._win.closed) {\n this.ngOnDestroy();\n\n let model = this.tokenService.get();\n if (model && !model.token) model = null;\n\n // 触发变更通知\n if (model) {\n this.tokenService.set(model);\n }\n\n this.observer.next(model);\n this.observer.complete();\n }\n }, 100);\n return new Observable((observer: Observer<ITokenModel | null>) => {\n this.observer = observer;\n });\n }\n\n /**\n * 授权成功后的回调处理\n *\n * @param rawData 指定回调认证信息,为空时从根据当前URL解析\n */\n callback(rawData?: ITokenModel | string | null): ITokenModel {\n // from uri\n if (!rawData && this.router.url.indexOf('?') === -1) {\n throw new Error(`url muse contain a ?`);\n }\n // parse\n let data: ITokenModel = { token: `` };\n if (typeof rawData === 'string') {\n const rightUrl = rawData.split('?')[1].split('#')[0];\n data = this.router.parseUrl(`./?${rightUrl}`).queryParams as ITokenModel;\n } else {\n data = rawData as ITokenModel;\n }\n\n if (!data || !data.token) throw new Error(`invalide token data`);\n this.tokenService.set(data);\n\n const url = localStorage.getItem(HREFCALLBACK) || '/';\n localStorage.removeItem(HREFCALLBACK);\n const type = localStorage.getItem(OPENTYPE);\n localStorage.removeItem(OPENTYPE);\n if (type === 'window') {\n window.close();\n } else {\n this.router.navigateByUrl(url);\n }\n\n return data;\n }\n\n ngOnDestroy(): void {\n clearInterval(this._winTime);\n this._winTime = null;\n }\n}\n","import { ITokenModel } from '../token/interface';\nimport { IStore } from './interface';\n\n/**\n * 内存存储,关掉浏览器标签后**丢失**。\n *\n * ```ts\n * // global-config.module.ts\n * { provide: DA_STORE_TOKEN, useClass: MemoryStore }\n * ```\n */\nexport class MemoryStore implements IStore {\n private cache: { [key: string]: ITokenModel | null } = {};\n\n get(key: string): ITokenModel {\n return this.cache[key] || ({} as ITokenModel);\n }\n\n set(key: string, value: ITokenModel): boolean {\n this.cache[key] = value;\n return true;\n }\n\n remove(key: string): void {\n this.cache[key] = null;\n }\n}\n","import { ITokenModel } from '../token/interface';\nimport { IStore } from './interface';\n\n/**\n * `sessionStorage` storage, **lost after closing the browser**.\n *\n * ```ts\n * // global-config.module.ts\n * { provide: DA_STORE_TOKEN, useClass: SessionStorageStore }\n * ```\n */\nexport class SessionStorageStore implements IStore {\n get(key: string): ITokenModel {\n return JSON.parse(sessionStorage.getItem(key) || '{}') || {};\n }\n\n set(key: string, value: ITokenModel | null): boolean {\n sessionStorage.setItem(key, JSON.stringify(value));\n return true;\n }\n\n remove(key: string): void {\n sessionStorage.removeItem(key);\n }\n}\n","import { CookieService } from '@delon/util/browser';\n\nimport { ITokenModel } from '../token/interface';\nimport { IStore } from './interface';\n\n/**\n * `cookie` storage\n *\n * ```ts\n * // global-config.module.ts\n * { provide: DA_STORE_TOKEN, useClass: CookieStorageStore, deps: [CookieService] }\n * ```\n */\nexport class CookieStorageStore implements IStore {\n constructor(private srv: CookieService) {}\n\n get(key: string): ITokenModel {\n return JSON.parse(this.srv.get(key) || '{}') || {};\n }\n\n set(key: string, value: ITokenModel | null | undefined): boolean {\n this.srv.put(key, value != null ? JSON.stringify(value) : '{}');\n return true;\n }\n\n remove(key: string): void {\n this.srv.remove(key);\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { DOCUMENT } from '@angular/common';\nimport { Injector } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { AlainAuthConfig } from '@delon/util/config';\n\nimport { DA_SERVICE_TOKEN, ITokenService } from './interface';\nimport { JWTTokenModel } from './jwt/jwt.model';\nimport { SimpleTokenModel } from './simple/simple.model';\n\nexport function CheckSimple(model: SimpleTokenModel | null): boolean {\n return model != null && typeof model.token === 'string' && model.token.length > 0;\n}\n\nexport function CheckJwt(model: JWTTokenModel, offset: number): boolean {\n try {\n return model != null && !!model.token && !model.isExpired(offset);\n } catch (err) {\n console.warn(`${err.message}, jump to login_url`);\n return false;\n }\n}\n\nexport function ToLogin(options: AlainAuthConfig, injector: Injector, url?: string): void {\n const router = injector.get<Router>(Router);\n (injector.get(DA_SERVICE_TOKEN) as ITokenService).referrer!.url = url || router.url;\n if (options.token_invalid_redirect === true) {\n setTimeout(() => {\n if (/^https?:\\/\\//g.test(options.login_url!)) {\n injector.get(DOCUMENT).location.href = options.login_url as string;\n } else {\n router.navigate([options.login_url]);\n }\n });\n }\n}\n","import {\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpParams,\n HttpRequest,\n HTTP_INTERCEPTORS\n} from '@angular/common/http';\nimport { Injectable, Injector, Optional } from '@angular/core';\nimport { Observable, Observer } from 'rxjs';\n\nimport { AlainAuthConfig, AlainConfigService } from '@delon/util/config';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { mergeConfig } from '../auth.config';\nimport { ToLogin } from './helper';\nimport { ITokenModel } from './interface';\n\nclass HttpAuthInterceptorHandler implements HttpHandler {\n constructor(private next: HttpHandler, private interceptor: HttpInterceptor) {}\n\n handle(req: HttpRequest<NzSafeAny>): Observable<HttpEvent<NzSafeAny>> {\n return this.interceptor.intercept(req, this.next);\n }\n}\n\n@Injectable()\nexport abstract class BaseInterceptor implements HttpInterceptor {\n constructor(@Optional() protected injector: Injector) {}\n\n protected model: ITokenModel;\n\n abstract isAuth(options: AlainAuthConfig): boolean;\n\n abstract setReq(req: HttpRequest<NzSafeAny>, options: AlainAuthConfig): HttpRequest<NzSafeAny>;\n\n intercept(req: HttpRequest<NzSafeAny>, next: HttpHandler): Observable<HttpEvent<NzSafeAny>> {\n const options = mergeConfig(this.injector.get(AlainConfigService));\n if (Array.isArray(options.ignores)) {\n for (const item of options.ignores) {\n if (item.test(req.url)) return next.handle(req);\n }\n }\n\n const ingoreKey = options.allow_anonymous_key!;\n let ingored = false;\n let params = req.params;\n let url = req.url;\n if (req.params.has(ingoreKey)) {\n params = req.params.delete(ingoreKey);\n ingored = true;\n }\n const urlArr = req.url.split('?');\n if (urlArr.length > 1) {\n const queryStringParams = new HttpParams({ fromString: urlArr[1] });\n if (queryStringParams.has(ingoreKey)) {\n const queryString = queryStringParams.delete(ingoreKey).toString();\n url = queryString.length > 0 ? `${urlArr[0]}?${queryString}` : urlArr[0];\n ingored = true;\n }\n }\n if (ingored) {\n return next.handle(req.clone({ params, url }));\n }\n\n if (this.isAuth(options)) {\n req = this.setReq(req, options);\n } else {\n ToLogin(options, this.injector);\n // Interrupt Http request, so need to generate a new Observable\n const err$ = new Observable((observer: Observer<HttpEvent<NzSafeAny>>) => {\n const res = new HttpErrorResponse({\n url: req.url,\n headers: req.headers,\n status: 401,\n statusText: `来自 @delon/auth 的拦截,所请求URL未授权,若是登录API可加入 [url?_allow_anonymous=true] 来表示忽略校验,更多方法请参考: https://ng-alain.com/auth/getting-started#AlainAuthConfig\\nThe interception from @delon/auth, the requested URL is not authorized. If the login API can add [url?_allow_anonymous=true] to ignore the check, please refer to: https://ng-alain.com/auth/getting-started#AlainAuthConfig`\n });\n observer.error(res);\n });\n if (options.executeOtherInterceptors) {\n const interceptors = this.injector.get(HTTP_INTERCEPTORS, []);\n const lastInterceptors = interceptors.slice(interceptors.indexOf(this) + 1);\n if (lastInterceptors.length > 0) {\n const chain = lastInterceptors.reduceRight(\n (_next, _interceptor) => new HttpAuthInterceptorHandler(_next, _interceptor),\n {\n handle: (_: HttpRequest<NzSafeAny>) => err$\n }\n );\n return chain.handle(req);\n }\n }\n return err$;\n }\n return next.handle(req);\n }\n}\n","import type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport function urlBase64Decode(str: string): string {\n let output = str.replace(/-/g, '+').replace(/_/g, '/');\n switch (output.length % 4) {\n case 0: {\n break;\n }\n case 2: {\n output += '==';\n break;\n }\n case 3: {\n output += '=';\n break;\n }\n default: {\n throw new Error(`'atob' failed: The string to be decoded is not correctly encoded.`);\n }\n }\n return b64DecodeUnicode(output);\n}\n\nfunction b64decode(str: string): string {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n let output = '';\n\n str = String(str).replace(/=+$/, '');\n\n for (\n // initialize result and counters\n let bc = 0, bs: NzSafeAny, buffer: NzSafeAny, idx = 0;\n // get next character\n (buffer = str.charAt(idx++));\n // character found in table? initialize bit storage and add its ascii value;\n ~buffer &&\n ((bs = bc % 4 ? bs * 64 + buffer : buffer),\n // and if not first of each 4 characters,\n // convert the first 8 bits to one ascii character\n bc++ % 4)\n ? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6))))\n : 0\n ) {\n // try to find character in table (0-63, not found => -1)\n buffer = chars.indexOf(buffer);\n }\n return output;\n}\n\n// https://developer.mozilla.org/en/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem\nfunction b64DecodeUnicode(str: string): string {\n return decodeURIComponent(\n Array.prototype.map\n .call(b64decode(str), (c: string) => {\n return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`;\n })\n .join('')\n );\n}\n","import type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { ITokenModel } from '../interface';\nimport { urlBase64Decode } from './jwt.helper';\n\nexport interface JWT {\n /**\n * Issuerd\n */\n iss: string;\n /**\n * Issued At\n */\n iat: string;\n /**\n * Subject\n */\n sub: string;\n /**\n * Expiration Time\n */\n exp: number;\n /**\n * Audience\n */\n aud: string;\n /**\n * Not Before\n */\n nbf: string;\n /**\n * JWT ID\n */\n jti: string;\n\n [key: string]: NzSafeAny;\n [key: number]: NzSafeAny;\n}\n\nexport class JWTTokenModel implements ITokenModel {\n [key: string]: NzSafeAny;\n\n token: string | null | undefined;\n\n expired?: number;\n\n /**\n * 获取载荷信息\n */\n get payload(): JWT {\n const parts = (this.token || '').split('.');\n if (parts.length !== 3) throw new Error('JWT must have 3 parts');\n\n const decoded = urlBase64Decode(parts[1]);\n return JSON.parse(decoded);\n }\n\n /**\n * 获取过期时间戳(单位:ms)\n */\n get exp(): number | null {\n const decoded = this.payload;\n if (!decoded.hasOwnProperty('exp')) return null;\n const date = new Date(0);\n date.setUTCSeconds(decoded.exp);\n return date.valueOf();\n }\n\n /**\n * 检查Token是否过期,当`payload` 包含 `exp` 字段时有效,若无 `exp` 字段直接返回 `null`\n *\n * @param offsetSeconds 偏移量\n */\n isExpired(offsetSeconds: number = 0): boolean | null {\n const exp = this.exp;\n if (exp == null) return null;\n\n return !(exp > new Date().valueOf() + offsetSeconds * 1000);\n }\n}\n","import { HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { AlainAuthConfig } from '@delon/util/config';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { BaseInterceptor } from '../base.interceptor';\nimport { CheckJwt } from '../helper';\nimport { DA_SERVICE_TOKEN } from '../interface';\nimport { JWTTokenModel } from './jwt.model';\n\n/**\n * JWT 拦截器\n *\n * ```\n * // app.module.ts\n * { provide: HTTP_INTERCEPTORS, useClass: JWTInterceptor, multi: true}\n * ```\n */\n@Injectable()\nexport class JWTInterceptor extends BaseInterceptor {\n isAuth(options: AlainAuthConfig): boolean {\n this.model = this.injector.get(DA_SERVICE_TOKEN).get<JWTTokenModel>(JWTTokenModel);\n return CheckJwt(this.model as JWTTokenModel, options.token_exp_offset!);\n }\n\n setReq(req: HttpRequest<NzSafeAny>, _options: AlainAuthConfig): HttpRequest<NzSafeAny> {\n return req.clone({\n setHeaders: {\n Authorization: `Bearer ${this.model.token}`\n }\n });\n }\n}\n","import { Inject, Injectable, Injector } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n CanActivateChild,\n CanLoad,\n Route,\n RouterStateSnapshot,\n UrlSegment\n} from '@angular/router';\n\nimport { AlainAuthConfig } from '@delon/util/config';\n\nimport { CheckJwt, ToLogin } from '../helper';\nimport { DA_SERVICE_TOKEN, ITokenService } from '../interface';\nimport { JWTTokenModel } from './jwt.model';\n\n/**\n * JWT 路由守卫, [ACL Document](https://ng-alain.com/auth/guard).\n *\n * ```ts\n * data: {\n * path: 'home',\n * canActivate: [ JWTGuard ]\n * },\n * {\n * path: 'my',\n * canActivateChild: [JWTGuard],\n * children: [\n * { path: 'profile', component: MockComponent }\n * ],\n * },\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class JWTGuard implements CanActivate, CanActivateChild, CanLoad {\n private url: string | undefined;\n\n private get cog(): AlainAuthConfig {\n return this.srv.options;\n }\n\n constructor(@Inject(DA_SERVICE_TOKEN) private srv: ITokenService, private injector: Injector) {}\n\n private process(): boolean {\n const res = CheckJwt(this.srv.get<JWTTokenModel>(JWTTokenModel), this.cog.token_exp_offset!);\n if (!res) {\n ToLogin(this.cog, this.injector, this.url);\n }\n return res;\n }\n\n // lazy loading\n canLoad(route: Route, _segments: UrlSegment[]): boolean {\n this.url = route.path;\n return this.process();\n }\n // all children route\n canActivateChild(_childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n this.url = state.url;\n return this.process();\n }\n // route\n canActivate(_route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n this.url = state.url;\n return this.process();\n }\n}\n","import type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { ITokenModel } from '../interface';\n\nexport class SimpleTokenModel implements ITokenModel {\n [key: string]: NzSafeAny;\n\n token: string;\n\n expired?: number;\n}\n","import { HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { AlainAuthConfig } from '@delon/util/config';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { BaseInterceptor } from '../base.interceptor';\nimport { CheckSimple } from '../helper';\nimport { DA_SERVICE_TOKEN } from '../interface';\nimport { SimpleTokenModel } from './simple.model';\n\n/**\n * Simple 拦截器\n *\n * ```\n * // app.module.ts\n * { provide: HTTP_INTERCEPTORS, useClass: SimpleInterceptor, multi: true}\n * ```\n */\n@Injectable()\nexport class SimpleInterceptor extends BaseInterceptor {\n isAuth(_options: AlainAuthConfig): boolean {\n this.model = this.injector.get(DA_SERVICE_TOKEN).get() as SimpleTokenModel;\n return CheckSimple(this.model as SimpleTokenModel);\n }\n\n setReq(req: HttpRequest<NzSafeAny>, options: AlainAuthConfig): HttpRequest<NzSafeAny> {\n const { token_send_template, token_send_key } = options;\n const token = token_send_template!.replace(/\\$\\{([\\w]+)\\}/g, (_: string, g) => this.model[g]);\n switch (options.token_send_place) {\n case 'header':\n const obj: NzSafeAny = {};\n obj[token_send_key!] = token;\n req = req.clone({\n setHeaders: obj\n });\n break;\n case 'body':\n const body = req.body || {};\n body[token_send_key!] = token;\n req = req.clone({\n body\n });\n break;\n case 'url':\n req = req.clone({\n params: req.params.append(token_send_key!, token)\n });\n break;\n }\n return req;\n }\n}\n","import { Inject, Injectable, Injector } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n CanActivateChild,\n CanLoad,\n Route,\n RouterStateSnapshot,\n UrlSegment\n} from '@angular/router';\n\nimport { AlainAuthConfig } from '@delon/util/config';\n\nimport { CheckSimple, ToLogin } from '../helper';\nimport { DA_SERVICE_TOKEN, ITokenService } from '../interface';\nimport { SimpleTokenModel } from './simple.model';\n\n/**\n * Simple 路由守卫, [ACL Document](https://ng-alain.com/auth/guard).\n *\n * ```ts\n * data: {\n * path: 'home',\n * canActivate: [ SimpleGuard ]\n * },\n * {\n * path: 'my',\n * canActivateChild: [SimpleGuard],\n * children: [\n * { path: 'profile', component: MockComponent }\n * ],\n * },\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class SimpleGuard implements CanActivate, CanActivateChild, CanLoad {\n private url?: string;\n\n private get cog(): AlainAuthConfig {\n return this.srv.options;\n }\n\n constructor(@Inject(DA_SERVICE_TOKEN) private srv: ITokenService, private injector: Injector) {}\n\n private process(): boolean {\n const res = CheckSimple(this.srv.get() as SimpleTokenModel);\n if (!res) {\n ToLogin(this.cog, this.injector, this.url);\n }\n return res;\n }\n\n // lazy loading\n canLoad(route: Route, _segments: UrlSegment[]): boolean {\n this.url = route.path;\n return this.process();\n }\n // all children route\n canActivateChild(_childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n this.url = state.url;\n return this.process();\n }\n // route\n canActivate(_route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n this.url = state.url;\n return this.process();\n }\n}\n","import { NgModule } from '@angular/core';\n\n@NgModule({})\nexport class DelonAuthModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["InjectionToken","inject","AlainConfigService","Subject","BehaviorSubject","share","interval","map","filter","Injectable","Inject","Observable","DOCUMENT","Router","router","HttpParams","HttpErrorResponse","HTTP_INTERCEPTORS","Injector","Optional","NgModule"],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
export class DelonAuthModule {
|
|
3
|
-
}
|
|
4
|
-
DelonAuthModule.decorators = [
|
|
5
|
-
{ type: NgModule, args: [{},] }
|
|
6
|
-
];
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pDLE1BQU0sT0FBTyxlQUFlOzs7WUFEM0IsUUFBUSxTQUFDLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ATmdNb2R1bGUoe30pXG5leHBvcnQgY2xhc3MgRGVsb25BdXRoTW9kdWxlIHt9XG4iXX0=
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from '@angular/common';
|
|
2
|
-
import { Inject, Injectable } from '@angular/core';
|
|
3
|
-
import { Router } from '@angular/router';
|
|
4
|
-
import { Observable } from 'rxjs';
|
|
5
|
-
import { DA_SERVICE_TOKEN } from '../token/interface';
|
|
6
|
-
const OPENTYPE = '_delonAuthSocialType';
|
|
7
|
-
const HREFCALLBACK = '_delonAuthSocialCallbackByHref';
|
|
8
|
-
export class SocialService {
|
|
9
|
-
constructor(tokenService, doc, router) {
|
|
10
|
-
this.tokenService = tokenService;
|
|
11
|
-
this.doc = doc;
|
|
12
|
-
this.router = router;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* 跳转至登录页,若为 `type=window` 时,返回值是 `Observable<ITokenModel>`
|
|
16
|
-
*
|
|
17
|
-
* @param url 获取授权地址
|
|
18
|
-
* @param callback 当 `type=href` 成功时的回调路由地址
|
|
19
|
-
* @param options.type 打开方式,默认 `window`
|
|
20
|
-
* @param options.windowFeatures 等同 `window.open` 的 `features` 参数值
|
|
21
|
-
*/
|
|
22
|
-
login(url, callback = '/', options = {}) {
|
|
23
|
-
options = Object.assign({ type: 'window', windowFeatures: 'location=yes,height=570,width=520,scrollbars=yes,status=yes' }, options);
|
|
24
|
-
localStorage.setItem(OPENTYPE, options.type);
|
|
25
|
-
localStorage.setItem(HREFCALLBACK, callback);
|
|
26
|
-
if (options.type === 'href') {
|
|
27
|
-
this.doc.location.href = url;
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
this._win = window.open(url, '_blank', options.windowFeatures);
|
|
31
|
-
this._winTime = setInterval(() => {
|
|
32
|
-
if (this._win && this._win.closed) {
|
|
33
|
-
this.ngOnDestroy();
|
|
34
|
-
let model = this.tokenService.get();
|
|
35
|
-
if (model && !model.token)
|
|
36
|
-
model = null;
|
|
37
|
-
// 触发变更通知
|
|
38
|
-
if (model) {
|
|
39
|
-
this.tokenService.set(model);
|
|
40
|
-
}
|
|
41
|
-
this.observer.next(model);
|
|
42
|
-
this.observer.complete();
|
|
43
|
-
}
|
|
44
|
-
}, 100);
|
|
45
|
-
return new Observable((observer) => {
|
|
46
|
-
this.observer = observer;
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* 授权成功后的回调处理
|
|
51
|
-
*
|
|
52
|
-
* @param rawData 指定回调认证信息,为空时从根据当前URL解析
|
|
53
|
-
*/
|
|
54
|
-
callback(rawData) {
|
|
55
|
-
// from uri
|
|
56
|
-
if (!rawData && this.router.url.indexOf('?') === -1) {
|
|
57
|
-
throw new Error(`url muse contain a ?`);
|
|
58
|
-
}
|
|
59
|
-
// parse
|
|
60
|
-
let data = { token: `` };
|
|
61
|
-
if (typeof rawData === 'string') {
|
|
62
|
-
const rightUrl = rawData.split('?')[1].split('#')[0];
|
|
63
|
-
data = this.router.parseUrl(`./?${rightUrl}`).queryParams;
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
data = rawData;
|
|
67
|
-
}
|
|
68
|
-
if (!data || !data.token)
|
|
69
|
-
throw new Error(`invalide token data`);
|
|
70
|
-
this.tokenService.set(data);
|
|
71
|
-
const url = localStorage.getItem(HREFCALLBACK) || '/';
|
|
72
|
-
localStorage.removeItem(HREFCALLBACK);
|
|
73
|
-
const type = localStorage.getItem(OPENTYPE);
|
|
74
|
-
localStorage.removeItem(OPENTYPE);
|
|
75
|
-
if (type === 'window') {
|
|
76
|
-
window.close();
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
this.router.navigateByUrl(url);
|
|
80
|
-
}
|
|
81
|
-
return data;
|
|
82
|
-
}
|
|
83
|
-
ngOnDestroy() {
|
|
84
|
-
clearInterval(this._winTime);
|
|
85
|
-
this._winTime = null;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
SocialService.decorators = [
|
|
89
|
-
{ type: Injectable }
|
|
90
|
-
];
|
|
91
|
-
SocialService.ctorParameters = () => [
|
|
92
|
-
{ type: undefined, decorators: [{ type: Inject, args: [DA_SERVICE_TOKEN,] }] },
|
|
93
|
-
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
|
|
94
|
-
{ type: Router }
|
|
95
|
-
];
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29jaWFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9zb2NpYWwvc29jaWFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBSTVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBOEIsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRixNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQztBQUN4QyxNQUFNLFlBQVksR0FBRyxnQ0FBZ0MsQ0FBQztBQUt0RCxNQUFNLE9BQU8sYUFBYTtJQUt4QixZQUNvQyxZQUEyQixFQUNuQyxHQUFjLEVBQ2hDLE1BQWM7UUFGWSxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUNuQyxRQUFHLEdBQUgsR0FBRyxDQUFXO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDckIsQ0FBQztJQWdDSjs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUNILEdBQVcsRUFDWCxXQUFtQixHQUFHLEVBQ3RCLFVBR0ksRUFBRTtRQUVOLE9BQU8sbUJBQ0wsSUFBSSxFQUFFLFFBQVEsRUFDZCxjQUFjLEVBQUUsNkRBQTZELElBQzFFLE9BQU8sQ0FDWCxDQUFDO1FBQ0YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUssQ0FBQyxDQUFDO1FBQzlDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDM0IsSUFBSSxD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Q0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDOzs7WUFsSUYsVUFBVTs7OzRDQU9OLE1BQU0sU0FBQyxnQkFBZ0I7NENBQ3ZCLE1BQU0sU0FBQyxRQUFRO1lBcEJYLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB0eXBlIHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcblxuaW1wb3J0IHsgREFfU0VSVklDRV9UT0tFTiwgSVRva2VuTW9kZWwsIElUb2tlblNlcnZpY2UgfSBmcm9tICcuLi90b2tlbi9pbnRlcmZhY2UnO1xuXG5jb25zdCBPUEVOVFlQRSA9ICdfZGVsb25BdXRoU29jaWFsVHlwZSc7XG5jb25zdCBIUkVGQ0FMTEJBQ0sgPSAnX2RlbG9uQXV0aFNvY2lhbENhbGxiYWNrQnlIcmVmJztcblxuZXhwb3J0IHR5cGUgU29jaWFsT3BlblR5cGUgPSAnaHJlZicgfCAnd2luZG93JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNvY2lhbFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF93aW46IFdpbmRvdyB8IG51bGw7XG4gIHByaXZhdGUgX3dpblRpbWU6IE56U2FmZUFueTtcbiAgcHJpdmF0ZSBvYnNlcnZlcjogT2JzZXJ2ZXI8SVRva2VuTW9kZWwgfCBudWxsPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERBX1NFUlZJQ0VfVE9LRU4pIHByaXZhdGUgdG9rZW5TZXJ2aWNlOiBJVG9rZW5TZXJ2aWNlLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jOiBOelNhZmVBbnksXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHt9XG5cbiAgLyoqXG4gICAqIOS9v+eUqOeql+S9k+aJk+W8gOaOiOadg+mhte+8jOi/lOWbnuWAvOaYryBgT2JzZXJ2YWJsZTxJVG9rZW5Nb2RlbD5gIOeUqOS6juiuoumYheaOiOadg+WQjui/lOWbnueahOe7k+aenFxuICAgKlxuICAgKiBAcGFyYW0gdXJsIOiOt+WPluaOiOadg+WcsOWdgFxuICAgKiBAcGFyYW0gY2FsbGJhY2sg5Zue6LCD6Lev55Sx5Zyw5Z2AXG4gICAqIEBwYXJhbSBvcHRpb25zLndpbmRvd0ZlYXR1cmVzIOetieWQjCBgd2luZG93Lm9wZW5gIOeahCBgZmVhdHVyZXNgIOWPguaVsOWAvFxuICAgKi9cbiAgbG9naW4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s/OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHR5cGU/OiAnd2luZG93JztcbiAgICAgIHdpbmRvd0ZlYXR1cmVzPzogc3RyaW5nO1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxJVG9rZW5Nb2RlbD47XG5cbiAgLyoqXG4gICAqIOi3s+i9rOiHs+aOiOadg+mhtVxuICAgKlxuICAgKiBAcGFyYW0gdXJsIOiOt+WPluaOiOadg+WcsOWdgFxuICAgKiBAcGFyYW0gY2FsbGJhY2sg5Zue6LCD6Lev55Sx5Zyw5Z2AXG4gICAqL1xuICBsb2dpbihcbiAgICB1cmw6IHN0cmluZyxcbiAgICBjYWxsYmFjaz86IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgdHlwZT86ICdocmVmJztcbiAgICB9XG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIOi3s+i9rOiHs+eZu+W9lemhte+8jOiLpeS4uiBgdHlwZT13aW5kb3dgIOaXtu+8jOi/lOWbnuWAvOaYryBgT2JzZXJ2YWJsZTxJVG9rZW5Nb2RlbD5gXG4gICAqXG4gICAqIEBwYXJhbSB1cmwg6I635Y+W5o6I5p2D5Zyw5Z2AXG4gICAqIEBwYXJhbSBjYWxsYmFjayDlvZMgYHR5cGU9aHJlZmAg5oiQ5Yqf5pe255qE5Zue6LCD6Lev55Sx5Zyw5Z2AXG4gICAqIEBwYXJhbSBvcHRpb25zLnR5cGUg5omT5byA5pa55byP77yM6buY6K6kIGB3aW5kb3dgXG4gICAqIEBwYXJhbSBvcHRpb25zLndpbmRvd0ZlYXR1cmVzIOetieWQjCBgd2luZG93Lm9wZW5gIOeahCBgZmVhdHVyZXNgIOWPguaVsOWAvFxuICAgKi9cbiAgbG9naW4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IHN0cmluZyA9ICcvJyxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlPzogU29jaWFsT3BlblR5cGU7XG4gICAgICB3aW5kb3dGZWF0dXJlcz86IHN0cmluZztcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxJVG9rZW5Nb2RlbCB8IG51bGw+IHwgdm9pZCB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIHR5cGU6ICd3aW5kb3cnLFxuICAgICAgd2luZG93RmVhdHVyZXM6ICdsb2NhdGlvbj15ZXMsaGVpZ2h0PTU3MCx3aWR0aD01MjAsc2Nyb2xsYmFycz15ZXMsc3RhdHVzPXllcycsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShPUEVOVFlQRSwgb3B0aW9ucy50eXBlISk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oSFJFRkNBTExCQUNLLCBjYWxsYmFjayk7XG4gICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ2hyZWYnKSB7XG4gICAgICB0aGlzLmRvYy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3dpbiA9IHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycsIG9wdGlvbnMud2luZG93RmVhdHVyZXMpO1xuICAgIHRoaXMuX3dpblRpbWUgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fd2luICYmIHRoaXMuX3dpbi5jbG9zZWQpIHtcbiAgICAgICAgdGhpcy5uZ09uRGVzdHJveSgpO1xuXG4gICAgICAgIGxldCBtb2RlbCA9IHRoaXMudG9rZW5TZXJ2aWNlLmdldCgpO1xuICAgICAgICBpZiAobW9kZWwgJiYgIW1vZGVsLnRva2VuKSBtb2RlbCA9IG51bGw7XG5cbiAgICAgICAgLy8g6Kem5Y+R5Y+Y5pu06YCa55+lXG4gICAgICAgIGlmIChtb2RlbCkge1xuICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldChtb2RlbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9ic2VydmVyLm5leHQobW9kZWwpO1xuICAgICAgICB0aGlzLm9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxJVG9rZW5Nb2RlbCB8IG51bGw+KSA9PiB7XG4gICAgICB0aGlzLm9ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5o6I5p2D5oiQ5Yqf5ZCO55qE5Zue6LCD5aSE55CGXG4gICAqXG4gICAqIEBwYXJhbSByYXdEYXRhIOaMh+WumuWbnuiwg+iupOivgeS/oeaBr++8jOS4uuepuuaXtuS7juagueaNruW9k+WJjVVSTOino+aekFxuICAgKi9cbiAgY2FsbGJhY2socmF3RGF0YT86IElUb2tlbk1vZGVsIHwgc3RyaW5nIHwgbnVsbCk6IElUb2tlbk1vZGVsIHtcbiAgICAvLyBmcm9tIHVyaVxuICAgIGlmICghcmF3RGF0YSAmJiB0aGlzLnJvdXRlci51cmwuaW5kZXhPZignPycpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1cmwgbXVzZSBjb250YWluIGEgP2ApO1xuICAgIH1cbiAgICAvLyBwYXJzZVxuICAgIGxldCBkYXRhOiBJVG9rZW5Nb2RlbCA9IHsgdG9rZW46IGBgIH07XG4gICAgaWYgKHR5cGVvZiByYXdEYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcmlnaHRVcmwgPSByYXdEYXRhLnNwbGl0KCc/JylbMV0uc3BsaXQoJyMnKVswXTtcbiAgICAgIGRhdGEgPSB0aGlzLnJvdXRlci5wYXJzZVVybChgLi8/JHtyaWdodFVybH1gKS5xdWVyeVBhcmFtcyBhcyBJVG9rZW5Nb2RlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IHJhd0RhdGEgYXMgSVRva2VuTW9kZWw7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhIHx8ICFkYXRhLnRva2VuKSB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWRlIHRva2VuIGRhdGFgKTtcbiAgICB0aGlzLnRva2VuU2VydmljZS5zZXQoZGF0YSk7XG5cbiAgICBjb25zdCB1cmwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShIUkVGQ0FMTEJBQ0spIHx8ICcvJztcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShIUkVGQ0FMTEJBQ0spO1xuICAgIGNvbnN0IHR5cGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShPUEVOVFlQRSk7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oT1BFTlRZUEUpO1xuICAgIGlmICh0eXBlID09PSAnd2luZG93Jykge1xuICAgICAgd2luZG93LmNsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fd2luVGltZSk7XG4gICAgdGhpcy5fd2luVGltZSA9IG51bGw7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { HttpErrorResponse, HttpParams, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
2
|
-
import { Injectable, Injector, Optional } from '@angular/core';
|
|
3
|
-
import { Observable } from 'rxjs';
|
|
4
|
-
import { AlainConfigService } from '@delon/util/config';
|
|
5
|
-
import { mergeConfig } from '../auth.config';
|
|
6
|
-
import { ToLogin } from './helper';
|
|
7
|
-
class HttpAuthInterceptorHandler {
|
|
8
|
-
constructor(next, interceptor) {
|
|
9
|
-
this.next = next;
|
|
10
|
-
this.interceptor = interceptor;
|
|
11
|
-
}
|
|
12
|
-
handle(req) {
|
|
13
|
-
return this.interceptor.intercept(req, this.next);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export class BaseInterceptor {
|
|
17
|
-
constructor(injector) {
|
|
18
|
-
this.injector = injector;
|
|
19
|
-
}
|
|
20
|
-
intercept(req, next) {
|
|
21
|
-
const options = mergeConfig(this.injector.get(AlainConfigService));
|
|
22
|
-
if (Array.isArray(options.ignores)) {
|
|
23
|
-
for (const item of options.ignores) {
|
|
24
|
-
if (item.test(req.url))
|
|
25
|
-
return next.handle(req);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
const ingoreKey = options.allow_anonymous_key;
|
|
29
|
-
let ingored = false;
|
|
30
|
-
let params = req.params;
|
|
31
|
-
let url = req.url;
|
|
32
|
-
if (req.params.has(ingoreKey)) {
|
|
33
|
-
params = req.params.delete(ingoreKey);
|
|
34
|
-
ingored = true;
|
|
35
|
-
}
|
|
36
|
-
const urlArr = req.url.split('?');
|
|
37
|
-
if (urlArr.length > 1) {
|
|
38
|
-
const queryStringParams = new HttpParams({ fromString: urlArr[1] });
|
|
39
|
-
if (queryStringParams.has(ingoreKey)) {
|
|
40
|
-
const queryString = queryStringParams.delete(ingoreKey).toString();
|
|
41
|
-
url = queryString.length > 0 ? `${urlArr[0]}?${queryString}` : urlArr[0];
|
|
42
|
-
ingored = true;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
if (ingored) {
|
|
46
|
-
return next.handle(req.clone({ params, url }));
|
|
47
|
-
}
|
|
48
|
-
if (this.isAuth(options)) {
|
|
49
|
-
req = this.setReq(req, options);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
ToLogin(options, this.injector);
|
|
53
|
-
// Interrupt Http request, so need to generate a new Observable
|
|
54
|
-
const err$ = new Observable((observer) => {
|
|
55
|
-
const res = new HttpErrorResponse({
|
|
56
|
-
url: req.url,
|
|
57
|
-
headers: req.headers,
|
|
58
|
-
status: 401,
|
|
59
|
-
statusText: `来自 @delon/auth 的拦截,所请求URL未授权,若是登录API可加入 [url?_allow_anonymous=true] 来表示忽略校验,更多方法请参考: https://ng-alain.com/auth/getting-started#AlainAuthConfig\nThe interception from @delon/auth, the requested URL is not authorized. If the login API can add [url?_allow_anonymous=true] to ignore the check, please refer to: https://ng-alain.com/auth/getting-started#AlainAuthConfig`
|
|
60
|
-
});
|
|
61
|
-
observer.error(res);
|
|
62
|
-
});
|
|
63
|
-
if (options.executeOtherInterceptors) {
|
|
64
|
-
const interceptors = this.injector.get(HTTP_INTERCEPTORS, []);
|
|
65
|
-
const lastInterceptors = interceptors.slice(interceptors.indexOf(this) + 1);
|
|
66
|
-
if (lastInterceptors.length > 0) {
|
|
67
|
-
const chain = lastInterceptors.reduceRight((_next, _interceptor) => new HttpAuthInterceptorHandler(_next, _interceptor), {
|
|
68
|
-
handle: (_) => err$
|
|
69
|
-
});
|
|
70
|
-
return chain.handle(req);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return err$;
|
|
74
|
-
}
|
|
75
|
-
return next.handle(req);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
BaseInterceptor.decorators = [
|
|
79
|
-
{ type: Injectable }
|
|
80
|
-
];
|
|
81
|
-
BaseInterceptor.ctorParameters = () => [
|
|
82
|
-
{ type: Injector, decorators: [{ type: Optional }] }
|
|
83
|
-
];
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgvc3JjL3Rva2VuL2Jhc2UuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUlqQixVQUFVLEVBRVYsaUJBQWlCLEVBQ2xCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUFtQixrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBR25DLE1BQU0sMEJBQTBCO0lBQzlCLFlBQW9CLElBQWlCLEVBQVUsV0FBNEI7UUFBdkQsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtJQUFHLENBQUM7SUFFL0UsTUFBTSxDQUFDLEdBQTJCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFHRCxNQUFNLE9BQWdCLGVBQWU7SUFDbkMsWUFBa0MsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFHLENBQUM7SUFReEQsU0FBUyxDQUFDLEdBQTJCLEVBQUUsSUFBaUI7UUFDdEQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENB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LEVBQUU7b0JBQy9CLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FDeEMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLDBCQUEwQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsRUFDNUU7d0JBQ0UsTUFBTSxFQUFFLENBQUMsQ0FBeUIsRUFBRSxFQUFFLENBQUMsSUFBSTtxQkFDNUMsQ0FDRixDQUFDO29CQUNGLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDMUI7YUFDRjtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQzs7O1lBckVGLFVBQVU7OztZQWxCVSxRQUFRLHVCQW9CZCxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBFdmVudCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBJbnRlcmNlcHRvcixcbiAgSHR0cFBhcmFtcyxcbiAgSHR0cFJlcXVlc3QsXG4gIEhUVFBfSU5URVJDRVBUT1JTXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQWxhaW5BdXRoQ29uZmlnLCBBbGFpbkNvbmZpZ1NlcnZpY2UgfSBmcm9tICdAZGVsb24vdXRpbC9jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQgeyBtZXJnZUNvbmZpZyB9IGZyb20gJy4uL2F1dGguY29uZmlnJztcbmltcG9ydCB7IFRvTG9naW4gfSBmcm9tICcuL2hlbHBlcic7XG5pbXBvcnQgeyBJVG9rZW5Nb2RlbCB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY2xhc3MgSHR0cEF1dGhJbnRlcmNlcHRvckhhbmRsZXIgaW1wbGVtZW50cyBIdHRwSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmV4dDogSHR0cEhhbmRsZXIsIHByaXZhdGUgaW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvcikge31cblxuICBoYW5kbGUocmVxOiBIdHRwUmVxdWVzdDxOelNhZmVBbnk+KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8TnpTYWZlQW55Pj4ge1xuICAgIHJldHVybiB0aGlzLmludGVyY2VwdG9yLmludGVyY2VwdChyZXEsIHRoaXMubmV4dCk7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgcHJvdGVjdGVkIG1vZGVsOiBJVG9rZW5Nb2RlbDtcblxuICBhYnN0cmFjdCBpc0F1dGgob3B0aW9uczogQWxhaW5BdXRoQ29uZmlnKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBzZXRSZXEocmVxOiBIdHRwUmVxdWVzdDxOelNhZmVBbnk+LCBvcHRpb25zOiBBbGFpbkF1dGhDb25maWcpOiBIdHRwUmVxdWVzdDxOelNhZmVBbnk+O1xuXG4gIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PE56U2FmZUFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8TnpTYWZlQW55Pj4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBtZXJnZUNvbmZpZyh0aGlzLmluamVjdG9yLmdldChBbGFpbkNvbmZpZ1NlcnZpY2UpKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmlnbm9yZXMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb3B0aW9ucy5pZ25vcmVzKSB7XG4gICAgICAgIGlmIChpdGVtLnRlc3QocmVxLnVybCkpIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGluZ29yZUtleSA9IG9wdGlvbnMuYWxsb3dfYW5vbnltb3VzX2tleSE7XG4gICAgbGV0IGluZ29yZWQgPSBmYWxzZTtcbiAgICBsZXQgcGFyYW1zID0gcmVxLnBhcmFtcztcbiAgICBsZXQgdXJsID0gcmVxLnVybDtcbiAgICBpZiAocmVxLnBhcmFtcy5oYXMoaW5nb3JlS2V5KSkge1xuICAgICAgcGFyYW1zID0gcmVxLnBhcmFtcy5kZWxldGUoaW5nb3JlS2V5KTtcbiAgICAgIGluZ29yZWQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB1cmxBcnIgPSByZXEudXJsLnNwbGl0KCc/Jyk7XG4gICAgaWYgKHVybEFyci5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZ1BhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKHsgZnJvbVN0cmluZzogdXJsQXJyWzFdIH0pO1xuICAgICAgaWYgKHF1ZXJ5U3RyaW5nUGFyYW1zLmhhcyhpbmdvcmVLZXkpKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmdQYXJhbXMuZGVsZXRlKGluZ29yZUtleSkudG9TdHJpbmcoKTtcbiAgICAgICAgdXJsID0gcXVlcnlTdHJpbmcubGVuZ3RoID4gMCA/IGAke3VybEFyclswXX0/JHtxdWVyeVN0cmluZ31gIDogdXJsQXJyWzBdO1xuICAgICAgICBpbmdvcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluZ29yZWQpIHtcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEuY2xvbmUoeyBwYXJhbXMsIHVybCB9KSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNBdXRoKG9wdGlvbnMpKSB7XG4gICAgICByZXEgPSB0aGlzLnNldFJlcShyZXEsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBUb0xvZ2luKG9wdGlvbnMsIHRoaXMuaW5qZWN0b3IpO1xuICAgICAgLy8gSW50ZXJydXB0IEh0dHAgcmVxdWVzdCwgc28gbmVlZCB0byBnZW5lcmF0ZSBhIG5ldyBPYnNlcnZhYmxlXG4gICAgICBjb25zdCBlcnIkID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxIdHRwRXZlbnQ8TnpTYWZlQW55Pj4pID0+IHtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtcbiAgICAgICAgICB1cmw6IHJlcS51cmwsXG4gICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgICAgc3RhdHVzOiA0MDEsXG4gICAgICAgICAgc3RhdHVzVGV4dDogYOadpeiHqiBAZGVsb24vYXV0aCDnmoTmi6bmiKrvvIzmiYDor7fmsYJVUkzmnKrmjojmnYPvvIzoi6XmmK/nmbvlvZVBUEnlj6/liqDlhaUgW3VybD9fYWxsb3dfYW5vbnltb3VzPXRydWVdIOadpeihqOekuuW/veeVpeagoemqjO+8jOabtOWkmuaWueazleivt+WPguiAg++8miBodHRwczovL25nLWFsYWluLmNvbS9hdXRoL2dldHRpbmctc3RhcnRlZCNBbGFpbkF1dGhDb25maWdcXG5UaGUgaW50ZXJjZXB0aW9uIGZyb20gQGRlbG9uL2F1dGgsIHRoZSByZXF1ZXN0ZWQgVVJMIGlzIG5vdCBhdXRob3JpemVkLiBJZiB0aGUgbG9naW4gQVBJIGNhbiBhZGQgW3VybD9fYWxsb3dfYW5vbnltb3VzPXRydWVdIHRvIGlnbm9yZSB0aGUgY2hlY2ssIHBsZWFzZSByZWZlciB0bzogaHR0cHM6Ly9uZy1hbGFpbi5jb20vYXV0aC9nZXR0aW5nLXN0YXJ0ZWQjQWxhaW5BdXRoQ29uZmlnYFxuICAgICAgICB9KTtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IocmVzKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG9wdGlvbnMuZXhlY3V0ZU90aGVySW50ZXJjZXB0b3JzKSB7XG4gICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IHRoaXMuaW5qZWN0b3IuZ2V0KEhUVFBfSU5URVJDRVBUT1JTLCBbXSk7XG4gICAgICAgIGNvbnN0IGxhc3RJbnRlcmNlcHRvcnMgPSBpbnRlcmNlcHRvcnMuc2xpY2UoaW50ZXJjZXB0b3JzLmluZGV4T2YodGhpcykgKyAxKTtcbiAgICAgICAgaWYgKGxhc3RJbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGNoYWluID0gbGFzdEludGVyY2VwdG9ycy5yZWR1Y2VSaWdodChcbiAgICAgICAgICAgIChfbmV4dCwgX2ludGVyY2VwdG9yKSA9PiBuZXcgSHR0cEF1dGhJbnRlcmNlcHRvckhhbmRsZXIoX25leHQsIF9pbnRlcmNlcHRvciksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGhhbmRsZTogKF86IEh0dHBSZXF1ZXN0PE56U2FmZUFueT4pID0+IGVyciRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBjaGFpbi5oYW5kbGUocmVxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVyciQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from '@angular/common';
|
|
2
|
-
import { Router } from '@angular/router';
|
|
3
|
-
import { DA_SERVICE_TOKEN } from './interface';
|
|
4
|
-
export function CheckSimple(model) {
|
|
5
|
-
return model != null && typeof model.token === 'string' && model.token.length > 0;
|
|
6
|
-
}
|
|
7
|
-
export function CheckJwt(model, offset) {
|
|
8
|
-
try {
|
|
9
|
-
return model != null && !!model.token && !model.isExpired(offset);
|
|
10
|
-
}
|
|
11
|
-
catch (err) {
|
|
12
|
-
console.warn(`${err.message}, jump to login_url`);
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export function ToLogin(options, injector, url) {
|
|
17
|
-
const router = injector.get(Router);
|
|
18
|
-
injector.get(DA_SERVICE_TOKEN).referrer.url = url || router.url;
|
|
19
|
-
if (options.token_invalid_redirect === true) {
|
|
20
|
-
setTimeout(() => {
|
|
21
|
-
if (/^https?:\/\//g.test(options.login_url)) {
|
|
22
|
-
injector.get(DOCUMENT).location.href = options.login_url;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
router.navigate([options.login_url]);
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvdG9rZW4vaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJekMsT0FBTyxFQUFFLGdCQUFnQixFQUFpQixNQUFNLGFBQWEsQ0FBQztBQUk5RCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQThCO0lBQ3hELE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNwRixDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFvQixFQUFFLE1BQWM7SUFDM0QsSUFBSTtRQUNGLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbkU7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUF3QixFQUFFLFFBQWtCLEVBQUUsR0FBWTtJQUNoRixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFTLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQW1CLENBQUMsUUFBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNwRixJQUFJLE9BQU8sQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLEVBQUU7UUFDM0MsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBVSxDQUFDLEVBQUU7Z0JBQzVDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsU0FBbUIsQ0FBQzthQUNwRTtpQkFBTTtnQkFDTCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDdEM7UUFDSCxDQUFDLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBBbGFpbkF1dGhDb25maWcgfSBmcm9tICdAZGVsb24vdXRpbC9jb25maWcnO1xuXG5pbXBvcnQgeyBEQV9TRVJWSUNFX1RPS0VOLCBJVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSldUVG9rZW5Nb2RlbCB9IGZyb20gJy4vand0L2p3dC5tb2RlbCc7XG5pbXBvcnQgeyBTaW1wbGVUb2tlbk1vZGVsIH0gZnJvbSAnLi9zaW1wbGUvc2ltcGxlLm1vZGVsJztcblxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrU2ltcGxlKG1vZGVsOiBTaW1wbGVUb2tlbk1vZGVsIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbW9kZWwgIT0gbnVsbCAmJiB0eXBlb2YgbW9kZWwudG9rZW4gPT09ICdzdHJpbmcnICYmIG1vZGVsLnRva2VuLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDaGVja0p3dChtb2RlbDogSldUVG9rZW5Nb2RlbCwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbW9kZWwgIT0gbnVsbCAmJiAhIW1vZGVsLnRva2VuICYmICFtb2RlbC5pc0V4cGlyZWQob2Zmc2V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS53YXJuKGAke2Vyci5tZXNzYWdlfSwganVtcCB0byBsb2dpbl91cmxgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRvTG9naW4ob3B0aW9uczogQWxhaW5BdXRoQ29uZmlnLCBpbmplY3RvcjogSW5qZWN0b3IsIHVybD86IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCByb3V0ZXIgPSBpbmplY3Rvci5nZXQ8Um91dGVyPihSb3V0ZXIpO1xuICAoaW5qZWN0b3IuZ2V0KERBX1NFUlZJQ0VfVE9LRU4pIGFzIElUb2tlblNlcnZpY2UpLnJlZmVycmVyIS51cmwgPSB1cmwgfHwgcm91dGVyLnVybDtcbiAgaWYgKG9wdGlvbnMudG9rZW5faW52YWxpZF9yZWRpcmVjdCA9PT0gdHJ1ZSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKC9eaHR0cHM/OlxcL1xcLy9nLnRlc3Qob3B0aW9ucy5sb2dpbl91cmwhKSkge1xuICAgICAgICBpbmplY3Rvci5nZXQoRE9DVU1FTlQpLmxvY2F0aW9uLmhyZWYgPSBvcHRpb25zLmxvZ2luX3VybCBhcyBzdHJpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3V0ZXIubmF2aWdhdGUoW29wdGlvbnMubG9naW5fdXJsXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, Injector } from '@angular/core';
|
|
2
|
-
import { CheckJwt, ToLogin } from '../helper';
|
|
3
|
-
import { DA_SERVICE_TOKEN } from '../interface';
|
|
4
|
-
import { JWTTokenModel } from './jwt.model';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../interface";
|
|
7
|
-
/**
|
|
8
|
-
* JWT 路由守卫, [ACL Document](https://ng-alain.com/auth/guard).
|
|
9
|
-
*
|
|
10
|
-
* ```ts
|
|
11
|
-
* data: {
|
|
12
|
-
* path: 'home',
|
|
13
|
-
* canActivate: [ JWTGuard ]
|
|
14
|
-
* },
|
|
15
|
-
* {
|
|
16
|
-
* path: 'my',
|
|
17
|
-
* canActivateChild: [JWTGuard],
|
|
18
|
-
* children: [
|
|
19
|
-
* { path: 'profile', component: MockComponent }
|
|
20
|
-
* ],
|
|
21
|
-
* },
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
export class JWTGuard {
|
|
25
|
-
constructor(srv, injector) {
|
|
26
|
-
this.srv = srv;
|
|
27
|
-
this.injector = injector;
|
|
28
|
-
}
|
|
29
|
-
get cog() {
|
|
30
|
-
return this.srv.options;
|
|
31
|
-
}
|
|
32
|
-
process() {
|
|
33
|
-
const res = CheckJwt(this.srv.get(JWTTokenModel), this.cog.token_exp_offset);
|
|
34
|
-
if (!res) {
|
|
35
|
-
ToLogin(this.cog, this.injector, this.url);
|
|
36
|
-
}
|
|
37
|
-
return res;
|
|
38
|
-
}
|
|
39
|
-
// lazy loading
|
|
40
|
-
canLoad(route, _segments) {
|
|
41
|
-
this.url = route.path;
|
|
42
|
-
return this.process();
|
|
43
|
-
}
|
|
44
|
-
// all children route
|
|
45
|
-
canActivateChild(_childRoute, state) {
|
|
46
|
-
this.url = state.url;
|
|
47
|
-
return this.process();
|
|
48
|
-
}
|
|
49
|
-
// route
|
|
50
|
-
canActivate(_route, state) {
|
|
51
|
-
this.url = state.url;
|
|
52
|
-
return this.process();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
JWTGuard.ɵprov = i0.ɵɵdefineInjectable({ factory: function JWTGuard_Factory() { return new JWTGuard(i0.ɵɵinject(i1.DA_SERVICE_TOKEN), i0.ɵɵinject(i0.INJECTOR)); }, token: JWTGuard, providedIn: "root" });
|
|
56
|
-
JWTGuard.decorators = [
|
|
57
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
58
|
-
];
|
|
59
|
-
JWTGuard.ctorParameters = () => [
|
|
60
|
-
{ type: undefined, decorators: [{ type: Inject, args: [DA_SERVICE_TOKEN,] }] },
|
|
61
|
-
{ type: Injector }
|
|
62
|
-
];
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0Lmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvdG9rZW4vand0L2p3dC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFhN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFpQixNQUFNLGNBQWMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUFFNUM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxNQUFNLE9BQU8sUUFBUTtJQU9uQixZQUE4QyxHQUFrQixFQUFVLFFBQWtCO1FBQTlDLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUcsQ0FBQztJQUpoRyxJQUFZLEdBQUc7UUFDYixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFJTyxPQUFPO1FBQ2IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFnQixhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFpQixDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsZUFBZTtJQUNmLE9BQU8sQ0FBQyxLQUFZLEVBQUUsU0FBdUI7UUFDM0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxxQkFBcUI7SUFDckIsZ0JBQWdCLENBQUMsV0FBbUMsRUFBRSxLQUEwQjtRQUM5RSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUNELFFBQVE7SUFDUixXQUFXLENBQUMsTUFBOEIsRUFBRSxLQUEwQjtRQUNwRSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7OztZQWhDRixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzs7NENBUW5CLE1BQU0sU0FBQyxnQkFBZ0I7WUExQ1QsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIENhbkFjdGl2YXRlLFxuICBDYW5BY3RpdmF0ZUNoaWxkLFxuICBDYW5Mb2FkLFxuICBSb3V0ZSxcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcbiAgVXJsU2VnbWVudFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBBbGFpbkF1dGhDb25maWcgfSBmcm9tICdAZGVsb24vdXRpbC9jb25maWcnO1xuXG5pbXBvcnQgeyBDaGVja0p3dCwgVG9Mb2dpbiB9IGZyb20gJy4uL2hlbHBlcic7XG5pbXBvcnQgeyBEQV9TRVJWSUNFX1RPS0VOLCBJVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlJztcbmltcG9ydCB7IEpXVFRva2VuTW9kZWwgfSBmcm9tICcuL2p3dC5tb2RlbCc7XG5cbi8qKlxuICogSldUIOi3r+eUseWuiOWNqywgW0FDTCBEb2N1bWVudF0oaHR0cHM6Ly9uZy1hbGFpbi5jb20vYXV0aC9ndWFyZCkuXG4gKlxuICogYGBgdHNcbiAqIGRhdGE6IHtcbiAqICBwYXRoOiAnaG9tZScsXG4gKiAgY2FuQWN0aXZhdGU6IFsgSldUR3VhcmQgXVxuICogfSxcbiAqIHtcbiAqICAgcGF0aDogJ215JyxcbiAqICAgY2FuQWN0aXZhdGVDaGlsZDogW0pXVEd1YXJkXSxcbiAqICAgY2hpbGRyZW46IFtcbiAqICAgICB7IHBhdGg6ICdwcm9maWxlJywgY29tcG9uZW50OiBNb2NrQ29tcG9uZW50IH1cbiAqICAgXSxcbiAqIH0sXG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBKV1RHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlLCBDYW5BY3RpdmF0ZUNoaWxkLCBDYW5Mb2FkIHtcbiAgcHJpdmF0ZSB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGdldCBjb2coKTogQWxhaW5BdXRoQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5zcnYub3B0aW9ucztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoREFfU0VSVklDRV9UT0tFTikgcHJpdmF0ZSBzcnY6IElUb2tlblNlcnZpY2UsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gIHByaXZhdGUgcHJvY2VzcygpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXMgPSBDaGVja0p3dCh0aGlzLnNydi5nZXQ8SldUVG9rZW5Nb2RlbD4oSldUVG9rZW5Nb2RlbCksIHRoaXMuY29nLnRva2VuX2V4cF9vZmZzZXQhKTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgVG9Mb2dpbih0aGlzLmNvZywgdGhpcy5pbmplY3RvciwgdGhpcy51cmwpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLy8gbGF6eSBsb2FkaW5nXG4gIGNhbkxvYWQocm91dGU6IFJvdXRlLCBfc2VnbWVudHM6IFVybFNlZ21lbnRbXSk6IGJvb2xlYW4ge1xuICAgIHRoaXMudXJsID0gcm91dGUucGF0aDtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzKCk7XG4gIH1cbiAgLy8gYWxsIGNoaWxkcmVuIHJvdXRlXG4gIGNhbkFjdGl2YXRlQ2hpbGQoX2NoaWxkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogYm9vbGVhbiB7XG4gICAgdGhpcy51cmwgPSBzdGF0ZS51cmw7XG4gICAgcmV0dXJuIHRoaXMucHJvY2VzcygpO1xuICB9XG4gIC8vIHJvdXRlXG4gIGNhbkFjdGl2YXRlKF9yb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBib29sZWFuIHtcbiAgICB0aGlzLnVybCA9IHN0YXRlLnVybDtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BaseInterceptor } from '../base.interceptor';
|
|
3
|
-
import { CheckJwt } from '../helper';
|
|
4
|
-
import { DA_SERVICE_TOKEN } from '../interface';
|
|
5
|
-
import { JWTTokenModel } from './jwt.model';
|
|
6
|
-
/**
|
|
7
|
-
* JWT 拦截器
|
|
8
|
-
*
|
|
9
|
-
* ```
|
|
10
|
-
* // app.module.ts
|
|
11
|
-
* { provide: HTTP_INTERCEPTORS, useClass: JWTInterceptor, multi: true}
|
|
12
|
-
* ```
|
|
13
|
-
*/
|
|
14
|
-
export class JWTInterceptor extends BaseInterceptor {
|
|
15
|
-
isAuth(options) {
|
|
16
|
-
this.model = this.injector.get(DA_SERVICE_TOKEN).get(JWTTokenModel);
|
|
17
|
-
return CheckJwt(this.model, options.token_exp_offset);
|
|
18
|
-
}
|
|
19
|
-
setReq(req, _options) {
|
|
20
|
-
return req.clone({
|
|
21
|
-
setHeaders: {
|
|
22
|
-
Authorization: `Bearer ${this.model.token}`
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
JWTInterceptor.decorators = [
|
|
28
|
-
{ type: Injectable }
|
|
29
|
-
];
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvdG9rZW4vand0L2p3dC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLE9BQU8sY0FBZSxTQUFRLGVBQWU7SUFDakQsTUFBTSxDQUFDLE9BQXdCO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQWdCLGFBQWEsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFzQixFQUFFLE9BQU8sQ0FBQyxnQkFBaUIsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBMkIsRUFBRSxRQUF5QjtRQUMzRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDZixVQUFVLEVBQUU7Z0JBQ1YsYUFBYSxFQUFFLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7YUFDNUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOzs7WUFiRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFsYWluQXV0aENvbmZpZyB9IGZyb20gJ0BkZWxvbi91dGlsL2NvbmZpZyc7XG5pbXBvcnQgdHlwZSB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IEJhc2VJbnRlcmNlcHRvciB9IGZyb20gJy4uL2Jhc2UuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgQ2hlY2tKd3QgfSBmcm9tICcuLi9oZWxwZXInO1xuaW1wb3J0IHsgREFfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4uL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBKV1RUb2tlbk1vZGVsIH0gZnJvbSAnLi9qd3QubW9kZWwnO1xuXG4vKipcbiAqIEpXVCDmi6bmiKrlmahcbiAqXG4gKiBgYGBcbiAqIC8vIGFwcC5tb2R1bGUudHNcbiAqIHsgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsIHVzZUNsYXNzOiBKV1RJbnRlcmNlcHRvciwgbXVsdGk6IHRydWV9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEpXVEludGVyY2VwdG9yIGV4dGVuZHMgQmFzZUludGVyY2VwdG9yIHtcbiAgaXNBdXRoKG9wdGlvbnM6IEFsYWluQXV0aENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHRoaXMubW9kZWwgPSB0aGlzLmluamVjdG9yLmdldChEQV9TRVJWSUNFX1RPS0VOKS5nZXQ8SldUVG9rZW5Nb2RlbD4oSldUVG9rZW5Nb2RlbCk7XG4gICAgcmV0dXJuIENoZWNrSnd0KHRoaXMubW9kZWwgYXMgSldUVG9rZW5Nb2RlbCwgb3B0aW9ucy50b2tlbl9leHBfb2Zmc2V0ISk7XG4gIH1cblxuICBzZXRSZXEocmVxOiBIdHRwUmVxdWVzdDxOelNhZmVBbnk+LCBfb3B0aW9uczogQWxhaW5BdXRoQ29uZmlnKTogSHR0cFJlcXVlc3Q8TnpTYWZlQW55PiB7XG4gICAgcmV0dXJuIHJlcS5jbG9uZSh7XG4gICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLm1vZGVsLnRva2VufWBcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, Injector } from '@angular/core';
|
|
2
|
-
import { CheckSimple, ToLogin } from '../helper';
|
|
3
|
-
import { DA_SERVICE_TOKEN } from '../interface';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../interface";
|
|
6
|
-
/**
|
|
7
|
-
* Simple 路由守卫, [ACL Document](https://ng-alain.com/auth/guard).
|
|
8
|
-
*
|
|
9
|
-
* ```ts
|
|
10
|
-
* data: {
|
|
11
|
-
* path: 'home',
|
|
12
|
-
* canActivate: [ SimpleGuard ]
|
|
13
|
-
* },
|
|
14
|
-
* {
|
|
15
|
-
* path: 'my',
|
|
16
|
-
* canActivateChild: [SimpleGuard],
|
|
17
|
-
* children: [
|
|
18
|
-
* { path: 'profile', component: MockComponent }
|
|
19
|
-
* ],
|
|
20
|
-
* },
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export class SimpleGuard {
|
|
24
|
-
constructor(srv, injector) {
|
|
25
|
-
this.srv = srv;
|
|
26
|
-
this.injector = injector;
|
|
27
|
-
}
|
|
28
|
-
get cog() {
|
|
29
|
-
return this.srv.options;
|
|
30
|
-
}
|
|
31
|
-
process() {
|
|
32
|
-
const res = CheckSimple(this.srv.get());
|
|
33
|
-
if (!res) {
|
|
34
|
-
ToLogin(this.cog, this.injector, this.url);
|
|
35
|
-
}
|
|
36
|
-
return res;
|
|
37
|
-
}
|
|
38
|
-
// lazy loading
|
|
39
|
-
canLoad(route, _segments) {
|
|
40
|
-
this.url = route.path;
|
|
41
|
-
return this.process();
|
|
42
|
-
}
|
|
43
|
-
// all children route
|
|
44
|
-
canActivateChild(_childRoute, state) {
|
|
45
|
-
this.url = state.url;
|
|
46
|
-
return this.process();
|
|
47
|
-
}
|
|
48
|
-
// route
|
|
49
|
-
canActivate(_route, state) {
|
|
50
|
-
this.url = state.url;
|
|
51
|
-
return this.process();
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
SimpleGuard.ɵprov = i0.ɵɵdefineInjectable({ factory: function SimpleGuard_Factory() { return new SimpleGuard(i0.ɵɵinject(i1.DA_SERVICE_TOKEN), i0.ɵɵinject(i0.INJECTOR)); }, token: SimpleGuard, providedIn: "root" });
|
|
55
|
-
SimpleGuard.decorators = [
|
|
56
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
57
|
-
];
|
|
58
|
-
SimpleGuard.ctorParameters = () => [
|
|
59
|
-
{ type: undefined, decorators: [{ type: Inject, args: [DA_SERVICE_TOKEN,] }] },
|
|
60
|
-
{ type: Injector }
|
|
61
|
-
];
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvdG9rZW4vc2ltcGxlL3NpbXBsZS5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFhN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFpQixNQUFNLGNBQWMsQ0FBQzs7O0FBRy9EOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFPdEIsWUFBOEMsR0FBa0IsRUFBVSxRQUFrQjtRQUE5QyxRQUFHLEdBQUgsR0FBRyxDQUFlO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFHLENBQUM7SUFKaEcsSUFBWSxHQUFHO1FBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBSU8sT0FBTztRQUNiLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBc0IsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELGVBQWU7SUFDZixPQUFPLENBQUMsS0FBWSxFQUFFLFNBQXVCO1FBQzNDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBQ0QscUJBQXFCO0lBQ3JCLGdCQUFnQixDQUFDLFdBQW1DLEVBQUUsS0FBMEI7UUFDOUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxRQUFRO0lBQ1IsV0FBVyxDQUFDLE1BQThCLEVBQUUsS0FBMEI7UUFDcEUsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7Ozs7WUFoQ0YsVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7OzRDQVFuQixNQUFNLFNBQUMsZ0JBQWdCO1lBMUNULFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBDYW5BY3RpdmF0ZSxcbiAgQ2FuQWN0aXZhdGVDaGlsZCxcbiAgQ2FuTG9hZCxcbiAgUm91dGUsXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXG4gIFVybFNlZ21lbnRcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQWxhaW5BdXRoQ29uZmlnIH0gZnJvbSAnQGRlbG9uL3V0aWwvY29uZmlnJztcblxuaW1wb3J0IHsgQ2hlY2tTaW1wbGUsIFRvTG9naW4gfSBmcm9tICcuLi9oZWxwZXInO1xuaW1wb3J0IHsgREFfU0VSVklDRV9UT0tFTiwgSVRva2VuU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBTaW1wbGVUb2tlbk1vZGVsIH0gZnJvbSAnLi9zaW1wbGUubW9kZWwnO1xuXG4vKipcbiAqIFNpbXBsZSDot6/nlLHlrojljassIFtBQ0wgRG9jdW1lbnRdKGh0dHBzOi8vbmctYWxhaW4uY29tL2F1dGgvZ3VhcmQpLlxuICpcbiAqIGBgYHRzXG4gKiBkYXRhOiB7XG4gKiAgcGF0aDogJ2hvbWUnLFxuICogIGNhbkFjdGl2YXRlOiBbIFNpbXBsZUd1YXJkIF1cbiAqIH0sXG4gKiB7XG4gKiAgIHBhdGg6ICdteScsXG4gKiAgIGNhbkFjdGl2YXRlQ2hpbGQ6IFtTaW1wbGVHdWFyZF0sXG4gKiAgIGNoaWxkcmVuOiBbXG4gKiAgICAgeyBwYXRoOiAncHJvZmlsZScsIGNvbXBvbmVudDogTW9ja0NvbXBvbmVudCB9XG4gKiAgIF0sXG4gKiB9LFxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU2ltcGxlR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSwgQ2FuQWN0aXZhdGVDaGlsZCwgQ2FuTG9hZCB7XG4gIHByaXZhdGUgdXJsPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgZ2V0IGNvZygpOiBBbGFpbkF1dGhDb25maWcge1xuICAgIHJldHVybiB0aGlzLnNydi5vcHRpb25zO1xuICB9XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChEQV9TRVJWSUNFX1RPS0VOKSBwcml2YXRlIHNydjogSVRva2VuU2VydmljZSwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlcyA9IENoZWNrU2ltcGxlKHRoaXMuc3J2LmdldCgpIGFzIFNpbXBsZVRva2VuTW9kZWwpO1xuICAgIGlmICghcmVzKSB7XG4gICAgICBUb0xvZ2luKHRoaXMuY29nLCB0aGlzLmluamVjdG9yLCB0aGlzLnVybCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvLyBsYXp5IGxvYWRpbmdcbiAgY2FuTG9hZChyb3V0ZTogUm91dGUsIF9zZWdtZW50czogVXJsU2VnbWVudFtdKTogYm9vbGVhbiB7XG4gICAgdGhpcy51cmwgPSByb3V0ZS5wYXRoO1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3MoKTtcbiAgfVxuICAvLyBhbGwgY2hpbGRyZW4gcm91dGVcbiAgY2FuQWN0aXZhdGVDaGlsZChfY2hpbGRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBib29sZWFuIHtcbiAgICB0aGlzLnVybCA9IHN0YXRlLnVybDtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzKCk7XG4gIH1cbiAgLy8gcm91dGVcbiAgY2FuQWN0aXZhdGUoX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IGJvb2xlYW4ge1xuICAgIHRoaXMudXJsID0gc3RhdGUudXJsO1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3MoKTtcbiAgfVxufVxuIl19
|