@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.
Files changed (49) hide show
  1. package/auth.d.ts +1 -0
  2. package/{esm2015/auth.js → esm2020/auth.mjs} +0 -0
  3. package/{esm2015/index.js → esm2020/index.mjs} +0 -0
  4. package/{esm2015/src/auth.config.js → esm2020/src/auth.config.mjs} +0 -0
  5. package/esm2020/src/auth.module.mjs +12 -0
  6. package/esm2020/src/social/social.service.mjs +105 -0
  7. package/{esm2015/src/store/cookie-storage.service.js → esm2020/src/store/cookie-storage.service.mjs} +0 -0
  8. package/{esm2015/src/store/interface.js → esm2020/src/store/interface.mjs} +0 -0
  9. package/{esm2015/src/store/local-storage.service.js → esm2020/src/store/local-storage.service.mjs} +0 -0
  10. package/{esm2015/src/store/memory.service.js → esm2020/src/store/memory.service.mjs} +0 -0
  11. package/{esm2015/src/store/session-storage.service.js → esm2020/src/store/session-storage.service.mjs} +0 -0
  12. package/esm2020/src/token/base.interceptor.mjs +86 -0
  13. package/esm2020/src/token/helper.mjs +32 -0
  14. package/{esm2015/src/token/interface.js → esm2020/src/token/interface.mjs} +0 -0
  15. package/esm2020/src/token/jwt/jwt.guard.mjs +63 -0
  16. package/{esm2015/src/token/jwt/jwt.helper.js → esm2020/src/token/jwt/jwt.helper.mjs} +0 -0
  17. package/esm2020/src/token/jwt/jwt.interceptor.mjs +33 -0
  18. package/{esm2015/src/token/jwt/jwt.model.js → esm2020/src/token/jwt/jwt.model.mjs} +0 -0
  19. package/esm2020/src/token/simple/simple.guard.mjs +62 -0
  20. package/esm2020/src/token/simple/simple.interceptor.mjs +51 -0
  21. package/{esm2015/src/token/simple/simple.model.js → esm2020/src/token/simple/simple.model.mjs} +1 -1
  22. package/esm2020/src/token/token.service.mjs +92 -0
  23. package/fesm2015/{auth.js → auth.mjs} +80 -50
  24. package/fesm2015/auth.mjs.map +1 -0
  25. package/fesm2020/auth.mjs +717 -0
  26. package/fesm2020/auth.mjs.map +1 -0
  27. package/package.json +21 -9
  28. package/src/auth.module.d.ts +4 -0
  29. package/src/social/social.service.d.ts +3 -0
  30. package/src/token/base.interceptor.d.ts +3 -0
  31. package/src/token/jwt/jwt.guard.d.ts +3 -0
  32. package/src/token/jwt/jwt.interceptor.d.ts +3 -0
  33. package/src/token/simple/simple.guard.d.ts +3 -0
  34. package/src/token/simple/simple.interceptor.d.ts +3 -0
  35. package/src/token/simple/simple.model.d.ts +1 -1
  36. package/src/token/token.service.d.ts +4 -1
  37. package/auth.metadata.json +0 -1
  38. package/bundles/auth.umd.js +0 -1140
  39. package/bundles/auth.umd.js.map +0 -1
  40. package/esm2015/src/auth.module.js +0 -7
  41. package/esm2015/src/social/social.service.js +0 -96
  42. package/esm2015/src/token/base.interceptor.js +0 -84
  43. package/esm2015/src/token/helper.js +0 -30
  44. package/esm2015/src/token/jwt/jwt.guard.js +0 -63
  45. package/esm2015/src/token/jwt/jwt.interceptor.js +0 -30
  46. package/esm2015/src/token/simple/simple.guard.js +0 -62
  47. package/esm2015/src/token/simple/simple.interceptor.js +0 -48
  48. package/esm2015/src/token/token.service.js +0 -89
  49. package/fesm2015/auth.js.map +0 -1
@@ -1,48 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BaseInterceptor } from '../base.interceptor';
3
- import { CheckSimple } from '../helper';
4
- import { DA_SERVICE_TOKEN } from '../interface';
5
- /**
6
- * Simple 拦截器
7
- *
8
- * ```
9
- * // app.module.ts
10
- * { provide: HTTP_INTERCEPTORS, useClass: SimpleInterceptor, multi: true}
11
- * ```
12
- */
13
- export class SimpleInterceptor extends BaseInterceptor {
14
- isAuth(_options) {
15
- this.model = this.injector.get(DA_SERVICE_TOKEN).get();
16
- return CheckSimple(this.model);
17
- }
18
- setReq(req, options) {
19
- const { token_send_template, token_send_key } = options;
20
- const token = token_send_template.replace(/\$\{([\w]+)\}/g, (_, g) => this.model[g]);
21
- switch (options.token_send_place) {
22
- case 'header':
23
- const obj = {};
24
- obj[token_send_key] = token;
25
- req = req.clone({
26
- setHeaders: obj
27
- });
28
- break;
29
- case 'body':
30
- const body = req.body || {};
31
- body[token_send_key] = token;
32
- req = req.clone({
33
- body
34
- });
35
- break;
36
- case 'url':
37
- req = req.clone({
38
- params: req.params.append(token_send_key, token)
39
- });
40
- break;
41
- }
42
- return req;
43
- }
44
- }
45
- SimpleInterceptor.decorators = [
46
- { type: Injectable }
47
- ];
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvdG9rZW4vc2ltcGxlL3NpbXBsZS5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUdoRDs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGVBQWU7SUFDcEQsTUFBTSxDQUFDLFFBQXlCO1FBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLEVBQXNCLENBQUM7UUFDM0UsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQXlCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQTJCLEVBQUUsT0FBd0I7UUFDMUQsTUFBTSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN4RCxNQUFNLEtBQUssR0FBRyxtQkFBb0IsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUYsUUFBUSxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7WUFDaEMsS0FBSyxRQUFRO2dCQUNYLE1BQU0sR0FBRyxHQUFjLEVBQUUsQ0FBQztnQkFDMUIsR0FBRyxDQUFDLGNBQWUsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDN0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7b0JBQ2QsVUFBVSxFQUFFLEdBQUc7aUJBQ2hCLENBQUMsQ0FBQztnQkFDSCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsY0FBZSxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUM5QixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDZCxJQUFJO2lCQUNMLENBQUMsQ0FBQztnQkFDSCxNQUFNO1lBQ1IsS0FBSyxLQUFLO2dCQUNSLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO29CQUNkLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFlLEVBQUUsS0FBSyxDQUFDO2lCQUNsRCxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtTQUNUO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzs7WUFoQ0YsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBbGFpbkF1dGhDb25maWcgfSBmcm9tICdAZGVsb24vdXRpbC9jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQgeyBCYXNlSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9iYXNlLmludGVyY2VwdG9yJztcbmltcG9ydCB7IENoZWNrU2ltcGxlIH0gZnJvbSAnLi4vaGVscGVyJztcbmltcG9ydCB7IERBX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICcuLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2ltcGxlVG9rZW5Nb2RlbCB9IGZyb20gJy4vc2ltcGxlLm1vZGVsJztcblxuLyoqXG4gKiBTaW1wbGUg5oum5oiq5ZmoXG4gKlxuICogYGBgXG4gKiAvLyBhcHAubW9kdWxlLnRzXG4gKiB7IHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLCB1c2VDbGFzczogU2ltcGxlSW50ZXJjZXB0b3IsIG11bHRpOiB0cnVlfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaW1wbGVJbnRlcmNlcHRvciBleHRlbmRzIEJhc2VJbnRlcmNlcHRvciB7XG4gIGlzQXV0aChfb3B0aW9uczogQWxhaW5BdXRoQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgdGhpcy5tb2RlbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KERBX1NFUlZJQ0VfVE9LRU4pLmdldCgpIGFzIFNpbXBsZVRva2VuTW9kZWw7XG4gICAgcmV0dXJuIENoZWNrU2ltcGxlKHRoaXMubW9kZWwgYXMgU2ltcGxlVG9rZW5Nb2RlbCk7XG4gIH1cblxuICBzZXRSZXEocmVxOiBIdHRwUmVxdWVzdDxOelNhZmVBbnk+LCBvcHRpb25zOiBBbGFpbkF1dGhDb25maWcpOiBIdHRwUmVxdWVzdDxOelNhZmVBbnk+IHtcbiAgICBjb25zdCB7IHRva2VuX3NlbmRfdGVtcGxhdGUsIHRva2VuX3NlbmRfa2V5IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5fc2VuZF90ZW1wbGF0ZSEucmVwbGFjZSgvXFwkXFx7KFtcXHddKylcXH0vZywgKF86IHN0cmluZywgZykgPT4gdGhpcy5tb2RlbFtnXSk7XG4gICAgc3dpdGNoIChvcHRpb25zLnRva2VuX3NlbmRfcGxhY2UpIHtcbiAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICAgIGNvbnN0IG9iajogTnpTYWZlQW55ID0ge307XG4gICAgICAgIG9ialt0b2tlbl9zZW5kX2tleSFdID0gdG9rZW47XG4gICAgICAgIHJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgICAgc2V0SGVhZGVyczogb2JqXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgICBjb25zdCBib2R5ID0gcmVxLmJvZHkgfHwge307XG4gICAgICAgIGJvZHlbdG9rZW5fc2VuZF9rZXkhXSA9IHRva2VuO1xuICAgICAgICByZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICAgIGJvZHlcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXJsJzpcbiAgICAgICAgcmVxID0gcmVxLmNsb25lKHtcbiAgICAgICAgICBwYXJhbXM6IHJlcS5wYXJhbXMuYXBwZW5kKHRva2VuX3NlbmRfa2V5ISwgdG9rZW4pXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlcTtcbiAgfVxufVxuIl19
@@ -1,89 +0,0 @@
1
- import { inject, Inject, Injectable } from '@angular/core';
2
- import { BehaviorSubject, interval, Subject } from 'rxjs';
3
- import { filter, map, share } from 'rxjs/operators';
4
- import { AlainConfigService } from '@delon/util/config';
5
- import { mergeConfig } from '../auth.config';
6
- import { DA_STORE_TOKEN } from '../store/interface';
7
- export function DA_SERVICE_TOKEN_FACTORY() {
8
- return new TokenService(inject(AlainConfigService), inject(DA_STORE_TOKEN));
9
- }
10
- /**
11
- * 维护Token信息服务,[在线文档](https://ng-alain.com/auth)
12
- */
13
- export class TokenService {
14
- constructor(configSrv, store) {
15
- this.store = store;
16
- this.refresh$ = new Subject();
17
- this.change$ = new BehaviorSubject(null);
18
- this._referrer = {};
19
- this._options = mergeConfig(configSrv);
20
- }
21
- get refresh() {
22
- this.builderRefresh();
23
- return this.refresh$.pipe(share());
24
- }
25
- get login_url() {
26
- return this._options.login_url;
27
- }
28
- get referrer() {
29
- return this._referrer;
30
- }
31
- get options() {
32
- return this._options;
33
- }
34
- set(data) {
35
- const res = this.store.set(this._options.store_key, data);
36
- this.change$.next(data);
37
- return res;
38
- }
39
- get(type) {
40
- const data = this.store.get(this._options.store_key);
41
- return type ? Object.assign(new type(), data) : data;
42
- }
43
- clear(options = { onlyToken: false }) {
44
- let data = null;
45
- if (options.onlyToken === true) {
46
- data = this.get();
47
- data.token = ``;
48
- this.set(data);
49
- }
50
- else {
51
- this.store.remove(this._options.store_key);
52
- }
53
- this.change$.next(data);
54
- }
55
- change() {
56
- return this.change$.pipe(share());
57
- }
58
- builderRefresh() {
59
- const { refreshTime, refreshOffset } = this._options;
60
- this.cleanRefresh();
61
- this.interval$ = interval(refreshTime)
62
- .pipe(map(() => {
63
- const item = this.get();
64
- const expired = item.expired || item.exp || 0;
65
- if (expired <= 0) {
66
- return null;
67
- }
68
- const curTime = new Date().valueOf() + refreshOffset;
69
- return expired <= curTime ? item : null;
70
- }), filter(v => v != null))
71
- .subscribe(res => this.refresh$.next(res));
72
- }
73
- cleanRefresh() {
74
- if (this.interval$ && !this.interval$.closed) {
75
- this.interval$.unsubscribe();
76
- }
77
- }
78
- ngOnDestroy() {
79
- this.cleanRefresh();
80
- }
81
- }
82
- TokenService.decorators = [
83
- { type: Injectable }
84
- ];
85
- TokenService.ctorParameters = () => [
86
- { type: AlainConfigService },
87
- { type: undefined, decorators: [{ type: Inject, args: [DA_STORE_TOKEN,] }] }
88
- ];
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgvc3JjL3Rva2VuL3Rva2VuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsT0FBTyxFQUFtQixrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFVLE1BQU0sb0JBQW9CLENBQUM7QUFHNUQsTUFBTSxVQUFVLHdCQUF3QjtJQUN0QyxPQUFPLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRDs7R0FFRztBQUVILE1BQU0sT0FBTyxZQUFZO0lBT3ZCLFlBQVksU0FBNkIsRUFBa0MsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7UUFOaEYsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDdEMsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFxQixJQUFJLENBQUMsQ0FBQztRQUV4RCxjQUFTLEdBQWlCLEVBQUUsQ0FBQztRQUluQyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFB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WUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQzs7O1lBckZGLFVBQVU7OztZQWRlLGtCQUFrQjs0Q0FzQkUsTUFBTSxTQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGludGVydmFsLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzaGFyZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQWxhaW5BdXRoQ29uZmlnLCBBbGFpbkNvbmZpZ1NlcnZpY2UgfSBmcm9tICdAZGVsb24vdXRpbC9jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQgeyBtZXJnZUNvbmZpZyB9IGZyb20gJy4uL2F1dGguY29uZmlnJztcbmltcG9ydCB7IERBX1NUT1JFX1RPS0VOLCBJU3RvcmUgfSBmcm9tICcuLi9zdG9yZS9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXV0aFJlZmVycmVyLCBJVG9rZW5Nb2RlbCwgSVRva2VuU2VydmljZSB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIERBX1NFUlZJQ0VfVE9LRU5fRkFDVE9SWSgpOiBJVG9rZW5TZXJ2aWNlIHtcbiAgcmV0dXJuIG5ldyBUb2tlblNlcnZpY2UoaW5qZWN0KEFsYWluQ29uZmlnU2VydmljZSksIGluamVjdChEQV9TVE9SRV9UT0tFTikpO1xufVxuXG4vKipcbiAqIOe7tOaKpFRva2Vu5L+h5oGv5pyN5Yqh77yMW+WcqOe6v+aWh+aho10oaHR0cHM6Ly9uZy1hbGFpbi5jb20vYXV0aClcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRva2VuU2VydmljZSBpbXBsZW1lbnRzIElUb2tlblNlcnZpY2UsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVmcmVzaCQgPSBuZXcgU3ViamVjdDxJVG9rZW5Nb2RlbD4oKTtcbiAgcHJpdmF0ZSBjaGFuZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVG9rZW5Nb2RlbCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIGludGVydmFsJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9yZWZlcnJlcjogQXV0aFJlZmVycmVyID0ge307XG4gIHByaXZhdGUgX29wdGlvbnM6IEFsYWluQXV0aENvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihjb25maWdTcnY6IEFsYWluQ29uZmlnU2VydmljZSwgQEluamVjdChEQV9TVE9SRV9UT0tFTikgcHJpdmF0ZSBzdG9yZTogSVN0b3JlKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG1lcmdlQ29uZmlnKGNvbmZpZ1Nydik7XG4gIH1cblxuICBnZXQgcmVmcmVzaCgpOiBPYnNlcnZhYmxlPElUb2tlbk1vZGVsPiB7XG4gICAgdGhpcy5idWlsZGVyUmVmcmVzaCgpO1xuICAgIHJldHVybiB0aGlzLnJlZnJlc2gkLnBpcGUoc2hhcmUoKSk7XG4gIH1cblxuICBnZXQgbG9naW5fdXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMubG9naW5fdXJsO1xuICB9XG5cbiAgZ2V0IHJlZmVycmVyKCk6IEF1dGhSZWZlcnJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZmVycmVyO1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKTogQWxhaW5BdXRoQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIHNldChkYXRhOiBJVG9rZW5Nb2RlbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuc3RvcmUuc2V0KHRoaXMuX29wdGlvbnMuc3RvcmVfa2V5ISwgZGF0YSk7XG4gICAgdGhpcy5jaGFuZ2UkLm5leHQoZGF0YSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGdldCh0eXBlPzogTnpTYWZlQW55KTogTnpTYWZlQW55O1xuICBnZXQ8VCBleHRlbmRzIElUb2tlbk1vZGVsPih0eXBlPzogbmV3ICgpID0+IFQpOiBUIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5zdG9yZS5nZXQodGhpcy5fb3B0aW9ucy5zdG9yZV9rZXkhKTtcbiAgICByZXR1cm4gdHlwZSA/IChPYmplY3QuYXNzaWduKG5ldyB0eXBlKCksIGRhdGEpIGFzIFQpIDogKGRhdGEgYXMgVCk7XG4gIH1cblxuICBjbGVhcihvcHRpb25zOiB7IG9ubHlUb2tlbjogYm9vbGVhbiB9ID0geyBvbmx5VG9rZW46IGZhbHNlIH0pOiB2b2lkIHtcbiAgICBsZXQgZGF0YTogSVRva2VuTW9kZWwgfCBudWxsID0gbnVsbDtcbiAgICBpZiAob3B0aW9ucy5vbmx5VG9rZW4gPT09IHRydWUpIHtcbiAgICAgIGRhdGEgPSB0aGlzLmdldCgpIGFzIElUb2tlbk1vZGVsO1xuICAgICAgZGF0YS50b2tlbiA9IGBgO1xuICAgICAgdGhpcy5zZXQoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmUucmVtb3ZlKHRoaXMuX29wdGlvbnMuc3RvcmVfa2V5ISk7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlJC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgY2hhbmdlKCk6IE9ic2VydmFibGU8SVRva2VuTW9kZWwgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlJC5waXBlKHNoYXJlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZGVyUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IHJlZnJlc2hUaW1lLCByZWZyZXNoT2Zmc2V0IH0gPSB0aGlzLl9vcHRpb25zO1xuICAgIHRoaXMuY2xlYW5SZWZyZXNoKCk7XG4gICAgdGhpcy5pbnRlcnZhbCQgPSBpbnRlcnZhbChyZWZyZXNoVGltZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldCgpIGFzIElUb2tlbk1vZGVsO1xuICAgICAgICAgIGNvbnN0IGV4cGlyZWQgPSBpdGVtLmV4cGlyZWQgfHwgaXRlbS5leHAgfHwgMDtcbiAgICAgICAgICBpZiAoZXhwaXJlZCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjdXJUaW1lID0gbmV3IERhdGUoKS52YWx1ZU9mKCkgKyByZWZyZXNoT2Zmc2V0ITtcbiAgICAgICAgICByZXR1cm4gZXhwaXJlZCA8PSBjdXJUaW1lID8gaXRlbSA6IG51bGw7XG4gICAgICAgIH0pLFxuICAgICAgICBmaWx0ZXIodiA9PiB2ICE9IG51bGwpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLnJlZnJlc2gkLm5leHQocmVzISkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblJlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWwkICYmICF0aGlzLmludGVydmFsJC5jbG9zZWQpIHtcbiAgICAgIHRoaXMuaW50ZXJ2YWwkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhblJlZnJlc2goKTtcbiAgfVxufVxuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.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","../../../../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","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":[],"mappings":"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"}