From 139df850b117fb7e7535e87a685b79ac6bf16489 Mon Sep 17 00:00:00 2001
From: TINCU Sebastian-Ion <Sebastian-Ion.TINCU@ext.ec.europa.eu>
Date: Thu, 18 Oct 2018 13:31:53 +0200
Subject: [PATCH] EDELIVERY-3687 SMP UI Add/Edit user

Replace fingerprint with serial number.
---
 .../user-details-dialog.component.css         |  2 +-
 .../user-details-dialog.component.html        |  4 +--
 .../user-details-dialog.component.ts          | 14 +++++-----
 .../edelivery/smp/data/ui/CertificateRO.java  |  9 -------
 .../smp/services/ui/UIUserService.java        | 26 -------------------
 5 files changed, 9 insertions(+), 46 deletions(-)

diff --git a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.css b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.css
index 3a1fb9487..7bff79416 100644
--- a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.css
+++ b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.css
@@ -7,7 +7,7 @@
   cursor: pointer;
 }
 
-.username, .role, .password, .password-confirmation, .certificate-subject, .certificate-issuer, .certificate-fingerprint {
+.username, .role, .password, .password-confirmation, .certificate-subject, .certificate-issuer, .certificate-serial-number {
   width: 100%;
 }
 
diff --git a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html
index ec24fc45b..cafe47646 100644
--- a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html
+++ b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.html
@@ -60,8 +60,8 @@
         <mat-form-field class="certificate-issuer">
           <input matInput placeholder="Issuer" [formControl]="userForm.controls['issuer']">
         </mat-form-field>
-        <mat-form-field class="certificate-fingerprint">
-          <input matInput placeholder="Fingerprints" [formControl]="userForm.controls['fingerprints']">
+        <mat-form-field class="certificate-serial-number">
+          <input matInput placeholder="Serial Number" [formControl]="userForm.controls['serialNumber']">
         </mat-form-field>
 
         <label class="custom-file-upload">
diff --git a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts
index 173f05fa4..4a39a063b 100644
--- a/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts
+++ b/smp-angular/src/app/user/user-details-dialog/user-details-dialog.component.ts
@@ -33,8 +33,6 @@ export class UserDetailsDialogComponent {
   @ViewChild('fileInput')
   private fileInput;
 
-
-
   private passwordConfirmationValidator: ValidatorFn = (control: FormGroup): ValidationErrors | null => {
     const userToggle = control.get('userToggle');
     const password = control.get('password');
@@ -54,9 +52,9 @@ export class UserDetailsDialogComponent {
     const validFrom = control.get('validFrom');
     const validTo = control.get('validTo');
     const issuer = control.get('issuer');
-    const fingerprints = control.get('fingerprints');
-    return certificateToggle && subject && validFrom && validTo && issuer && fingerprints
-        && certificateToggle.value && !(subject.value && validFrom.value && validTo.value && issuer.value && fingerprints.value) ? { certificateDetailsRequired: true} : null;
+    const serialNumber = control.get('serialNumber');
+    return certificateToggle && subject && validFrom && validTo && issuer && serialNumber
+        && certificateToggle.value && !(subject.value && validFrom.value && validTo.value && issuer.value && serialNumber.value) ? { certificateDetailsRequired: true} : null;
   };
 
   constructor(private dialogRef: MatDialogRef<UserDetailsDialogComponent>,
@@ -79,7 +77,7 @@ export class UserDetailsDialogComponent {
           validFrom: data.row.validFrom,
           validTo: data.row.validTo,
           issuer: data.row.issuer,
-          fingerprints: data.row.fingerprints,
+          serialNumber: data.row.serialNumber,
         }
       }: {
         username: '',
@@ -105,7 +103,7 @@ export class UserDetailsDialogComponent {
       'validFrom': new FormControl({ value: user.certificate.validFrom, disabled: true }, Validators.required),
       'validTo': new FormControl({ value: user.certificate.validTo, disabled: true }, Validators.required),
       'issuer': new FormControl({ value: user.certificate.issuer, disabled: true }, Validators.required),
-      'fingerprints': new FormControl({ value: user.certificate.fingerprints, disabled: true }, Validators.required),
+      'serialNumber': new FormControl({ value: user.certificate.serialNumber, disabled: true }, Validators.required),
     }, {
       validator: [this.passwordConfirmationValidator, this.atLeastOneToggleCheckedValidator, this.certificateValidator]
     });
@@ -133,7 +131,7 @@ export class UserDetailsDialogComponent {
               'validFrom': this.datePipe.transform(res.validFrom.toString(), this.dateFormat),
               'validTo': this.datePipe.transform(res.validTo.toString(), this.dateFormat),
               'issuer': res.issuer,
-              'fingerprints': res.fingerprints
+              'serialNumber': res.serialNumber
             });
           },
           err => {
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/CertificateRO.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/CertificateRO.java
index cd967b91f..6555e3708 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/CertificateRO.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/CertificateRO.java
@@ -14,7 +14,6 @@ public class CertificateRO extends BaseRO {
     private String subject;
     private String issuer;
     private String serialNumber;
-    private String fingerprints;
     private LocalDateTime validFrom;
     private LocalDateTime validTo;
 
@@ -57,14 +56,6 @@ public class CertificateRO extends BaseRO {
         this.serialNumber = serialNumber;
     }
 
-    public String getFingerprints() {
-        return fingerprints;
-    }
-
-    public void setFingerprints(String fingerprints) {
-        this.fingerprints = fingerprints;
-    }
-
     public LocalDateTime getValidFrom() {
         return validFrom;
     }
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java
index a16c8d131..bceb3a071 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java
@@ -126,14 +126,12 @@ public class UIUserService extends UIServiceBase<DBUser, UserRO> {
             String subject = cert.getSubjectDN().getName();
             String issuer = cert.getIssuerDN().getName();
             String hash = cert.getIssuerDN().getName();
-            String fingerprints = extractFingerprints(cert);
             BigInteger serial = cert.getSerialNumber();
             String certId = getCertificateIdFromCertificate(subject,issuer, serial );
             CertificateRO cro = new CertificateRO();
             cro.setCertificateId(certId);
             cro.setSubject(subject);
             cro.setIssuer(issuer);
-            cro.setFingerprints(fingerprints);
             // set serial as HEX
             cro.setSerialNumber(serial.toString(16));
             cro.setValidFrom(LocalDateTime.ofInstant(cert.getNotBefore().toInstant(), ZoneId.systemDefault()));
@@ -142,30 +140,6 @@ public class UIUserService extends UIServiceBase<DBUser, UserRO> {
             return cro;
     }
 
-    private String extractFingerprints(final X509Certificate certificate) {
-        if (certificate == null)
-            return null;
-
-        MessageDigest md = null;
-        try {
-            md = MessageDigest.getInstance("SHA-1");
-        } catch (NoSuchAlgorithmException e) {
-            LOG.warn("Error initializing MessageDigest ", e);
-            throw new SMPRuntimeException(ErrorCode.INVALID_CERTIFICATE_MESSAGE_DIGEST, e);
-        }
-        byte[] der = new byte[0];
-        try {
-            der = certificate.getEncoded();
-        } catch (CertificateEncodingException e) {
-            LOG.warn("Error encoding certificate ", e);
-            throw new SMPRuntimeException(ErrorCode.INVALID_CERTIFICATE_ENCODING, e);
-        }
-        md.update(der);
-        byte[] digest = md.digest();
-        String digestHex = DatatypeConverter.printHexBinary(digest);
-        return digestHex.toLowerCase();
-    }
-
     public String getCertificateIdFromCertificate(String subject, String issuer, BigInteger serial ){
         return new PreAuthenticatedCertificatePrincipal(subject, issuer, serial).getName();
     }
-- 
GitLab