@tsed/oidc-provider 7.0.0-beta.2 → 7.0.0-beta.20
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/coverage.json +6 -0
- package/jest.config.js +9 -0
- package/lib/cjs/OidcModule.js +28 -18
- package/lib/cjs/OidcModule.js.map +1 -1
- package/lib/cjs/constants/{index.js → constants.js} +1 -1
- package/lib/cjs/constants/constants.js.map +1 -0
- package/lib/cjs/decorators/grantId.js +1 -1
- package/lib/cjs/decorators/grantId.js.map +1 -1
- package/lib/cjs/decorators/interaction.js +1 -1
- package/lib/cjs/decorators/interaction.js.map +1 -1
- package/lib/cjs/decorators/interactions.js +1 -1
- package/lib/cjs/decorators/interactions.js.map +1 -1
- package/lib/cjs/decorators/oidcCtx.js +1 -1
- package/lib/cjs/decorators/oidcCtx.js.map +1 -1
- package/lib/cjs/decorators/oidcSession.js +1 -1
- package/lib/cjs/decorators/oidcSession.js.map +1 -1
- package/lib/cjs/decorators/params.js +1 -1
- package/lib/cjs/decorators/params.js.map +1 -1
- package/lib/cjs/decorators/prompt.js +1 -1
- package/lib/cjs/decorators/prompt.js.map +1 -1
- package/lib/cjs/decorators/uid.js +1 -1
- package/lib/cjs/decorators/uid.js.map +1 -1
- package/lib/cjs/domain/OidcAccountsMethods.js.map +1 -1
- package/lib/cjs/domain/OidcBadInteractionName.js +8 -0
- package/lib/cjs/domain/OidcBadInteractionName.js.map +1 -0
- package/lib/cjs/domain/OidcInteractionPromptProps.js +3 -0
- package/lib/cjs/domain/OidcInteractionPromptProps.js.map +1 -0
- package/lib/cjs/domain/OidcSettings.js.map +1 -1
- package/lib/cjs/domain/interfaces.js +3 -0
- package/lib/cjs/domain/interfaces.js.map +1 -0
- package/lib/cjs/index.js +31 -11
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/middlewares/OidcInteractionMiddleware.js +7 -27
- package/lib/cjs/middlewares/OidcInteractionMiddleware.js.map +1 -1
- package/lib/cjs/middlewares/OidcNoCacheMiddleware.js +6 -6
- package/lib/cjs/middlewares/OidcNoCacheMiddleware.js.map +1 -1
- package/lib/cjs/middlewares/OidcSecureMiddleware.js +7 -7
- package/lib/cjs/middlewares/OidcSecureMiddleware.js.map +1 -1
- package/lib/cjs/package.json +3 -0
- package/lib/cjs/services/OidcAdapters.js +25 -3
- package/lib/cjs/services/OidcAdapters.js.map +1 -1
- package/lib/cjs/services/OidcInteractionContext.js +70 -25
- package/lib/cjs/services/OidcInteractionContext.js.map +1 -1
- package/lib/cjs/services/OidcInteractions.js +16 -15
- package/lib/cjs/services/OidcInteractions.js.map +1 -1
- package/lib/cjs/services/OidcJwks.js +8 -5
- package/lib/cjs/services/OidcJwks.js.map +1 -1
- package/lib/cjs/services/OidcProvider.js +43 -31
- package/lib/cjs/services/OidcProvider.js.map +1 -1
- package/lib/cjs/utils/debug.js +1 -1
- package/lib/cjs/utils/debug.js.map +1 -1
- package/lib/esm/OidcModule.js +20 -10
- package/lib/esm/OidcModule.js.map +1 -1
- package/lib/esm/constants/{index.js → constants.js} +1 -1
- package/lib/esm/constants/constants.js.map +1 -0
- package/lib/esm/decorators/grantId.js +1 -1
- package/lib/esm/decorators/grantId.js.map +1 -1
- package/lib/esm/decorators/interaction.js +1 -1
- package/lib/esm/decorators/interaction.js.map +1 -1
- package/lib/esm/decorators/interactions.js +3 -3
- package/lib/esm/decorators/interactions.js.map +1 -1
- package/lib/esm/decorators/noCache.js +1 -1
- package/lib/esm/decorators/oidcCtx.js +1 -1
- package/lib/esm/decorators/oidcCtx.js.map +1 -1
- package/lib/esm/decorators/oidcSession.js +1 -1
- package/lib/esm/decorators/oidcSession.js.map +1 -1
- package/lib/esm/decorators/params.js +1 -1
- package/lib/esm/decorators/params.js.map +1 -1
- package/lib/esm/decorators/prompt.js +1 -1
- package/lib/esm/decorators/prompt.js.map +1 -1
- package/lib/esm/decorators/uid.js +1 -1
- package/lib/esm/decorators/uid.js.map +1 -1
- package/lib/esm/domain/OidcAccountsMethods.js.map +1 -1
- package/lib/esm/domain/OidcBadInteractionName.js +4 -0
- package/lib/esm/domain/OidcBadInteractionName.js.map +1 -0
- package/lib/esm/domain/OidcInteractionPromptProps.js +2 -0
- package/lib/esm/domain/OidcInteractionPromptProps.js.map +1 -0
- package/lib/esm/domain/OidcSettings.js.map +1 -1
- package/lib/esm/domain/interfaces.js +2 -0
- package/lib/esm/domain/interfaces.js.map +1 -0
- package/lib/esm/index.js +31 -11
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/middlewares/OidcInteractionMiddleware.js +8 -28
- package/lib/esm/middlewares/OidcInteractionMiddleware.js.map +1 -1
- package/lib/esm/package.json +3 -0
- package/lib/esm/services/OidcAdapters.js +22 -0
- package/lib/esm/services/OidcAdapters.js.map +1 -1
- package/lib/esm/services/OidcInteractionContext.js +65 -20
- package/lib/esm/services/OidcInteractionContext.js.map +1 -1
- package/lib/esm/services/OidcInteractions.js +9 -8
- package/lib/esm/services/OidcInteractions.js.map +1 -1
- package/lib/esm/services/OidcJwks.js +3 -0
- package/lib/esm/services/OidcJwks.js.map +1 -1
- package/lib/esm/services/OidcProvider.js +24 -12
- package/lib/esm/services/OidcProvider.js.map +1 -1
- package/lib/types/OidcModule.d.ts +5 -5
- package/lib/types/constants/{index.d.ts → constants.d.ts} +0 -0
- package/lib/types/decorators/interaction.d.ts +1 -1
- package/lib/types/domain/OidcAccountsMethods.d.ts +2 -2
- package/lib/types/domain/OidcBadInteractionName.d.ts +3 -0
- package/lib/types/domain/OidcInteractionPromptProps.d.ts +9 -0
- package/lib/types/domain/OidcSettings.d.ts +9 -1
- package/lib/types/domain/interfaces.d.ts +3 -0
- package/lib/types/index.d.ts +24 -4
- package/lib/types/middlewares/OidcInteractionMiddleware.d.ts +3 -5
- package/lib/types/services/OidcAdapters.d.ts +3 -2
- package/lib/types/services/OidcInteractionContext.d.ts +9 -4
- package/lib/types/services/OidcInteractions.d.ts +1 -1
- package/lib/types/services/OidcProvider.d.ts +3 -3
- package/package.json +26 -23
- package/readme.md +31 -35
- package/tsconfig.compile.esm.json +1 -12
- package/.mocharc.js +0 -5
- package/.nycrc +0 -27
- package/lib/cjs/constants/index.js.map +0 -1
- package/lib/cjs/decorators/index.js +0 -13
- package/lib/cjs/decorators/index.js.map +0 -1
- package/lib/cjs/domain/index.js +0 -9
- package/lib/cjs/domain/index.js.map +0 -1
- package/lib/esm/constants/index.js.map +0 -1
- package/lib/esm/decorators/index.js +0 -10
- package/lib/esm/decorators/index.js.map +0 -1
- package/lib/esm/domain/index.js +0 -6
- package/lib/esm/domain/index.js.map +0 -1
- package/lib/types/decorators/index.d.ts +0 -9
- package/lib/types/domain/index.d.ts +0 -8
|
@@ -5,9 +5,11 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const adapters_1 = require("@tsed/adapters");
|
|
6
6
|
const di_1 = require("@tsed/di");
|
|
7
7
|
let OidcAdapters = class OidcAdapters {
|
|
8
|
+
adapters;
|
|
8
9
|
createAdapterClass() {
|
|
9
10
|
const self = this;
|
|
10
11
|
return class CustomAdapter {
|
|
12
|
+
adapter;
|
|
11
13
|
constructor(name) {
|
|
12
14
|
this.adapter = self.adapters.invokeAdapter({
|
|
13
15
|
collectionName: name,
|
|
@@ -25,32 +27,52 @@ let OidcAdapters = class OidcAdapters {
|
|
|
25
27
|
return this.adapter.findById(id);
|
|
26
28
|
}
|
|
27
29
|
async findByUserCode(userCode) {
|
|
30
|
+
// istanbul ignore next
|
|
31
|
+
if (this.adapter.findByUserCode) {
|
|
32
|
+
return this.adapter.findByUserCode(userCode);
|
|
33
|
+
}
|
|
28
34
|
return this.adapter.findOne({
|
|
29
35
|
userCode
|
|
30
36
|
});
|
|
31
37
|
}
|
|
32
38
|
async findByUid(uid) {
|
|
39
|
+
// istanbul ignore next
|
|
40
|
+
if (this.adapter.findByUid) {
|
|
41
|
+
return this.adapter.findByUid(uid);
|
|
42
|
+
}
|
|
33
43
|
return this.adapter.findOne({
|
|
34
44
|
uid
|
|
35
45
|
});
|
|
36
46
|
}
|
|
37
47
|
async destroy(id) {
|
|
48
|
+
// istanbul ignore next
|
|
49
|
+
if (this.adapter.destroy) {
|
|
50
|
+
return this.adapter.destroy(id);
|
|
51
|
+
}
|
|
38
52
|
await this.adapter.deleteById(id);
|
|
39
53
|
}
|
|
40
54
|
async revokeByGrantId(grantId) {
|
|
55
|
+
// istanbul ignore next
|
|
56
|
+
if (this.adapter.revokeByGrantId) {
|
|
57
|
+
return this.adapter.revokeByGrantId(grantId);
|
|
58
|
+
}
|
|
41
59
|
await this.adapter.deleteMany({ grantId });
|
|
42
60
|
}
|
|
43
61
|
async consume(grantId) {
|
|
62
|
+
// istanbul ignore next
|
|
63
|
+
if (this.adapter.consume) {
|
|
64
|
+
return this.adapter.consume(grantId);
|
|
65
|
+
}
|
|
44
66
|
await this.adapter.update(grantId, { consumed: Math.floor(Date.now() / 1000) });
|
|
45
67
|
}
|
|
46
68
|
};
|
|
47
69
|
}
|
|
48
70
|
};
|
|
49
|
-
|
|
71
|
+
tslib_1.__decorate([
|
|
50
72
|
(0, di_1.Inject)(),
|
|
51
|
-
|
|
73
|
+
tslib_1.__metadata("design:type", adapters_1.Adapters)
|
|
52
74
|
], OidcAdapters.prototype, "adapters", void 0);
|
|
53
|
-
OidcAdapters =
|
|
75
|
+
OidcAdapters = tslib_1.__decorate([
|
|
54
76
|
(0, di_1.Injectable)()
|
|
55
77
|
], OidcAdapters);
|
|
56
78
|
exports.OidcAdapters = OidcAdapters;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcAdapters.js","sourceRoot":"","sources":["../../../src/services/OidcAdapters.ts"],"names":[],"mappings":";;;;AAAA,6CAAiD;AACjD,iCAA4C;
|
|
1
|
+
{"version":3,"file":"OidcAdapters.js","sourceRoot":"","sources":["../../../src/services/OidcAdapters.ts"],"names":[],"mappings":"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","sourcesContent":["import {Adapter, Adapters} from \"@tsed/adapters\";\nimport {Inject, Injectable} from \"@tsed/di\";\nimport {Adapter as OidcAdapter, AdapterConstructor} from \"oidc-provider\";\n\nexport type OidcAdapterMethods<Model = any> = Adapter<Model> & Partial<Omit<OidcAdapter, \"upsert\">>;\n\n@Injectable()\nexport class OidcAdapters {\n @Inject()\n protected adapters: Adapters;\n\n createAdapterClass(): AdapterConstructor {\n const self = this;\n\n return class CustomAdapter implements OidcAdapter {\n adapter: OidcAdapterMethods;\n\n constructor(name: string) {\n this.adapter = self.adapters.invokeAdapter<any>({\n collectionName: name,\n model: Object\n }) as OidcAdapterMethods;\n }\n\n async upsert(id: string, payload: any, expiresIn: number): Promise<void> {\n let expiresAt;\n\n if (expiresIn) {\n expiresAt = new Date(Date.now() + expiresIn * 1000);\n }\n\n await this.adapter.upsert(id, payload, expiresAt);\n }\n\n async find(id: string) {\n return this.adapter.findById(id);\n }\n\n async findByUserCode(userCode: string) {\n // istanbul ignore next\n if (this.adapter.findByUserCode) {\n return this.adapter.findByUserCode(userCode);\n }\n\n return this.adapter.findOne({\n userCode\n });\n }\n\n async findByUid(uid: string) {\n // istanbul ignore next\n if (this.adapter.findByUid) {\n return this.adapter.findByUid(uid);\n }\n\n return this.adapter.findOne({\n uid\n });\n }\n\n async destroy(id: string) {\n // istanbul ignore next\n if (this.adapter.destroy) {\n return this.adapter.destroy(id);\n }\n\n await this.adapter.deleteById(id);\n }\n\n async revokeByGrantId(grantId: string) {\n // istanbul ignore next\n if (this.adapter.revokeByGrantId) {\n return this.adapter.revokeByGrantId(grantId);\n }\n\n await this.adapter.deleteMany({grantId});\n }\n\n async consume(grantId: string) {\n // istanbul ignore next\n if (this.adapter.consume) {\n return this.adapter.consume(grantId);\n }\n\n await this.adapter.update(grantId, {consumed: Math.floor(Date.now() / 1000)});\n }\n };\n }\n}\n"]}
|
|
@@ -5,10 +5,20 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const common_1 = require("@tsed/common");
|
|
6
6
|
const core_1 = require("@tsed/core");
|
|
7
7
|
const di_1 = require("@tsed/di");
|
|
8
|
+
const exceptions_1 = require("@tsed/exceptions");
|
|
9
|
+
const constants_1 = require("../constants/constants");
|
|
10
|
+
const OidcBadInteractionName_1 = require("../domain/OidcBadInteractionName");
|
|
8
11
|
const debug_1 = require("../utils/debug");
|
|
9
12
|
const OidcInteractions_1 = require("./OidcInteractions");
|
|
10
13
|
const OidcProvider_1 = require("./OidcProvider");
|
|
11
14
|
let OidcInteractionContext = class OidcInteractionContext {
|
|
15
|
+
env;
|
|
16
|
+
oidcProvider;
|
|
17
|
+
oidcInteractions;
|
|
18
|
+
$ctx;
|
|
19
|
+
get raw() {
|
|
20
|
+
return this.$ctx.get(constants_1.INTERACTION_DETAILS);
|
|
21
|
+
}
|
|
12
22
|
get session() {
|
|
13
23
|
return this.raw.session;
|
|
14
24
|
}
|
|
@@ -27,40 +37,65 @@ let OidcInteractionContext = class OidcInteractionContext {
|
|
|
27
37
|
async runInteraction(name = this.prompt.name) {
|
|
28
38
|
const handler = this.oidcInteractions.getInteractionHandler(name);
|
|
29
39
|
if (handler) {
|
|
30
|
-
await handler(this
|
|
40
|
+
await handler(this.$ctx);
|
|
31
41
|
}
|
|
32
42
|
}
|
|
33
43
|
async interactionDetails() {
|
|
34
|
-
|
|
35
|
-
|
|
44
|
+
const raw = await this.oidcProvider.get().interactionDetails(this.$ctx.getReq(), this.$ctx.getRes());
|
|
45
|
+
const { uid, prompt, params, session, grantId } = raw;
|
|
46
|
+
this.$ctx.set(constants_1.INTERACTION_CONTEXT, this);
|
|
47
|
+
this.$ctx.set(constants_1.INTERACTION_DETAILS, raw);
|
|
48
|
+
this.$ctx.set(constants_1.INTERACTION_UID, uid);
|
|
49
|
+
this.$ctx.set(constants_1.INTERACTION_PROMPT, prompt);
|
|
50
|
+
this.$ctx.set(constants_1.INTERACTION_PARAMS, params);
|
|
51
|
+
this.$ctx.set(constants_1.INTERACTION_GRANT_ID, grantId);
|
|
52
|
+
this.$ctx.set(constants_1.INTERACTION_SESSION, session);
|
|
53
|
+
return raw;
|
|
36
54
|
}
|
|
37
55
|
async interactionFinished(result, options = { mergeWithLastSubmission: false }) {
|
|
38
|
-
return this.oidcProvider.get().interactionFinished(this.
|
|
56
|
+
return this.oidcProvider.get().interactionFinished(this.$ctx.getReq(), this.$ctx.getRes(), result, options);
|
|
39
57
|
}
|
|
40
58
|
async interactionResult(result, options = { mergeWithLastSubmission: false }) {
|
|
41
|
-
return this.oidcProvider.get().interactionResult(this.
|
|
59
|
+
return this.oidcProvider.get().interactionResult(this.$ctx.getReq(), this.$ctx.getRes(), result, options);
|
|
60
|
+
}
|
|
61
|
+
async interactionPrompt(options) {
|
|
62
|
+
const client = await this.findClient();
|
|
63
|
+
return {
|
|
64
|
+
client,
|
|
65
|
+
uid: this.uid,
|
|
66
|
+
grantId: this.grantId,
|
|
67
|
+
details: this.prompt.details,
|
|
68
|
+
params: {
|
|
69
|
+
...this.params,
|
|
70
|
+
...options.params
|
|
71
|
+
},
|
|
72
|
+
...options,
|
|
73
|
+
...this.debug()
|
|
74
|
+
};
|
|
42
75
|
}
|
|
43
76
|
async render(view, result) {
|
|
44
|
-
return this.
|
|
77
|
+
return this.$ctx.response.render(view, result);
|
|
45
78
|
}
|
|
46
79
|
async save(ttl) {
|
|
47
80
|
return this.raw.save(ttl);
|
|
48
81
|
}
|
|
49
82
|
async findClient(clientId = this.params.client_id) {
|
|
50
|
-
|
|
83
|
+
const key = `$client:${clientId}`;
|
|
84
|
+
return this.$ctx.cacheAsync(key, () => this.oidcProvider.get().Client.find(clientId));
|
|
51
85
|
}
|
|
52
86
|
async findAccount(sub, token) {
|
|
53
|
-
var _a;
|
|
54
87
|
if (!sub && this.session) {
|
|
55
|
-
sub =
|
|
88
|
+
sub = this.session?.accountId;
|
|
56
89
|
}
|
|
57
90
|
if (!sub) {
|
|
58
91
|
return;
|
|
59
92
|
}
|
|
60
|
-
|
|
93
|
+
const key = `$account:${sub}`;
|
|
94
|
+
return this.$ctx.cacheAsync(key, (() => {
|
|
95
|
+
return this.oidcProvider.get().Account.findAccount(undefined, sub, token);
|
|
96
|
+
}));
|
|
61
97
|
}
|
|
62
98
|
async getGrant() {
|
|
63
|
-
var _a;
|
|
64
99
|
const { Grant } = this.oidcProvider.get();
|
|
65
100
|
if (this.grantId) {
|
|
66
101
|
// we'll be modifying existing grant in existing session
|
|
@@ -68,10 +103,21 @@ let OidcInteractionContext = class OidcInteractionContext {
|
|
|
68
103
|
return await (this.oidcProvider.get().find || Grant.find)(this.grantId);
|
|
69
104
|
}
|
|
70
105
|
return new Grant({
|
|
71
|
-
accountId:
|
|
106
|
+
accountId: this.session?.accountId,
|
|
72
107
|
clientId: this.params.client_id
|
|
73
108
|
});
|
|
74
109
|
}
|
|
110
|
+
checkInteractionName(name) {
|
|
111
|
+
if (this.prompt.name !== name) {
|
|
112
|
+
throw new OidcBadInteractionName_1.OidcBadInteractionName("Bad interaction name");
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async checkClientId(clientId = this.params.client_id) {
|
|
116
|
+
const client = await this.findClient(clientId);
|
|
117
|
+
if (!client) {
|
|
118
|
+
throw new exceptions_1.Unauthorized(`Unknown client_id ${clientId}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
75
121
|
debug(obj) {
|
|
76
122
|
/* istanbul ignore next */
|
|
77
123
|
if (this.env === core_1.Env.PROD) {
|
|
@@ -89,25 +135,24 @@ let OidcInteractionContext = class OidcInteractionContext {
|
|
|
89
135
|
};
|
|
90
136
|
}
|
|
91
137
|
};
|
|
92
|
-
|
|
138
|
+
tslib_1.__decorate([
|
|
93
139
|
(0, common_1.Constant)("env"),
|
|
94
|
-
|
|
140
|
+
tslib_1.__metadata("design:type", String)
|
|
95
141
|
], OidcInteractionContext.prototype, "env", void 0);
|
|
96
|
-
|
|
142
|
+
tslib_1.__decorate([
|
|
97
143
|
(0, di_1.Inject)(),
|
|
98
|
-
|
|
144
|
+
tslib_1.__metadata("design:type", OidcProvider_1.OidcProvider)
|
|
99
145
|
], OidcInteractionContext.prototype, "oidcProvider", void 0);
|
|
100
|
-
|
|
146
|
+
tslib_1.__decorate([
|
|
101
147
|
(0, di_1.Inject)(),
|
|
102
|
-
|
|
148
|
+
tslib_1.__metadata("design:type", OidcInteractions_1.OidcInteractions)
|
|
103
149
|
], OidcInteractionContext.prototype, "oidcInteractions", void 0);
|
|
104
|
-
|
|
105
|
-
(0,
|
|
106
|
-
|
|
107
|
-
], OidcInteractionContext.prototype, "
|
|
108
|
-
OidcInteractionContext =
|
|
109
|
-
(0, di_1.Injectable)()
|
|
110
|
-
(0, common_1.Scope)(common_1.ProviderScope.REQUEST)
|
|
150
|
+
tslib_1.__decorate([
|
|
151
|
+
(0, common_1.InjectContext)(),
|
|
152
|
+
tslib_1.__metadata("design:type", common_1.PlatformContext)
|
|
153
|
+
], OidcInteractionContext.prototype, "$ctx", void 0);
|
|
154
|
+
OidcInteractionContext = tslib_1.__decorate([
|
|
155
|
+
(0, di_1.Injectable)()
|
|
111
156
|
], OidcInteractionContext);
|
|
112
157
|
exports.OidcInteractionContext = OidcInteractionContext;
|
|
113
158
|
//# sourceMappingURL=OidcInteractionContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcInteractionContext.js","sourceRoot":"","sources":["../../../src/services/OidcInteractionContext.ts"],"names":[],"mappings":";;;;AAAA,yCAA6E;AAC7E,qCAA+B;AAC/B,iCAA4C;AAI5C,0CAAqC;AACrC,yDAAoD;AACpD,iDAA4C;AAI5C,IAAa,sBAAsB,GAAnC,MAAa,sBAAsB;IAejC,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,OAAc,CAAC;IACjC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,IAAI,OAAO;QACT,OAAQ,IAAI,CAAC,GAAW,CAAC,OAAO,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe,IAAI,CAAC,MAAM,CAAC,IAAI;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAElE,IAAI,OAAO,EAAE;YACX,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC7B;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAE1G,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,MAA0B,EAAE,UAA+C,EAAC,uBAAuB,EAAE,KAAK,EAAC;QACnI,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAA0B,EAAE,UAA+C,EAAC,uBAAuB,EAAE,KAAK,EAAC;QACjI,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,MAAW;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB,IAAI,CAAC,MAAM,CAAC,SAAS;QACvD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAY,EAAE,KAAW;;QACzC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;YACxB,GAAG,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAgB,CAAC;SACtC;QAED,IAAI,CAAC,GAAG,EAAE;YACR,OAAO;SACR;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,SAAgB,EAAE,GAAI,EAAE,KAAK,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,QAAQ;;QACZ,MAAM,EAAC,KAAK,EAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAS,CAAC;QAE/C,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,wDAAwD;YACxD,aAAa;YACb,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACzE;QAED,OAAO,IAAI,KAAK,CAAC;YACf,SAAS,EAAE,MAAA,IAAI,CAAC,OAAO,0CAAE,SAAS;YAClC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;SAChC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAS;QACb,0BAA0B;QAC1B,IAAI,IAAI,CAAC,GAAG,KAAK,UAAG,CAAC,IAAI,EAAE;YACzB,OAAO,EAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,EAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAC,EAAC,CAAC;SAC1E;QAED,IAAI,GAAG,EAAE;YACP,OAAO,IAAA,aAAK,EAAC,GAAG,CAAC,CAAC;SACnB;QAED,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5D,GAAG,EAAE;gBACH,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC/B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;aAChC;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAhHC;IADC,IAAA,iBAAQ,EAAC,KAAK,CAAC;;mDACP;AAGT;IADC,IAAA,WAAM,GAAE;2CACe,2BAAY;4DAAC;AAGrC;IADC,IAAA,WAAM,GAAE;2CACmB,mCAAgB;gEAAC;AAG7C;IADC,IAAA,WAAM,GAAE;2CACU,wBAAe;uDAAC;AAXxB,sBAAsB;IAFlC,IAAA,eAAU,GAAE;IACZ,IAAA,cAAK,EAAC,sBAAa,CAAC,OAAO,CAAC;GAChB,sBAAsB,CAkHlC;AAlHY,wDAAsB","sourcesContent":["import {Constant, PlatformContext, ProviderScope, Scope} from \"@tsed/common\";\nimport {Env} from \"@tsed/core\";\nimport {Inject, Injectable} from \"@tsed/di\";\nimport {Account, InteractionResults, PromptDetail, Provider} from \"oidc-provider\";\nimport {OidcSession} from \"../decorators\";\nimport {OidcClient, OidcInteraction} from \"../domain\";\nimport {debug} from \"../utils/debug\";\nimport {OidcInteractions} from \"./OidcInteractions\";\nimport {OidcProvider} from \"./OidcProvider\";\n\n@Injectable()\n@Scope(ProviderScope.REQUEST)\nexport class OidcInteractionContext {\n @Constant(\"env\")\n env: Env;\n\n @Inject()\n protected oidcProvider: OidcProvider;\n\n @Inject()\n protected oidcInteractions: OidcInteractions;\n\n @Inject()\n protected context: PlatformContext;\n\n protected raw: OidcInteraction;\n\n get session(): OidcSession | undefined {\n return this.raw.session as any;\n }\n\n get prompt(): PromptDetail {\n return this.raw.prompt;\n }\n\n get params(): Record<string, any> {\n return this.raw.params;\n }\n\n get uid(): string {\n return this.raw.uid;\n }\n\n get grantId(): string {\n return (this.raw as any).grantId;\n }\n\n async runInteraction(name: string = this.prompt.name) {\n const handler = this.oidcInteractions.getInteractionHandler(name);\n\n if (handler) {\n await handler(this.context);\n }\n }\n\n async interactionDetails(): Promise<OidcInteraction> {\n this.raw = await this.oidcProvider.get().interactionDetails(this.context.getReq(), this.context.getRes());\n\n return this.raw;\n }\n\n async interactionFinished(result: InteractionResults, options: {mergeWithLastSubmission?: boolean} = {mergeWithLastSubmission: false}) {\n return this.oidcProvider.get().interactionFinished(this.context.getReq(), this.context.getRes(), result, options);\n }\n\n async interactionResult(result: InteractionResults, options: {mergeWithLastSubmission?: boolean} = {mergeWithLastSubmission: false}) {\n return this.oidcProvider.get().interactionResult(this.context.getReq(), this.context.getRes(), result, options);\n }\n\n async render(view: string, result: any): Promise<string> {\n return this.context.response.render(view, result);\n }\n\n async save(ttl: number): Promise<string> {\n return this.raw.save(ttl);\n }\n\n async findClient(clientId: string = this.params.client_id): Promise<OidcClient | undefined> {\n return this.oidcProvider.get().Client.find(clientId);\n }\n\n async findAccount(sub?: string, token?: any): Promise<Account | undefined> {\n if (!sub && this.session) {\n sub = this.session?.accountId as any;\n }\n\n if (!sub) {\n return;\n }\n\n return this.oidcProvider.get().Account.findAccount(undefined as any, sub!, token);\n }\n\n async getGrant(): Promise<InstanceType<Provider[\"Grant\"]>> {\n const {Grant} = this.oidcProvider.get() as any;\n\n if (this.grantId) {\n // we'll be modifying existing grant in existing session\n // @ts-ignore\n return await (this.oidcProvider.get().find || Grant.find)(this.grantId);\n }\n\n return new Grant({\n accountId: this.session?.accountId,\n clientId: this.params.client_id\n });\n }\n\n debug(obj?: any): any {\n /* istanbul ignore next */\n if (this.env === Env.PROD) {\n return {session: undefined, dbg: {params: undefined, prompt: undefined}};\n }\n\n if (obj) {\n return debug(obj);\n }\n\n return {\n session: this.session ? this.debug(this.session) : undefined,\n dbg: {\n params: this.debug(this.params),\n prompt: this.debug(this.prompt)\n }\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"OidcInteractionContext.js","sourceRoot":"","sources":["../../../src/services/OidcInteractionContext.ts"],"names":[],"mappings":"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","sourcesContent":["import {Constant, InjectContext, PlatformContext} from \"@tsed/common\";\nimport {Env} from \"@tsed/core\";\nimport {Inject, Injectable} from \"@tsed/di\";\nimport {Unauthorized} from \"@tsed/exceptions\";\nimport {Account, InteractionResults, PromptDetail, Provider} from \"oidc-provider\";\nimport {\n INTERACTION_CONTEXT,\n INTERACTION_DETAILS,\n INTERACTION_GRANT_ID,\n INTERACTION_PARAMS,\n INTERACTION_PROMPT,\n INTERACTION_SESSION,\n INTERACTION_UID\n} from \"../constants/constants\";\nimport {OidcSession} from \"../decorators/oidcSession\";\nimport {OidcClient} from \"../domain/interfaces\";\nimport {OidcBadInteractionName} from \"../domain/OidcBadInteractionName\";\nimport {OidcInteraction} from \"../domain/OidcInteraction\";\nimport {OidcInteractionPromptProps} from \"../domain/OidcInteractionPromptProps\";\nimport {debug} from \"../utils/debug\";\nimport {OidcInteractions} from \"./OidcInteractions\";\nimport {OidcProvider} from \"./OidcProvider\";\n\n@Injectable()\nexport class OidcInteractionContext {\n @Constant(\"env\")\n env: Env;\n\n @Inject()\n protected oidcProvider: OidcProvider;\n\n @Inject()\n protected oidcInteractions: OidcInteractions;\n\n @InjectContext()\n protected $ctx: PlatformContext;\n\n get raw(): OidcInteraction {\n return this.$ctx.get(INTERACTION_DETAILS)!;\n }\n\n get session(): OidcSession | undefined {\n return this.raw.session as any;\n }\n\n get prompt(): PromptDetail {\n return this.raw.prompt;\n }\n\n get params(): Record<string, any> {\n return this.raw.params;\n }\n\n get uid(): string {\n return this.raw.uid;\n }\n\n get grantId(): string {\n return (this.raw as any).grantId;\n }\n\n async runInteraction(name: string = this.prompt.name) {\n const handler = this.oidcInteractions.getInteractionHandler(name);\n\n if (handler) {\n await handler(this.$ctx);\n }\n }\n\n async interactionDetails(): Promise<OidcInteraction> {\n const raw = await this.oidcProvider.get().interactionDetails(this.$ctx.getReq(), this.$ctx.getRes());\n const {uid, prompt, params, session, grantId} = raw as any;\n\n this.$ctx.set(INTERACTION_CONTEXT, this);\n this.$ctx.set(INTERACTION_DETAILS, raw);\n this.$ctx.set(INTERACTION_UID, uid);\n this.$ctx.set(INTERACTION_PROMPT, prompt);\n this.$ctx.set(INTERACTION_PARAMS, params);\n this.$ctx.set(INTERACTION_GRANT_ID, grantId);\n this.$ctx.set(INTERACTION_SESSION, session);\n\n return raw;\n }\n\n async interactionFinished(result: InteractionResults, options: {mergeWithLastSubmission?: boolean} = {mergeWithLastSubmission: false}) {\n return this.oidcProvider.get().interactionFinished(this.$ctx.getReq(), this.$ctx.getRes(), result, options);\n }\n\n async interactionResult(result: InteractionResults, options: {mergeWithLastSubmission?: boolean} = {mergeWithLastSubmission: false}) {\n return this.oidcProvider.get().interactionResult(this.$ctx.getReq(), this.$ctx.getRes(), result, options);\n }\n\n async interactionPrompt(options: Record<string, any>): Promise<OidcInteractionPromptProps> {\n const client = await this.findClient();\n\n return {\n client,\n uid: this.uid,\n grantId: this.grantId,\n details: this.prompt.details,\n params: {\n ...this.params,\n ...options.params\n },\n ...options,\n ...this.debug()\n };\n }\n\n async render(view: string, result: any): Promise<string> {\n return this.$ctx.response.render(view, result);\n }\n\n async save(ttl: number): Promise<string> {\n return this.raw.save(ttl);\n }\n\n async findClient(clientId: string = this.params.client_id): Promise<OidcClient | undefined> {\n const key = `$client:${clientId}`;\n\n return this.$ctx.cacheAsync(key, () => this.oidcProvider.get().Client.find(clientId));\n }\n\n async findAccount(sub?: string, token?: any): Promise<Account | undefined> {\n if (!sub && this.session) {\n sub = this.session?.accountId as any;\n }\n\n if (!sub) {\n return;\n }\n\n const key = `$account:${sub}`;\n\n return this.$ctx.cacheAsync<Account | undefined>(key, (() => {\n return this.oidcProvider.get().Account.findAccount(undefined as any, sub!, token);\n }) as any);\n }\n\n async getGrant(): Promise<InstanceType<Provider[\"Grant\"]>> {\n const {Grant} = this.oidcProvider.get() as any;\n\n if (this.grantId) {\n // we'll be modifying existing grant in existing session\n // @ts-ignore\n return await (this.oidcProvider.get().find || Grant.find)(this.grantId);\n }\n\n return new Grant({\n accountId: this.session?.accountId,\n clientId: this.params.client_id\n });\n }\n\n checkInteractionName(name: string) {\n if (this.prompt.name !== name) {\n throw new OidcBadInteractionName(\"Bad interaction name\");\n }\n }\n\n async checkClientId(clientId = this.params.client_id) {\n const client = await this.findClient(clientId);\n\n if (!client) {\n throw new Unauthorized(`Unknown client_id ${clientId}`);\n }\n }\n\n debug(obj?: any): any {\n /* istanbul ignore next */\n if (this.env === Env.PROD) {\n return {session: undefined, dbg: {params: undefined, prompt: undefined}};\n }\n\n if (obj) {\n return debug(obj);\n }\n\n return {\n session: this.session ? this.debug(this.session) : undefined,\n dbg: {\n params: this.debug(this.params),\n prompt: this.debug(this.prompt)\n }\n };\n }\n}\n"]}
|
|
@@ -5,18 +5,18 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const common_1 = require("@tsed/common");
|
|
6
6
|
const core_1 = require("@tsed/core");
|
|
7
7
|
const di_1 = require("@tsed/di");
|
|
8
|
-
const constants_1 = require("../constants");
|
|
8
|
+
const constants_1 = require("../constants/constants");
|
|
9
9
|
let OidcInteractions = class OidcInteractions {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
injector;
|
|
11
|
+
env;
|
|
12
|
+
oidcSettings;
|
|
13
|
+
interactions = new Map();
|
|
13
14
|
$onInit() {
|
|
14
15
|
const platformHandler = this.injector.get(common_1.PlatformHandler);
|
|
15
16
|
this.getInteractions().forEach((provider) => {
|
|
16
|
-
var _a;
|
|
17
17
|
const { name } = provider.store.get(constants_1.INTERACTION_OPTIONS);
|
|
18
18
|
this.interactions.set(name, provider);
|
|
19
|
-
if (
|
|
19
|
+
if (this.injector.get(provider.token)?.$prompt) {
|
|
20
20
|
provider.store.set("$prompt", platformHandler.createCustomHandler(provider, "$prompt"));
|
|
21
21
|
}
|
|
22
22
|
});
|
|
@@ -29,7 +29,7 @@ let OidcInteractions = class OidcInteractions {
|
|
|
29
29
|
}
|
|
30
30
|
return interactionsProvider.children
|
|
31
31
|
.map((token) => this.injector.getProvider(token))
|
|
32
|
-
.filter((provider) =>
|
|
32
|
+
.filter((provider) => provider?.subType === constants_1.INTERACTION);
|
|
33
33
|
}
|
|
34
34
|
getInteractionProvider(name) {
|
|
35
35
|
return this.interactions.get(name);
|
|
@@ -37,27 +37,28 @@ let OidcInteractions = class OidcInteractions {
|
|
|
37
37
|
getInteractionHandler(name) {
|
|
38
38
|
const interaction = this.getInteractionProvider(name);
|
|
39
39
|
if (interaction) {
|
|
40
|
+
const endpoint = common_1.EndpointMetadata.get(interaction.useClass, "$prompt");
|
|
40
41
|
return (ctx) => {
|
|
41
42
|
// Add current endpoint metadata to ctx
|
|
42
|
-
ctx.endpoint =
|
|
43
|
+
ctx.endpoint = endpoint;
|
|
43
44
|
return interaction.store.get("$prompt")(ctx);
|
|
44
45
|
};
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
};
|
|
48
|
-
|
|
49
|
+
tslib_1.__decorate([
|
|
49
50
|
(0, di_1.Inject)(),
|
|
50
|
-
|
|
51
|
+
tslib_1.__metadata("design:type", di_1.InjectorService)
|
|
51
52
|
], OidcInteractions.prototype, "injector", void 0);
|
|
52
|
-
|
|
53
|
+
tslib_1.__decorate([
|
|
53
54
|
(0, common_1.Constant)("env"),
|
|
54
|
-
|
|
55
|
+
tslib_1.__metadata("design:type", String)
|
|
55
56
|
], OidcInteractions.prototype, "env", void 0);
|
|
56
|
-
|
|
57
|
+
tslib_1.__decorate([
|
|
57
58
|
(0, common_1.Constant)("oidc"),
|
|
58
|
-
|
|
59
|
+
tslib_1.__metadata("design:type", Object)
|
|
59
60
|
], OidcInteractions.prototype, "oidcSettings", void 0);
|
|
60
|
-
OidcInteractions =
|
|
61
|
+
OidcInteractions = tslib_1.__decorate([
|
|
61
62
|
(0, di_1.Injectable)()
|
|
62
63
|
], OidcInteractions);
|
|
63
64
|
exports.OidcInteractions = OidcInteractions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcInteractions.js","sourceRoot":"","sources":["../../../src/services/OidcInteractions.ts"],"names":[],"mappings":";;;;AAAA,yCAAmH;AACnH,qCAA+B;AAC/B,iCAA6D;AAC7D,
|
|
1
|
+
{"version":3,"file":"OidcInteractions.js","sourceRoot":"","sources":["../../../src/services/OidcInteractions.ts"],"names":[],"mappings":";;;;AAAA,yCAAmH;AACnH,qCAA+B;AAC/B,iCAA6D;AAC7D,sDAAsF;AAKtF,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IAE3B,QAAQ,CAAkB;IAG1B,GAAG,CAAM;IAGT,YAAY,CAAe;IAEjB,YAAY,GAA0B,IAAI,GAAG,EAAE,CAAC;IAE1D,OAAO;QACL,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAkB,wBAAe,CAAE,CAAC;QAE7E,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,QAAkB,EAAE,EAAE;YACpD,MAAM,EAAC,IAAI,EAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAyB,+BAAmB,CAAC,CAAC;YAC/E,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEtC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE;gBAC9C,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;aACzF;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,eAAe;QACb,MAAM,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,KAAK,wBAAY,CAAC,CAAC;QAEhH,0BAA0B;QAC1B,IAAI,CAAC,oBAAoB,EAAE;YACzB,OAAO,EAAE,CAAC;SACX;QAED,OAAO,oBAAoB,CAAC,QAAQ;aACjC,GAAG,CAAC,CAAC,KAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAE,CAAC;aAChE,MAAM,CAAC,CAAC,QAAkB,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,uBAAW,CAAC,CAAC;IACvE,CAAC;IAED,sBAAsB,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,qBAAqB,CAAC,IAAY;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,WAAW,EAAE;YACf,MAAM,QAAQ,GAAG,yBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACvE,OAAO,CAAC,GAAoB,EAAE,EAAE;gBAC9B,uCAAuC;gBACvC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACxB,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,CAAC,CAAC;SACH;IACH,CAAC;CACF,CAAA;AApDC;IADC,IAAA,WAAM,GAAE;sCACC,oBAAe;kDAAC;AAG1B;IADC,IAAA,iBAAQ,EAAC,KAAK,CAAC;;6CACP;AAGT;IADC,IAAA,iBAAQ,EAAC,MAAM,CAAC;;sDACU;AARhB,gBAAgB;IAD5B,IAAA,eAAU,GAAE;GACA,gBAAgB,CAsD5B;AAtDY,4CAAgB","sourcesContent":["import {Constant, EndpointMetadata, PlatformContext, PlatformHandler, Provider, TokenProvider} from \"@tsed/common\";\nimport {Env} from \"@tsed/core\";\nimport {Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {INTERACTION, INTERACTION_OPTIONS, INTERACTIONS} from \"../constants/constants\";\nimport {OidcInteractionOptions} from \"../domain/OidcInteractionOptions\";\nimport {OidcSettings} from \"../domain/OidcSettings\";\n\n@Injectable()\nexport class OidcInteractions {\n @Inject()\n injector: InjectorService;\n\n @Constant(\"env\")\n env: Env;\n\n @Constant(\"oidc\")\n oidcSettings: OidcSettings;\n\n protected interactions: Map<string, Provider> = new Map();\n\n $onInit(): void {\n const platformHandler = this.injector.get<PlatformHandler>(PlatformHandler)!;\n\n this.getInteractions().forEach((provider: Provider) => {\n const {name} = provider.store.get<OidcInteractionOptions>(INTERACTION_OPTIONS);\n this.interactions.set(name, provider);\n\n if (this.injector.get(provider.token)?.$prompt) {\n provider.store.set(\"$prompt\", platformHandler.createCustomHandler(provider, \"$prompt\"));\n }\n });\n }\n\n getInteractions(): Provider[] {\n const interactionsProvider = this.injector.getProviders().find((provider) => provider.subType === INTERACTIONS);\n\n /* istanbul ignore next */\n if (!interactionsProvider) {\n return [];\n }\n\n return interactionsProvider.children\n .map((token: TokenProvider) => this.injector.getProvider(token)!)\n .filter((provider: Provider) => provider?.subType === INTERACTION);\n }\n\n getInteractionProvider(name: string): Provider | undefined {\n return this.interactions.get(name);\n }\n\n getInteractionHandler(name: string) {\n const interaction = this.getInteractionProvider(name);\n\n if (interaction) {\n const endpoint = EndpointMetadata.get(interaction.useClass, \"$prompt\");\n return (ctx: PlatformContext) => {\n // Add current endpoint metadata to ctx\n ctx.endpoint = endpoint;\n return interaction.store.get(\"$prompt\")(ctx);\n };\n }\n }\n}\n"]}
|
|
@@ -6,6 +6,9 @@ const di_1 = require("@tsed/di");
|
|
|
6
6
|
const path_1 = require("path");
|
|
7
7
|
const jwks_1 = require("@tsed/jwks");
|
|
8
8
|
let OidcJwks = class OidcJwks {
|
|
9
|
+
jwksPath;
|
|
10
|
+
certificates;
|
|
11
|
+
keys;
|
|
9
12
|
async $onInit() {
|
|
10
13
|
return this.getJwks();
|
|
11
14
|
}
|
|
@@ -16,15 +19,15 @@ let OidcJwks = class OidcJwks {
|
|
|
16
19
|
});
|
|
17
20
|
}
|
|
18
21
|
};
|
|
19
|
-
|
|
22
|
+
tslib_1.__decorate([
|
|
20
23
|
(0, di_1.Constant)("oidc.jwksPath", (0, path_1.join)(process.cwd(), "keys", "jwks.json")),
|
|
21
|
-
|
|
24
|
+
tslib_1.__metadata("design:type", String)
|
|
22
25
|
], OidcJwks.prototype, "jwksPath", void 0);
|
|
23
|
-
|
|
26
|
+
tslib_1.__decorate([
|
|
24
27
|
(0, di_1.Constant)("oidc.certificates"),
|
|
25
|
-
|
|
28
|
+
tslib_1.__metadata("design:type", Array)
|
|
26
29
|
], OidcJwks.prototype, "certificates", void 0);
|
|
27
|
-
OidcJwks =
|
|
30
|
+
OidcJwks = tslib_1.__decorate([
|
|
28
31
|
(0, di_1.Injectable)()
|
|
29
32
|
], OidcJwks);
|
|
30
33
|
exports.OidcJwks = OidcJwks;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcJwks.js","sourceRoot":"","sources":["../../../src/services/OidcJwks.ts"],"names":[],"mappings":";;;;AAAA,iCAA8C;AAC9C,+BAA0B;AAC1B,qCAAsD;AAGtD,IAAa,QAAQ,GAArB,MAAa,QAAQ;
|
|
1
|
+
{"version":3,"file":"OidcJwks.js","sourceRoot":"","sources":["../../../src/services/OidcJwks.ts"],"names":[],"mappings":";;;;AAAA,iCAA8C;AAC9C,+BAA0B;AAC1B,qCAAsD;AAGtD,IAAa,QAAQ,GAArB,MAAa,QAAQ;IAEnB,QAAQ,CAAS;IAGjB,YAAY,CAAuB;IAEnC,IAAI,CAAS;IAEb,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,OAAO;QACL,OAAO,IAAA,cAAO,EAAC;YACb,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAjBC;IADC,IAAA,aAAQ,EAAC,eAAe,EAAE,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;;0CACnD;AAGjB;IADC,IAAA,aAAQ,EAAC,mBAAmB,CAAC;;8CACK;AALxB,QAAQ;IADpB,IAAA,eAAU,GAAE;GACA,QAAQ,CAmBpB;AAnBY,4BAAQ","sourcesContent":["import {Constant, Injectable} from \"@tsed/di\";\nimport {join} from \"path\";\nimport {getJwks, JwksKeyParameters} from \"@tsed/jwks\";\n\n@Injectable()\nexport class OidcJwks {\n @Constant(\"oidc.jwksPath\", join(process.cwd(), \"keys\", \"jwks.json\"))\n jwksPath: string;\n\n @Constant(\"oidc.certificates\")\n certificates?: JwksKeyParameters[];\n\n keys: string;\n\n async $onInit() {\n return this.getJwks();\n }\n\n getJwks() {\n return getJwks({\n path: this.jwksPath,\n certificates: this.certificates\n });\n }\n}\n"]}
|
|
@@ -2,21 +2,33 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OidcProvider = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@tsed/common");
|
|
5
6
|
const core_1 = require("@tsed/core");
|
|
6
7
|
const di_1 = require("@tsed/di");
|
|
7
8
|
const oidc_provider_1 = require("oidc-provider");
|
|
8
|
-
const constants_1 = require("../constants");
|
|
9
|
+
const constants_1 = require("../constants/constants");
|
|
9
10
|
const OidcAdapters_1 = require("./OidcAdapters");
|
|
10
11
|
const OidcInteractions_1 = require("./OidcInteractions");
|
|
11
12
|
const OidcJwks_1 = require("./OidcJwks");
|
|
12
|
-
const common_1 = require("@tsed/common");
|
|
13
13
|
let OidcProvider = class OidcProvider {
|
|
14
|
+
raw;
|
|
15
|
+
env;
|
|
16
|
+
httpPort;
|
|
17
|
+
httpsPort;
|
|
18
|
+
issuer;
|
|
19
|
+
oidc;
|
|
20
|
+
platformName;
|
|
21
|
+
oidcJwks;
|
|
22
|
+
oidcInteractions;
|
|
23
|
+
adapters;
|
|
24
|
+
injector;
|
|
25
|
+
app;
|
|
14
26
|
hasConfiguration() {
|
|
15
27
|
return !!this.oidc;
|
|
16
28
|
}
|
|
17
29
|
async getConfiguration() {
|
|
18
30
|
const [jwks, adapter] = await Promise.all([this.oidcJwks.getJwks(), this.adapters.createAdapterClass()]);
|
|
19
|
-
const { issuer, jwksPath, secureKey, proxy, Accounts, ...options } = this.oidc;
|
|
31
|
+
const { issuer, jwksPath, secureKey, proxy, Accounts, secureCookies = this.env == core_1.Env.PROD, ...options } = this.oidc;
|
|
20
32
|
const configuration = {
|
|
21
33
|
interactions: {
|
|
22
34
|
/* istanbul ignore next */
|
|
@@ -27,9 +39,9 @@ let OidcProvider = class OidcProvider {
|
|
|
27
39
|
jwks
|
|
28
40
|
};
|
|
29
41
|
if (Accounts) {
|
|
30
|
-
configuration.findAccount = (ctx, id, token) => this.injector.get(Accounts).findAccount(id, token
|
|
42
|
+
configuration.findAccount = (ctx, id, token) => this.injector.get(Accounts).findAccount(id, token);
|
|
31
43
|
}
|
|
32
|
-
if (
|
|
44
|
+
if (secureCookies) {
|
|
33
45
|
(0, core_1.setValue)(configuration, "cookies.short.secure", true);
|
|
34
46
|
(0, core_1.setValue)(configuration, "cookies.long.secure", true);
|
|
35
47
|
}
|
|
@@ -60,10 +72,10 @@ let OidcProvider = class OidcProvider {
|
|
|
60
72
|
* Create a new instance of OidcProvider
|
|
61
73
|
*/
|
|
62
74
|
async create() {
|
|
63
|
-
const { proxy, secureKey } = this.oidc;
|
|
75
|
+
const { proxy = this.env === core_1.Env.PROD, secureKey, allowHttpLocalhost = this.env !== core_1.Env.PROD } = this.oidc;
|
|
64
76
|
const configuration = await this.getConfiguration();
|
|
65
77
|
const oidcProvider = new oidc_provider_1.Provider(this.getIssuer(), configuration);
|
|
66
|
-
if (proxy
|
|
78
|
+
if (proxy) {
|
|
67
79
|
// istanbul ignore next
|
|
68
80
|
switch (this.platformName) {
|
|
69
81
|
default:
|
|
@@ -79,7 +91,7 @@ let OidcProvider = class OidcProvider {
|
|
|
79
91
|
oidcProvider.app.keys = secureKey;
|
|
80
92
|
}
|
|
81
93
|
this.raw = oidcProvider;
|
|
82
|
-
if (
|
|
94
|
+
if (allowHttpLocalhost) {
|
|
83
95
|
this.allowHttpLocalhost();
|
|
84
96
|
}
|
|
85
97
|
await this.injector.emit("$onCreateOIDC", this.raw);
|
|
@@ -125,51 +137,51 @@ let OidcProvider = class OidcProvider {
|
|
|
125
137
|
return this.injector.alter("$alterOidcPolicy", policy);
|
|
126
138
|
}
|
|
127
139
|
};
|
|
128
|
-
|
|
140
|
+
tslib_1.__decorate([
|
|
129
141
|
(0, di_1.Constant)("env"),
|
|
130
|
-
|
|
142
|
+
tslib_1.__metadata("design:type", String)
|
|
131
143
|
], OidcProvider.prototype, "env", void 0);
|
|
132
|
-
|
|
144
|
+
tslib_1.__decorate([
|
|
133
145
|
(0, di_1.Constant)("httpPort"),
|
|
134
|
-
|
|
146
|
+
tslib_1.__metadata("design:type", Object)
|
|
135
147
|
], OidcProvider.prototype, "httpPort", void 0);
|
|
136
|
-
|
|
148
|
+
tslib_1.__decorate([
|
|
137
149
|
(0, di_1.Constant)("httpsPort"),
|
|
138
|
-
|
|
150
|
+
tslib_1.__metadata("design:type", Object)
|
|
139
151
|
], OidcProvider.prototype, "httpsPort", void 0);
|
|
140
|
-
|
|
152
|
+
tslib_1.__decorate([
|
|
141
153
|
(0, di_1.Constant)("oidc.issuer", ""),
|
|
142
|
-
|
|
154
|
+
tslib_1.__metadata("design:type", String)
|
|
143
155
|
], OidcProvider.prototype, "issuer", void 0);
|
|
144
|
-
|
|
156
|
+
tslib_1.__decorate([
|
|
145
157
|
(0, di_1.Constant)("oidc"),
|
|
146
|
-
|
|
158
|
+
tslib_1.__metadata("design:type", Object)
|
|
147
159
|
], OidcProvider.prototype, "oidc", void 0);
|
|
148
|
-
|
|
160
|
+
tslib_1.__decorate([
|
|
149
161
|
(0, di_1.Constant)("PLATFORM_NAME"),
|
|
150
|
-
|
|
162
|
+
tslib_1.__metadata("design:type", String)
|
|
151
163
|
], OidcProvider.prototype, "platformName", void 0);
|
|
152
|
-
|
|
164
|
+
tslib_1.__decorate([
|
|
153
165
|
(0, di_1.Inject)(),
|
|
154
|
-
|
|
166
|
+
tslib_1.__metadata("design:type", OidcJwks_1.OidcJwks)
|
|
155
167
|
], OidcProvider.prototype, "oidcJwks", void 0);
|
|
156
|
-
|
|
168
|
+
tslib_1.__decorate([
|
|
157
169
|
(0, di_1.Inject)(),
|
|
158
|
-
|
|
170
|
+
tslib_1.__metadata("design:type", OidcInteractions_1.OidcInteractions)
|
|
159
171
|
], OidcProvider.prototype, "oidcInteractions", void 0);
|
|
160
|
-
|
|
172
|
+
tslib_1.__decorate([
|
|
161
173
|
(0, di_1.Inject)(),
|
|
162
|
-
|
|
174
|
+
tslib_1.__metadata("design:type", OidcAdapters_1.OidcAdapters)
|
|
163
175
|
], OidcProvider.prototype, "adapters", void 0);
|
|
164
|
-
|
|
176
|
+
tslib_1.__decorate([
|
|
165
177
|
(0, di_1.Inject)(),
|
|
166
|
-
|
|
178
|
+
tslib_1.__metadata("design:type", di_1.InjectorService)
|
|
167
179
|
], OidcProvider.prototype, "injector", void 0);
|
|
168
|
-
|
|
180
|
+
tslib_1.__decorate([
|
|
169
181
|
(0, di_1.Inject)(),
|
|
170
|
-
|
|
182
|
+
tslib_1.__metadata("design:type", common_1.PlatformApplication)
|
|
171
183
|
], OidcProvider.prototype, "app", void 0);
|
|
172
|
-
OidcProvider =
|
|
184
|
+
OidcProvider = tslib_1.__decorate([
|
|
173
185
|
(0, di_1.Injectable)()
|
|
174
186
|
], OidcProvider);
|
|
175
187
|
exports.OidcProvider = OidcProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcProvider.js","sourceRoot":"","sources":["../../../src/services/OidcProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import {Env, setValue} from \"@tsed/core\";\nimport {Constant, Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {Provider as OIDCProvider, Configuration, interactionPolicy} from \"oidc-provider\";\nimport {INTERACTIONS} from \"../constants\";\nimport {OidcAccountsMethods, OidcSettings} from \"../domain\";\nimport {OidcAdapters} from \"./OidcAdapters\";\nimport {OidcInteractions} from \"./OidcInteractions\";\nimport {OidcJwks} from \"./OidcJwks\";\nimport {PlatformApplication} from \"@tsed/common\";\n\n@Injectable()\nexport class OidcProvider {\n raw: OIDCProvider;\n\n @Constant(\"env\")\n protected env: Env;\n\n @Constant(\"httpPort\")\n protected httpPort: number | string;\n\n @Constant(\"httpsPort\")\n protected httpsPort: number | string;\n\n @Constant(\"oidc.issuer\", \"\")\n protected issuer: string;\n\n @Constant(\"oidc\")\n protected oidc: OidcSettings;\n\n @Constant(\"PLATFORM_NAME\")\n protected platformName: string;\n\n @Inject()\n protected oidcJwks: OidcJwks;\n\n @Inject()\n protected oidcInteractions: OidcInteractions;\n\n @Inject()\n protected adapters: OidcAdapters;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected app: PlatformApplication;\n\n hasConfiguration() {\n return !!this.oidc;\n }\n\n async getConfiguration(): Promise<Configuration> {\n const [jwks, adapter] = await Promise.all([this.oidcJwks.getJwks(), this.adapters.createAdapterClass()]);\n const {issuer, jwksPath, secureKey, proxy, Accounts, ...options} = this.oidc;\n\n const configuration: Configuration = {\n interactions: {\n /* istanbul ignore next */\n url: (ctx, interaction) => `interaction/${interaction.uid}`\n },\n ...options,\n adapter,\n jwks\n };\n\n if (Accounts) {\n configuration.findAccount = (ctx, id, token) =>\n this.injector.get<OidcAccountsMethods>(Accounts)!.findAccount(id, token, (ctx.req as any).$ctx);\n }\n\n if (this.env === Env.PROD) {\n setValue(configuration, \"cookies.short.secure\", true);\n setValue(configuration, \"cookies.long.secure\", true);\n }\n\n const policy = this.getPolicy();\n if (policy) {\n setValue(configuration, \"interactions.policy\", policy);\n }\n\n const url = this.getInteractionsUrl();\n if (url) {\n setValue(configuration, \"interactions.url\", url);\n }\n\n return configuration;\n }\n\n getIssuer() {\n if (this.issuer) {\n return this.issuer;\n }\n\n // istanbul ignore next\n if (this.httpsPort) {\n return `https://localhost:${this.httpsPort}`;\n }\n\n return `http://localhost:${this.httpPort}`;\n }\n\n get(): OIDCProvider {\n return this.raw;\n }\n\n /**\n * Create a new instance of OidcProvider\n */\n async create(): Promise<void | OIDCProvider> {\n const {proxy, secureKey} = this.oidc;\n const configuration = await this.getConfiguration();\n const oidcProvider = new OIDCProvider(this.getIssuer(), configuration);\n\n if (proxy || this.env === Env.PROD) {\n // istanbul ignore next\n switch (this.platformName) {\n default:\n case \"express\":\n oidcProvider.proxy = true;\n break;\n case \"koa\":\n (this.app.rawApp as any).proxy = true;\n break;\n }\n }\n\n if (secureKey) {\n oidcProvider.app.keys = secureKey;\n }\n\n this.raw = oidcProvider;\n\n if (this.env !== Env.PROD) {\n this.allowHttpLocalhost();\n }\n\n await this.injector.emit(\"$onCreateOIDC\", this.raw);\n\n return this.raw;\n }\n\n private getInteractionsUrl() {\n const provider = this.injector.getProviders().find((provider) => provider.subType === INTERACTIONS);\n\n if (provider) {\n return (ctx: any, interaction: any) => {\n // eslint-disable-line no-unused-vars\n return provider.path.replace(/:uid/, interaction.uid);\n };\n }\n }\n\n private allowHttpLocalhost() {\n const {invalidate: orig} = (this.raw.Client as any).Schema.prototype;\n\n (this.raw.Client as any).Schema.prototype.invalidate = function invalidate(message: string, code: string) {\n if (code === \"implicit-force-https\" || code === \"implicit-forbid-localhost\") {\n return;\n }\n\n /* istanbul ignore next */\n return orig.call(this, message);\n };\n }\n\n private getPolicy() {\n const policy = interactionPolicy.base();\n const interactions = this.oidcInteractions.getInteractions();\n\n if (interactions.length) {\n interactions.forEach((provider) => {\n const {name, ...options} = provider.store.get(\"interactionOptions\");\n\n if (!policy.get(name)) {\n policy.add(\n new interactionPolicy.Prompt({\n name,\n ...options\n })\n );\n }\n\n const instance = this.injector.get(provider.token);\n\n if (instance.$onCreate) {\n instance.$onCreate(policy.get(name));\n }\n });\n }\n\n return this.injector.alter(\"$alterOidcPolicy\", policy);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"OidcProvider.js","sourceRoot":"","sources":["../../../src/services/OidcProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import {PlatformApplication} from \"@tsed/common\";\nimport {Env, setValue} from \"@tsed/core\";\nimport {Constant, Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {Configuration, interactionPolicy, Provider as OIDCProvider} from \"oidc-provider\";\nimport {INTERACTIONS} from \"../constants/constants\";\nimport {OidcAccountsMethods} from \"../domain/OidcAccountsMethods\";\nimport {OidcSettings} from \"../domain/OidcSettings\";\nimport {OidcAdapters} from \"./OidcAdapters\";\nimport {OidcInteractions} from \"./OidcInteractions\";\nimport {OidcJwks} from \"./OidcJwks\";\n\n@Injectable()\nexport class OidcProvider {\n raw: OIDCProvider;\n\n @Constant(\"env\")\n protected env: Env;\n\n @Constant(\"httpPort\")\n protected httpPort: number | string;\n\n @Constant(\"httpsPort\")\n protected httpsPort: number | string;\n\n @Constant(\"oidc.issuer\", \"\")\n protected issuer: string;\n\n @Constant(\"oidc\")\n protected oidc: OidcSettings;\n\n @Constant(\"PLATFORM_NAME\")\n protected platformName: string;\n\n @Inject()\n protected oidcJwks: OidcJwks;\n\n @Inject()\n protected oidcInteractions: OidcInteractions;\n\n @Inject()\n protected adapters: OidcAdapters;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected app: PlatformApplication;\n\n hasConfiguration() {\n return !!this.oidc;\n }\n\n async getConfiguration(): Promise<Configuration> {\n const [jwks, adapter] = await Promise.all([this.oidcJwks.getJwks(), this.adapters.createAdapterClass()]);\n const {issuer, jwksPath, secureKey, proxy, Accounts, secureCookies = this.env == Env.PROD, ...options} = this.oidc;\n\n const configuration: Configuration = {\n interactions: {\n /* istanbul ignore next */\n url: (ctx, interaction) => `interaction/${interaction.uid}`\n },\n ...options,\n adapter,\n jwks\n };\n\n if (Accounts) {\n configuration.findAccount = (ctx, id, token) => this.injector.get<OidcAccountsMethods>(Accounts)!.findAccount(id, token);\n }\n\n if (secureCookies) {\n setValue(configuration, \"cookies.short.secure\", true);\n setValue(configuration, \"cookies.long.secure\", true);\n }\n\n const policy = this.getPolicy();\n if (policy) {\n setValue(configuration, \"interactions.policy\", policy);\n }\n\n const url = this.getInteractionsUrl();\n if (url) {\n setValue(configuration, \"interactions.url\", url);\n }\n\n return configuration;\n }\n\n getIssuer() {\n if (this.issuer) {\n return this.issuer;\n }\n\n // istanbul ignore next\n if (this.httpsPort) {\n return `https://localhost:${this.httpsPort}`;\n }\n\n return `http://localhost:${this.httpPort}`;\n }\n\n get(): OIDCProvider {\n return this.raw;\n }\n\n /**\n * Create a new instance of OidcProvider\n */\n async create(): Promise<void | OIDCProvider> {\n const {proxy = this.env === Env.PROD, secureKey, allowHttpLocalhost = this.env !== Env.PROD} = this.oidc;\n const configuration = await this.getConfiguration();\n const oidcProvider = new OIDCProvider(this.getIssuer(), configuration);\n\n if (proxy) {\n // istanbul ignore next\n switch (this.platformName) {\n default:\n case \"express\":\n oidcProvider.proxy = true;\n break;\n case \"koa\":\n (this.app.rawApp as any).proxy = true;\n break;\n }\n }\n\n if (secureKey) {\n oidcProvider.app.keys = secureKey;\n }\n\n this.raw = oidcProvider;\n\n if (allowHttpLocalhost) {\n this.allowHttpLocalhost();\n }\n\n await this.injector.emit(\"$onCreateOIDC\", this.raw);\n\n return this.raw;\n }\n\n private getInteractionsUrl() {\n const provider = this.injector.getProviders().find((provider) => provider.subType === INTERACTIONS);\n\n if (provider) {\n return (ctx: any, interaction: any) => {\n // eslint-disable-line no-unused-vars\n return provider.path.replace(/:uid/, interaction.uid);\n };\n }\n }\n\n private allowHttpLocalhost() {\n const {invalidate: orig} = (this.raw.Client as any).Schema.prototype;\n\n (this.raw.Client as any).Schema.prototype.invalidate = function invalidate(message: string, code: string) {\n if (code === \"implicit-force-https\" || code === \"implicit-forbid-localhost\") {\n return;\n }\n\n /* istanbul ignore next */\n return orig.call(this, message);\n };\n }\n\n private getPolicy() {\n const policy = interactionPolicy.base();\n const interactions = this.oidcInteractions.getInteractions();\n\n if (interactions.length) {\n interactions.forEach((provider) => {\n const {name, ...options} = provider.store.get(\"interactionOptions\");\n\n if (!policy.get(name)) {\n policy.add(\n new interactionPolicy.Prompt({\n name,\n ...options\n })\n );\n }\n\n const instance = this.injector.get(provider.token);\n\n if (instance.$onCreate) {\n instance.$onCreate(policy.get(name));\n }\n });\n }\n\n return this.injector.alter(\"$alterOidcPolicy\", policy);\n }\n}\n"]}
|
package/lib/cjs/utils/debug.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.debug = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const core_1 = require("@tsed/core");
|
|
6
|
-
const querystring_1 =
|
|
6
|
+
const querystring_1 = tslib_1.__importDefault(require("querystring"));
|
|
7
7
|
const util_1 = require("util");
|
|
8
8
|
const keys = new Set();
|
|
9
9
|
function serialize(obj) {
|