From 93466625369792117f63b0eb674aa2b36b3b3179 Mon Sep 17 00:00:00 2001
From: Guillaume WEBER <gweber@takima.fr>
Date: Fri, 8 Jul 2022 13:52:01 +0000
Subject: [PATCH] fix: prevent reviewer from pushing code or updating time
 spent

---
 .../deadlock-extension/src/core/gitMission.ts   |  4 ++++
 .../deadlock-extension/src/extension.ts         |  9 +++------
 .../deadlock-extension/src/recorder/recorder.ts | 17 ++++++++++++-----
 .../src/recorder/services/automatic-save.ts     |  4 ++--
 .../src/recorder/utils/gitea.ts                 |  9 ++++++++-
 .../deadlock-extension/src/view/CommandTree.ts  |  4 ++--
 6 files changed, 31 insertions(+), 16 deletions(-)

diff --git a/deadlock-plugins/deadlock-extension/src/core/gitMission.ts b/deadlock-plugins/deadlock-extension/src/core/gitMission.ts
index 09017997..6df20bee 100644
--- a/deadlock-plugins/deadlock-extension/src/core/gitMission.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/gitMission.ts
@@ -53,6 +53,10 @@ export default class GitMission {
     }
   }
 
+  async forgetSshKeys() {
+    await exec(`ssh-add -d /tmp/.ssh/id_rsa`);
+  }
+
   async getAuthor(): Promise<string> {
     return (await UserMission.getInstance().getGiteaUser()).username;
   }
diff --git a/deadlock-plugins/deadlock-extension/src/extension.ts b/deadlock-plugins/deadlock-extension/src/extension.ts
index 29abd15f..01ee2de5 100644
--- a/deadlock-plugins/deadlock-extension/src/extension.ts
+++ b/deadlock-plugins/deadlock-extension/src/extension.ts
@@ -1,7 +1,7 @@
 import { window, ExtensionContext, workspace, commands } from 'vscode';
 import Controller from './core/controller';
 import isDocker from './core/utils/isdocker';
-import Recorder, { runTimer } from './recorder/recorder';
+import Recorder from './recorder/recorder';
 import { extensionError as error } from './recorder/utils/log';
 import { DepNodeProvider } from './view/deadlockPanel';
 import { CommandTreeProvider } from './view/CommandTree';
@@ -20,10 +20,6 @@ export async function activate(context: ExtensionContext) {
   if (isDocker()) {
     commands.executeCommand('setContext', 'deadlock.inContainer', true);
     window.registerTreeDataProvider('commandTree', new CommandTreeProvider(context));
-  } else {
-    commands.executeCommand('setContext', 'deadlock.inContainer', false);
-  }
-  if (isDocker()) {
     try {
       Recorder.instance.run();
     } catch (e) {
@@ -31,6 +27,7 @@ export async function activate(context: ExtensionContext) {
       error(JSON.stringify(e));
       window.showErrorMessage("Le recorder n'a pas pu ĂȘtre lancĂ©");
     }
-    runTimer();
+  } else {
+    commands.executeCommand('setContext', 'deadlock.inContainer', false);
   }
 }
diff --git a/deadlock-plugins/deadlock-extension/src/recorder/recorder.ts b/deadlock-plugins/deadlock-extension/src/recorder/recorder.ts
index a1fe2de1..fd9220d6 100644
--- a/deadlock-plugins/deadlock-extension/src/recorder/recorder.ts
+++ b/deadlock-plugins/deadlock-extension/src/recorder/recorder.ts
@@ -67,11 +67,18 @@ export default class Recorder {
       this._gitMission = await new GitMission().init();
       await this.setupFromRemoteRepo(this._gitMission);
       await this.setupProject(this._gitMission);
-      try {
-        if (ENABLE_AUTOMATIC_SAVE) new AutomaticSave(MISSION_PATH_IC, this._gitMission);
-      } catch (e) {
-        error('Error while setup automatic save');
-        error(e);
+      if (!this.userMission.isReviewing()) {
+        if (ENABLE_AUTOMATIC_SAVE) {
+          new AutomaticSave(MISSION_PATH_IC, this._gitMission);
+        }
+        try {
+          runTimer();
+        } catch (e) {
+          error('Error while setup automatic save');
+          error(e);
+        }
+      } else {
+        await this.gitMission.forgetSshKeys();
       }
     } catch (e) {
       error('Cannot setup user repo.');
diff --git a/deadlock-plugins/deadlock-extension/src/recorder/services/automatic-save.ts b/deadlock-plugins/deadlock-extension/src/recorder/services/automatic-save.ts
index faa7925b..9fc66c68 100644
--- a/deadlock-plugins/deadlock-extension/src/recorder/services/automatic-save.ts
+++ b/deadlock-plugins/deadlock-extension/src/recorder/services/automatic-save.ts
@@ -1,6 +1,6 @@
 import { getIgnorePatternFromIgnoreFile } from '../utils/gitea';
 import FileWatcher from './file-watcher';
-import { commitAndPushOnQueue } from '../utils/gitea';
+import { pushOnCommitQueueIfNotReviewing } from '../utils/gitea';
 import GitMission from '../../core/gitMission';
 
 export default class AutomaticSave {
@@ -11,7 +11,7 @@ export default class AutomaticSave {
   async setupAutomaticSave() {
     const ignoreFilePatterns = await getIgnorePatternFromIgnoreFile('/deadlock/.gitignore');
     new FileWatcher(this.folderToWatch, ['**/*'], ignoreFilePatterns, () => {
-      commitAndPushOnQueue(this.gitMission, 'Auto');
+      pushOnCommitQueueIfNotReviewing(this.gitMission, 'Auto');
     });
   }
 }
diff --git a/deadlock-plugins/deadlock-extension/src/recorder/utils/gitea.ts b/deadlock-plugins/deadlock-extension/src/recorder/utils/gitea.ts
index c0b98092..196e081e 100644
--- a/deadlock-plugins/deadlock-extension/src/recorder/utils/gitea.ts
+++ b/deadlock-plugins/deadlock-extension/src/recorder/utils/gitea.ts
@@ -9,6 +9,7 @@ import { queue } from 'async';
 import { extensionWarn, recorderError as error, recorderLog as log } from './log';
 import { clearFilesExceptGit, copyGitUserFiles } from './workdir';
 import { copyFile } from 'fs/promises';
+import UserMission from '../../core/mission/model/userMission';
 
 const { readFile } = promises;
 
@@ -16,7 +17,7 @@ const gitQueue = queue(async (task: CallableFunction) => {
   await task();
 }, 1);
 
-export async function commitAndPushOnQueue(gitMission: GitMission, from: 'Run' | 'Auto' | 'HttpServer') {
+async function pushOnCommitQueue(gitMission: GitMission, from: 'Run' | 'Auto' | 'HttpServer') {
   if (from === 'Run') {
     gitQueue.push(async () => {
       await mergeMaster(gitMission);
@@ -28,6 +29,12 @@ export async function commitAndPushOnQueue(gitMission: GitMission, from: 'Run' |
   }
 }
 
+export async function pushOnCommitQueueIfNotReviewing(gitMission: GitMission, from: 'Run' | 'Auto' | 'HttpServer') {
+  if (!UserMission.getInstance().isReviewing()) {
+    await pushOnCommitQueue(gitMission, from);
+  }
+}
+
 async function commitAndPushCode(gitMission: GitMission) {
   try {
     await gitMission.checkout('live');
diff --git a/deadlock-plugins/deadlock-extension/src/view/CommandTree.ts b/deadlock-plugins/deadlock-extension/src/view/CommandTree.ts
index 78640e78..cdb024f0 100644
--- a/deadlock-plugins/deadlock-extension/src/view/CommandTree.ts
+++ b/deadlock-plugins/deadlock-extension/src/view/CommandTree.ts
@@ -3,7 +3,7 @@ import Mission, { MissionCommand } from '../model/mission';
 import { parse } from 'yaml';
 import { readFileSync } from 'fs';
 import { commands, ExtensionContext, ThemeColor, ThemeIcon, TreeDataProvider, TreeItem, window } from 'vscode';
-import { commitAndPushOnQueue } from '../recorder/utils/gitea';
+import { pushOnCommitQueueIfNotReviewing } from '../recorder/utils/gitea';
 import Recorder from '../recorder/recorder';
 
 export class CommandTreeProvider implements TreeDataProvider<CommandItem> {
@@ -73,7 +73,7 @@ class CommandItem extends TreeItem {
     terminal.sendText(this.missionCommand.command);
     terminal.show();
     if (this.missionCommand.type === 'submit' || this.missionCommand.type === 'run') {
-      commitAndPushOnQueue(Recorder.instance.gitMission, 'Run');
+      pushOnCommitQueueIfNotReviewing(Recorder.instance.gitMission, 'Run');
     }
   }
 }
-- 
GitLab