mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 00:32:12 +02:00
152 lines
3.6 KiB
TypeScript
152 lines
3.6 KiB
TypeScript
import ObjectID from "../../Types/ObjectID";
|
|
import WorkspaceType from "../../Types/Workspace/WorkspaceType";
|
|
import DatabaseService from "./DatabaseService";
|
|
import Model, {
|
|
WorkspaceMiscData,
|
|
} from "../../Models/DatabaseModels/WorkspaceProjectAuthToken";
|
|
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
|
|
export class Service extends DatabaseService<Model> {
|
|
public constructor() {
|
|
super(Model);
|
|
}
|
|
|
|
@CaptureSpan()
|
|
public async getProjectAuth(data: {
|
|
projectId: ObjectID;
|
|
workspaceType: WorkspaceType;
|
|
}): Promise<Model | null> {
|
|
if (!data.projectId) {
|
|
throw new BadDataException("projectId is required");
|
|
}
|
|
|
|
if (!data.workspaceType) {
|
|
throw new BadDataException("workspaceType is required");
|
|
}
|
|
|
|
return await this.findOneBy({
|
|
query: {
|
|
projectId: data.projectId,
|
|
workspaceType: data.workspaceType,
|
|
},
|
|
select: {
|
|
authToken: true,
|
|
workspaceProjectId: true,
|
|
miscData: true,
|
|
workspaceType: true,
|
|
},
|
|
props: {
|
|
isRoot: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
@CaptureSpan()
|
|
public async getProjectAuths(data: {
|
|
projectId: ObjectID;
|
|
}): Promise<Array<Model>> {
|
|
if (!data.projectId) {
|
|
throw new BadDataException("projectId is required");
|
|
}
|
|
|
|
return await this.findBy({
|
|
query: {
|
|
projectId: data.projectId,
|
|
},
|
|
select: {
|
|
authToken: true,
|
|
workspaceProjectId: true,
|
|
miscData: true,
|
|
workspaceType: true,
|
|
},
|
|
skip: 0,
|
|
limit: LIMIT_PER_PROJECT,
|
|
props: {
|
|
isRoot: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
@CaptureSpan()
|
|
public async doesExist(data: {
|
|
projectId: ObjectID;
|
|
workspaceType: WorkspaceType;
|
|
}): Promise<boolean> {
|
|
return Boolean(await this.getProjectAuth(data));
|
|
}
|
|
|
|
@CaptureSpan()
|
|
public async refreshAuthToken(data: {
|
|
projectId: ObjectID;
|
|
workspaceType: WorkspaceType;
|
|
authToken: string;
|
|
workspaceProjectId: string;
|
|
miscData: WorkspaceMiscData;
|
|
}): Promise<void> {
|
|
if (!data.projectId) {
|
|
throw new BadDataException("projectId is required");
|
|
}
|
|
|
|
if (!data.workspaceType) {
|
|
throw new BadDataException("workspaceType is required");
|
|
}
|
|
|
|
if (!data.authToken) {
|
|
throw new BadDataException("authToken is required");
|
|
}
|
|
|
|
if (!data.workspaceProjectId) {
|
|
throw new BadDataException("workspaceProjectId is required");
|
|
}
|
|
|
|
if (!data.miscData) {
|
|
throw new BadDataException("miscData is required");
|
|
}
|
|
|
|
let projectAuth: Model | null = await this.findOneBy({
|
|
query: {
|
|
projectId: data.projectId,
|
|
workspaceType: data.workspaceType,
|
|
},
|
|
select: {
|
|
_id: true,
|
|
},
|
|
props: {
|
|
isRoot: true,
|
|
},
|
|
});
|
|
|
|
if (!projectAuth) {
|
|
projectAuth = new Model();
|
|
|
|
projectAuth.projectId = data.projectId;
|
|
projectAuth.authToken = data.authToken;
|
|
projectAuth.workspaceType = data.workspaceType;
|
|
projectAuth.workspaceProjectId = data.workspaceProjectId;
|
|
projectAuth.miscData = data.miscData;
|
|
|
|
await this.create({
|
|
data: projectAuth,
|
|
props: {
|
|
isRoot: true,
|
|
},
|
|
});
|
|
} else {
|
|
await this.updateOneById({
|
|
id: projectAuth.id!,
|
|
data: {
|
|
authToken: data.authToken,
|
|
workspaceProjectId: data.workspaceProjectId,
|
|
miscData: data.miscData,
|
|
},
|
|
props: {
|
|
isRoot: true,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
}
|
|
export default new Service();
|