CryptoProviderFactory.kt
package de.pflugradts.passbird.application.security
import de.pflugradts.passbird.application.failure.LoginFailure
import de.pflugradts.passbird.application.failure.reportFailure
import de.pflugradts.passbird.application.util.FAILURE_EXIT_STATUS
import de.pflugradts.passbird.application.util.SystemOperation
class CryptoProviderFactory constructor(
private val keyStoreAuthenticationService: KeyStoreAuthenticationService,
private val systemOperation: SystemOperation,
) {
fun createCryptoProvider() = keyStoreAuthenticationService.authenticate(maxAttempts = 3)
.map { AesGcmCipher(it) }
.onFailure {
reportFailure(LoginFailure(3))
systemOperation.exit(FAILURE_EXIT_STATUS)
}
.getOrNull()!!
}