From 9e1765ef64c759546a49b7fc41cebbf42ec007a4 Mon Sep 17 00:00:00 2001
From: RIHTARSIC Joze <joze.rihtarsic@ext.ec.europa.eu>
Date: Wed, 25 Sep 2024 10:38:10 +0200
Subject: [PATCH] [EDELIVERY-11391] fix duplicate import not working for
 truststore certificates

---
 .../admin-truststore/admin-truststore.component.html        | 1 +
 .../admin-truststore/admin-truststore.component.ts          | 6 ++++--
 .../smp/ui/internal/TruststoreAdminController.java          | 3 +--
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.html b/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.html
index 83a5d4263..42a6b5075 100644
--- a/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.html
+++ b/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.html
@@ -30,6 +30,7 @@
     <mat-toolbar-row class="smp-toolbar-row">
       <div class="custom-file-upload">
         <input #fileInput type="file" id="custom-file-upload" accept=".cer,.crt,.pem,.der"
+               [(ngModel)]="inputFileValue"
                (change)="uploadCertificate($event)">
         <button mat-raised-button mat-flat-button color="primary"
                 (click)="fileInput.click()">{{ "admin.truststore.button.add.certificate" | translate }}
diff --git a/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts b/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts
index 8a864be5e..e9a197825 100644
--- a/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts
+++ b/smp-angular/src/app/system-settings/admin-truststore/admin-truststore.component.ts
@@ -25,10 +25,11 @@ export class AdminTruststoreComponent implements OnInit,  OnDestroy, AfterViewIn
   trustedCertificateList: CertificateRo[];
   private updateTruststoreCertificatesSub: Subscription = Subscription.EMPTY;
   private updateTruststoreCertificateSub: Subscription = Subscription.EMPTY;
+  // purpose of this value is to reset the file input after the file is uploaded
+  inputFileValue: string = '';
 
   @ViewChild(MatPaginator) paginator: MatPaginator;
   @ViewChild(MatSort) sort: MatSort;
-
   constructor(private truststoreService: AdminTruststoreService,
               private alertService: AlertMessageService,
               private dialog: MatDialog,
@@ -111,10 +112,11 @@ export class AdminTruststoreComponent implements OnInit,  OnDestroy, AfterViewIn
     this.selected = selected;
   }
 
-
   uploadCertificate(event) {
     const file = event.target.files[0];
     this.truststoreService.uploadCertificate$(file);
+    // reset the file input
+    this.inputFileValue = '';
   }
 
   async onDeleteSelectedCertificateClicked() {
diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminController.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminController.java
index eede16b0a..b12f4eeee 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminController.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminController.java
@@ -102,9 +102,8 @@ public class TruststoreAdminController {
         } catch (NoSuchAlgorithmException | KeyStoreException | IOException | CertificateException e) {
             String message = "Error occurred while storing the certificate!";
             LOG.error(message, e);
-            creatEmptyResponse(null, EntityROStatus.ERROR, message);
+            return creatEmptyResponse(null, EntityROStatus.ERROR, message);
         }
-        return null;
     }
 
 
-- 
GitLab