From f7dac6806559b9d8fd5fd965226b1a3f8f25e9eb Mon Sep 17 00:00:00 2001
From: Xavier Jouslin de Noray <xavier.jouslindenoray@savoirfairelinux.com>
Date: Thu, 21 Dec 2023 08:08:11 -0500
Subject: [PATCH] Watcher: avoid doubles in plugins

Change-Id: I2025ece90bf72a46d744a9dc8bd9a8dbb745300a
---
 src/services/plugins.manager.service.ts |  7 ++-----
 tests/plugins.manager.test.ts           | 26 +++++++++++++++++++++++++
 2 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/src/services/plugins.manager.service.ts b/src/services/plugins.manager.service.ts
index b3056d1..18a5414 100644
--- a/src/services/plugins.manager.service.ts
+++ b/src/services/plugins.manager.service.ts
@@ -74,7 +74,7 @@ export class PluginsManager {
     }
     return await Promise.all(
       this.plugins
-        .filter(plugin => this.isPluginAvailable(plugin.id, arch))
+        .filter(plugin => plugin.arches.includes(arch))
         .map(async (plugin: Plugins) => {
           return {
             id: plugin.id,
@@ -327,9 +327,6 @@ export class PluginsManager {
       pluginPath,
       'signatures.sig'
     );
-    return !this.certificateManager.verifySignature(
-      pluginAlreadyInstalled.signature,
-      signature
-    );
+    return !(Buffer.compare(signature, pluginAlreadyInstalled.signature) === 0);
   }
 }
diff --git a/tests/plugins.manager.test.ts b/tests/plugins.manager.test.ts
index 12597f9..4f46547 100644
--- a/tests/plugins.manager.test.ts
+++ b/tests/plugins.manager.test.ts
@@ -374,4 +374,30 @@ describe('Plugins manager service tests', function () {
 
         expect(result).toBe(true);
       });
+
+        it('should return false if plugin is already installed and signature is valid', async () => {
+            const pluginPath = 'path/to/plugin';
+            const signature = Buffer.from('valid-signature');
+            const plugin = {
+            id: 'test',
+            name: 'test',
+            version: '1.0.0',
+            description: 'test',
+            icon: 'test',
+            background: 'test',
+            timestamp: 'test',
+            signature: signature,
+            author: 'test',
+            };
+            const expected = [{
+            ...plugin,
+            arches: ["test"],
+            }];
+            architectureService.getAllPluginArches.resolves(['test']);
+            fileManager.readArchive.resolves(signature);
+            pluginsManagerService['plugins'] = expected;
+            Sinon.stub(pluginsManagerService, 'findPlugin').resolves({...plugin, arches: ['test']});
+            const result = await pluginsManagerService['checkPluginAlreadyPull'](pluginPath);
+            expect(result).toBe(false);
+        });
 });
\ No newline at end of file
-- 
GitLab