Skip to content

Commit fa89780

Browse files
committed
refactor: close WSconn if onTokenSync throws an err
1 parent 98aa34a commit fa89780

2 files changed

Lines changed: 9 additions & 10 deletions

File tree

packages/server/src/ClientConnection.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,9 @@ export class ClientConnection {
263263
};
264264
});
265265
} catch (err: any) {
266-
const error = err || Forbidden;
267-
const message = new OutgoingMessage(documentName).writePermissionDenied(
268-
error.reason ?? "permission-denied",
269-
);
270-
this.websocket.send(message.toUint8Array());
266+
console.error(err);
267+
const error = { ...Unauthorized, ...err };
268+
this.websocket.close(error.code, error.reason);
271269
}
272270
});
273271

tests/server/onTokenSync.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import test from 'ava'
22
import type { onAuthenticatePayload, onTokenSyncPayload } from '@hocuspocus/server'
3-
import { WebSocketStatus } from '@hocuspocus/provider'
3+
import { Unauthorized } from '@hocuspocus/common'
44
import {
55
newHocuspocus, newHocuspocusProvider, newHocuspocusProviderWebsocket, sleep,
66
} from '../utils/index.ts'
7-
import { retryableAssertion } from '../utils/retryableAssertion.ts'
87

98
// ============================================================================
109
// PROVIDER SEND TOKEN TESTS
@@ -333,20 +332,22 @@ test('server requestToken: onTokenSync works with readonly connections when serv
333332
})
334333
})
335334

336-
test('server requestToken: failure of onTokenSync should trigger onAuthenticationFailed hook on provider side', async t => {
335+
test('server requestToken: failure of onTokenSync should close the connection', async t => {
337336
await new Promise(async resolve => {
338337
const server = await newHocuspocus({
339338
async onAuthenticate() {
340339
return true // Allow initial auth
341340
},
342341
async onTokenSync() {
343-
throw new Error('Token sync failed')
342+
throw new Error()
344343
},
345344
})
346345

347346
const provider = newHocuspocusProvider(server, {
348347
token: 'SUPER-SECRET-TOKEN',
349-
onAuthenticationFailed() {
348+
onClose({ event }) {
349+
t.is(event.code, Unauthorized.code)
350+
t.is(event.reason, Unauthorized.reason)
350351
t.pass()
351352
resolve('done')
352353
},

0 commit comments

Comments
 (0)