feat: Implement new services required or OpenSSL certificate creation

This commit is contained in:
Magnus Leßmann (@MarkL4YG) 2024-11-22 08:40:26 +01:00
parent 196d217bb7
commit ac3821c949
7 changed files with 128 additions and 6 deletions

View file

@ -10,11 +10,11 @@ import org.junit.jupiter.api.Test;
class TestOpenSSLCertificateCreator {
private CertPasswordProvider passwordProvider;
private CertificatePasswordProvider passwordProvider;
@BeforeEach
void setUp() {
passwordProvider = mock(CertPasswordProvider.class);
passwordProvider = mock(CertificatePasswordProvider.class);
when(passwordProvider.generateNewPassword()).thenReturn("ABC-123");
}

View file

@ -0,0 +1,40 @@
package de.mlessmann.certassist.service;
import de.mlessmann.certassist.openssl.CertificatePasswordProvider;
import java.security.SecureRandom;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.stereotype.Service;
@Service
public class InMemoryCertificatePasswordProvider implements CertificatePasswordProvider {
private final Map<String, String> passwords = new ConcurrentHashMap<>();
private static final String CHARACTERS =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{}|;:,.<>?";
private static final int PASSPHRASE_LENGTH = 16;
@Override
public String generateNewPassword() {
SecureRandom random = new SecureRandom();
StringBuilder passphrase = new StringBuilder(PASSPHRASE_LENGTH);
for (int i = 0; i < PASSPHRASE_LENGTH; i++) {
passphrase.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length())));
}
return passphrase.toString();
}
@Override
public String getPasswordFor(String certificateFingerprint) {
return Optional.ofNullable(passwords.get(certificateFingerprint)).orElseThrow();
}
@Override
public void setPasswordFor(String certificateFingerprint, String password) {
Objects.requireNonNull(certificateFingerprint);
Objects.requireNonNull(password);
passwords.put(certificateFingerprint, password);
}
}