Skip to content

Commit

Permalink
identities authenticated command
Browse files Browse the repository at this point in the history
  • Loading branch information
emmacasolin committed Feb 14, 2022
1 parent a91b8ec commit 8f05d59
Show file tree
Hide file tree
Showing 13 changed files with 373 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import * as binUtils from '../utils';
import * as parsers from '../utils/parsers';
import * as binProcessors from '../utils/processors';

class CommandTokens extends CommandPolykey {
class CommandAuthenticated extends CommandPolykey {
constructor(...args: ConstructorParameters<typeof CommandPolykey>) {
super(...args);
this.name('tokens');
this.name('authenticated');
this.description('Lists all authenticated identities across all providers');
this.option(
'-pi, --provider-id [providerId]',
Expand Down Expand Up @@ -38,7 +38,7 @@ class CommandTokens extends CommandPolykey {
);
let pkClient: PolykeyClient;
let genReadable: ReturnType<
typeof pkClient.grpcClient.identitiesTokensGet
typeof pkClient.grpcClient.identitiesAuthenticatedGet
>;
this.exitHandlers.handlers.push(async () => {
if (genReadable != null) genReadable.stream.cancel();
Expand All @@ -57,7 +57,7 @@ class CommandTokens extends CommandPolykey {
optionalProviderMessage.setProviderId(options.providerId);
}
await binUtils.retryAuthentication(async (auth) => {
const genReadable = pkClient.grpcClient.identitiesTokensGet(
const genReadable = pkClient.grpcClient.identitiesAuthenticatedGet(
optionalProviderMessage,
auth,
);
Expand All @@ -81,4 +81,4 @@ class CommandTokens extends CommandPolykey {
}
}

export default CommandTokens;
export default CommandAuthenticated;
4 changes: 2 additions & 2 deletions src/bin/identities/CommandIdentities.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import CommandAllow from './CommandAllow';
import CommandAuthenticate from './CommandAuthenticate';
import CommandAuthenticated from './CommandAuthenticated';
import CommandClaim from './CommandClaim';
import CommandDisallow from './CommandDisallow';
import CommandDiscover from './CommandDiscover';
import CommandGet from './CommandGet';
import CommandList from './CommandList';
import CommandPermissions from './CommandPermissions';
import CommandSearch from './CommandSearch';
import CommandTokens from './CommandTokens';
import CommandTrust from './CommandTrust';
import CommandUntrust from './CommandUntrust';
import CommandPolykey from '../CommandPolykey';
Expand All @@ -19,14 +19,14 @@ class CommandIdentities extends CommandPolykey {
this.description('Identities Operations');
this.addCommand(new CommandAllow(...args));
this.addCommand(new CommandAuthenticate(...args));
this.addCommand(new CommandAuthenticated(...args));
this.addCommand(new CommandClaim(...args));
this.addCommand(new CommandDisallow(...args));
this.addCommand(new CommandDiscover(...args));
this.addCommand(new CommandGet(...args));
this.addCommand(new CommandList(...args));
this.addCommand(new CommandPermissions(...args));
this.addCommand(new CommandSearch(...args));
this.addCommand(new CommandTokens(...args));
this.addCommand(new CommandTrust(...args));
this.addCommand(new CommandUntrust(...args));
}
Expand Down
8 changes: 8 additions & 0 deletions src/client/GRPCClientClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,14 @@ class GRPCClientClient extends GRPCClient<ClientServiceClient> {
)(...args);
}

@ready(new clientErrors.ErrorClientClientDestroyed())
public identitiesAuthenticatedGet(...args) {
return grpcUtils.promisifyReadableStreamCall<identitiesPB.Provider>(
this.client,
this.client.identitiesAuthenticatedGet,
)(...args);
}

@ready(new clientErrors.ErrorClientClientDestroyed())
public notificationsSend(...args) {
return grpcUtils.promisifyUnaryCall<utilsPB.EmptyMessage>(
Expand Down
36 changes: 29 additions & 7 deletions src/client/service/identitiesAuthenticatedGet.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import type * as grpc from '@grpc/grpc-js';
import type { Authenticate } from '../types';
import type { IdentitiesManager, Provider } from '../../identities';
import type * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb';
import type { IdentitiesManager } from '../../identities';
import type { ProviderId } from '../../identities/types';
import { validateSync } from '../../validation';
import { matchSync } from '../../utils';
import * as grpcUtils from '../../grpc/utils';
import * as validationUtils from '../../validation/utils';
import * as identitiesPB from '../../proto/js/polykey/v1/identities/identities_pb';

function identitiesAuthenticatedGet({
Expand All @@ -14,18 +17,37 @@ function identitiesAuthenticatedGet({
}) {
return async (
call: grpc.ServerWritableStream<
utilsPB.EmptyMessage,
identitiesPB.OptionalProvider,
identitiesPB.Provider
>,
): Promise<void> => {
const genWritable = grpcUtils.generatorWritable(call);
try {
const metadata = await authenticate(call.metadata);
call.sendMetadata(metadata);
const providers = Object.values(
identitiesManager.getProviders(),
) as Array<Provider>;
for (const provider of providers) {
let providerId: ProviderId | undefined;
if (call.request.hasProviderId()) {
providerId = validateSync(
(keyPath, value) => {
return matchSync(keyPath)(
[['providerId'], () => validationUtils.parseProviderId(value)],
() => value,
);
},
{
providerId: call.request.getProviderId(),
},
).providerId;
}
const providerIds: Array<ProviderId> =
providerId == null
? (Object.keys(identitiesManager.getProviders()) as Array<ProviderId>)
: [providerId];
for (const providerId of providerIds) {
const provider = identitiesManager.getProvider(providerId);
if (provider == null) {
continue;
}
const identities = await provider.getAuthIdentityIds();
const providerMessage = new identitiesPB.Provider();
providerMessage.setProviderId(provider.id);
Expand Down
2 changes: 2 additions & 0 deletions src/client/service/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import gestaltsGestaltList from './gestaltsGestaltList';
import gestaltsGestaltTrustByIdentity from './gestaltsGestaltTrustByIdentity';
import gestaltsGestaltTrustByNode from './gestaltsGestaltTrustByNode';
import identitiesAuthenticate from './identitiesAuthenticate';
import identitiesAuthenticatedGet from './identitiesAuthenticatedGet';
import identitiesClaim from './identitiesClaim';
import identitiesInfoGet from './identitiesInfoGet';
import identitiesInfoConnectedGet from './identitiesInfoConnectedGet';
Expand Down Expand Up @@ -131,6 +132,7 @@ function createService({
gestaltsGestaltTrustByIdentity: gestaltsGestaltTrustByIdentity(container),
gestaltsGestaltTrustByNode: gestaltsGestaltTrustByNode(container),
identitiesAuthenticate: identitiesAuthenticate(container),
identitiesAuthenticatedGet: identitiesAuthenticatedGet(container),
identitiesClaim: identitiesClaim(container),
identitiesInfoGet: identitiesInfoGet(container),
identitiesInfoConnectedGet: identitiesInfoConnectedGet(container),
Expand Down
15 changes: 15 additions & 0 deletions src/proto/js/polykey/v1/client_service_grpc_pb.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ interface IClientServiceService extends grpc.ServiceDefinition<grpc.UntypedServi
vaultsVersion: IClientServiceService_IVaultsVersion;
vaultsLog: IClientServiceService_IVaultsLog;
identitiesAuthenticate: IClientServiceService_IIdentitiesAuthenticate;
identitiesAuthenticatedGet: IClientServiceService_IIdentitiesAuthenticatedGet;
identitiesTokenPut: IClientServiceService_IIdentitiesTokenPut;
identitiesTokenGet: IClientServiceService_IIdentitiesTokenGet;
identitiesTokenDelete: IClientServiceService_IIdentitiesTokenDelete;
Expand Down Expand Up @@ -444,6 +445,15 @@ interface IClientServiceService_IIdentitiesAuthenticate extends grpc.MethodDefin
responseSerialize: grpc.serialize<polykey_v1_identities_identities_pb.AuthenticationProcess>;
responseDeserialize: grpc.deserialize<polykey_v1_identities_identities_pb.AuthenticationProcess>;
}
interface IClientServiceService_IIdentitiesAuthenticatedGet extends grpc.MethodDefinition<polykey_v1_identities_identities_pb.OptionalProvider, polykey_v1_identities_identities_pb.Provider> {
path: "/polykey.v1.ClientService/IdentitiesAuthenticatedGet";
requestStream: false;
responseStream: true;
requestSerialize: grpc.serialize<polykey_v1_identities_identities_pb.OptionalProvider>;
requestDeserialize: grpc.deserialize<polykey_v1_identities_identities_pb.OptionalProvider>;
responseSerialize: grpc.serialize<polykey_v1_identities_identities_pb.Provider>;
responseDeserialize: grpc.deserialize<polykey_v1_identities_identities_pb.Provider>;
}
interface IClientServiceService_IIdentitiesTokenPut extends grpc.MethodDefinition<polykey_v1_identities_identities_pb.TokenSpecific, polykey_v1_utils_utils_pb.EmptyMessage> {
path: "/polykey.v1.ClientService/IdentitiesTokenPut";
requestStream: false;
Expand Down Expand Up @@ -695,6 +705,7 @@ export interface IClientServiceServer extends grpc.UntypedServiceImplementation
vaultsVersion: grpc.handleUnaryCall<polykey_v1_vaults_vaults_pb.Version, polykey_v1_vaults_vaults_pb.VersionResult>;
vaultsLog: grpc.handleServerStreamingCall<polykey_v1_vaults_vaults_pb.Log, polykey_v1_vaults_vaults_pb.LogEntry>;
identitiesAuthenticate: grpc.handleServerStreamingCall<polykey_v1_identities_identities_pb.Provider, polykey_v1_identities_identities_pb.AuthenticationProcess>;
identitiesAuthenticatedGet: grpc.handleServerStreamingCall<polykey_v1_identities_identities_pb.OptionalProvider, polykey_v1_identities_identities_pb.Provider>;
identitiesTokenPut: grpc.handleUnaryCall<polykey_v1_identities_identities_pb.TokenSpecific, polykey_v1_utils_utils_pb.EmptyMessage>;
identitiesTokenGet: grpc.handleUnaryCall<polykey_v1_identities_identities_pb.Provider, polykey_v1_identities_identities_pb.Token>;
identitiesTokenDelete: grpc.handleUnaryCall<polykey_v1_identities_identities_pb.Provider, polykey_v1_utils_utils_pb.EmptyMessage>;
Expand Down Expand Up @@ -834,6 +845,8 @@ export interface IClientServiceClient {
vaultsLog(request: polykey_v1_vaults_vaults_pb.Log, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_vaults_vaults_pb.LogEntry>;
identitiesAuthenticate(request: polykey_v1_identities_identities_pb.Provider, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.AuthenticationProcess>;
identitiesAuthenticate(request: polykey_v1_identities_identities_pb.Provider, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.AuthenticationProcess>;
identitiesAuthenticatedGet(request: polykey_v1_identities_identities_pb.OptionalProvider, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.Provider>;
identitiesAuthenticatedGet(request: polykey_v1_identities_identities_pb.OptionalProvider, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.Provider>;
identitiesTokenPut(request: polykey_v1_identities_identities_pb.TokenSpecific, callback: (error: grpc.ServiceError | null, response: polykey_v1_utils_utils_pb.EmptyMessage) => void): grpc.ClientUnaryCall;
identitiesTokenPut(request: polykey_v1_identities_identities_pb.TokenSpecific, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: polykey_v1_utils_utils_pb.EmptyMessage) => void): grpc.ClientUnaryCall;
identitiesTokenPut(request: polykey_v1_identities_identities_pb.TokenSpecific, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: polykey_v1_utils_utils_pb.EmptyMessage) => void): grpc.ClientUnaryCall;
Expand Down Expand Up @@ -1017,6 +1030,8 @@ export class ClientServiceClient extends grpc.Client implements IClientServiceCl
public vaultsLog(request: polykey_v1_vaults_vaults_pb.Log, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_vaults_vaults_pb.LogEntry>;
public identitiesAuthenticate(request: polykey_v1_identities_identities_pb.Provider, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.AuthenticationProcess>;
public identitiesAuthenticate(request: polykey_v1_identities_identities_pb.Provider, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.AuthenticationProcess>;
public identitiesAuthenticatedGet(request: polykey_v1_identities_identities_pb.OptionalProvider, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.Provider>;
public identitiesAuthenticatedGet(request: polykey_v1_identities_identities_pb.OptionalProvider, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.Provider>;
public identitiesTokenPut(request: polykey_v1_identities_identities_pb.TokenSpecific, callback: (error: grpc.ServiceError | null, response: polykey_v1_utils_utils_pb.EmptyMessage) => void): grpc.ClientUnaryCall;
public identitiesTokenPut(request: polykey_v1_identities_identities_pb.TokenSpecific, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: polykey_v1_utils_utils_pb.EmptyMessage) => void): grpc.ClientUnaryCall;
public identitiesTokenPut(request: polykey_v1_identities_identities_pb.TokenSpecific, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: polykey_v1_utils_utils_pb.EmptyMessage) => void): grpc.ClientUnaryCall;
Expand Down
22 changes: 22 additions & 0 deletions src/proto/js/polykey/v1/client_service_grpc_pb.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,17 @@ function deserialize_polykey_v1_identities_Info(buffer_arg) {
return polykey_v1_identities_identities_pb.Info.deserializeBinary(new Uint8Array(buffer_arg));
}

function serialize_polykey_v1_identities_OptionalProvider(arg) {
if (!(arg instanceof polykey_v1_identities_identities_pb.OptionalProvider)) {
throw new Error('Expected argument of type polykey.v1.identities.OptionalProvider');
}
return Buffer.from(arg.serializeBinary());
}

function deserialize_polykey_v1_identities_OptionalProvider(buffer_arg) {
return polykey_v1_identities_identities_pb.OptionalProvider.deserializeBinary(new Uint8Array(buffer_arg));
}

function serialize_polykey_v1_identities_Provider(arg) {
if (!(arg instanceof polykey_v1_identities_identities_pb.Provider)) {
throw new Error('Expected argument of type polykey.v1.identities.Provider');
Expand Down Expand Up @@ -934,6 +945,17 @@ identitiesAuthenticate: {
responseSerialize: serialize_polykey_v1_identities_AuthenticationProcess,
responseDeserialize: deserialize_polykey_v1_identities_AuthenticationProcess,
},
identitiesAuthenticatedGet: {
path: '/polykey.v1.ClientService/IdentitiesAuthenticatedGet',
requestStream: false,
responseStream: true,
requestType: polykey_v1_identities_identities_pb.OptionalProvider,
responseType: polykey_v1_identities_identities_pb.Provider,
requestSerialize: serialize_polykey_v1_identities_OptionalProvider,
requestDeserialize: deserialize_polykey_v1_identities_OptionalProvider,
responseSerialize: serialize_polykey_v1_identities_Provider,
responseDeserialize: deserialize_polykey_v1_identities_Provider,
},
identitiesTokenPut: {
path: '/polykey.v1.ClientService/IdentitiesTokenPut',
requestStream: false,
Expand Down
31 changes: 31 additions & 0 deletions src/proto/js/polykey/v1/identities/identities_pb.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,37 @@ export namespace Provider {
}
}

export class OptionalProvider extends jspb.Message {

hasProviderId(): boolean;
clearProviderId(): void;
getProviderId(): string;
setProviderId(value: string): OptionalProvider;

getOptionalProviderIdCase(): OptionalProvider.OptionalProviderIdCase;

serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): OptionalProvider.AsObject;
static toObject(includeInstance: boolean, msg: OptionalProvider): OptionalProvider.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: OptionalProvider, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): OptionalProvider;
static deserializeBinaryFromReader(message: OptionalProvider, reader: jspb.BinaryReader): OptionalProvider;
}

export namespace OptionalProvider {
export type AsObject = {
providerId: string,
}

export enum OptionalProviderIdCase {
OPTIONAL_PROVIDER_ID_NOT_SET = 0,
PROVIDER_ID = 1,
}

}

export class Token extends jspb.Message {
getToken(): string;
setToken(value: string): Token;
Expand Down
Loading

0 comments on commit 8f05d59

Please sign in to comment.