blob: e2f7a83a3ad785e7bb6083aa89ea96c188a0b069 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.nifi.repository.encryption.configuration.kms;
import org.apache.nifi.repository.encryption.configuration.EncryptedRepositoryType;
import java.util.Arrays;
import static org.apache.nifi.util.NiFiProperties.CONTENT_REPOSITORY_ENCRYPTION_KEY_PROVIDER_IMPLEMENTATION_CLASS;
import static org.apache.nifi.util.NiFiProperties.CONTENT_REPOSITORY_ENCRYPTION_KEY_PROVIDER_LOCATION;
import static org.apache.nifi.util.NiFiProperties.CONTENT_REPOSITORY_ENCRYPTION_KEY_PROVIDER_PASSWORD;
import static org.apache.nifi.util.NiFiProperties.FLOWFILE_REPOSITORY_ENCRYPTION_KEY_PROVIDER_IMPLEMENTATION_CLASS;
import static org.apache.nifi.util.NiFiProperties.FLOWFILE_REPOSITORY_ENCRYPTION_KEY_PROVIDER_LOCATION;
import static org.apache.nifi.util.NiFiProperties.FLOWFILE_REPOSITORY_ENCRYPTION_KEY_PROVIDER_PASSWORD;
import static org.apache.nifi.util.NiFiProperties.PROVENANCE_REPO_ENCRYPTION_KEY_PROVIDER_IMPLEMENTATION_CLASS;
import static org.apache.nifi.util.NiFiProperties.PROVENANCE_REPO_ENCRYPTION_KEY_PROVIDER_LOCATION;
import static org.apache.nifi.util.NiFiProperties.PROVENANCE_REPO_ENCRYPTION_KEY_PROVIDER_PASSWORD;
/**
* Enumeration of configuration property names for encrypted repositories supporting backward compatibility
*/
enum EncryptedRepositoryProperty {
CONTENT(
EncryptedRepositoryType.CONTENT,
CONTENT_REPOSITORY_ENCRYPTION_KEY_PROVIDER_IMPLEMENTATION_CLASS,
CONTENT_REPOSITORY_ENCRYPTION_KEY_PROVIDER_LOCATION,
CONTENT_REPOSITORY_ENCRYPTION_KEY_PROVIDER_PASSWORD
),
FLOWFILE(
EncryptedRepositoryType.FLOWFILE,
FLOWFILE_REPOSITORY_ENCRYPTION_KEY_PROVIDER_IMPLEMENTATION_CLASS,
FLOWFILE_REPOSITORY_ENCRYPTION_KEY_PROVIDER_LOCATION,
FLOWFILE_REPOSITORY_ENCRYPTION_KEY_PROVIDER_PASSWORD
),
PROVENANCE(
EncryptedRepositoryType.PROVENANCE,
PROVENANCE_REPO_ENCRYPTION_KEY_PROVIDER_IMPLEMENTATION_CLASS,
PROVENANCE_REPO_ENCRYPTION_KEY_PROVIDER_LOCATION,
PROVENANCE_REPO_ENCRYPTION_KEY_PROVIDER_PASSWORD
);
private EncryptedRepositoryType encryptedRepositoryType;
private String propertyType;
private String implementationClass;
private String location;
private String password;
EncryptedRepositoryProperty(final EncryptedRepositoryType encryptedRepositoryType,
final String implementationClass,
final String location,
final String password) {
this.encryptedRepositoryType = encryptedRepositoryType;
this.propertyType = encryptedRepositoryType.toString().toLowerCase();
this.implementationClass = implementationClass;
this.location = location;
this.password = password;
}
/**
* Get Encrypted Repository Type
*
* @return Encrypted Repository Type
*/
public EncryptedRepositoryType getEncryptedRepositoryType() {
return encryptedRepositoryType;
}
/**
* Get Property Type for resolving property names in NiFi Properties
*
* @return Property Type
*/
public String getPropertyType() {
return propertyType;
}
/**
* Get implementation class property name
*
* @return Implementation class property name
*/
public String getImplementationClass() {
return implementationClass;
}
/**
* Get location property name
*
* @return Location property name
*/
public String getLocation() {
return location;
}
/**
* Get password property name
*
* @return Password property name
*/
public String getPassword() {
return password;
}
/**
* Get Encrypted Repository Property from Encrypted Repository Type
*
* @param encryptedRepositoryType Encryption Repository Type
* @return Encrypted Repository Property
* @throws IllegalArgumentException Thrown when matching Encrypted Repository Type not found
*/
public static EncryptedRepositoryProperty fromEncryptedRepositoryType(final EncryptedRepositoryType encryptedRepositoryType) {
return Arrays.stream(values())
.filter(value -> value.encryptedRepositoryType == encryptedRepositoryType)
.findFirst()
.orElseThrow(() -> new IllegalArgumentException(encryptedRepositoryType.toString()));
}
}