diff --git a/src/lib/db/user-store.ts b/src/lib/db/user-store.ts index 0723f7dee3..cd6533b66c 100644 --- a/src/lib/db/user-store.ts +++ b/src/lib/db/user-store.ts @@ -87,6 +87,13 @@ class UserStore { this.logger = getLogger('user-store.js'); } + async count(): Promise { + return this.db + .count('*') + .from(TABLE) + .then((res) => Number(res[0].count)); + } + async update(id: number, fields: IUserUpdateFields): Promise { await this.db(TABLE) .where('id', id) diff --git a/src/lib/services/user-service.ts b/src/lib/services/user-service.ts index e0caf8e8b6..78c28d04c1 100644 --- a/src/lib/services/user-service.ts +++ b/src/lib/services/user-service.ts @@ -114,9 +114,9 @@ class UserService { } async initAdminUser(): Promise { - const hasAdminUser = await this.store.hasUser({ username: 'admin' }); + const userCount = await this.store.count(); - if (!hasAdminUser) { + if (userCount === 0) { // create default admin user try { const pwd = 'unleash4all'; diff --git a/src/test/e2e/services/user-service.e2e.test.ts b/src/test/e2e/services/user-service.e2e.test.ts index 3afb185cc3..f7e4d09254 100644 --- a/src/test/e2e/services/user-service.e2e.test.ts +++ b/src/test/e2e/services/user-service.e2e.test.ts @@ -55,6 +55,21 @@ test('should create initial admin user', async () => { ).toBeTruthy(); }); +test('should not init default user if we already have users', async () => { + await userService.createUser({ + username: 'test', + password: 'A very strange P4ssw0rd_', + rootRole: adminRole.id, + }); + await userService.initAdminUser(); + const users = await userService.getAll(); + expect(users).toHaveLength(1); + expect(users[0].username).toBe('test'); + await expect(async () => + userService.loginUser('admin', 'unleash4all'), + ).rejects.toThrow(Error); +}); + test('should not be allowed to create existing user', async () => { await userStore.insert({ username: 'test', name: 'Hans Mola' }); await expect(async () => diff --git a/src/test/fixtures/fake-user-store.ts b/src/test/fixtures/fake-user-store.ts index 911396d3e0..59344c3ae3 100644 --- a/src/test/fixtures/fake-user-store.ts +++ b/src/test/fixtures/fake-user-store.ts @@ -27,6 +27,10 @@ class UserStoreMock extends UserStore { return user; } + async count(): Promise { + return Promise.resolve(this.data.length); + } + async insert(user: User): Promise { // eslint-disable-next-line no-param-reassign user.id = this.idSeq;