Skip to content

Commit 4be96ba

Browse files
committed
chore: aligned rpc with tailscale login flow
1 parent fda0963 commit 4be96ba

File tree

2 files changed

+4
-45
lines changed

2 files changed

+4
-45
lines changed

src/client/handlers/AuthSignToken.ts

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,27 @@
11
import type {
22
ClientRPCRequestParams,
33
ClientRPCResponseResult,
4-
IdentityRequestData,
54
IdentityResponseData,
6-
TokenIdentityRequest,
75
TokenIdentityResponse,
86
} from '../types.js';
97
import type KeyRing from '../../keys/KeyRing.js';
10-
import type { PublicKey } from '../../keys/types.js';
118
import { UnaryHandler } from '@matrixai/rpc';
129
import Token from '../../tokens/Token.js';
13-
import * as clientErrors from '../errors.js';
1410
import * as nodesUtils from '../../nodes/utils.js';
1511

1612
class AuthSignToken extends UnaryHandler<
1713
{
1814
keyRing: KeyRing;
1915
},
20-
ClientRPCRequestParams<TokenIdentityRequest>,
16+
ClientRPCRequestParams,
2117
ClientRPCResponseResult<TokenIdentityResponse>
2218
> {
23-
public handle = async (
24-
input: ClientRPCRequestParams<TokenIdentityRequest>,
25-
): Promise<TokenIdentityResponse> => {
19+
public handle = async (): Promise<TokenIdentityResponse> => {
2620
const { keyRing }: { keyRing: KeyRing } = this.container;
27-
28-
// Get and verify incoming node
29-
const inputToken = { payload: input.payload, signatures: input.signatures };
30-
const incomingToken = Token.fromEncoded<IdentityRequestData>(inputToken);
31-
if (!('publicKey' in incomingToken.payload)) {
32-
throw new clientErrors.ErrorClientAuthenticationInvalidToken(
33-
'Input token does not contain public key',
34-
);
35-
}
36-
const incomingPublicKey = Buffer.from(
37-
incomingToken.payload.publicKey,
38-
'base64url',
39-
) as PublicKey;
40-
if (!incomingToken.verifyWithPublicKey(incomingPublicKey)) {
41-
throw new clientErrors.ErrorClientAuthenticationInvalidToken(
42-
'Incoming token does not match its signature',
43-
);
44-
}
45-
46-
// Create the outgoing token with the incoming token integrated into the
47-
// payload.
48-
const outgoingTokenPayload: IdentityResponseData = {
49-
requestToken: inputToken,
21+
const tokenPayload: IdentityResponseData = {
5022
nodeId: nodesUtils.encodeNodeId(keyRing.getNodeId()),
5123
};
52-
const outgoingToken =
53-
Token.fromPayload<IdentityResponseData>(outgoingTokenPayload);
24+
const outgoingToken = Token.fromPayload<IdentityResponseData>(tokenPayload);
5425
outgoingToken.signWithPrivateKey(keyRing.keyPair);
5526
return outgoingToken.toEncoded();
5627
};

src/client/types.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -108,17 +108,7 @@ type TokenMessage = {
108108
token: ProviderToken;
109109
};
110110

111-
// Return URL must be present on the token, otherwise token contents is decided
112-
// by the client.
113-
type IdentityRequestData = TokenPayload & {
114-
returnURL: string;
115-
publicKey: string;
116-
};
117-
118-
type TokenIdentityRequest = SignedTokenEncoded;
119-
120111
type IdentityResponseData = TokenPayload & {
121-
requestToken: TokenIdentityRequest;
122112
nodeId: NodeIdEncoded;
123113
};
124114

@@ -422,9 +412,7 @@ export type {
422412
ClaimIdMessage,
423413
ClaimNodeMessage,
424414
TokenMessage,
425-
IdentityRequestData,
426415
IdentityResponseData,
427-
TokenIdentityRequest,
428416
TokenIdentityResponse,
429417
NodeIdMessage,
430418
AddressMessage,

0 commit comments

Comments
 (0)