mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-09 00:18:00 +01:00
fix: deletes sessions for user when user is removed (#810)
This commit is contained in:
parent
568998f20a
commit
7cbe6bfcc1
@ -194,6 +194,10 @@ class UserStore {
|
|||||||
seen_at: new Date(),
|
seen_at: new Date(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async deleteAll(): Promise<void> {
|
||||||
|
await this.db(TABLE).del();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = UserStore;
|
module.exports = UserStore;
|
||||||
|
@ -302,6 +302,7 @@ class UserService {
|
|||||||
this.accessService.removeUserFromRole(userId, role.id),
|
this.accessService.removeUserFromRole(userId, role.id),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
await this.sessionService.deleteSessionsForUser(userId);
|
||||||
|
|
||||||
await this.store.delete(userId);
|
await this.store.delete(userId);
|
||||||
|
|
||||||
|
@ -38,9 +38,7 @@ test.after.always(async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test.afterEach.always(async () => {
|
test.afterEach.always(async () => {
|
||||||
const users = await userStore.getAll();
|
await userStore.deleteAll();
|
||||||
const deleteAll = users.map((u: User) => userStore.delete(u.id));
|
|
||||||
await Promise.all(deleteAll);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test.serial('returns empty list of users', async t => {
|
test.serial('returns empty list of users', async t => {
|
||||||
|
@ -10,12 +10,14 @@ import ResetTokenService from '../../../lib/services/reset-token-service';
|
|||||||
import { EmailService } from '../../../lib/services/email-service';
|
import { EmailService } from '../../../lib/services/email-service';
|
||||||
import { createTestConfig } from '../../config/test-config';
|
import { createTestConfig } from '../../config/test-config';
|
||||||
import SessionService from '../../../lib/services/session-service';
|
import SessionService from '../../../lib/services/session-service';
|
||||||
|
import NotFoundError from '../../../lib/error/notfound-error';
|
||||||
|
|
||||||
let db;
|
let db;
|
||||||
let stores;
|
let stores;
|
||||||
let userService: UserService;
|
let userService: UserService;
|
||||||
let userStore: UserStore;
|
let userStore: UserStore;
|
||||||
let adminRole: IRole;
|
let adminRole: IRole;
|
||||||
|
let sessionService: SessionService;
|
||||||
|
|
||||||
test.before(async () => {
|
test.before(async () => {
|
||||||
db = await dbInit('user_service_serial', getLogger);
|
db = await dbInit('user_service_serial', getLogger);
|
||||||
@ -24,7 +26,7 @@ test.before(async () => {
|
|||||||
const accessService = new AccessService(stores, config);
|
const accessService = new AccessService(stores, config);
|
||||||
const resetTokenService = new ResetTokenService(stores, config);
|
const resetTokenService = new ResetTokenService(stores, config);
|
||||||
const emailService = new EmailService(undefined, config.getLogger);
|
const emailService = new EmailService(undefined, config.getLogger);
|
||||||
const sessionService = new SessionService(stores, config);
|
sessionService = new SessionService(stores, config);
|
||||||
|
|
||||||
userService = new UserService(stores, config, {
|
userService = new UserService(stores, config, {
|
||||||
accessService,
|
accessService,
|
||||||
@ -42,9 +44,7 @@ test.after(async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test.afterEach(async () => {
|
test.afterEach(async () => {
|
||||||
const users = await userStore.getAll();
|
await userStore.deleteAll();
|
||||||
const deleteAll = users.map((u: User) => userStore.delete(u.id));
|
|
||||||
await Promise.all(deleteAll);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test.serial('should create initial admin user', async t => {
|
test.serial('should create initial admin user', async t => {
|
||||||
@ -96,3 +96,35 @@ test.serial('should get user with root role', async t => {
|
|||||||
t.is(user.id, u.id);
|
t.is(user.id, u.id);
|
||||||
t.is(user.rootRole, adminRole.id);
|
t.is(user.rootRole, adminRole.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test.serial(`deleting a user should delete the user's sessions`, async t => {
|
||||||
|
const email = 'some@test.com';
|
||||||
|
const user = await userService.createUser({
|
||||||
|
email,
|
||||||
|
password: 'A very strange P4ssw0rd_',
|
||||||
|
rootRole: adminRole.id,
|
||||||
|
});
|
||||||
|
const testComSession = {
|
||||||
|
sid: 'xyz321',
|
||||||
|
sess: {
|
||||||
|
cookie: {
|
||||||
|
originalMaxAge: 2880000,
|
||||||
|
expires: new Date(Date.now() + 86400000).toDateString(),
|
||||||
|
secure: false,
|
||||||
|
httpOnly: true,
|
||||||
|
path: '/',
|
||||||
|
},
|
||||||
|
user,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
await sessionService.insertSession(testComSession);
|
||||||
|
const userSessions = await sessionService.getSessionsForUser(user.id);
|
||||||
|
t.is(userSessions.length, 1);
|
||||||
|
await userService.deleteUser(user.id);
|
||||||
|
await t.throwsAsync(
|
||||||
|
async () => sessionService.getSessionsForUser(user.id),
|
||||||
|
{
|
||||||
|
instanceOf: NotFoundError,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user