fix(realtime): Allow connections for guest users

Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
Tilman Vatteroth 2022-10-03 18:39:44 +02:00
parent 4ab66dfe2d
commit a97f7e8fd1
8 changed files with 139 additions and 59 deletions

View file

@ -52,7 +52,7 @@ export class RealtimeNote extends (EventEmitter as TypedEventEmitterConstructor<
*/
public addClient(client: WebsocketConnection): void {
this.clients.add(client);
this.logger.debug(`User '${client.getUser().username}' connected`);
this.logger.debug(`User '${client.getUsername()}' connected`);
}
/**
@ -63,7 +63,7 @@ export class RealtimeNote extends (EventEmitter as TypedEventEmitterConstructor<
public removeClient(client: WebsocketConnection): void {
this.clients.delete(client);
this.logger.debug(
`User '${client.getUser().username}' disconnected. ${
`User '${client.getUsername()}' disconnected. ${
this.clients.size
} clients left.`,
);

View file

@ -18,5 +18,6 @@ export function mockConnection(synced: boolean): WebsocketConnection {
isSynced: jest.fn(() => synced),
send: jest.fn(),
getUser: jest.fn(() => Mock.of<User>({ username: 'mockedUser' })),
getUsername: jest.fn(() => 'mocked user'),
});
}

View file

@ -192,4 +192,26 @@ describe('websocket connection', () => {
expect(sut.getUser()).toBe(mockedUser);
});
it('returns the correct username', () => {
const mockedUserWithUsername = Mock.of<User>({ username: 'MockUser' });
const sut = new WebsocketConnection(
mockedWebsocket,
mockedUserWithUsername,
mockedRealtimeNote,
);
expect(sut.getUsername()).toBe('MockUser');
});
it('returns a fallback if no username has been set', () => {
const sut = new WebsocketConnection(
mockedWebsocket,
mockedUser,
mockedRealtimeNote,
);
expect(sut.getUsername()).toBe('Guest');
});
});

View file

@ -30,7 +30,7 @@ export class WebsocketConnection {
*/
constructor(
websocket: WebSocket,
private user: User,
private user: User | null,
realtimeNote: RealtimeNote,
) {
const awareness = realtimeNote.getAwareness();
@ -94,7 +94,11 @@ export class WebsocketConnection {
return this.controlledAwarenessIds;
}
public getUser(): User {
public getUser(): User | null {
return this.user;
}
public getUsername(): string {
return this.getUser()?.username ?? 'Guest';
}
}