Skip to content

Commit 8f05d59

Browse files
committed
identities authenticated command
1 parent a91b8ec commit 8f05d59

13 files changed

Lines changed: 373 additions & 21 deletions

File tree

src/bin/identities/CommandTokens.ts renamed to src/bin/identities/CommandAuthenticated.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import * as binUtils from '../utils';
66
import * as parsers from '../utils/parsers';
77
import * as binProcessors from '../utils/processors';
88

9-
class CommandTokens extends CommandPolykey {
9+
class CommandAuthenticated extends CommandPolykey {
1010
constructor(...args: ConstructorParameters<typeof CommandPolykey>) {
1111
super(...args);
12-
this.name('tokens');
12+
this.name('authenticated');
1313
this.description('Lists all authenticated identities across all providers');
1414
this.option(
1515
'-pi, --provider-id [providerId]',
@@ -38,7 +38,7 @@ class CommandTokens extends CommandPolykey {
3838
);
3939
let pkClient: PolykeyClient;
4040
let genReadable: ReturnType<
41-
typeof pkClient.grpcClient.identitiesTokensGet
41+
typeof pkClient.grpcClient.identitiesAuthenticatedGet
4242
>;
4343
this.exitHandlers.handlers.push(async () => {
4444
if (genReadable != null) genReadable.stream.cancel();
@@ -57,7 +57,7 @@ class CommandTokens extends CommandPolykey {
5757
optionalProviderMessage.setProviderId(options.providerId);
5858
}
5959
await binUtils.retryAuthentication(async (auth) => {
60-
const genReadable = pkClient.grpcClient.identitiesTokensGet(
60+
const genReadable = pkClient.grpcClient.identitiesAuthenticatedGet(
6161
optionalProviderMessage,
6262
auth,
6363
);
@@ -81,4 +81,4 @@ class CommandTokens extends CommandPolykey {
8181
}
8282
}
8383

84-
export default CommandTokens;
84+
export default CommandAuthenticated;

src/bin/identities/CommandIdentities.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import CommandAllow from './CommandAllow';
22
import CommandAuthenticate from './CommandAuthenticate';
3+
import CommandAuthenticated from './CommandAuthenticated';
34
import CommandClaim from './CommandClaim';
45
import CommandDisallow from './CommandDisallow';
56
import CommandDiscover from './CommandDiscover';
67
import CommandGet from './CommandGet';
78
import CommandList from './CommandList';
89
import CommandPermissions from './CommandPermissions';
910
import CommandSearch from './CommandSearch';
10-
import CommandTokens from './CommandTokens';
1111
import CommandTrust from './CommandTrust';
1212
import CommandUntrust from './CommandUntrust';
1313
import CommandPolykey from '../CommandPolykey';
@@ -19,14 +19,14 @@ class CommandIdentities extends CommandPolykey {
1919
this.description('Identities Operations');
2020
this.addCommand(new CommandAllow(...args));
2121
this.addCommand(new CommandAuthenticate(...args));
22+
this.addCommand(new CommandAuthenticated(...args));
2223
this.addCommand(new CommandClaim(...args));
2324
this.addCommand(new CommandDisallow(...args));
2425
this.addCommand(new CommandDiscover(...args));
2526
this.addCommand(new CommandGet(...args));
2627
this.addCommand(new CommandList(...args));
2728
this.addCommand(new CommandPermissions(...args));
2829
this.addCommand(new CommandSearch(...args));
29-
this.addCommand(new CommandTokens(...args));
3030
this.addCommand(new CommandTrust(...args));
3131
this.addCommand(new CommandUntrust(...args));
3232
}

src/client/GRPCClientClient.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,14 @@ class GRPCClientClient extends GRPCClient<ClientServiceClient> {
599599
)(...args);
600600
}
601601

602+
@ready(new clientErrors.ErrorClientClientDestroyed())
603+
public identitiesAuthenticatedGet(...args) {
604+
return grpcUtils.promisifyReadableStreamCall<identitiesPB.Provider>(
605+
this.client,
606+
this.client.identitiesAuthenticatedGet,
607+
)(...args);
608+
}
609+
602610
@ready(new clientErrors.ErrorClientClientDestroyed())
603611
public notificationsSend(...args) {
604612
return grpcUtils.promisifyUnaryCall<utilsPB.EmptyMessage>(

src/client/service/identitiesAuthenticatedGet.ts

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import type * as grpc from '@grpc/grpc-js';
22
import type { Authenticate } from '../types';
3-
import type { IdentitiesManager, Provider } from '../../identities';
4-
import type * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb';
3+
import type { IdentitiesManager } from '../../identities';
4+
import type { ProviderId } from '../../identities/types';
5+
import { validateSync } from '../../validation';
6+
import { matchSync } from '../../utils';
57
import * as grpcUtils from '../../grpc/utils';
8+
import * as validationUtils from '../../validation/utils';
69
import * as identitiesPB from '../../proto/js/polykey/v1/identities/identities_pb';
710

811
function identitiesAuthenticatedGet({
@@ -14,18 +17,37 @@ function identitiesAuthenticatedGet({
1417
}) {
1518
return async (
1619
call: grpc.ServerWritableStream<
17-
utilsPB.EmptyMessage,
20+
identitiesPB.OptionalProvider,
1821
identitiesPB.Provider
1922
>,
2023
): Promise<void> => {
2124
const genWritable = grpcUtils.generatorWritable(call);
2225
try {
2326
const metadata = await authenticate(call.metadata);
2427
call.sendMetadata(metadata);
25-
const providers = Object.values(
26-
identitiesManager.getProviders(),
27-
) as Array<Provider>;
28-
for (const provider of providers) {
28+
let providerId: ProviderId | undefined;
29+
if (call.request.hasProviderId()) {
30+
providerId = validateSync(
31+
(keyPath, value) => {
32+
return matchSync(keyPath)(
33+
[['providerId'], () => validationUtils.parseProviderId(value)],
34+
() => value,
35+
);
36+
},
37+
{
38+
providerId: call.request.getProviderId(),
39+
},
40+
).providerId;
41+
}
42+
const providerIds: Array<ProviderId> =
43+
providerId == null
44+
? (Object.keys(identitiesManager.getProviders()) as Array<ProviderId>)
45+
: [providerId];
46+
for (const providerId of providerIds) {
47+
const provider = identitiesManager.getProvider(providerId);
48+
if (provider == null) {
49+
continue;
50+
}
2951
const identities = await provider.getAuthIdentityIds();
3052
const providerMessage = new identitiesPB.Provider();
3153
providerMessage.setProviderId(provider.id);

src/client/service/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import gestaltsGestaltList from './gestaltsGestaltList';
3131
import gestaltsGestaltTrustByIdentity from './gestaltsGestaltTrustByIdentity';
3232
import gestaltsGestaltTrustByNode from './gestaltsGestaltTrustByNode';
3333
import identitiesAuthenticate from './identitiesAuthenticate';
34+
import identitiesAuthenticatedGet from './identitiesAuthenticatedGet';
3435
import identitiesClaim from './identitiesClaim';
3536
import identitiesInfoGet from './identitiesInfoGet';
3637
import identitiesInfoConnectedGet from './identitiesInfoConnectedGet';
@@ -131,6 +132,7 @@ function createService({
131132
gestaltsGestaltTrustByIdentity: gestaltsGestaltTrustByIdentity(container),
132133
gestaltsGestaltTrustByNode: gestaltsGestaltTrustByNode(container),
133134
identitiesAuthenticate: identitiesAuthenticate(container),
135+
identitiesAuthenticatedGet: identitiesAuthenticatedGet(container),
134136
identitiesClaim: identitiesClaim(container),
135137
identitiesInfoGet: identitiesInfoGet(container),
136138
identitiesInfoConnectedGet: identitiesInfoConnectedGet(container),

src/proto/js/polykey/v1/client_service_grpc_pb.d.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ interface IClientServiceService extends grpc.ServiceDefinition<grpc.UntypedServi
5959
vaultsVersion: IClientServiceService_IVaultsVersion;
6060
vaultsLog: IClientServiceService_IVaultsLog;
6161
identitiesAuthenticate: IClientServiceService_IIdentitiesAuthenticate;
62+
identitiesAuthenticatedGet: IClientServiceService_IIdentitiesAuthenticatedGet;
6263
identitiesTokenPut: IClientServiceService_IIdentitiesTokenPut;
6364
identitiesTokenGet: IClientServiceService_IIdentitiesTokenGet;
6465
identitiesTokenDelete: IClientServiceService_IIdentitiesTokenDelete;
@@ -444,6 +445,15 @@ interface IClientServiceService_IIdentitiesAuthenticate extends grpc.MethodDefin
444445
responseSerialize: grpc.serialize<polykey_v1_identities_identities_pb.AuthenticationProcess>;
445446
responseDeserialize: grpc.deserialize<polykey_v1_identities_identities_pb.AuthenticationProcess>;
446447
}
448+
interface IClientServiceService_IIdentitiesAuthenticatedGet extends grpc.MethodDefinition<polykey_v1_identities_identities_pb.OptionalProvider, polykey_v1_identities_identities_pb.Provider> {
449+
path: "/polykey.v1.ClientService/IdentitiesAuthenticatedGet";
450+
requestStream: false;
451+
responseStream: true;
452+
requestSerialize: grpc.serialize<polykey_v1_identities_identities_pb.OptionalProvider>;
453+
requestDeserialize: grpc.deserialize<polykey_v1_identities_identities_pb.OptionalProvider>;
454+
responseSerialize: grpc.serialize<polykey_v1_identities_identities_pb.Provider>;
455+
responseDeserialize: grpc.deserialize<polykey_v1_identities_identities_pb.Provider>;
456+
}
447457
interface IClientServiceService_IIdentitiesTokenPut extends grpc.MethodDefinition<polykey_v1_identities_identities_pb.TokenSpecific, polykey_v1_utils_utils_pb.EmptyMessage> {
448458
path: "/polykey.v1.ClientService/IdentitiesTokenPut";
449459
requestStream: false;
@@ -695,6 +705,7 @@ export interface IClientServiceServer extends grpc.UntypedServiceImplementation
695705
vaultsVersion: grpc.handleUnaryCall<polykey_v1_vaults_vaults_pb.Version, polykey_v1_vaults_vaults_pb.VersionResult>;
696706
vaultsLog: grpc.handleServerStreamingCall<polykey_v1_vaults_vaults_pb.Log, polykey_v1_vaults_vaults_pb.LogEntry>;
697707
identitiesAuthenticate: grpc.handleServerStreamingCall<polykey_v1_identities_identities_pb.Provider, polykey_v1_identities_identities_pb.AuthenticationProcess>;
708+
identitiesAuthenticatedGet: grpc.handleServerStreamingCall<polykey_v1_identities_identities_pb.OptionalProvider, polykey_v1_identities_identities_pb.Provider>;
698709
identitiesTokenPut: grpc.handleUnaryCall<polykey_v1_identities_identities_pb.TokenSpecific, polykey_v1_utils_utils_pb.EmptyMessage>;
699710
identitiesTokenGet: grpc.handleUnaryCall<polykey_v1_identities_identities_pb.Provider, polykey_v1_identities_identities_pb.Token>;
700711
identitiesTokenDelete: grpc.handleUnaryCall<polykey_v1_identities_identities_pb.Provider, polykey_v1_utils_utils_pb.EmptyMessage>;
@@ -834,6 +845,8 @@ export interface IClientServiceClient {
834845
vaultsLog(request: polykey_v1_vaults_vaults_pb.Log, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_vaults_vaults_pb.LogEntry>;
835846
identitiesAuthenticate(request: polykey_v1_identities_identities_pb.Provider, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.AuthenticationProcess>;
836847
identitiesAuthenticate(request: polykey_v1_identities_identities_pb.Provider, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.AuthenticationProcess>;
848+
identitiesAuthenticatedGet(request: polykey_v1_identities_identities_pb.OptionalProvider, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.Provider>;
849+
identitiesAuthenticatedGet(request: polykey_v1_identities_identities_pb.OptionalProvider, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.Provider>;
837850
identitiesTokenPut(request: polykey_v1_identities_identities_pb.TokenSpecific, callback: (error: grpc.ServiceError | null, response: polykey_v1_utils_utils_pb.EmptyMessage) => void): grpc.ClientUnaryCall;
838851
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;
839852
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;
@@ -1017,6 +1030,8 @@ export class ClientServiceClient extends grpc.Client implements IClientServiceCl
10171030
public vaultsLog(request: polykey_v1_vaults_vaults_pb.Log, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_vaults_vaults_pb.LogEntry>;
10181031
public identitiesAuthenticate(request: polykey_v1_identities_identities_pb.Provider, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.AuthenticationProcess>;
10191032
public identitiesAuthenticate(request: polykey_v1_identities_identities_pb.Provider, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.AuthenticationProcess>;
1033+
public identitiesAuthenticatedGet(request: polykey_v1_identities_identities_pb.OptionalProvider, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.Provider>;
1034+
public identitiesAuthenticatedGet(request: polykey_v1_identities_identities_pb.OptionalProvider, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<polykey_v1_identities_identities_pb.Provider>;
10201035
public identitiesTokenPut(request: polykey_v1_identities_identities_pb.TokenSpecific, callback: (error: grpc.ServiceError | null, response: polykey_v1_utils_utils_pb.EmptyMessage) => void): grpc.ClientUnaryCall;
10211036
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;
10221037
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;

src/proto/js/polykey/v1/client_service_grpc_pb.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,17 @@ function deserialize_polykey_v1_identities_Info(buffer_arg) {
8080
return polykey_v1_identities_identities_pb.Info.deserializeBinary(new Uint8Array(buffer_arg));
8181
}
8282

83+
function serialize_polykey_v1_identities_OptionalProvider(arg) {
84+
if (!(arg instanceof polykey_v1_identities_identities_pb.OptionalProvider)) {
85+
throw new Error('Expected argument of type polykey.v1.identities.OptionalProvider');
86+
}
87+
return Buffer.from(arg.serializeBinary());
88+
}
89+
90+
function deserialize_polykey_v1_identities_OptionalProvider(buffer_arg) {
91+
return polykey_v1_identities_identities_pb.OptionalProvider.deserializeBinary(new Uint8Array(buffer_arg));
92+
}
93+
8394
function serialize_polykey_v1_identities_Provider(arg) {
8495
if (!(arg instanceof polykey_v1_identities_identities_pb.Provider)) {
8596
throw new Error('Expected argument of type polykey.v1.identities.Provider');
@@ -934,6 +945,17 @@ identitiesAuthenticate: {
934945
responseSerialize: serialize_polykey_v1_identities_AuthenticationProcess,
935946
responseDeserialize: deserialize_polykey_v1_identities_AuthenticationProcess,
936947
},
948+
identitiesAuthenticatedGet: {
949+
path: '/polykey.v1.ClientService/IdentitiesAuthenticatedGet',
950+
requestStream: false,
951+
responseStream: true,
952+
requestType: polykey_v1_identities_identities_pb.OptionalProvider,
953+
responseType: polykey_v1_identities_identities_pb.Provider,
954+
requestSerialize: serialize_polykey_v1_identities_OptionalProvider,
955+
requestDeserialize: deserialize_polykey_v1_identities_OptionalProvider,
956+
responseSerialize: serialize_polykey_v1_identities_Provider,
957+
responseDeserialize: deserialize_polykey_v1_identities_Provider,
958+
},
937959
identitiesTokenPut: {
938960
path: '/polykey.v1.ClientService/IdentitiesTokenPut',
939961
requestStream: false,

src/proto/js/polykey/v1/identities/identities_pb.d.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,37 @@ export namespace Provider {
2929
}
3030
}
3131

32+
export class OptionalProvider extends jspb.Message {
33+
34+
hasProviderId(): boolean;
35+
clearProviderId(): void;
36+
getProviderId(): string;
37+
setProviderId(value: string): OptionalProvider;
38+
39+
getOptionalProviderIdCase(): OptionalProvider.OptionalProviderIdCase;
40+
41+
serializeBinary(): Uint8Array;
42+
toObject(includeInstance?: boolean): OptionalProvider.AsObject;
43+
static toObject(includeInstance: boolean, msg: OptionalProvider): OptionalProvider.AsObject;
44+
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
45+
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
46+
static serializeBinaryToWriter(message: OptionalProvider, writer: jspb.BinaryWriter): void;
47+
static deserializeBinary(bytes: Uint8Array): OptionalProvider;
48+
static deserializeBinaryFromReader(message: OptionalProvider, reader: jspb.BinaryReader): OptionalProvider;
49+
}
50+
51+
export namespace OptionalProvider {
52+
export type AsObject = {
53+
providerId: string,
54+
}
55+
56+
export enum OptionalProviderIdCase {
57+
OPTIONAL_PROVIDER_ID_NOT_SET = 0,
58+
PROVIDER_ID = 1,
59+
}
60+
61+
}
62+
3263
export class Token extends jspb.Message {
3364
getToken(): string;
3465
setToken(value: string): Token;

0 commit comments

Comments
 (0)