From 77a88ba7bad7e9cb212218653d31c5daf34a3055 Mon Sep 17 00:00:00 2001 From: hyperschwartz Date: Fri, 23 Sep 2022 19:19:41 -0700 Subject: [PATCH] Use bean qualifiers to prevent type mismatches during service injection --- .../objectstore/gateway/configuration/AppConfig.kt | 11 +++++++---- .../gateway/configuration/BeanQualifiers.kt | 3 +++ .../gateway/service/ScopePermissionsService.kt | 4 +++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/server/src/main/kotlin/tech/figure/objectstore/gateway/configuration/AppConfig.kt b/server/src/main/kotlin/tech/figure/objectstore/gateway/configuration/AppConfig.kt index 3b114e1..94e450d 100644 --- a/server/src/main/kotlin/tech/figure/objectstore/gateway/configuration/AppConfig.kt +++ b/server/src/main/kotlin/tech/figure/objectstore/gateway/configuration/AppConfig.kt @@ -9,6 +9,7 @@ import io.provenance.scope.encryption.util.toJavaPrivateKey import io.provenance.scope.encryption.util.toKeyPair import io.provenance.scope.objectstore.client.CachedOsClient import io.provenance.scope.objectstore.client.OsClient +import org.springframework.beans.factory.annotation.Qualifier import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration @@ -21,14 +22,14 @@ class AppConfig { return CachedOsClient(osClient, objectStoreProperties.decryptionWorkerThreads, objectStoreProperties.concurrencySize, objectStoreProperties.cacheRecordSizeBytes) } - @Bean + @Bean(BeanQualifiers.OBJECTSTORE_ENCRYPTION_KEYS) fun encryptionKeys(provenanceProperties: ProvenanceProperties, objectStoreProperties: ObjectStoreProperties): Map = objectStoreProperties.privateKeys.map { it.toJavaPrivateKey().toKeyPair().let { keyPair -> keyPair.public.getAddress(provenanceProperties.mainNet) to DirectKeyRef(keyPair) } }.toMap() - @Bean + @Bean(BeanQualifiers.OBJECTSTORE_MASTER_KEY) fun masterKey(objectStoreProperties: ObjectStoreProperties): KeyRef = objectStoreProperties.masterKey.toJavaPrivateKey().toKeyPair().let(::DirectKeyRef) @Bean @@ -38,6 +39,8 @@ class AppConfig { gasEstimationMethod = GasEstimationMethod.MSG_FEE_CALCULATION, ) - @Bean - fun accountAddresses(encryptionKeys: Map): Set = encryptionKeys.keys + @Bean(BeanQualifiers.OBJECTSTORE_PRIVATE_KEYS) + fun accountAddresses( + @Qualifier(BeanQualifiers.OBJECTSTORE_ENCRYPTION_KEYS) encryptionKeys: Map, + ): Set = encryptionKeys.keys } diff --git a/server/src/main/kotlin/tech/figure/objectstore/gateway/configuration/BeanQualifiers.kt b/server/src/main/kotlin/tech/figure/objectstore/gateway/configuration/BeanQualifiers.kt index e54ef47..354db31 100644 --- a/server/src/main/kotlin/tech/figure/objectstore/gateway/configuration/BeanQualifiers.kt +++ b/server/src/main/kotlin/tech/figure/objectstore/gateway/configuration/BeanQualifiers.kt @@ -2,4 +2,7 @@ package tech.figure.objectstore.gateway.configuration object BeanQualifiers { const val EVENT_STREAM_COROUTINE_SCOPE_QUALIFIER = "eventStreamCoroutineScopeBean" + const val OBJECTSTORE_ENCRYPTION_KEYS: String = "objectStoreEncryptionKeys" + const val OBJECTSTORE_PRIVATE_KEYS: String = "objectStorePrivateKeys" + const val OBJECTSTORE_MASTER_KEY: String = "objectStoreMasterKey" } diff --git a/server/src/main/kotlin/tech/figure/objectstore/gateway/service/ScopePermissionsService.kt b/server/src/main/kotlin/tech/figure/objectstore/gateway/service/ScopePermissionsService.kt index bb4ac0d..a7a79a2 100644 --- a/server/src/main/kotlin/tech/figure/objectstore/gateway/service/ScopePermissionsService.kt +++ b/server/src/main/kotlin/tech/figure/objectstore/gateway/service/ScopePermissionsService.kt @@ -2,12 +2,14 @@ package tech.figure.objectstore.gateway.service import io.provenance.metadata.v1.ScopeResponse import mu.KLogging +import org.springframework.beans.factory.annotation.Qualifier import org.springframework.stereotype.Service +import tech.figure.objectstore.gateway.configuration.BeanQualifiers import tech.figure.objectstore.gateway.repository.ScopePermissionsRepository @Service class ScopePermissionsService( - private val accountAddresses: Set, + @Qualifier(BeanQualifiers.OBJECTSTORE_PRIVATE_KEYS) private val accountAddresses: Set, private val scopeFetchService: ScopeFetchService, private val scopePermissionsRepository: ScopePermissionsRepository, ) {