2023-02-03 10:45:11 +00:00
|
|
|
// tslint:disable:no-unused-expression
|
|
|
|
import { faker } from "@faker-js/faker";
|
|
|
|
import * as chai from "chai";
|
|
|
|
import { KeycloakAdminClient } from "../src/client.js";
|
|
|
|
import { credentials } from "./constants.js";
|
|
|
|
|
|
|
|
const expect = chai.expect;
|
|
|
|
|
|
|
|
describe("Identity providers", () => {
|
|
|
|
let kcAdminClient: KeycloakAdminClient;
|
|
|
|
let currentIdpAlias: string;
|
|
|
|
|
|
|
|
before(async () => {
|
|
|
|
kcAdminClient = new KeycloakAdminClient();
|
|
|
|
await kcAdminClient.auth(credentials);
|
|
|
|
|
|
|
|
// create idp
|
2024-10-30 11:14:02 +00:00
|
|
|
const alias = faker.internet.username();
|
2023-02-03 10:45:11 +00:00
|
|
|
const idp = await kcAdminClient.identityProviders.create({
|
|
|
|
alias,
|
|
|
|
providerId: "saml",
|
|
|
|
});
|
|
|
|
expect(idp.id).to.be.ok;
|
|
|
|
currentIdpAlias = alias;
|
|
|
|
|
|
|
|
// create idp mapper
|
|
|
|
const mapper = {
|
|
|
|
name: "First Name",
|
|
|
|
identityProviderAlias: currentIdpAlias,
|
|
|
|
identityProviderMapper: "saml-user-attribute-idp-mapper",
|
|
|
|
config: {},
|
|
|
|
};
|
|
|
|
const idpMapper = await kcAdminClient.identityProviders.createMapper({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
identityProviderMapper: mapper,
|
|
|
|
});
|
|
|
|
expect(idpMapper.id).to.be.ok;
|
|
|
|
});
|
|
|
|
|
|
|
|
after(async () => {
|
|
|
|
const idpMapper = await kcAdminClient.identityProviders.findMappers({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
});
|
|
|
|
|
|
|
|
const idpMapperId = idpMapper[0].id;
|
|
|
|
await kcAdminClient.identityProviders.delMapper({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
id: idpMapperId!,
|
|
|
|
});
|
|
|
|
|
|
|
|
const idpMapperUpdated =
|
|
|
|
await kcAdminClient.identityProviders.findOneMapper({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
id: idpMapperId!,
|
|
|
|
});
|
|
|
|
|
|
|
|
// check idp mapper deleted
|
|
|
|
expect(idpMapperUpdated).to.be.null;
|
|
|
|
|
|
|
|
await kcAdminClient.identityProviders.del({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
});
|
|
|
|
|
|
|
|
const idp = await kcAdminClient.identityProviders.findOne({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
});
|
|
|
|
|
|
|
|
// check idp deleted
|
|
|
|
expect(idp).to.be.null;
|
|
|
|
});
|
|
|
|
|
|
|
|
it("list idp", async () => {
|
|
|
|
const idps = await kcAdminClient.identityProviders.find();
|
|
|
|
expect(idps.length).to.be.least(1);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("get an idp", async () => {
|
|
|
|
const idp = await kcAdminClient.identityProviders.findOne({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
});
|
|
|
|
expect(idp).to.include({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it("update an idp", async () => {
|
|
|
|
const idp = (await kcAdminClient.identityProviders.findOne({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
}))!;
|
|
|
|
await kcAdminClient.identityProviders.update(
|
|
|
|
{ alias: currentIdpAlias },
|
|
|
|
{
|
|
|
|
// alias and providerId are required to update
|
|
|
|
alias: idp.alias!,
|
|
|
|
providerId: idp.providerId!,
|
|
|
|
displayName: "test",
|
2023-07-11 14:03:21 +00:00
|
|
|
},
|
2023-02-03 10:45:11 +00:00
|
|
|
);
|
|
|
|
const updatedIdp = await kcAdminClient.identityProviders.findOne({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
});
|
|
|
|
|
|
|
|
expect(updatedIdp).to.include({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
displayName: "test",
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it("list idp factory", async () => {
|
|
|
|
const idpFactory = await kcAdminClient.identityProviders.findFactory({
|
|
|
|
providerId: "saml",
|
|
|
|
});
|
|
|
|
|
|
|
|
expect(idpFactory).to.include({
|
|
|
|
id: "saml",
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it("get an idp mapper", async () => {
|
|
|
|
const mappers = await kcAdminClient.identityProviders.findMappers({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
});
|
|
|
|
expect(mappers.length).to.be.least(1);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("update an idp mapper", async () => {
|
|
|
|
const idpMapper = await kcAdminClient.identityProviders.findMappers({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
});
|
|
|
|
const idpMapperId = idpMapper[0].id;
|
|
|
|
|
|
|
|
await kcAdminClient.identityProviders.updateMapper(
|
|
|
|
{ alias: currentIdpAlias, id: idpMapperId! },
|
|
|
|
{
|
|
|
|
id: idpMapperId,
|
|
|
|
identityProviderAlias: currentIdpAlias,
|
|
|
|
identityProviderMapper: "saml-user-attribute-idp-mapper",
|
|
|
|
config: {
|
|
|
|
"user.attribute": "firstName",
|
|
|
|
},
|
2023-07-11 14:03:21 +00:00
|
|
|
},
|
2023-02-03 10:45:11 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
const updatedIdpMappers =
|
|
|
|
(await kcAdminClient.identityProviders.findOneMapper({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
id: idpMapperId!,
|
|
|
|
}))!;
|
|
|
|
|
|
|
|
const userAttribute = updatedIdpMappers.config["user.attribute"];
|
|
|
|
expect(userAttribute).to.equal("firstName");
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Import from url", async () => {
|
|
|
|
const result = await kcAdminClient.identityProviders.importFromUrl({
|
|
|
|
providerId: "oidc",
|
|
|
|
fromUrl:
|
|
|
|
"http://localhost:8180/realms/master/.well-known/openid-configuration",
|
|
|
|
});
|
|
|
|
|
|
|
|
expect(result).to.be.ok;
|
|
|
|
expect(result.authorizationUrl).to.equal(
|
2023-07-11 14:03:21 +00:00
|
|
|
"http://localhost:8180/realms/master/protocol/openid-connect/auth",
|
2023-02-03 10:45:11 +00:00
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it.skip("Enable fine grained permissions", async () => {
|
|
|
|
const permission = await kcAdminClient.identityProviders.updatePermission(
|
|
|
|
{ alias: currentIdpAlias },
|
2023-07-11 14:03:21 +00:00
|
|
|
{ enabled: true },
|
2023-02-03 10:45:11 +00:00
|
|
|
);
|
|
|
|
expect(permission).to.include({
|
|
|
|
enabled: true,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it.skip("list permissions", async () => {
|
|
|
|
const permissions = await kcAdminClient.identityProviders.listPermissions({
|
|
|
|
alias: currentIdpAlias,
|
|
|
|
});
|
|
|
|
|
|
|
|
expect(permissions.scopePermissions).to.be.an("object");
|
|
|
|
});
|
|
|
|
});
|