/
subproject_permission_revoke.ts
67 lines (60 loc) · 2.06 KB
/
subproject_permission_revoke.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import logger from "lib/logger";
import { VError } from "verror";
import Intent from "../authz/intents";
import { Ctx } from "../lib/ctx";
import * as Result from "../result";
import { ConnToken } from "./conn";
import { Identity } from "./domain/organization/identity";
import { ServiceUser } from "./domain/organization/service_user";
import * as Project from "./domain/workflow/project";
import * as Subproject from "./domain/workflow/subproject";
import * as SubprojectPermissionRevoke from "./domain/workflow/subproject_permission_revoke";
import * as SubprojectSnapshotPublish from "./domain/workflow/subproject_snapshot_publish";
import * as SubprojectCacheHelper from "./subproject_cache_helper";
import { store } from "./store";
export { RequestData } from "./domain/workflow/project_create";
export async function revokeSubprojectPermission(
conn: ConnToken,
ctx: Ctx,
serviceUser: ServiceUser,
projectId: Project.Id,
subprojectId: Subproject.Id,
revokee: Identity,
intent: Intent,
): Promise<Result.Type<void>> {
logger.debug({ revokee, intent, projectId, subprojectId }, "Revoking subproject permission");
const newEventsResult = await SubprojectPermissionRevoke.revokeSubprojectPermission(
ctx,
serviceUser,
projectId,
subprojectId,
revokee,
intent,
{
getSubproject: async (pId, spId) => {
return await SubprojectCacheHelper.getSubproject(conn, ctx, pId, spId);
},
},
);
if (Result.isErr(newEventsResult)) {
return new VError(newEventsResult, "close project failed");
}
const newEvents = newEventsResult;
for (const event of newEvents) {
await store(conn, ctx, event, serviceUser.address);
}
const { canPublish, eventData } = await SubprojectSnapshotPublish.publishSubprojectSnapshot(
ctx,
conn,
projectId,
subprojectId,
serviceUser,
);
if (canPublish) {
if (Result.isErr(eventData)) {
return new VError(eventData, "create subproject snapshot failed");
}
const publishEvent = eventData;
await store(conn, ctx, publishEvent, serviceUser.address);
}
}