Skip to content

Commit

Permalink
feat(core-api): jwt authorization hyperledger#770
Browse files Browse the repository at this point in the history
WORK IN PROGRESS

Fixes hyperledger#770

Signed-off-by: Peter Somogyvari <peter.somogyvari@accenture.com>
  • Loading branch information
petermetz committed Apr 13, 2021
1 parent a2c1dd4 commit a5698f2
Show file tree
Hide file tree
Showing 65 changed files with 6,452 additions and 141 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ export class SupplyChainCactusPlugin

async registerWebServices(app: Express): Promise<IWebServiceEndpoint[]> {
const webServices = await this.getOrCreateWebServices();
webServices.forEach((ws) => ws.registerExpress(app));
await Promise.all(webServices.map((ws) => ws.registerExpress(app)));
return webServices;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,19 @@ import {
Checks,
LogLevelDesc,
LoggerProvider,
IAsyncProvider,
} from "@hyperledger/cactus-common";
import {
IEndpointAuthzOptions,
IExpressRequestHandler,
IWebServiceEndpoint,
} from "@hyperledger/cactus-core-api";
import { registerWebServiceEndpoint } from "@hyperledger/cactus-core";

import {
AuthorizationOptionsProvider,
registerWebServiceEndpoint,
} from "@hyperledger/cactus-core";

import {
DefaultApi as QuorumApi,
EthContractInvocationType,
Expand All @@ -26,8 +33,14 @@ export interface IInsertBambooHarvestEndpointOptions {
contractAbi: any;
apiClient: QuorumApi;
web3SigningCredential: Web3SigningCredential;
authorizationOptionsProvider?: AuthorizationOptionsProvider;
}

const K_DEFAULT_AUTHORIZATION_OPTIONS: IEndpointAuthzOptions = {
isProtected: true,
requiredRoles: [],
};

export class InsertBambooHarvestEndpoint implements IWebServiceEndpoint {
public static readonly HTTP_PATH = Constants.HTTP_PATH;

Expand All @@ -38,6 +51,7 @@ export class InsertBambooHarvestEndpoint implements IWebServiceEndpoint {
public static readonly CLASS_NAME = "InsertBambooHarvestEndpoint";

private readonly log: Logger;
private readonly authorizationOptionsProvider: AuthorizationOptionsProvider;

public get className(): string {
return InsertBambooHarvestEndpoint.CLASS_NAME;
Expand All @@ -57,10 +71,22 @@ export class InsertBambooHarvestEndpoint implements IWebServiceEndpoint {
const level = this.opts.logLevel || "INFO";
const label = this.className;
this.log = LoggerProvider.getOrCreate({ level, label });

this.authorizationOptionsProvider =
opts.authorizationOptionsProvider ||
AuthorizationOptionsProvider.of(K_DEFAULT_AUTHORIZATION_OPTIONS, level);

this.log.debug(`Instantiated ${this.className} OK`);
}

getAuthorizationOptionsProvider(): IAsyncProvider<IEndpointAuthzOptions> {
return this.authorizationOptionsProvider;
}

public registerExpress(expressApp: Express): IWebServiceEndpoint {
registerWebServiceEndpoint(expressApp, this);
public async registerExpress(
expressApp: Express,
): Promise<IWebServiceEndpoint> {
await registerWebServiceEndpoint(expressApp, this);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import {
Checks,
LogLevelDesc,
LoggerProvider,
IAsyncProvider,
} from "@hyperledger/cactus-common";
import {
IEndpointAuthzOptions,
IExpressRequestHandler,
IWebServiceEndpoint,
} from "@hyperledger/cactus-core-api";
Expand Down Expand Up @@ -59,8 +61,20 @@ export class InsertBookshelfEndpoint implements IWebServiceEndpoint {
this.log = LoggerProvider.getOrCreate({ level, label });
}

public registerExpress(expressApp: Express): IWebServiceEndpoint {
registerWebServiceEndpoint(expressApp, this);
getAuthorizationOptionsProvider(): IAsyncProvider<IEndpointAuthzOptions> {
// TODO: make this an injectable dependency in the constructor
return {
get: async () => ({
isProtected: true,
requiredRoles: [],
}),
};
}

public async registerExpress(
expressApp: Express,
): Promise<IWebServiceEndpoint> {
await registerWebServiceEndpoint(expressApp, this);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import {
Checks,
LogLevelDesc,
LoggerProvider,
IAsyncProvider,
} from "@hyperledger/cactus-common";
import {
IEndpointAuthzOptions,
IExpressRequestHandler,
IWebServiceEndpoint,
} from "@hyperledger/cactus-core-api";
Expand Down Expand Up @@ -42,8 +44,20 @@ export class InsertShipmentEndpoint implements IWebServiceEndpoint {
this.log = LoggerProvider.getOrCreate({ level, label });
}

public registerExpress(expressApp: Express): IWebServiceEndpoint {
registerWebServiceEndpoint(expressApp, this);
getAuthorizationOptionsProvider(): IAsyncProvider<IEndpointAuthzOptions> {
// TODO: make this an injectable dependency in the constructor
return {
get: async () => ({
isProtected: true,
requiredRoles: [],
}),
};
}

public async registerExpress(
expressApp: Express,
): Promise<IWebServiceEndpoint> {
await registerWebServiceEndpoint(expressApp, this);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import {
Checks,
LogLevelDesc,
LoggerProvider,
IAsyncProvider,
} from "@hyperledger/cactus-common";
import {
IEndpointAuthzOptions,
IExpressRequestHandler,
IWebServiceEndpoint,
} from "@hyperledger/cactus-core-api";
Expand Down Expand Up @@ -58,8 +60,20 @@ export class ListBambooHarvestEndpoint implements IWebServiceEndpoint {
this.log = LoggerProvider.getOrCreate({ level, label });
}

public registerExpress(expressApp: Express): IWebServiceEndpoint {
registerWebServiceEndpoint(expressApp, this);
getAuthorizationOptionsProvider(): IAsyncProvider<IEndpointAuthzOptions> {
// TODO: make this an injectable dependency in the constructor
return {
get: async () => ({
isProtected: true,
requiredRoles: [],
}),
};
}

public async registerExpress(
expressApp: Express,
): Promise<IWebServiceEndpoint> {
await registerWebServiceEndpoint(expressApp, this);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import {
Checks,
LogLevelDesc,
LoggerProvider,
IAsyncProvider,
} from "@hyperledger/cactus-common";
import {
IEndpointAuthzOptions,
IExpressRequestHandler,
IWebServiceEndpoint,
} from "@hyperledger/cactus-core-api";
Expand Down Expand Up @@ -58,8 +60,20 @@ export class ListBookshelfEndpoint implements IWebServiceEndpoint {
this.log = LoggerProvider.getOrCreate({ level, label });
}

public registerExpress(expressApp: Express): IWebServiceEndpoint {
registerWebServiceEndpoint(expressApp, this);
getAuthorizationOptionsProvider(): IAsyncProvider<IEndpointAuthzOptions> {
// TODO: make this an injectable dependency in the constructor
return {
get: async () => ({
isProtected: true,
requiredRoles: [],
}),
};
}

public async registerExpress(
expressApp: Express,
): Promise<IWebServiceEndpoint> {
await registerWebServiceEndpoint(expressApp, this);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import {
Checks,
LogLevelDesc,
LoggerProvider,
IAsyncProvider,
} from "@hyperledger/cactus-common";
import {
IEndpointAuthzOptions,
IExpressRequestHandler,
IWebServiceEndpoint,
} from "@hyperledger/cactus-core-api";
Expand Down Expand Up @@ -62,8 +64,20 @@ export class ListShipmentEndpoint implements IWebServiceEndpoint {
this.log = LoggerProvider.getOrCreate({ level, label });
}

public registerExpress(expressApp: Express): IWebServiceEndpoint {
registerWebServiceEndpoint(expressApp, this);
getAuthorizationOptionsProvider(): IAsyncProvider<IEndpointAuthzOptions> {
// TODO: make this an injectable dependency in the constructor
return {
get: async () => ({
isProtected: true,
requiredRoles: [],
}),
};
}

public async registerExpress(
expressApp: Express,
): Promise<IWebServiceEndpoint> {
await registerWebServiceEndpoint(expressApp, this);
return this;
}

Expand Down

0 comments on commit a5698f2

Please sign in to comment.