From f3604f05510c6fede697a53222d24dc82ef5f7ff Mon Sep 17 00:00:00 2001
From: Xavier Jouslin de Noray <xavier.jouslindenoray@savoirfairelinux.com>
Date: Tue, 26 Dec 2023 06:08:43 -0500
Subject: [PATCH] CRL: make accessible the crl for root and sfl

Gitlab: #12
Change-Id: If9e93db6adba0a9fda26e07e417cbb3144eed05c
---
 src/services/certificate.manager.service.ts | 51 +++++++++++++--------
 tests/certificate.manager.test.ts           |  6 +--
 2 files changed, 34 insertions(+), 23 deletions(-)

diff --git a/src/services/certificate.manager.service.ts b/src/services/certificate.manager.service.ts
index 5b402b5..f2638df 100644
--- a/src/services/certificate.manager.service.ts
+++ b/src/services/certificate.manager.service.ts
@@ -29,37 +29,48 @@ export class CertificateManager {
   }
 
   async getCaCrlPath(): Promise<string> {
-    const crlFilePath =
-      (process.env.DATA_DIRECTORY as string) + '/' + 'root.crl';
-    const isCRLFileExist = await this.fileManager.isFileExist(crlFilePath);
-    if (process.env.DATA_DIRECTORY === undefined || !isCRLFileExist) {
-      return '';
-    }
-    return crlFilePath;
+    return await this.getCrlPath(
+      // eslint-disable-next-line
+      __dirname + '/../..' + (process.env.DATA_DIRECTORY as string),
+      'root.crl'
+    );
   }
 
   async getSflCrlPath(): Promise<string> {
-    const crlFilePath =
-      (process.env.DATA_DIRECTORY as string) + '/' + 'SFL.crl';
-    const isCRLFileExist = await this.fileManager.isFileExist(crlFilePath);
-    if (process.env.DATA_DIRECTORY === undefined || !isCRLFileExist) {
+    return await this.getCrlPath(
+      // eslint-disable-next-line
+      __dirname + '/../..' + (process.env.DATA_DIRECTORY as string),
+      'SFL.crl'
+    );
+  }
+
+  async getCrlPath(path: string, file: string): Promise<string> {
+    const crlPath = path + '/' + file;
+    const isCrlFileExist = await this.fileManager.isFileExist(crlPath);
+    if (process.env.DATA_DIRECTORY === undefined || !isCrlFileExist) {
       return '';
     }
-    return crlFilePath;
+    return crlPath;
   }
 
-  async getCaCrl(): Promise<string> {
+  async getCaCrl(): Promise<Buffer> {
     if (process.env.DATA_DIRECTORY === undefined) {
-      return '';
+      return Buffer.from('');
     }
-    return await this.readCRL(process.env.DATA_DIRECTORY + '/' + 'ca.crl');
+    return await this.readCRL(
+      // eslint-disable-next-line
+      __dirname + '/../..' + process.env.DATA_DIRECTORY + '/' + 'root.crl'
+    );
   }
 
-  async getSflCrl(): Promise<string> {
+  async getSflCrl(): Promise<Buffer> {
     if (process.env.DATA_DIRECTORY === undefined) {
-      return '';
+      return Buffer.from('');
     }
-    return await this.readCRL(process.env.DATA_DIRECTORY + '/' + 'sfl.crl');
+    return await this.readCRL(
+      // eslint-disable-next-line
+      __dirname + '/../..' + process.env.DATA_DIRECTORY + '/' + 'sfl.crl'
+    );
   }
 
   verifySignature(signature: Buffer, checkSignature: Buffer): boolean {
@@ -74,8 +85,8 @@ export class CertificateManager {
       });
   }
 
-  private async readCRL(file: string): Promise<string> {
-    return (await this.fileManager.readFile(file)).toString();
+  private async readCRL(file: string): Promise<Buffer> {
+    return await this.fileManager.readFile(file);
   }
 
   parseDN(dn: string): Record<string, string> {
diff --git a/tests/certificate.manager.test.ts b/tests/certificate.manager.test.ts
index 2453569..effea63 100644
--- a/tests/certificate.manager.test.ts
+++ b/tests/certificate.manager.test.ts
@@ -70,21 +70,21 @@ describe('Certificate manager service tests', function () {
         const expectedCRL = 'test';
         fileManager.readFile.resolves(Buffer.from(expectedCRL, 'utf-8'));
         const crl = await certificateManager['readCRL'](path + '/' + file);
-        expect(crl).toEqual(expectedCRL);
+        expect(crl).toEqual(Buffer.from(expectedCRL, 'utf-8'));
     });
 
     it('should return sfl crl', async () => {
         const expectedCRL = 'test';
         fileManager.readFile.resolves(Buffer.from(expectedCRL, 'utf-8'));
         const crl = await certificateManager.getSflCrl();
-        expect(crl).toEqual(expectedCRL);
+        expect(crl).toEqual(Buffer.from(expectedCRL, 'utf-8'));
     });
 
     it('should return ca crl', async () => {
         const expectedCRL = 'test';
         fileManager.readFile.resolves(Buffer.from(expectedCRL, 'utf-8'));
         const crl = await certificateManager.getCaCrl();
-        expect(crl).toEqual(expectedCRL);
+        expect(crl).toEqual(Buffer.from(expectedCRL, 'utf-8'));
     });
     it('should parse the DN correctly', () => {
         const dn = 'CN=John Doe\nO=Acme Corp';
-- 
GitLab