Skip to content

Commit da50df6

Browse files
tegefaulkesjoshuakarp
authored andcommitted
Implementing identities claim command
Fix naming of `identityId` field of `Provider` proto message Sigchain `addClaim()` method returns generated claim "Reset" functionality for Test Provider Replacing identities rpc exceptions with domain+client exceptions Refactoring identitiesAuthenticate process to correctly use a stream and expected data
1 parent a5cbb0b commit da50df6

35 files changed

+1098
-404
lines changed

src/PolykeyAgent.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,7 @@ class PolykeyAgent {
449449
notificationsManager: this.notificationsManager,
450450
sessionManager: this.sessionManager,
451451
vaultManager: this.vaultManager,
452+
sigchain: this.sigchain,
452453
grpcServerClient: this.grpcServerClient,
453454
grpcServerAgent: this.grpcServerAgent,
454455
fwdProxy: this.fwdProxy,

src/bin/identities/CommandAllow.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class CommandAllow extends CommandPolykey {
7272
// Setting By Identity
7373
const providerMessage = new identitiesPB.Provider();
7474
providerMessage.setProviderId(gestaltId.providerId);
75-
providerMessage.setMessage(gestaltId.identityId);
75+
providerMessage.setIdentityId(gestaltId.identityId);
7676
setActionMessage.setIdentity(providerMessage);
7777
await binUtils.retryAuthentication(
7878
(auth) =>

src/bin/identities/CommandAuthenticate.ts

Lines changed: 49 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import CommandPolykey from '../CommandPolykey';
33
import * as binUtils from '../utils';
44
import * as binOptions from '../utils/options';
55
import * as binProcessors from '../utils/processors';
6+
import * as identitiesUtils from '../../identities/utils';
67

78
class CommandAuthenticate extends CommandPolykey {
89
constructor(...args: ConstructorParameters<typeof CommandPolykey>) {
@@ -32,7 +33,11 @@ class CommandAuthenticate extends CommandPolykey {
3233
this.fs,
3334
);
3435
let pkClient: PolykeyClient;
36+
let genReadable: ReturnType<
37+
typeof pkClient.grpcClient.identitiesAuthenticate
38+
>;
3539
this.exitHandlers.handlers.push(async () => {
40+
if (genReadable != null) genReadable.stream.cancel();
3641
if (pkClient != null) await pkClient.stop();
3742
});
3843
try {
@@ -45,32 +50,50 @@ class CommandAuthenticate extends CommandPolykey {
4550
});
4651
const providerMessage = new identitiesPB.Provider();
4752
providerMessage.setProviderId(providerId);
48-
providerMessage.setMessage(identityId);
49-
const successMessage = await binUtils.retryAuthentication(
50-
async (auth) => {
51-
const stream = pkClient.grpcClient.identitiesAuthenticate(
52-
providerMessage,
53-
auth,
54-
);
55-
const codeMessage = (await stream.next()).value;
56-
process.stdout.write(
57-
binUtils.outputFormatter({
58-
type: options.format === 'json' ? 'json' : 'list',
59-
data: [`Your device code is: ${codeMessage!.getMessage()}`],
60-
}),
61-
);
62-
return (await stream.next()).value;
63-
},
64-
meta,
65-
);
66-
process.stdout.write(
67-
binUtils.outputFormatter({
68-
type: options.format === 'json' ? 'json' : 'list',
69-
data: [
70-
`Successfully authenticated user: ${successMessage!.getMessage()}`,
71-
],
72-
}),
73-
);
53+
providerMessage.setIdentityId(identityId);
54+
await binUtils.retryAuthentication(async (auth) => {
55+
genReadable = pkClient.grpcClient.identitiesAuthenticate(
56+
providerMessage,
57+
auth,
58+
);
59+
for await (const message of genReadable) {
60+
switch (message.getStepCase()) {
61+
case identitiesPB.AuthenticationProcess.StepCase.REQUEST: {
62+
const authRequest = message.getRequest()!;
63+
this.logger.info(
64+
`Navigate to the URL in order to authenticate`,
65+
);
66+
this.logger.info(
67+
'Use any additional additional properties to complete authentication',
68+
);
69+
identitiesUtils.browser(authRequest.getUrl());
70+
process.stdout.write(
71+
binUtils.outputFormatter({
72+
type: options.format === 'json' ? 'json' : 'dict',
73+
data: {
74+
url: authRequest.getUrl(),
75+
...Object.fromEntries(authRequest.getDataMap().entries()),
76+
},
77+
}),
78+
);
79+
break;
80+
}
81+
case identitiesPB.AuthenticationProcess.StepCase.RESPONSE: {
82+
const authResponse = message.getResponse()!;
83+
this.logger.info(
84+
`Authenticated digital identity provider ${providerId} with identity ${identityId}`,
85+
);
86+
process.stdout.write(
87+
binUtils.outputFormatter({
88+
type: options.format === 'json' ? 'json' : 'list',
89+
data: [authResponse.getIdentityId()],
90+
}),
91+
);
92+
break;
93+
}
94+
}
95+
}
96+
}, meta);
7497
} finally {
7598
if (pkClient! != null) await pkClient.stop();
7699
}

src/bin/identities/CommandClaim.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class CommandClaim extends CommandPolykey {
4545
});
4646
const providerMessage = new identitiesPB.Provider();
4747
providerMessage.setProviderId(providerId);
48-
providerMessage.setMessage(identityId);
48+
providerMessage.setIdentityId(identityId);
4949
await binUtils.retryAuthentication(
5050
(auth) => pkClient.grpcClient.identitiesClaim(providerMessage, auth),
5151
meta,

src/bin/identities/CommandDisallow.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class CommandDisallow extends CommandPolykey {
7272
// Setting by Identity
7373
const providerMessage = new identitiesPB.Provider();
7474
providerMessage.setProviderId(gestaltId.providerId);
75-
providerMessage.setMessage(gestaltId.identityId);
75+
providerMessage.setIdentityId(gestaltId.identityId);
7676
setActionMessage.setIdentity(providerMessage);
7777
// Trusting.
7878
await binUtils.retryAuthentication(

src/bin/identities/CommandDiscover.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class CommandDiscover extends CommandPolykey {
6363
// Discovery by Identity
6464
const providerMessage = new identitiesPB.Provider();
6565
providerMessage.setProviderId(gestaltId.providerId);
66-
providerMessage.setMessage(gestaltId.identityId);
66+
providerMessage.setIdentityId(gestaltId.identityId);
6767
await binUtils.retryAuthentication(
6868
(auth) =>
6969
pkClient.grpcClient.gestaltsDiscoveryByIdentity(

src/bin/identities/CommandGet.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class CommandGet extends CommandPolykey {
6565
// Getting from identity.
6666
const providerMessage = new identitiesPB.Provider();
6767
providerMessage.setProviderId(gestaltId.providerId);
68-
providerMessage.setMessage(gestaltId.identityId);
68+
providerMessage.setIdentityId(gestaltId.identityId);
6969
res = await binUtils.retryAuthentication(
7070
(auth) =>
7171
pkClient.grpcClient.gestaltsGestaltGetByIdentity(
@@ -88,12 +88,7 @@ class CommandGet extends CommandPolykey {
8888
// Listing identities
8989
for (const identityKey of Object.keys(gestalt.identities)) {
9090
const identity = gestalt.identities[identityKey];
91-
output.push(
92-
parsers.formatIdentityString(
93-
identity.providerId,
94-
identity.identityId,
95-
),
96-
);
91+
output.push(`${identity.providerId}:${identity.identityId}`);
9792
}
9893
}
9994
process.stdout.write(

src/bin/identities/CommandList.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import type PolykeyClient from '../../PolykeyClient';
22
import CommandPolykey from '../CommandPolykey';
33
import * as binOptions from '../utils/options';
44
import * as binUtils from '../utils';
5-
import * as parsers from '../utils/parsers';
65
import * as binProcessors from '../utils/processors';
76

87
class CommandList extends CommandPolykey {
@@ -90,25 +89,18 @@ class CommandList extends CommandPolykey {
9089
for (const gestalt of gestalts) {
9190
output.push(`gestalt ${count}`);
9291
output.push(`permissions: ${gestalt.permissions ?? 'None'}`);
93-
9492
// Listing nodes
9593
for (const node of gestalt.nodes) {
9694
output.push(`${node.id}`);
9795
}
9896
// Listing identities
9997
for (const identity of gestalt.identities) {
100-
output.push(
101-
parsers.formatIdentityString(
102-
identity.providerId,
103-
identity.identityId,
104-
),
105-
);
98+
output.push(`${identity.providerId}:${identity.identityId}`);
10699
}
107100
output.push('');
108101
count++;
109102
}
110103
}
111-
112104
process.stdout.write(
113105
binUtils.outputFormatter({
114106
type: options.format === 'json' ? 'json' : 'list',

src/bin/identities/CommandPermissions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class CommandPermissions extends CommandPolykey {
4848
port: clientOptions.clientPort,
4949
logger: this.logger.getChild(PolykeyClient.name),
5050
});
51-
let actions;
51+
let actions: string[] = [];
5252
if (gestaltId.nodeId) {
5353
// Getting by Node.
5454
const nodeMessage = new nodesPB.Node();
@@ -63,7 +63,7 @@ class CommandPermissions extends CommandPolykey {
6363
// Getting by Identity
6464
const providerMessage = new identitiesPB.Provider();
6565
providerMessage.setProviderId(gestaltId.providerId);
66-
providerMessage.setMessage(gestaltId.identityId);
66+
providerMessage.setIdentityId(gestaltId.identityId);
6767
const res = await binUtils.retryAuthentication(
6868
(auth) =>
6969
pkClient.grpcClient.gestaltsActionsGetByIdentity(

src/bin/identities/CommandSearch.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import type { ProviderId, IdentityId } from '../../identities/types';
21
import type PolykeyClient from '../../PolykeyClient';
32
import CommandPolykey from '../CommandPolykey';
43
import * as binOptions from '../utils/options';
54
import * as binUtils from '../utils';
6-
import * as parsers from '../utils/parsers';
75
import * as binProcessors from '../utils/processors';
86

97
class CommandSearch extends CommandPolykey {
@@ -54,15 +52,16 @@ class CommandSearch extends CommandPolykey {
5452
pkClient.grpcClient.identitiesInfoGet(providerMessage, auth),
5553
meta,
5654
);
55+
let output = '';
56+
if (res.getIdentityId() && res.getProviderId()) {
57+
output = `${res.getProviderId()}:${res.getIdentityId()}`;
58+
} else {
59+
this.logger.info('No Connected Identities found for Provider');
60+
}
5761
process.stdout.write(
5862
binUtils.outputFormatter({
5963
type: options.format === 'json' ? 'json' : 'list',
60-
data: [
61-
parsers.formatIdentityString(
62-
res.getProviderId() as ProviderId,
63-
res.getMessage() as IdentityId,
64-
),
65-
],
64+
data: [output],
6665
}),
6766
);
6867
} finally {

0 commit comments

Comments
 (0)