Skip to content

Commit 87ac1af

Browse files
committed
refactor: use existing auth message type for token sync
1 parent 30140f9 commit 87ac1af

10 files changed

Lines changed: 50 additions & 73 deletions

File tree

packages/common/src/auth.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as encoding from "lib0/encoding";
22
import * as decoding from "lib0/decoding";
33

4-
enum AuthMessageType {
4+
export enum AuthMessageType {
55
Token = 0,
66
PermissionDenied = 1,
77
Authenticated = 2,
@@ -31,12 +31,23 @@ export const writeAuthenticated = (
3131
encoding.writeVarString(encoder, scope);
3232
};
3333

34+
export const writeTokenSyncRequest = (
35+
encoder: encoding.Encoder,
36+
) => {
37+
encoding.writeVarUint(encoder, AuthMessageType.Token);
38+
};
39+
3440
export const readAuthMessage = (
3541
decoder: decoding.Decoder,
42+
sendToken: () => void,
3643
permissionDeniedHandler: (reason: string) => void,
3744
authenticatedHandler: (scope: string) => void,
3845
) => {
3946
switch (decoding.readVarUint(decoder)) {
47+
case AuthMessageType.Token: {
48+
sendToken();
49+
break;
50+
}
4051
case AuthMessageType.PermissionDenied: {
4152
permissionDeniedHandler(decoding.readVarString(decoder));
4253
break;

packages/provider/src/HocuspocusProvider.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { MessageReceiver } from "./MessageReceiver.ts";
1010
import { MessageSender } from "./MessageSender.ts";
1111
import { AuthenticationMessage } from "./OutgoingMessages/AuthenticationMessage.ts";
1212
import { AwarenessMessage } from "./OutgoingMessages/AwarenessMessage.ts";
13-
import { TokenSyncMessage } from "./OutgoingMessages/TokenSyncMessage.ts";
1413
import { StatelessMessage } from "./OutgoingMessages/StatelessMessage.ts";
1514
import { SyncStepOneMessage } from "./OutgoingMessages/SyncStepOneMessage.ts";
1615
import { UpdateMessage } from "./OutgoingMessages/UpdateMessage.ts";
@@ -306,16 +305,18 @@ export class HocuspocusProvider extends EventEmitter {
306305
}
307306

308307
async sendToken() {
308+
let token: string | null;
309309
try {
310-
const token = await this.getToken();
311-
312-
this.send(TokenSyncMessage, {
313-
token: token ?? "",
314-
documentName: this.configuration.name,
315-
});
310+
token = await this.getToken();
316311
} catch (error) {
317-
console.error("Failed to getToken() during sendToken():", error);
312+
this.permissionDeniedHandler(`Failed to get token during sendToken(): ${error}`);
313+
return;
318314
}
315+
316+
this.send(AuthenticationMessage, {
317+
token: token ?? "",
318+
documentName: this.configuration.name,
319+
});
319320
}
320321

321322
documentUpdateHandler(update: Uint8Array, origin: any) {

packages/provider/src/MessageReceiver.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,6 @@ export class MessageReceiver {
3838
this.applyQueryAwarenessMessage(provider);
3939
break;
4040

41-
case MessageType.TokenSync:
42-
this.applyTokenSyncMessage(provider);
43-
break;
44-
4541
case MessageType.Stateless:
4642
provider.receiveStateless(readVarString(message.decoder));
4743
break;
@@ -121,6 +117,7 @@ export class MessageReceiver {
121117

122118
readAuthMessage(
123119
message.decoder,
120+
provider.sendToken.bind(provider),
124121
provider.permissionDeniedHandler.bind(provider),
125122
provider.authenticatedHandler.bind(provider),
126123
);
@@ -139,9 +136,4 @@ export class MessageReceiver {
139136
),
140137
);
141138
}
142-
143-
private applyTokenSyncMessage(provider: HocuspocusProvider) {
144-
// Server is requesting the current token, send it back
145-
provider.sendToken();
146-
}
147139
}

packages/provider/src/OutgoingMessages/TokenSyncMessage.ts

Lines changed: 0 additions & 27 deletions
This file was deleted.

packages/provider/src/types.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import type { OutgoingMessage } from "./OutgoingMessage.ts";
88
import type { AuthenticationMessage } from "./OutgoingMessages/AuthenticationMessage.ts";
99
import type { AwarenessMessage } from "./OutgoingMessages/AwarenessMessage.ts";
1010
import type { QueryAwarenessMessage } from "./OutgoingMessages/QueryAwarenessMessage.ts";
11-
import type { TokenSyncMessage } from "./OutgoingMessages/TokenSyncMessage.ts";
1211
import type { SyncStepOneMessage } from "./OutgoingMessages/SyncStepOneMessage.ts";
1312
import type { SyncStepTwoMessage } from "./OutgoingMessages/SyncStepTwoMessage.ts";
1413
import type { UpdateMessage } from "./OutgoingMessages/UpdateMessage.ts";
@@ -21,7 +20,6 @@ export enum MessageType {
2120
Stateless = 5,
2221
CLOSE = 7,
2322
SyncStatus = 8,
24-
TokenSync = 9,
2523
}
2624

2725
export enum WebSocketStatus {
@@ -55,7 +53,6 @@ export type ConstructableOutgoingMessage =
5553
| Constructable<AuthenticationMessage>
5654
| Constructable<AwarenessMessage>
5755
| Constructable<QueryAwarenessMessage>
58-
| Constructable<TokenSyncMessage>
5956
| Constructable<SyncStepOneMessage>
6057
| Constructable<SyncStepTwoMessage>
6158
| Constructable<UpdateMessage>;

packages/server/src/ClientConnection.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -252,16 +252,16 @@ export class ClientConnection {
252252
connection.onTokenSyncCallback(async (payload) => {
253253
try {
254254
return await this.hooks("onTokenSync", {
255-
...hookPayload,
256-
...payload,
257-
connection,
258-
documentName,
259-
}, (contextAdditions: any) => {
260-
hookPayload.context = {
261-
...hookPayload.context,
262-
...contextAdditions,
263-
};
264-
});
255+
...hookPayload,
256+
...payload,
257+
connection,
258+
documentName,
259+
}, (contextAdditions: any) => {
260+
hookPayload.context = {
261+
...hookPayload.context,
262+
...contextAdditions,
263+
};
264+
});
265265
} catch (err: any) {
266266
const error = err || Forbidden;
267267
const message = new OutgoingMessage(documentName).writePermissionDenied(

packages/server/src/Connection.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ export class Connection {
154154
* Request current token from the client
155155
*/
156156
public requestToken(): void {
157-
const message = new OutgoingMessage(this.document.name).writeTokenSync();
157+
const message = new OutgoingMessage(this.document.name).writeTokenSyncRequest();
158158

159159
this.send(message.toUint8Array());
160160
}

packages/server/src/MessageReceiver.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import type Document from "./Document.ts";
1515
import type { IncomingMessage } from "./IncomingMessage.ts";
1616
import { OutgoingMessage } from "./OutgoingMessage.ts";
1717
import { MessageType } from "./types.ts";
18+
import { AuthMessageType } from "@hocuspocus/common";
1819

1920
export class MessageReceiver {
2021
message: IncomingMessage;
@@ -77,12 +78,6 @@ export class MessageReceiver {
7778

7879
break;
7980
}
80-
case MessageType.TokenSync: {
81-
connection?.callbacks.onTokenSyncCallback({
82-
token: message.readVarString(),
83-
});
84-
break;
85-
}
8681
case MessageType.Stateless: {
8782
connection?.callbacks.statelessCallback({
8883
connection,
@@ -109,11 +104,19 @@ export class MessageReceiver {
109104
break;
110105
}
111106

112-
case MessageType.Auth:
107+
case MessageType.Auth: {
108+
const authType = message.readVarUint();
109+
if (authType === AuthMessageType.Token) {
110+
connection?.callbacks.onTokenSyncCallback({
111+
token: message.readVarString(),
112+
});
113+
break;
114+
}
113115
console.error(
114116
"Received an authentication message on a connection that is already fully authenticated. Probably your provider has been destroyed + recreated really fast.",
115117
);
116118
break;
119+
}
117120

118121
default:
119122
console.error(

packages/server/src/OutgoingMessage.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import type { Awareness } from "y-protocols/awareness";
1010
import { encodeAwarenessUpdate } from "y-protocols/awareness";
1111
import { writeSyncStep1, writeUpdate } from "y-protocols/sync";
1212

13-
import { writeAuthenticated, writePermissionDenied } from "@hocuspocus/common";
13+
import { writeAuthenticated, writePermissionDenied, writeTokenSyncRequest } from "@hocuspocus/common";
1414
import type Document from "./Document.ts";
1515
import { MessageType } from "./types.ts";
1616

@@ -70,11 +70,12 @@ export class OutgoingMessage {
7070
return this;
7171
}
7272

73-
writeTokenSync(): OutgoingMessage {
74-
this.type = MessageType.TokenSync;
73+
writeTokenSyncRequest(): OutgoingMessage {
74+
this.type = MessageType.Auth;
7575
this.category = "TokenSync";
7676

77-
writeVarUint(this.encoder, MessageType.TokenSync);
77+
writeVarUint(this.encoder, MessageType.Auth);
78+
writeTokenSyncRequest(this.encoder);
7879

7980
return this;
8081
}

packages/server/src/types.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export enum MessageType {
2020
BroadcastStateless = 6,
2121
CLOSE = 7,
2222
SyncStatus = 8,
23-
TokenSync = 9,
2423
}
2524

2625
export interface AwarenessUpdate {
@@ -180,15 +179,15 @@ export interface onAuthenticatePayload {
180179

181180
export interface onTokenSyncPayload {
182181
context: any;
183-
document: Document;
182+
document: Document;
184183
documentName: string;
185184
instance: Hocuspocus;
186185
requestHeaders: IncomingHttpHeaders;
187186
requestParameters: URLSearchParams;
188187
socketId: string;
189188
token: string;
190189
connectionConfig: ConnectionConfiguration;
191-
connection: Connection;
190+
connection: Connection;
192191
}
193192

194193
export interface onCreateDocumentPayload {

0 commit comments

Comments
 (0)