diff --git a/etor/build.gradle b/etor/build.gradle index 938f3720e..1909a5d3b 100644 --- a/etor/build.gradle +++ b/etor/build.gradle @@ -13,6 +13,9 @@ dependencies { implementation project(':shared') testImplementation testFixtures(project(':shared')) + implementation 'com.azure:azure-storage-blob:12.25.0' + implementation 'com.azure:azure-identity:1.11.1' + testImplementation 'org.apache.groovy:groovy:4.0.16' testImplementation 'org.spockframework:spock-core:2.3-groovy-4.0' testImplementation 'com.openpojo:openpojo:0.9.1' diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/azure/AzureStorageAccountPartnerMetadataStorage.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/azure/AzureStorageAccountPartnerMetadataStorage.java index 5153dca6b..15a4c2b84 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/azure/AzureStorageAccountPartnerMetadataStorage.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/azure/AzureStorageAccountPartnerMetadataStorage.java @@ -1,11 +1,29 @@ package gov.hhs.cdc.trustedintermediary.external.azure; +import com.azure.identity.DefaultAzureCredentialBuilder; +import com.azure.storage.blob.BlobClient; +import com.azure.storage.blob.BlobContainerClient; +import com.azure.storage.blob.BlobServiceClientBuilder; +import gov.hhs.cdc.trustedintermediary.context.ApplicationContext; import gov.hhs.cdc.trustedintermediary.etor.metadata.PartnerMetadata; import gov.hhs.cdc.trustedintermediary.etor.metadata.PartnerMetadataStorage; +import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; /** Implements the {@link PartnerMetadataStorage} using files stored in an Azure Storage Account. */ public class AzureStorageAccountPartnerMetadataStorage implements PartnerMetadataStorage { + private static final String STORAGE_ACCOUNT_BLOB_ENDPOINT = + ApplicationContext.getProperty("STORAGE_ACCOUNT_BLOB_ENDPOINT"); + private static final String METADATA_CONTAINER_NAME = + ApplicationContext.getProperty("METADATA_CONTAINER_NAME"); + private static final BlobContainerClient CONTAINER_CLIENT = + new BlobServiceClientBuilder() + .endpoint(STORAGE_ACCOUNT_BLOB_ENDPOINT) + .credential(new DefaultAzureCredentialBuilder().build()) + .buildClient() + .getBlobContainerClient(METADATA_CONTAINER_NAME); + private static final AzureStorageAccountPartnerMetadataStorage INSTANCE = new AzureStorageAccountPartnerMetadataStorage(); @@ -21,5 +39,11 @@ public PartnerMetadata readMetadata(final String uniqueId) { } @Override - public void saveMetadata(final PartnerMetadata metadata) {} + public void saveMetadata(final PartnerMetadata metadata) { + BlobClient blobClient = CONTAINER_CLIENT.getBlobClient(metadata.uniqueId() + ".json"); + String content = "serialize(metadata)"; + ByteArrayInputStream inputStream = + new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)); + blobClient.upload(inputStream, content.length(), true); + } } diff --git a/operations/template/app.tf b/operations/template/app.tf index c08df5f53..16c95f5f7 100644 --- a/operations/template/app.tf +++ b/operations/template/app.tf @@ -34,6 +34,7 @@ resource "azurerm_linux_web_app" "api" { ENV = var.environment REPORT_STREAM_URL_PREFIX = "https://${local.rs_domain_prefix}prime.cdc.gov" KEY_VAULT_NAME = azurerm_key_vault.key_storage.name + STORAGE_ACCOUNT_BLOB_ENDPOINT = azurerm_storage_account.storage.primary_blob_endpoint METADATA_CONTAINER_NAME = azurerm_storage_container.metadata.name }