Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions common/src/main/java/com/skyflow/BaseSkyflow.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
package com.skyflow;

import com.skyflow.config.Credentials;
import com.skyflow.config.VaultConfig;
import com.skyflow.enums.LogLevel;
import com.skyflow.logs.InfoLogs;
import com.skyflow.utils.BaseUtils;
import com.skyflow.utils.logger.LogUtil;

import java.util.LinkedHashMap;

class BaseSkyflow {
private final BaseSkyflowClientBuilder builder;

Expand All @@ -20,18 +17,11 @@ public LogLevel getLogLevel() {
return this.builder.logLevel;
}

public VaultConfig getVaultConfig() {
Object[] array = this.builder.vaultConfigMap.values().toArray();
return (VaultConfig) array[0];
}

static class BaseSkyflowClientBuilder {
protected final LinkedHashMap<String, VaultConfig> vaultConfigMap;
protected Credentials skyflowCredentials;
protected LogLevel logLevel;

protected BaseSkyflowClientBuilder() {
this.vaultConfigMap = new LinkedHashMap<>();
this.skyflowCredentials = null;
this.logLevel = LogLevel.ERROR;
}
Expand Down
3 changes: 2 additions & 1 deletion common/src/main/java/com/skyflow/errors/ErrorMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public enum ErrorMessage {
EmptyClusterId("%s0 Initialization failed. Invalid cluster ID. Specify a valid cluster ID."),
EmptyVaultUrl("%s0 Initialization failed. Vault URL is empty. Specify a valid vault URL."),
InvalidVaultUrlFormat("%s0 Initialization failed. Vault URL must start with 'https://'."),
EitherVaultUrlOrClusterIdRequired("%s0 Initialization failed. Specify either 'clusterId' or 'vaultURL'."),

// Connection config
InvalidConnectionId("%s0 Initialization failed. Invalid connection ID. Specify a valid connection ID."),
Expand Down Expand Up @@ -173,7 +174,7 @@ public enum ErrorMessage {
NullTokenGroupNameInTokenGroup("%s0 Validation error. TokenGroupName in TokenGroupRedactions is null or empty. Specify a valid tokenGroupName."),
InvalidRecord("%s0 Validation error. InsertRecord object in the list is invalid. Specify a valid InsertRecord object."),
;
;

private final String message;

ErrorMessage(String message) {
Expand Down
1 change: 1 addition & 0 deletions common/src/main/java/com/skyflow/logs/ErrorLogs.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public enum ErrorLogs {
EMPTY_VAULT_ID("Invalid vault config. Vault ID can not be empty."),
CLUSTER_ID_IS_REQUIRED("Invalid vault config. Cluster ID is required."),
EMPTY_CLUSTER_ID("Invalid vault config. Cluster ID can not be empty."),
EITHER_VAULT_URL_OR_CLUSTER_ID_REQUIRED("Invalid vault config. At least one of \"clusterId\" or \"vaultURL\" must be provided."),
CONNECTION_CONFIG_EXISTS("Connection config with connection ID %s1 already exists."),
CONNECTION_CONFIG_DOES_NOT_EXIST("Connection config with connection ID %s1 doesn't exist."),
CONNECTION_ID_IS_REQUIRED("Invalid connection config. Connection ID is required."),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.skyflow.utils.validations;

import com.skyflow.config.Credentials;
import com.skyflow.config.VaultConfig;
import com.skyflow.errors.ErrorCode;
import com.skyflow.errors.ErrorMessage;
import com.skyflow.errors.SkyflowException;
Expand All @@ -18,28 +17,6 @@ public class BaseValidations {
BaseValidations() {
}

public static void validateVaultConfig(VaultConfig vaultConfig) throws SkyflowException {
String vaultId = vaultConfig.getVaultId();
String clusterId = vaultConfig.getClusterId();
Credentials credentials = vaultConfig.getCredentials();
if (vaultId == null) {
LogUtil.printErrorLog(ErrorLogs.VAULT_ID_IS_REQUIRED.getLog());
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidVaultId.getMessage());
} else if (vaultId.trim().isEmpty()) {
LogUtil.printErrorLog(ErrorLogs.EMPTY_VAULT_ID.getLog());
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyVaultId.getMessage());
} else if (clusterId == null) {
LogUtil.printErrorLog(ErrorLogs.CLUSTER_ID_IS_REQUIRED.getLog());
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidClusterId.getMessage());
} else if (clusterId.trim().isEmpty()) {
LogUtil.printErrorLog(ErrorLogs.EMPTY_CLUSTER_ID.getLog());
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyClusterId.getMessage());
}
else if (credentials != null) {
validateCredentials(credentials);
}
}

public static void validateCredentials(Credentials credentials) throws SkyflowException {
int nonNullMembers = 0;
String path = credentials.getPath();
Expand Down
7 changes: 7 additions & 0 deletions v2/src/main/java/com/skyflow/Skyflow.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ public Skyflow addVaultConfig(VaultConfig vaultConfig) throws SkyflowException {
return this;
}

public VaultConfig getVaultConfig() {
Object[] array = this.builder.vaultConfigMap.values().toArray();
return (VaultConfig) array[0];
}

public VaultConfig getVaultConfig(String vaultId) {
return this.builder.vaultConfigMap.get(vaultId);
}
Expand Down Expand Up @@ -141,13 +146,15 @@ public DetectController detect(String vaultId) throws SkyflowException {
}

public static final class SkyflowClientBuilder extends BaseSkyflowClientBuilder {
private final LinkedHashMap<String, VaultConfig> vaultConfigMap;
private final LinkedHashMap<String, ConnectionController> connectionsMap;
private final LinkedHashMap<String, VaultController> vaultClientsMap;
private final LinkedHashMap<String, DetectController> detectClientsMap;
private final LinkedHashMap<String, ConnectionConfig> connectionConfigMap;

public SkyflowClientBuilder() {
super();
this.vaultConfigMap = new LinkedHashMap<>();
this.vaultClientsMap = new LinkedHashMap<>();
this.detectClientsMap = new LinkedHashMap<>();
this.connectionsMap = new LinkedHashMap<>();
Expand Down
23 changes: 23 additions & 0 deletions v2/src/main/java/com/skyflow/utils/validations/Validations.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.skyflow.config.ConnectionConfig;
import com.skyflow.config.Credentials;
import com.skyflow.config.VaultConfig;
import com.skyflow.enums.InterfaceName;
import com.skyflow.enums.RedactionType;
import com.skyflow.enums.TokenMode;
Expand Down Expand Up @@ -35,6 +37,27 @@ private Validations() {
super();
}

public static void validateVaultConfig(VaultConfig vaultConfig) throws SkyflowException {
String vaultId = vaultConfig.getVaultId();
String clusterId = vaultConfig.getClusterId();
Credentials credentials = vaultConfig.getCredentials();
if (vaultId == null) {
LogUtil.printErrorLog(ErrorLogs.VAULT_ID_IS_REQUIRED.getLog());
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidVaultId.getMessage());
} else if (vaultId.trim().isEmpty()) {
LogUtil.printErrorLog(ErrorLogs.EMPTY_VAULT_ID.getLog());
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyVaultId.getMessage());
} else if (clusterId == null) {
LogUtil.printErrorLog(ErrorLogs.CLUSTER_ID_IS_REQUIRED.getLog());
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidClusterId.getMessage());
} else if (clusterId.trim().isEmpty()) {
LogUtil.printErrorLog(ErrorLogs.EMPTY_CLUSTER_ID.getLog());
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyClusterId.getMessage());
} else if (credentials != null) {
validateCredentials(credentials);
}
}

public static void validateConnectionConfig(ConnectionConfig connectionConfig) throws SkyflowException {
String connectionId = connectionConfig.getConnectionId();
String connectionUrl = connectionConfig.getConnectionUrl();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.skyflow.errors.ErrorCode;
import com.skyflow.errors.ErrorMessage;
import com.skyflow.errors.SkyflowException;
import com.skyflow.utils.validations.BaseValidations;
import com.skyflow.utils.validations.Validations;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
Expand Down Expand Up @@ -35,7 +35,7 @@ public void testValidVaultConfigWithCredentialsInValidations() {
vaultConfig.setClusterId(clusterID);
vaultConfig.setEnv(Env.SANDBOX);
vaultConfig.setCredentials(credentials);
BaseValidations.validateVaultConfig(vaultConfig);
Validations.validateVaultConfig(vaultConfig);

Assert.assertEquals(vaultID, vaultConfig.getVaultId());
Assert.assertEquals(clusterID, vaultConfig.getClusterId());
Expand All @@ -53,7 +53,7 @@ public void testValidVaultConfigWithoutCredentialsInValidations() {
vaultConfig.setVaultId(vaultID);
vaultConfig.setClusterId(clusterID);
vaultConfig.setEnv(Env.SANDBOX);
BaseValidations.validateVaultConfig(vaultConfig);
Validations.validateVaultConfig(vaultConfig);

Assert.assertEquals(vaultID, vaultConfig.getVaultId());
Assert.assertEquals(clusterID, vaultConfig.getClusterId());
Expand All @@ -71,7 +71,7 @@ public void testDefaultEnvInVaultConfigWithCredentialsInValidations() {
vaultConfig.setVaultId(vaultID);
vaultConfig.setClusterId(clusterID);
vaultConfig.setCredentials(credentials);
BaseValidations.validateVaultConfig(vaultConfig);
Validations.validateVaultConfig(vaultConfig);

Assert.assertEquals(vaultID, vaultConfig.getVaultId());
Assert.assertEquals(clusterID, vaultConfig.getClusterId());
Expand All @@ -89,7 +89,7 @@ public void testDefaultEnvInVaultConfigWithoutCredentialsInValidations() {
vaultConfig.setVaultId(vaultID);
vaultConfig.setClusterId(clusterID);
vaultConfig.setEnv(null);
BaseValidations.validateVaultConfig(vaultConfig);
Validations.validateVaultConfig(vaultConfig);

Assert.assertEquals(vaultID, vaultConfig.getVaultId());
Assert.assertEquals(clusterID, vaultConfig.getClusterId());
Expand All @@ -106,7 +106,7 @@ public void testNoVaultIdInVaultConfigInValidations() {
try {
vaultConfig.setClusterId(clusterID);
vaultConfig.setEnv(Env.SANDBOX);
BaseValidations.validateVaultConfig(vaultConfig);
Validations.validateVaultConfig(vaultConfig);
Assert.fail(EXCEPTION_NOT_THROWN);
} catch (SkyflowException e) {
Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode());
Expand All @@ -121,7 +121,7 @@ public void testEmptyVaultIdInVaultConfigInValidations() {
vaultConfig.setVaultId("");
vaultConfig.setClusterId(clusterID);
vaultConfig.setEnv(Env.SANDBOX);
BaseValidations.validateVaultConfig(vaultConfig);
Validations.validateVaultConfig(vaultConfig);
Assert.fail(EXCEPTION_NOT_THROWN);
} catch (SkyflowException e) {
Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode());
Expand All @@ -135,7 +135,7 @@ public void testNoClusterIdInVaultConfigInValidations() {
VaultConfig vaultConfig = new VaultConfig();
vaultConfig.setVaultId(vaultID);
vaultConfig.setEnv(Env.SANDBOX);
BaseValidations.validateVaultConfig(vaultConfig);
Validations.validateVaultConfig(vaultConfig);
Assert.fail(EXCEPTION_NOT_THROWN);
} catch (SkyflowException e) {
Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode());
Expand All @@ -150,7 +150,7 @@ public void testEmptyClusterIdInVaultConfigInValidations() {
vaultConfig.setVaultId(vaultID);
vaultConfig.setClusterId("");
vaultConfig.setEnv(Env.SANDBOX);
BaseValidations.validateVaultConfig(vaultConfig);
Validations.validateVaultConfig(vaultConfig);
Assert.fail(EXCEPTION_NOT_THROWN);
} catch (SkyflowException e) {
Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode());
Expand Down
7 changes: 7 additions & 0 deletions v3/src/main/java/com/skyflow/Skyflow.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ public static SkyflowClientBuilder builder() {
return new SkyflowClientBuilder();
}

public VaultConfig getVaultConfig() {
Object[] array = this.builder.vaultConfigMap.values().toArray();
return (VaultConfig) array[0];
}

public VaultController vault() throws SkyflowException {
Object[] array = this.builder.vaultClientsMap.keySet().toArray();
if (array.length < 1) {
Expand All @@ -48,9 +53,11 @@ public VaultController vault() throws SkyflowException {
}

public static final class SkyflowClientBuilder extends BaseSkyflowClientBuilder {
private final LinkedHashMap<String, VaultConfig> vaultConfigMap;
private final LinkedHashMap<String, VaultController> vaultClientsMap;

public SkyflowClientBuilder() {
this.vaultConfigMap = new LinkedHashMap<>();
this.vaultClientsMap = new LinkedHashMap<>();
}

Expand Down
8 changes: 8 additions & 0 deletions v3/src/main/java/com/skyflow/VaultClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,15 @@ protected void setBearerToken() throws SkyflowException {
}

private void updateVaultURL() throws SkyflowException {
// Fetch vaultURL from ENV
String vaultURL = Utils.getEnvVaultURL();

// If vaultURL from ENV is null or empty, fetch vaultURL from vault config
if (vaultURL == null || vaultURL.isEmpty()) {
vaultURL = this.vaultConfig.getVaultURL();
}

// If vaultURL from vault config is also null or empty, construct vaultURL from clusterId passed in vault config
if (vaultURL == null || vaultURL.isEmpty()) {
vaultURL = Utils.getVaultURL(this.vaultConfig.getClusterId(), this.vaultConfig.getEnv());
}
Expand Down
68 changes: 68 additions & 0 deletions v3/src/main/java/com/skyflow/config/VaultConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.skyflow.config;

import com.skyflow.enums.Env;

public class VaultConfig implements Cloneable {
private String vaultId;
private String clusterId;
private String vaultURL;
private Env env;
private Credentials credentials;

public VaultConfig() {
this.vaultId = null;
this.clusterId = null;
this.vaultURL = null;
this.env = Env.PROD;
this.credentials = null;
}

public String getVaultId() {
return vaultId;
}

public void setVaultId(String vaultId) {
this.vaultId = vaultId;
}

public String getClusterId() {
return clusterId;
}

public void setClusterId(String clusterId) {
this.clusterId = clusterId;
}

public Env getEnv() {
return env;
}

public void setEnv(Env env) {
this.env = env == null ? Env.PROD : env;
}

public Credentials getCredentials() {
return credentials;
}

public void setCredentials(Credentials credentials) {
this.credentials = credentials;
}

public String getVaultURL() {
return vaultURL;
}

public void setVaultURL(String vaultURL) {
this.vaultURL = vaultURL;
}

@Override
public Object clone() throws CloneNotSupportedException {
VaultConfig cloned = (VaultConfig) super.clone();
if (this.credentials != null) {
cloned.credentials = (Credentials) this.credentials.clone();
}
return cloned;
}
}
20 changes: 18 additions & 2 deletions v3/src/main/java/com/skyflow/utils/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import io.github.cdimascio.dotenv.Dotenv;
import io.github.cdimascio.dotenv.DotenvException;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -54,7 +56,7 @@ public static List<DetokenizeRequest> createDetokenizeBatches(DetokenizeRequest
// Create a sublist for the current batch
List<String> batchTokens = tokens.subList(i, Math.min(i + batchSize, tokens.size()));
List<TokenGroupRedactions> tokenGroupRedactions = null;
if (request.getTokenGroupRedactions().isPresent() && !request.getTokenGroupRedactions().get().isEmpty()){
if (request.getTokenGroupRedactions().isPresent() && !request.getTokenGroupRedactions().get().isEmpty()) {
tokenGroupRedactions = request.getTokenGroupRedactions().get();
}
// Build a new DetokenizeRequest for the current batch
Expand Down Expand Up @@ -256,7 +258,7 @@ public static String getEnvVaultURL() throws SkyflowException {
if (vaultURL != null && vaultURL.trim().isEmpty()) {
LogUtil.printErrorLog(ErrorLogs.EMPTY_VAULT_URL.getLog());
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyVaultUrl.getMessage());
} else if (vaultURL != null && !vaultURL.startsWith(BaseConstants.SECURE_PROTOCOL)) {
} else if (vaultURL != null && !isValidURL(vaultURL)) {
LogUtil.printErrorLog(ErrorLogs.INVALID_VAULT_URL_FORMAT.getLog());
throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidVaultUrlFormat.getMessage());
}
Expand All @@ -266,4 +268,18 @@ public static String getEnvVaultURL() throws SkyflowException {
}
}

public static boolean isValidURL(String url) {
URL parsedUrl;
try {
parsedUrl = new URL(url);
} catch (MalformedURLException e) {
return false;
}

if (!parsedUrl.getProtocol().equalsIgnoreCase("https")) {
return false;
} else {
return parsedUrl.getHost() != null && !parsedUrl.getHost().isEmpty();
}
}
}
Loading
Loading