mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-31 15:18:38 -04:00
feat(backend): handle username always in lowercase
This should make all usernames of new users into lowercase. Usernames are also searched in the DB as lowercase. Signed-off-by: Philip Molares <philip.molares@udo.edu> Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
parent
9625900d1c
commit
0a8945d934
23 changed files with 99 additions and 58 deletions
|
@ -13,6 +13,7 @@ import { Mock } from 'ts-mockery';
|
|||
|
||||
import { Note } from '../../notes/note.entity';
|
||||
import { User } from '../../users/user.entity';
|
||||
import { Username } from '../../utils/username';
|
||||
import * as NameRandomizerModule from './random-word-lists/name-randomizer';
|
||||
import { RealtimeConnection } from './realtime-connection';
|
||||
import { RealtimeNote } from './realtime-note';
|
||||
|
@ -39,7 +40,7 @@ describe('websocket connection', () => {
|
|||
let mockedUser: User;
|
||||
let mockedMessageTransporter: MessageTransporter;
|
||||
|
||||
const mockedUserName = 'mockedUserName';
|
||||
const mockedUserName: Username = 'mocked-user-name';
|
||||
const mockedDisplayName = 'mockedDisplayName';
|
||||
|
||||
beforeEach(() => {
|
||||
|
|
|
@ -40,9 +40,9 @@ describe('RealtimeNoteService', () => {
|
|||
let clientWithoutReadWrite: RealtimeConnection;
|
||||
let deleteIntervalSpy: jest.SpyInstance;
|
||||
|
||||
const readWriteUsername = 'canReadWriteUser';
|
||||
const onlyReadUsername = 'canOnlyReadUser';
|
||||
const noAccessUsername = 'noReadWriteUser';
|
||||
const readWriteUsername = 'can-read-write-user';
|
||||
const onlyReadUsername = 'can-only-read-user';
|
||||
const noAccessUsername = 'no-read-write-user';
|
||||
|
||||
afterAll(() => {
|
||||
jest.useRealTimers();
|
||||
|
|
|
@ -11,6 +11,8 @@ import {
|
|||
} from '@hedgedoc/commons';
|
||||
import { Listener } from 'eventemitter2';
|
||||
|
||||
import { Username } from '../../utils/username';
|
||||
|
||||
export type OtherAdapterCollector = () => RealtimeUserStatusAdapter[];
|
||||
|
||||
/**
|
||||
|
@ -20,7 +22,7 @@ export class RealtimeUserStatusAdapter {
|
|||
private readonly realtimeUser: RealtimeUser;
|
||||
|
||||
constructor(
|
||||
private readonly username: string | null,
|
||||
private readonly username: Username | null,
|
||||
private readonly displayName: string,
|
||||
private collectOtherAdapters: OtherAdapterCollector,
|
||||
private messageTransporter: MessageTransporter,
|
||||
|
|
|
@ -11,6 +11,7 @@ import {
|
|||
import { Mock } from 'ts-mockery';
|
||||
|
||||
import { User } from '../../../users/user.entity';
|
||||
import { Username } from '../../../utils/username';
|
||||
import { RealtimeConnection } from '../realtime-connection';
|
||||
import { RealtimeNote } from '../realtime-note';
|
||||
import { RealtimeUserStatusAdapter } from '../realtime-user-status-adapter';
|
||||
|
@ -21,13 +22,13 @@ enum RealtimeUserState {
|
|||
WITH_READONLY,
|
||||
}
|
||||
|
||||
const MOCK_FALLBACK_USERNAME = 'mock';
|
||||
const MOCK_FALLBACK_USERNAME: Username = 'mock';
|
||||
|
||||
/**
|
||||
* Creates a mocked {@link RealtimeConnection realtime connection}.
|
||||
*/
|
||||
export class MockConnectionBuilder {
|
||||
private username: string | null;
|
||||
private username: Username | null;
|
||||
private displayName: string | undefined;
|
||||
private includeRealtimeUserStatus: RealtimeUserState =
|
||||
RealtimeUserState.WITHOUT;
|
||||
|
@ -50,7 +51,7 @@ export class MockConnectionBuilder {
|
|||
*
|
||||
* @param username the username of the mocked user. If this value is omitted then the builder will user a {@link MOCK_FALLBACK_USERNAME fallback}.
|
||||
*/
|
||||
public withLoggedInUser(username?: string): this {
|
||||
public withLoggedInUser(username?: Username): this {
|
||||
const newUsername = username ?? MOCK_FALLBACK_USERNAME;
|
||||
this.username = newUsername;
|
||||
this.displayName = newUsername;
|
||||
|
|
|
@ -41,6 +41,7 @@ import { Session } from '../../users/session.entity';
|
|||
import { User } from '../../users/user.entity';
|
||||
import { UsersModule } from '../../users/users.module';
|
||||
import { UsersService } from '../../users/users.service';
|
||||
import { Username } from '../../utils/username';
|
||||
import * as websocketConnectionModule from '../realtime-note/realtime-connection';
|
||||
import { RealtimeConnection } from '../realtime-note/realtime-connection';
|
||||
import { RealtimeNote } from '../realtime-note/realtime-note';
|
||||
|
@ -165,7 +166,7 @@ describe('Websocket gateway', () => {
|
|||
),
|
||||
);
|
||||
|
||||
const mockUsername = 'mockUsername';
|
||||
const mockUsername: Username = 'mock-username';
|
||||
jest
|
||||
.spyOn(sessionService, 'fetchUsernameForSessionId')
|
||||
.mockImplementation((sessionId: string) =>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue