Skip to content

Commit

Permalink
fix: on project delete with tokens put token deleted in audit log (#7675
Browse files Browse the repository at this point in the history
)

Use service with audit tracking instead of store directly.
  • Loading branch information
Tymek authored Jul 26, 2024
1 parent 5bec8ea commit 1f2d47b
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 24 deletions.
23 changes: 15 additions & 8 deletions src/lib/features/project/createProjectService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { AccountStore } from '../../db/account-store';
import EnvironmentStore from '../project-environments/environment-store';
import {
type AccessService,
ApiTokenService,
EventService,
FavoritesService,
GroupService,
Expand Down Expand Up @@ -39,8 +40,6 @@ import {
createPrivateProjectChecker,
} from '../private-project/createPrivateProjectChecker';
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store';
import FeatureTypeStore from '../../db/feature-type-store';
import FakeFeatureTypeStore from '../../../test/fixtures/fake-feature-type-store';
import { ProjectOwnersReadModel } from './project-owners-read-model';
import { FakeProjectOwnersReadModel } from './fake-project-owners-read-model';
import { FakeProjectFlagCreatorsReadModel } from './fake-project-flag-creators-read-model';
Expand Down Expand Up @@ -76,7 +75,6 @@ export const createProjectService = (
eventBus,
getLogger,
);
const featureTypeStore = new FeatureTypeStore(db, getLogger);
const projectStatsStore = new ProjectStatsStore(db, eventBus, getLogger);
const accessService: AccessService = createAccessService(db, config);
const featureToggleService = createFeatureToggleService(db, config);
Expand Down Expand Up @@ -120,19 +118,23 @@ export const createProjectService = (

const privateProjectChecker = createPrivateProjectChecker(db, config);

const apiTokenService = new ApiTokenService(
{ apiTokenStore, environmentStore },
config,
eventService,
);

return new ProjectService(
{
projectStore,
eventStore,
featureToggleStore,
environmentStore,
featureEnvironmentStore,
featureTypeStore,
accountStore,
projectStatsStore,
projectOwnersReadModel,
projectFlagCreatorsReadModel,
apiTokenStore,
},
config,
accessService,
Expand All @@ -141,6 +143,7 @@ export const createProjectService = (
favoriteService,
eventService,
privateProjectChecker,
apiTokenService,
);
};

Expand All @@ -157,7 +160,6 @@ export const createFakeProjectService = (
const accountStore = new FakeAccountStore();
const environmentStore = new FakeEnvironmentStore();
const featureEnvironmentStore = new FakeFeatureEnvironmentStore();
const featureTypeStore = new FakeFeatureTypeStore();
const projectStatsStore = new FakeProjectStatsStore();
const { accessService } = createFakeAccessService(config);
const { featureToggleService } = createFakeFeatureToggleService(config);
Expand Down Expand Up @@ -187,6 +189,12 @@ export const createFakeProjectService = (

const privateProjectChecker = createFakePrivateProjectChecker();

const apiTokenService = new ApiTokenService(
{ apiTokenStore, environmentStore },
config,
eventService,
);

return new ProjectService(
{
projectStore,
Expand All @@ -196,10 +204,8 @@ export const createFakeProjectService = (
featureToggleStore,
environmentStore,
featureEnvironmentStore,
featureTypeStore,
accountStore,
projectStatsStore,
apiTokenStore,
},
config,
accessService,
Expand All @@ -208,5 +214,6 @@ export const createFakeProjectService = (
favoriteService,
eventService,
privateProjectChecker,
apiTokenService,
);
};
4 changes: 2 additions & 2 deletions src/lib/features/project/project-service.limit.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { IAuditUser, IFlagResolver, IUnleashConfig } from '../../types';
import getLogger from '../../../test/fixtures/no-logger';
import { createFakeProjectService } from './createProjectService';
import type { IUser } from '../../types';
import { createTestConfig } from '../../../test/config/test-config';

const alwaysOnFlagResolver = {
isEnabled() {
Expand All @@ -12,7 +12,7 @@ const alwaysOnFlagResolver = {
test('Should not allow to exceed project limit', async () => {
const LIMIT = 1;
const projectService = createFakeProjectService({
getLogger,
...createTestConfig(),
flagResolver: alwaysOnFlagResolver,
resourceLimits: {
projects: LIMIT,
Expand Down
21 changes: 7 additions & 14 deletions src/lib/features/project/project-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import {
type IFeatureEnvironmentStore,
type IFeatureNaming,
type IFeatureToggleStore,
type IFeatureTypeStore,
type IFlagResolver,
type IProject,
type IProjectApplications,
Expand Down Expand Up @@ -53,7 +52,6 @@ import {
type ProjectCreated,
type IProjectOwnersReadModel,
ADMIN,
type IApiTokenStore,
} from '../../types';
import type {
IProjectAccessModel,
Expand Down Expand Up @@ -86,6 +84,7 @@ import type {
import type { IProjectFlagCreatorsReadModel } from './project-flag-creators-read-model.type';
import { throwExceedsLimitError } from '../../error/exceeds-limit-error';
import type EventEmitter from 'events';
import type { ApiTokenService } from '../../services/api-token-service';

type Days = number;
type Count = number;
Expand Down Expand Up @@ -132,8 +131,6 @@ export default class ProjectService {

private featureEnvironmentStore: IFeatureEnvironmentStore;

private featureTypeStore: IFeatureTypeStore;

private environmentStore: IEnvironmentStore;

private groupService: GroupService;
Expand All @@ -146,7 +143,7 @@ export default class ProjectService {

private accountStore: IAccountStore;

private apiTokenStore: IApiTokenStore;
private apiTokenService: ApiTokenService;

private favoritesService: FavoritesService;

Expand All @@ -171,10 +168,8 @@ export default class ProjectService {
featureToggleStore,
environmentStore,
featureEnvironmentStore,
featureTypeStore,
accountStore,
projectStatsStore,
apiTokenStore,
}: Pick<
IUnleashStores,
| 'projectStore'
Expand All @@ -186,8 +181,6 @@ export default class ProjectService {
| 'featureEnvironmentStore'
| 'accountStore'
| 'projectStatsStore'
| 'featureTypeStore'
| 'apiTokenStore'
>,
config: IUnleashConfig,
accessService: AccessService,
Expand All @@ -196,6 +189,7 @@ export default class ProjectService {
favoriteService: FavoritesService,
eventService: EventService,
privateProjectChecker: IPrivateProjectChecker,
apiTokenService: ApiTokenService,
) {
this.projectStore = projectStore;
this.projectOwnersReadModel = projectOwnersReadModel;
Expand All @@ -205,8 +199,7 @@ export default class ProjectService {
this.accessService = accessService;
this.eventStore = eventStore;
this.featureToggleStore = featureToggleStore;
this.featureTypeStore = featureTypeStore;
this.apiTokenStore = apiTokenStore;
this.apiTokenService = apiTokenService;
this.featureToggleService = featureToggleService;
this.favoritesService = favoriteService;
this.privateProjectChecker = privateProjectChecker;
Expand Down Expand Up @@ -565,14 +558,14 @@ export default class ProjectService {
archived: true,
});

this.featureToggleService.deleteFeatures(
await this.featureToggleService.deleteFeatures(
archivedFlags.map((flag) => flag.name),
id,
auditUser,
);

if (this.flagResolver.isEnabled('cleanApiTokenWhenOrphaned')) {
const allTokens = await this.apiTokenStore.getAll();
const allTokens = await this.apiTokenService.getAllTokens();
const projectTokens = allTokens.filter(
(token) =>
(token.projects &&
Expand All @@ -585,7 +578,7 @@ export default class ProjectService {

await Promise.all(
projectTokens.map((token) =>
this.apiTokenStore.delete(token.secret),
this.apiTokenService.delete(token.secret, auditUser),
),
);
} else {
Expand Down

0 comments on commit 1f2d47b

Please sign in to comment.