Skip to content

Commit

Permalink
fix(oidc-provider): fix prompt mapping between methods and decorators…
Browse files Browse the repository at this point in the history
… parameters
  • Loading branch information
Romakita committed Oct 18, 2022
1 parent 20c3c15 commit 500c3f4
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 17 deletions.
4 changes: 2 additions & 2 deletions .gflowrc
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"flow": "gflow",
"remote": "origin",
"develop": "rc",
"production": "rc",
"develop": "production",
"production": "production",
"ignores": [],
"syncAfterFinish": false,
"postFinish": "",
Expand Down
46 changes: 46 additions & 0 deletions packages/security/oidc-provider/src/services/OidcProvider.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,50 @@ describe("OidcProvider", () => {
expect(oidcProvider.getInteractionsUrl()({}, {uid: "uid"})).toEqual("/interaction/uid");
});
});
describe("createPrompt()", () => {
beforeEach(() =>
PlatformTest.create({
env: Env.PROD,
oidc: {
issuer: "http://localhost:8081",
secureKey: ["secureKey"]
}
})
);
afterEach(() => PlatformTest.reset());
it("should bind options to prompt instance", () => {
const oidcProvider = PlatformTest.get<OidcProvider>(OidcProvider);
const instance = {};
const options = {
name: "name",
requestable: true,
details: jest.fn(),
checks: []
};

const prompt = oidcProvider.createPrompt(instance, options);

expect(prompt.details).toEqual(options.details);
expect(prompt.name).toEqual(options.name);
expect(prompt.requestable).toEqual(options.requestable);
});

it("should bind methods from instance to prompt instance", () => {
const oidcProvider = PlatformTest.get<OidcProvider>(OidcProvider);
const instance = {
details: jest.fn(),
checks: jest.fn().mockReturnValue([])
};
const options = {
name: "name",
requestable: true
};

const prompt = oidcProvider.createPrompt(instance, options);

expect(prompt.details).toBeDefined();
expect(prompt.name).toEqual(options.name);
expect(prompt.requestable).toEqual(options.requestable);
});
});
});
30 changes: 15 additions & 15 deletions packages/security/oidc-provider/src/services/OidcProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {Configuration, interactionPolicy, Provider as OIDCProvider} from "oidc-p
import {INTERACTIONS} from "../constants/constants";
import {InteractionMethods} from "../domain/InteractionMethods";
import {OidcAccountsMethods} from "../domain/OidcAccountsMethods";
import {OidcInteractionOptions} from "../domain/OidcInteractionOptions";
import {OidcSettings} from "../domain/OidcSettings";
import {OidcAdapters} from "./OidcAdapters";
import {OidcInteractions} from "./OidcInteractions";
Expand Down Expand Up @@ -153,6 +154,13 @@ export class OidcProvider {
return this.raw;
}

public createPrompt(instance: InteractionMethods, options: OidcInteractionOptions) {
const {checks: originalChecks = [], details, ...promptOptions} = options;
const checks = [...(instance.checks ? instance.checks() : originalChecks)].filter(Boolean);

return new interactionPolicy.Prompt(promptOptions, instance.details ? instance.details.bind(instance) : details, ...checks);
}

private getInteractionsUrl() {
const provider = this.injector.getProviders().find((provider) => provider.subType === INTERACTIONS);

Expand Down Expand Up @@ -184,24 +192,16 @@ export class OidcProvider {
if (interactions.length) {
interactions.forEach((provider) => {
const instance = this.injector.get<InteractionMethods>(provider.token)!;
const {name, checks = [], details} = provider.store.get("interactionOptions");

if (!policy.get(name)) {
policy.add(
new interactionPolicy.Prompt(
{
name,
...[instance.details ? instance.details.bind(instance) : details, ...(instance.checks ? instance.checks() : checks)].filter(
Boolean
)
},
checks
)
);
const options = provider.store.get("interactionOptions");

if (!policy.get(options.name)) {
const prompt = this.createPrompt(instance, options);

policy.add(prompt);
}

if (instance.$onCreate) {
instance.$onCreate(policy.get(name)!);
instance.$onCreate(policy.get(options.name)!);
}
});
}
Expand Down

0 comments on commit 500c3f4

Please sign in to comment.