Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 139df850 authored by Sebastian-Ion TINCU's avatar Sebastian-Ion TINCU
Browse files

EDELIVERY-3687 SMP UI Add/Edit user

Replace fingerprint with serial number.
parent 4c059c58
No related branches found
No related tags found
No related merge requests found
......@@ -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%;
}
......
......@@ -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">
......
......@@ -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 => {
......
......@@ -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;
}
......
......@@ -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();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment