@tsed/oidc-provider 7.0.0-rc.1 → 7.0.0-rc.4

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.
@@ -100,7 +100,7 @@ let OidcInteractionContext = class OidcInteractionContext {
100
100
  if (this.grantId) {
101
101
  // we'll be modifying existing grant in existing session
102
102
  // @ts-ignore
103
- return await (this.oidcProvider.get().find || Grant.find)(this.grantId);
103
+ return await Grant.find(this.grantId);
104
104
  }
105
105
  return new Grant({
106
106
  accountId: this.session?.accountId,
@@ -1 +1 @@
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"]}
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 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"]}
@@ -74,6 +74,7 @@ let OidcProvider = class OidcProvider {
74
74
  async create() {
75
75
  const { proxy = this.env === core_1.Env.PROD, secureKey, allowHttpLocalhost = this.env !== core_1.Env.PROD } = this.oidc;
76
76
  const configuration = await this.getConfiguration();
77
+ await this.injector.alterAsync("$alterOidcConfiguration", configuration);
77
78
  const oidcProvider = new oidc_provider_1.Provider(this.getIssuer(), configuration);
78
79
  if (proxy) {
79
80
  // istanbul ignore next
@@ -1 +1 @@
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"]}
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\n await this.injector.alterAsync(\"$alterOidcConfiguration\", configuration);\n\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"]}
@@ -97,7 +97,7 @@ let OidcInteractionContext = class OidcInteractionContext {
97
97
  if (this.grantId) {
98
98
  // we'll be modifying existing grant in existing session
99
99
  // @ts-ignore
100
- return await (this.oidcProvider.get().find || Grant.find)(this.grantId);
100
+ return await Grant.find(this.grantId);
101
101
  }
102
102
  return new Grant({
103
103
  accountId: this.session?.accountId,
@@ -1 +1 @@
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"]}
1
+ {"version":3,"file":"OidcInteractionContext.js","sourceRoot":"","sources":["../../../src/services/OidcInteractionContext.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAC,MAAM,cAAc,CAAC;AACtE,OAAO,EAAC,GAAG,EAAC,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAC,sBAAsB,EAAC,MAAM,kCAAkC,CAAC;AAGxE,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAG5C,IAAa,sBAAsB,GAAnC,MAAa,sBAAsB;IAEjC,GAAG,CAAM;IAGC,YAAY,CAAe;IAG3B,gBAAgB,CAAmB;IAGnC,IAAI,CAAkB;IAEhC,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAE,CAAC;IAC7C,CAAC;IAED,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,IAAI,CAAC,CAAC;SAC1B;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrG,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAC,GAAG,GAAU,CAAC;QAE3D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAE5C,OAAO,GAAG,CAAC;IACb,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,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9G,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,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5G,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAA4B;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAEvC,OAAO;YACL,MAAM;YACN,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC5B,MAAM,EAAE;gBACN,GAAG,IAAI,CAAC,MAAM;gBACd,GAAG,OAAO,CAAC,MAAM;aAClB;YACD,GAAG,OAAO;YACV,GAAG,IAAI,CAAC,KAAK,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,MAAW;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,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,MAAM,GAAG,GAAG,WAAW,QAAQ,EAAE,CAAC;QAElC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAY,EAAE,KAAW;QACzC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;YACxB,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,SAAgB,CAAC;SACtC;QAED,IAAI,CAAC,GAAG,EAAE;YACR,OAAO;SACR;QAED,MAAM,GAAG,GAAG,YAAY,GAAG,EAAE,CAAC;QAE9B,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAsB,GAAG,EAAE,CAAC,GAAG,EAAE;YAC1D,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,SAAgB,EAAE,GAAI,EAAE,KAAK,CAAC,CAAC;QACpF,CAAC,CAAQ,CAAC,CAAC;IACb,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,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACvC;QAED,OAAO,IAAI,KAAK,CAAC;YACf,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS;YAClC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;SAChC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,IAAY;QAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;YAC7B,MAAM,IAAI,sBAAsB,CAAC,sBAAsB,CAAC,CAAC;SAC1D;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,YAAY,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;SACzD;IACH,CAAC;IAED,KAAK,CAAC,GAAS;QACb,0BAA0B;QAC1B,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,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,KAAK,CAAC,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;AAhKC;IADC,QAAQ,CAAC,KAAK,CAAC;;mDACP;AAGT;IADC,MAAM,EAAE;8BACe,YAAY;4DAAC;AAGrC;IADC,MAAM,EAAE;8BACmB,gBAAgB;gEAAC;AAG7C;IADC,aAAa,EAAE;8BACA,eAAe;oDAAC;AAXrB,sBAAsB;IADlC,UAAU,EAAE;GACA,sBAAsB,CAkKlC;SAlKY,sBAAsB","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 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"]}
@@ -71,6 +71,7 @@ let OidcProvider = class OidcProvider {
71
71
  async create() {
72
72
  const { proxy = this.env === Env.PROD, secureKey, allowHttpLocalhost = this.env !== Env.PROD } = this.oidc;
73
73
  const configuration = await this.getConfiguration();
74
+ await this.injector.alterAsync("$alterOidcConfiguration", configuration);
74
75
  const oidcProvider = new OIDCProvider(this.getIssuer(), configuration);
75
76
  if (proxy) {
76
77
  // istanbul ignore next
@@ -1 +1 @@
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"]}
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\n await this.injector.alterAsync(\"$alterOidcConfiguration\", configuration);\n\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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsed/oidc-provider",
3
- "version": "7.0.0-rc.1",
3
+ "version": "7.0.0-rc.4",
4
4
  "description": "OIDC provider package for Ts.ED framework",
5
5
  "private": false,
6
6
  "source": "./src/index.ts",
@@ -22,7 +22,7 @@
22
22
  "test": "cross-env NODE_ENV=test yarn jest --max-workers=2"
23
23
  },
24
24
  "dependencies": {
25
- "@tsed/adapters": "7.0.0-rc.1",
25
+ "@tsed/adapters": "7.0.0-rc.4",
26
26
  "express-urlrewrite": "^1.4.0",
27
27
  "jose2": "npm:jose@^2.0.4",
28
28
  "koa-mount": "^4.0.0",
@@ -31,10 +31,10 @@
31
31
  "uuid": "8.3.2"
32
32
  },
33
33
  "devDependencies": {
34
- "@tsed/common": "7.0.0-rc.1",
35
- "@tsed/core": "7.0.0-rc.1",
36
- "@tsed/di": "7.0.0-rc.1",
37
- "@tsed/exceptions": "7.0.0-rc.1",
34
+ "@tsed/common": "7.0.0-rc.4",
35
+ "@tsed/core": "7.0.0-rc.4",
36
+ "@tsed/di": "7.0.0-rc.4",
37
+ "@tsed/exceptions": "7.0.0-rc.4",
38
38
  "@types/lowdb": "1.0.11",
39
39
  "@types/oidc-provider": "^7.1.1",
40
40
  "@types/uuid": "8.3.4",
@@ -42,7 +42,7 @@
42
42
  "oidc-provider": "7.11.1"
43
43
  },
44
44
  "peerDependencies": {
45
- "@tsed/common": "^7.0.0-rc.1",
45
+ "@tsed/common": "^7.0.0-rc.4",
46
46
  "oidc-provider": ">=7.3.0"
47
47
  },
48
48
  "peerDependenciesMeta": {
package/readme.md CHANGED
@@ -89,9 +89,9 @@ export class Server {}
89
89
 
90
90
  ## Contributors
91
91
 
92
- Please read [contributing guidelines here](https://tsed.io/CONTRIBUTING.html)
92
+ Please read [contributing guidelines here](https://tsed.io/contributing.html)
93
93
 
94
- <a href="https://github.com/tsedio/ts-express-decorators/graphs/contributors"><img src="https://opencollective.com/tsed/contributors.svg?width=890" /></a>
94
+ <a href="https://github.com/tsedio/tsed/graphs/contributors"><img src="https://opencollective.com/tsed/contributors.svg?width=890" /></a>
95
95
 
96
96
  ## Backers
97
97