8000 verifiable credential in account console by graziang · Pull Request #48940 · keycloak/keycloak · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions js/apps/account-ui/public/content.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@
"path": "applications",
"isVisible": "isViewApplicationsEnabled"
},
{
"label": "verifiableCredentials",
"path": "verifiable-credentials",
"isVisible": "isOid4VciEnabled"
},
{
"label": "groups",
"path": "groups",
Expand All @@ -31,10 +36,5 @@
"label": "resources",
"path": "resources",
"isVisible": "isMyResourcesEnabled"
},
{
"label": "oid4vci",
"path": "oid4vci",
"isVisible":"isOid4VciEnabled"
}
]
56 changes: 1 addition & 55 deletions js/apps/account-ui/src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,8 @@ import {
import { CallOptions } from "./api/methods";
import { Links, parseLinks } from "./api/parse-links";
import { parseResponse } from "./api/parse-response";
import {
CredentialsIssuer,
Permission,
Resource,
Scope,
SupportedCredentialConfiguration,
} from "./api/representations";
import { Permission, Resource, Scope } from "./api/representations";
import { request } from "./api/request";
import { joinPath } from "./utils/joinPath";

export const fetchResources = async (
{ signal, context }: CallOptions,
Expand Down Expand Up @@ -72,50 +65,3 @@ function checkResponse<T>(response: T) {
if (!response) throw new Error("Could not fetch");
return response;
}

export async function getIssuer(context: KeycloakContext<BaseEnvironment>) {
const response = await request(
joinPath(
"/realms/",
context.environment.realm,
"/.well-known/openid-credential-issuer",
),
context,
{},
new URL(
joinPath(
context.environment.serverBaseUrl,
"/realms/",
context.environment.realm,
"/.well-known/openid-credential-issuer",
),
),
);
return parseResponse<CredentialsIssuer>(response);
}

export async function requestVCOffer(
context: KeycloakContext<BaseEnvironment>,
supportedCredentialConfiguration: SupportedCredentialConfiguration,
credentialsIssuer: CredentialsIssuer,
) {
const response = await request(
"/protocol/oid4vc/create-credential-offer",
context,
{
searchParams: {
credential_configuration_id: supportedCredentialConfiguration.id,
type: "qr-code",
width: "500",
height: "500",
},
},
new URL(
joinPath(
credentialsIssuer.credential_issuer +
"/protocol/oid4vc/create-credential-offer",
),
),
);
return response.blob();
}
26 changes: 26 additions & 0 deletions js/apps/account-ui/src/api/methods.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
LinkedAccountRepresentation,
Permission,
UserRepresentation,
UserVerifiableCredentialRepresentation,
} from "./representations";
import { request } from "./request";

Expand Down Expand Up @@ -153,3 +154,28 @@ export async function getUserOrganizations({ signal, context }: CallOptions) {
const response = await request("/organizations", context, { signal });
return parseResponse<OrganizationRepresentation[]>(response);
}

export async function getVerifiableCredentials({
signal,
context,
}: CallOptions): Promise<UserVerifiableCredentialRepresentation[]> {
const response = await request("/verifiable-credentials", context, {
signal,
});
return parseResponse<UserVerifiableCredentialRepresentation[]>(response);
}

export async function deleteVerifiableCredential(
context: KeycloakContext<BaseEnvironment>,
credentialScopeName: string,
): Promise<void> {
const response = await request(
`/verifiable-credentials/${credentialScopeName}`,
context,
{ method: "DELETE" },
);
if (!response.ok) {
const error = await parseResponse(response);
throw error;
}
}
15 changes: 1 addition & 14 deletions js/apps/account-ui/src/api/representations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -212,17 +212,4 @@ export interface Group {
path: string;
}

export interface SupportedCredentialConfiguration {
id: string;
format: string;
scope: string;
}
export interface CredentialsIssuer {
credential_issuer: string;
credential_endpoint: string;
authorization_servers: string[];
credential_configurations_supported: Record<
string,
SupportedCredentialConfiguration
>;
}
export type { default as UserVerifiableCredentialRepresentation } from "@keycloak/keycloak-admin-client/lib/defs/userVerifiableCredentialRepresentation";
1 change: 0 additions & 1 deletion js/apps/account-ui/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ export { Resources } from "./resources/Resources";
export { ResourcesTab } from "./resources/ResourcesTab";
export { ResourceToolbar } from "./resources/ResourceToolbar";
export { SharedWith } from "./resources/SharedWith";
export { Oid4Vci } from "./oid4vci/Oid4Vci";
export { Organizations } from "./organizations/Organizations";
export { ShareTheResource } from "./resources/ShareTheResource";
export {
Expand Down
137 changes: 0 additions & 137 deletions js/apps/account-ui/src/oid4vci/Oid4Vci.tsx

This file was deleted.

16 changes: 9 additions & 7 deletions js/apps/account-ui/src/routes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ const Applications = lazy(() => import("./applications/Applications"));
const Groups = lazy(() => import("./groups/Groups"));
const PersonalInfo = lazy(() => import("./personal-info/PersonalInfo"));
const Resources = lazy(() => import("./resources/Resources"));
const VerifiableCredentials = lazy(
() => import("./verifiable-credentials/VerifiableCredentials"),
);
const ContentComponent = lazy(() => import("./content/ContentComponent"));
const Oid4Vci = lazy(() => import("./oid4vci/Oid4Vci"));

export const DeviceActivityRoute: RouteObject = {
path: "account-security/device-activity",
Expand All @@ -27,6 +29,11 @@ export const SigningInRoute: RouteObject = {
element: <SigningIn />,
};

export const VerifiableCredentialsRoute: RouteObject = {
path: "verifiable-credentials",
element: <VerifiableCredentials />,
};

export const ApplicationsRoute: RouteObject = {
path: "applications",
element: <Applications />,
Expand Down Expand Up @@ -62,20 +69,15 @@ export const OrganizationsRoute: RouteObject = {
element: <Organizations />,
};

export const Oid4VciRoute: RouteObject = {
path: "oid4vci",
element: <Oid4Vci />,
};

export const routes: RouteObject[] = [
PersonalInfoRoute,
DeviceActivityRoute,
LinkedAccountsRoute,
SigningInRoute,
VerifiableCredentialsRoute,
ApplicationsRoute,
GroupsRoute,
OrganizationsRoute,
ResourcesRoute,
ContentRoute,
Oid4VciRoute,
];
Loading
Loading
0