Canvas: Import modal
Change-Id: I22928007c5b81d93be2eed2d133fed4d73e1703f
diff --git a/apps/canvas/back/src/index.ts b/apps/canvas/back/src/index.ts
index daeded2..a2e8b31 100644
--- a/apps/canvas/back/src/index.ts
+++ b/apps/canvas/back/src/index.ts
@@ -772,38 +772,50 @@
resp.status(400).send({ error: "GitHub token not configured" });
return;
}
- let deployKey: string | null = project.deployKey;
- let deployKeyPublic: string | null = project.deployKeyPublic;
- if (!deployKeyPublic) {
- [deployKeyPublic, deployKey] = await generateKey(tmp.dirSync().name);
- await db.project.update({
- where: { id: projectId },
- data: {
- deployKeyPublic: deployKeyPublic,
- deployKey: deployKey,
- },
+ let tmpDir: tmp.DirResult | null = null;
+ try {
+ let deployKey: string | null = project.deployKey;
+ let deployKeyPublic: string | null = project.deployKeyPublic;
+ if (!deployKeyPublic) {
+ [deployKeyPublic, deployKey] = await generateKey(tmp.dirSync().name);
+ await db.project.update({
+ where: { id: projectId },
+ data: {
+ deployKeyPublic: deployKeyPublic,
+ deployKey: deployKey,
+ },
+ });
+ }
+ const github = new GithubClient(project.githubToken);
+ const result = analyzeRepoReqSchema.safeParse(req.body);
+ if (!result.success) {
+ resp.status(400).send({ error: "Invalid request data" });
+ return;
+ }
+ const { address } = result.data;
+ tmpDir = tmp.dirSync({
+ unsafeCleanup: true,
});
+ await github.addDeployKey(address, deployKeyPublic);
+ await fs.promises.writeFile(path.join(tmpDir.name, "key"), deployKey!, {
+ mode: 0o600,
+ });
+ shell.exec(
+ `GIT_SSH_COMMAND='ssh -i ${tmpDir.name}/key -o IdentitiesOnly=yes' git clone ${address} ${tmpDir.name}/code`,
+ );
+ const fsc = new RealFileSystem(`${tmpDir.name}/code`);
+ const analyzer = new NodeJSAnalyzer();
+ const info = await analyzer.analyze(fsc, "/");
+ resp.status(200).send([info]);
+ } catch (e) {
+ console.error(e);
+ resp.status(500).send({ error: "Failed to analyze repository" });
+ } finally {
+ if (tmpDir) {
+ tmpDir.removeCallback();
+ }
+ resp.end();
}
- const github = new GithubClient(project.githubToken);
- const result = analyzeRepoReqSchema.safeParse(req.body);
- if (!result.success) {
- resp.status(400).send({ error: "Invalid request data" });
- return;
- }
- const { address } = result.data;
- const tmpDir = tmp.dirSync();
- await github.addDeployKey(address, deployKeyPublic);
- await fs.promises.writeFile(path.join(tmpDir.name, "key"), deployKey!, {
- mode: 0o600,
- });
- shell.exec(
- `GIT_SSH_COMMAND='ssh -i ${tmpDir.name}/key -o IdentitiesOnly=yes' git clone ${address} ${tmpDir.name}/code`,
- );
- const fsc = new RealFileSystem(`${tmpDir.name}/code`);
- const analyzer = new NodeJSAnalyzer();
- const info = await analyzer.analyze(fsc, "/");
- console.log(info);
- resp.status(200).send([info]);
};
const auth = (req: express.Request, resp: express.Response, next: express.NextFunction) => {