@@ -68,16 +68,21 @@ export type PermissionAttributes = {
|
||||
};
|
||||
|
||||
// @public
|
||||
export class PermissionClient {
|
||||
constructor(options: { discoveryApi: DiscoveryApi; configApi: Config });
|
||||
export interface PermissionAuthorizer {
|
||||
// (undocumented)
|
||||
authorize(
|
||||
requests: AuthorizeRequest[],
|
||||
options?: AuthorizeRequestOptions,
|
||||
): Promise<AuthorizeResponse[]>;
|
||||
}
|
||||
|
||||
// @public
|
||||
export class PermissionClient implements PermissionAuthorizer {
|
||||
constructor(options: { discovery: DiscoveryApi; config: Config });
|
||||
authorize(
|
||||
requests: AuthorizeRequest[],
|
||||
options?: AuthorizeRequestOptions,
|
||||
): Promise<AuthorizeResponse[]>;
|
||||
// (undocumented)
|
||||
protected readonly enabled: boolean;
|
||||
// (undocumented)
|
||||
protected shouldBypass(_options?: AuthorizeRequestOptions): Promise<boolean>;
|
||||
}
|
||||
|
||||
// @public
|
||||
|
||||
@@ -26,14 +26,14 @@ const server = setupServer();
|
||||
const token = 'fake-token';
|
||||
|
||||
const mockBaseUrl = 'http://backstage:9191/i-am-a-mock-base';
|
||||
const discoveryApi: DiscoveryApi = {
|
||||
const discovery: DiscoveryApi = {
|
||||
async getBaseUrl() {
|
||||
return mockBaseUrl;
|
||||
},
|
||||
};
|
||||
const client: PermissionClient = new PermissionClient({
|
||||
discoveryApi,
|
||||
configApi: new ConfigReader({ permission: { enabled: true } }),
|
||||
discovery,
|
||||
config: new ConfigReader({ permission: { enabled: true } }),
|
||||
});
|
||||
|
||||
const mockPermission: Permission = {
|
||||
@@ -158,8 +158,8 @@ describe('PermissionClient', () => {
|
||||
},
|
||||
);
|
||||
const disabled = new PermissionClient({
|
||||
discoveryApi,
|
||||
configApi: new ConfigReader({ permission: { enabled: false } }),
|
||||
discovery,
|
||||
config: new ConfigReader({ permission: { enabled: false } }),
|
||||
});
|
||||
const response = await disabled.authorize([mockAuthorizeRequest]);
|
||||
expect(response[0]).toEqual(
|
||||
@@ -180,8 +180,8 @@ describe('PermissionClient', () => {
|
||||
},
|
||||
);
|
||||
const disabled = new PermissionClient({
|
||||
discoveryApi,
|
||||
configApi: new ConfigReader({}),
|
||||
discovery,
|
||||
config: new ConfigReader({}),
|
||||
});
|
||||
const response = await disabled.authorize([mockAuthorizeRequest]);
|
||||
expect(response[0]).toEqual(
|
||||
|
||||
@@ -29,7 +29,7 @@ import {
|
||||
} from './types/api';
|
||||
import { DiscoveryApi } from './types/discovery';
|
||||
import {
|
||||
PermissionClientInterface,
|
||||
PermissionAuthorizer,
|
||||
AuthorizeRequestOptions,
|
||||
} from './types/permission';
|
||||
|
||||
@@ -67,14 +67,14 @@ const responseSchema = z.array(
|
||||
* An isomorphic client for requesting authorization for Backstage permissions.
|
||||
* @public
|
||||
*/
|
||||
export class PermissionClient implements PermissionClientInterface {
|
||||
export class PermissionClient implements PermissionAuthorizer {
|
||||
private readonly enabled: boolean;
|
||||
private readonly discoveryApi: DiscoveryApi;
|
||||
private readonly discovery: DiscoveryApi;
|
||||
|
||||
constructor(options: { discoveryApi: DiscoveryApi; configApi: Config }) {
|
||||
this.discoveryApi = options.discoveryApi;
|
||||
constructor(options: { discovery: DiscoveryApi; config: Config }) {
|
||||
this.discovery = options.discovery;
|
||||
this.enabled =
|
||||
options.configApi.getOptionalBoolean('permission.enabled') ?? false;
|
||||
options.config.getOptionalBoolean('permission.enabled') ?? false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -113,7 +113,7 @@ export class PermissionClient implements PermissionClientInterface {
|
||||
}),
|
||||
);
|
||||
|
||||
const permissionApi = await this.discoveryApi.getBaseUrl('permission');
|
||||
const permissionApi = await this.discovery.getBaseUrl('permission');
|
||||
const response = await fetch(`${permissionApi}/authorize`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(identifiedRequests),
|
||||
|
||||
@@ -26,6 +26,6 @@ export type { DiscoveryApi } from './discovery';
|
||||
export type {
|
||||
PermissionAttributes,
|
||||
Permission,
|
||||
PermissionClientInterface,
|
||||
PermissionAuthorizer,
|
||||
AuthorizeRequestOptions,
|
||||
} from './permission';
|
||||
|
||||
@@ -42,7 +42,11 @@ export type Permission = {
|
||||
resourceType?: string;
|
||||
};
|
||||
|
||||
export interface PermissionClientInterface {
|
||||
/**
|
||||
* A client interacting with the permission backend can implement this authorizer interface.
|
||||
* @public
|
||||
*/
|
||||
export interface PermissionAuthorizer {
|
||||
authorize(
|
||||
requests: AuthorizeRequest[],
|
||||
options?: AuthorizeRequestOptions,
|
||||
@@ -50,7 +54,7 @@ export interface PermissionClientInterface {
|
||||
}
|
||||
|
||||
/**
|
||||
* Options for authorization requests; currently only an optional auth token.
|
||||
* Options for authorization requests.
|
||||
* @public
|
||||
*/
|
||||
export type AuthorizeRequestOptions = {
|
||||
|
||||
Reference in New Issue
Block a user