From caa3b1ccb3fbbcf2221497b509f325eaac9c2538 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Tue, 17 Sep 2024 10:51:57 +0530 Subject: [PATCH 01/68] SK-1663 Basic scaffolding and project structure for v2 --- v1/src/main/java/DetokenizeExample.java | 71 +++++++++++ v1/src/main/java/InsertExample.java | 84 +++++++++++++ .../main/java/com/skyflow/Configuration.java | 0 .../com/skyflow/common/utils/Constants.java | 0 .../com/skyflow/common/utils/Helpers.java | 0 .../com/skyflow/common/utils/HttpUtility.java | 0 .../com/skyflow/common/utils/LogUtil.java | 0 .../com/skyflow/common/utils/TokenUtils.java | 0 .../com/skyflow/common/utils/Validators.java | 0 .../com/skyflow/entities/DeleteInput.java | 0 .../com/skyflow/entities/DeleteOptions.java | 0 .../skyflow/entities/DeleteRecordInput.java | 0 .../com/skyflow/entities/DetokenizeInput.java | 0 .../skyflow/entities/DetokenizeRecord.java | 0 .../com/skyflow/entities/GetByIdInput.java | 0 .../skyflow/entities/GetByIdRecordInput.java | 0 .../java/com/skyflow/entities/GetInput.java | 0 .../java/com/skyflow/entities/GetOptions.java | 0 .../com/skyflow/entities/GetRecordInput.java | 0 .../skyflow/entities/InsertBulkOptions.java | 0 .../com/skyflow/entities/InsertInput.java | 0 .../com/skyflow/entities/InsertOptions.java | 0 .../skyflow/entities/InsertRecordInput.java | 0 .../java/com/skyflow/entities/LogLevel.java | 0 .../java/com/skyflow/entities/QueryInput.java | 0 .../com/skyflow/entities/QueryOptions.java | 0 .../skyflow/entities/QueryRecordInput.java | 0 .../com/skyflow/entities/RedactionType.java | 0 .../com/skyflow/entities/RequestMethod.java | 0 .../com/skyflow/entities/ResponseToken.java | 0 .../entities/SkyflowConfiguration.java | 0 .../com/skyflow/entities/TokenProvider.java | 0 .../com/skyflow/entities/UpdateInput.java | 0 .../com/skyflow/entities/UpdateOptions.java | 0 .../skyflow/entities/UpdateRecordInput.java | 0 .../com/skyflow/entities/UpsertOption.java | 0 .../java/com/skyflow/errors/ErrorCode.java | 0 .../com/skyflow/errors/SkyflowException.java | 0 .../main/java/com/skyflow/logs/DebugLogs.java | 0 .../main/java/com/skyflow/logs/ErrorLogs.java | 0 .../main/java/com/skyflow/logs/InfoLogs.java | 0 .../main/java/com/skyflow/logs/WarnLogs.java | 0 .../serviceaccount/util/BearerToken.java | 0 .../util/SignedDataTokenResponse.java | 0 .../serviceaccount/util/SignedDataTokens.java | 0 .../skyflow/serviceaccount/util/Token.java | 0 .../com/skyflow/vault/DeleteBySkyflowId.java | 0 .../java/com/skyflow/vault/Detokenize.java | 0 .../src}/main/java/com/skyflow/vault/Get.java | 0 .../com/skyflow/vault/GetBySkyflowId.java | 0 .../main/java/com/skyflow/vault/Insert.java | 0 .../main/java/com/skyflow/vault/Skyflow.java | 0 .../com/skyflow/vault/UpdateBySkyflowId.java | 0 .../com/skyflow/common/utils/HelpersTest.java | 0 .../skyflow/common/utils/HttpUtilityTest.java | 0 .../skyflow/common/utils/TokenUtilsTest.java | 0 .../utils/TokenUtilsValidTokenTest.java | 0 .../skyflow/common/utils/ValidatorsTest.java | 0 .../serviceaccount/util/BearerTokenTest.java | 0 .../util/SignedDataTokenResponseTest.java | 0 .../util/SignedDataTokensTest.java | 0 .../serviceaccount/util/TokenTest.java | 0 .../com/skyflow/vault/DeleteMethodTest.java | 0 .../java/com/skyflow/vault/GetMethodTest.java | 0 .../skyflow/vault/InvokeConnectionTest.java | 0 .../java/com/skyflow/vault/SkyflowTest.java | 0 .../test/resources/invalidCredentials.json | 0 {src => v1/src}/test/resources/notJson.txt | 0 .../com/skyflow/client/SkyflowClient.java | 117 ++++++++++++++++++ .../com/skyflow/config/ConnectionConfig.java | 11 ++ .../java/com/skyflow/config/Credentials.java | 11 ++ .../com/skyflow/config/ManagementConfig.java | 11 ++ .../java/com/skyflow/config/VaultConfig.java | 11 ++ .../java/com/skyflow/errors/SkyflowError.java | 10 ++ .../management/controller/policy/Policy.java | 23 ++++ .../management/controller/role/Role.java | 23 ++++ .../management/controller/vault/Vault.java | 23 ++++ .../createVault/CreateVaultRequest.java | 10 ++ .../deletePolicy/DeletePolicyRequest.java | 10 ++ .../createVault/CreateVaultResponse.java | 10 ++ .../deletePolicy/DeletePolicyResponse.java | 10 ++ .../management/service/ManagementService.java | 46 +++++++ v2/main/java/com/skyflow/utils/Builder.java | 4 + v2/main/java/com/skyflow/utils/LogLevel.java | 9 ++ .../utils/validations/Validations.java | 10 ++ .../controller/audit/AuditController.java | 18 +++ .../binlookup/BinLookupController.java | 18 +++ .../connections/ConnectionsController.java | 18 +++ .../controller/detect/DetectController.java | 28 +++++ .../vault/model/request/AuditRequest.java | 11 ++ .../model/request/DetokenizeRequest.java | 11 ++ .../vault/model/request/InsertRequest.java | 11 ++ .../vault/model/response/AuditResponse.java | 10 ++ .../model/response/BinLookupResponse.java | 10 ++ .../model/response/ConnectionResponse.java | 10 ++ .../vault/model/response/DetectResponse.java | 10 ++ .../model/response/DetokenizeResponse.java | 10 ++ .../vault/model/response/InsertResponse.java | 10 ++ .../skyflow/vault/service/VaultService.java | 61 +++++++++ 99 files changed, 740 insertions(+) create mode 100644 v1/src/main/java/DetokenizeExample.java create mode 100644 v1/src/main/java/InsertExample.java rename {src => v1/src}/main/java/com/skyflow/Configuration.java (100%) rename {src => v1/src}/main/java/com/skyflow/common/utils/Constants.java (100%) rename {src => v1/src}/main/java/com/skyflow/common/utils/Helpers.java (100%) rename {src => v1/src}/main/java/com/skyflow/common/utils/HttpUtility.java (100%) rename {src => v1/src}/main/java/com/skyflow/common/utils/LogUtil.java (100%) rename {src => v1/src}/main/java/com/skyflow/common/utils/TokenUtils.java (100%) rename {src => v1/src}/main/java/com/skyflow/common/utils/Validators.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/DeleteInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/DeleteOptions.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/DeleteRecordInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/DetokenizeInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/DetokenizeRecord.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/GetByIdInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/GetByIdRecordInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/GetInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/GetOptions.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/GetRecordInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/InsertBulkOptions.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/InsertInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/InsertOptions.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/InsertRecordInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/LogLevel.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/QueryInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/QueryOptions.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/QueryRecordInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/RedactionType.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/RequestMethod.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/ResponseToken.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/SkyflowConfiguration.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/TokenProvider.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/UpdateInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/UpdateOptions.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/UpdateRecordInput.java (100%) rename {src => v1/src}/main/java/com/skyflow/entities/UpsertOption.java (100%) rename {src => v1/src}/main/java/com/skyflow/errors/ErrorCode.java (100%) rename {src => v1/src}/main/java/com/skyflow/errors/SkyflowException.java (100%) rename {src => v1/src}/main/java/com/skyflow/logs/DebugLogs.java (100%) rename {src => v1/src}/main/java/com/skyflow/logs/ErrorLogs.java (100%) rename {src => v1/src}/main/java/com/skyflow/logs/InfoLogs.java (100%) rename {src => v1/src}/main/java/com/skyflow/logs/WarnLogs.java (100%) rename {src => v1/src}/main/java/com/skyflow/serviceaccount/util/BearerToken.java (100%) rename {src => v1/src}/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java (100%) rename {src => v1/src}/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java (100%) rename {src => v1/src}/main/java/com/skyflow/serviceaccount/util/Token.java (100%) rename {src => v1/src}/main/java/com/skyflow/vault/DeleteBySkyflowId.java (100%) rename {src => v1/src}/main/java/com/skyflow/vault/Detokenize.java (100%) rename {src => v1/src}/main/java/com/skyflow/vault/Get.java (100%) rename {src => v1/src}/main/java/com/skyflow/vault/GetBySkyflowId.java (100%) rename {src => v1/src}/main/java/com/skyflow/vault/Insert.java (100%) rename {src => v1/src}/main/java/com/skyflow/vault/Skyflow.java (100%) rename {src => v1/src}/main/java/com/skyflow/vault/UpdateBySkyflowId.java (100%) rename {src => v1/src}/test/java/com/skyflow/common/utils/HelpersTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/common/utils/HttpUtilityTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/common/utils/TokenUtilsTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/common/utils/TokenUtilsValidTokenTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/common/utils/ValidatorsTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/serviceaccount/util/BearerTokenTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/serviceaccount/util/SignedDataTokenResponseTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/serviceaccount/util/TokenTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/vault/DeleteMethodTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/vault/GetMethodTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/vault/InvokeConnectionTest.java (100%) rename {src => v1/src}/test/java/com/skyflow/vault/SkyflowTest.java (100%) rename {src => v1/src}/test/resources/invalidCredentials.json (100%) rename {src => v1/src}/test/resources/notJson.txt (100%) create mode 100644 v2/main/java/com/skyflow/client/SkyflowClient.java create mode 100644 v2/main/java/com/skyflow/config/ConnectionConfig.java create mode 100644 v2/main/java/com/skyflow/config/Credentials.java create mode 100644 v2/main/java/com/skyflow/config/ManagementConfig.java create mode 100644 v2/main/java/com/skyflow/config/VaultConfig.java create mode 100644 v2/main/java/com/skyflow/errors/SkyflowError.java create mode 100644 v2/main/java/com/skyflow/management/controller/policy/Policy.java create mode 100644 v2/main/java/com/skyflow/management/controller/role/Role.java create mode 100644 v2/main/java/com/skyflow/management/controller/vault/Vault.java create mode 100644 v2/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java create mode 100644 v2/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java create mode 100644 v2/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java create mode 100644 v2/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java create mode 100644 v2/main/java/com/skyflow/management/service/ManagementService.java create mode 100644 v2/main/java/com/skyflow/utils/Builder.java create mode 100644 v2/main/java/com/skyflow/utils/LogLevel.java create mode 100644 v2/main/java/com/skyflow/utils/validations/Validations.java create mode 100644 v2/main/java/com/skyflow/vault/controller/audit/AuditController.java create mode 100644 v2/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java create mode 100644 v2/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java create mode 100644 v2/main/java/com/skyflow/vault/controller/detect/DetectController.java create mode 100644 v2/main/java/com/skyflow/vault/model/request/AuditRequest.java create mode 100644 v2/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java create mode 100644 v2/main/java/com/skyflow/vault/model/request/InsertRequest.java create mode 100644 v2/main/java/com/skyflow/vault/model/response/AuditResponse.java create mode 100644 v2/main/java/com/skyflow/vault/model/response/BinLookupResponse.java create mode 100644 v2/main/java/com/skyflow/vault/model/response/ConnectionResponse.java create mode 100644 v2/main/java/com/skyflow/vault/model/response/DetectResponse.java create mode 100644 v2/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java create mode 100644 v2/main/java/com/skyflow/vault/model/response/InsertResponse.java create mode 100644 v2/main/java/com/skyflow/vault/service/VaultService.java diff --git a/v1/src/main/java/DetokenizeExample.java b/v1/src/main/java/DetokenizeExample.java new file mode 100644 index 00000000..8b2a657f --- /dev/null +++ b/v1/src/main/java/DetokenizeExample.java @@ -0,0 +1,71 @@ +/* + Copyright (c) 2022 Skyflow, Inc. +*/ + +import com.skyflow.Configuration; +import com.skyflow.entities.*; +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.vault.Skyflow; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + + +public class DetokenizeExample { + + public static void main(String[] args) { + + try { + SkyflowConfiguration config = new SkyflowConfiguration( + "l906001b0b4e4843a69b091f278f7017", + "https://sb.area51.vault.skyflowapis.dev", + new DemoTokenProvider() + ); + + Configuration.setLogLevel(LogLevel.DEBUG); + + Skyflow skyflowClient = Skyflow.init(config); + JSONObject records = new JSONObject(); + JSONArray recordsArray = new JSONArray(); + + JSONObject record = new JSONObject(); + record.put("token", "4304-0207-2378-9259"); + record.put("redaction", RedactionType.PLAIN_TEXT.toString()); + JSONObject record1 = new JSONObject(); + record1.put("token", "3809-9467-7122-3994"); + record1.put("redaction", RedactionType.PLAIN_TEXT.toString()); + recordsArray.add(record); + recordsArray.add(record1); + records.put("records", recordsArray); + + JSONObject response = skyflowClient.detokenize(records); + System.out.println(response); + + } catch (SkyflowException e) { + e.printStackTrace(); + System.out.println(e.getData()); + } + + } + + static class DemoTokenProvider implements TokenProvider { + + private String bearerToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRwczovL21hbmFnZS5za3lmbG93YXBpcy5kZXYiLCJjbGkiOiJ2OGY0NTE1OWYxNjA0NzViYTk4MjAxOGJkMmFiMmVlZSIsImV4cCI6MTcxMTA5NDYwMSwiaWF0IjoxNzExMDkxMDAyLCJpc3MiOiJzYS1hdXRoQG1hbmFnZS5za3lmbG93YXBpcy5kZXYiLCJqdGkiOiJuMzk0OGI1ODIxOGQ0NWQ2OWQyYTExZjMwYjk2YmRiMiIsImtleSI6Imc0NDRmZTQxMmEzZTQ5ZTA5YjJlN2E4ZGE2ZDhkZWNlIiwic2NwIjpudWxsLCJzdWIiOiJzZGstZTJlLWJsaXR6LW5ldyJ9.D1bkgk8U5yC7Ped-eC8W4zc7CSImRdMbH2jvx9o_ADGYLmRsUJg3Jm004RtmCz6Vqy1hfgBobje4SgccavlYQTO3JUdtwx9SLJVwMGSEYnM_LvTAKqTVInJkvkKgJThHfh6na4iKWZlzUjNjhIFVjLcEhJuikRO68dpw8YFo84mc8iAjzW4BiKIyfAPzEUqIYq6VNUtz80ZsIhkfMz99_93NFf_KKzIR_a-MVYa7LzJfCrO6EQ-1fXLrTeJkusuco4MFSOf3-x55TimJygcQJjJC34lEtDK0OhFJWbM65gJRpRv6ftaknXRcp8caVE6xkqXI320O6GcBZK933aHw8w"; + + @Override + public String getBearerToken() throws Exception { +// ResponseToken response = null; +// try { +// String filePath = "/home/vivekj/SKYFLOW/SDKs/skyflow-java/samples/credentials.json"; +// if (Token.isExpired(bearerToken)) { +// response = Token.generateBearerToken(filePath); +// bearerToken = response.getAccessToken(); +// } +// } catch (SkyflowException e) { +// e.printStackTrace(); +// } + + return bearerToken; + } + } +} diff --git a/v1/src/main/java/InsertExample.java b/v1/src/main/java/InsertExample.java new file mode 100644 index 00000000..1cdd0900 --- /dev/null +++ b/v1/src/main/java/InsertExample.java @@ -0,0 +1,84 @@ +/* + Copyright (c) 2022 Skyflow, Inc. +*/ + +import com.skyflow.Configuration; +import com.skyflow.entities.*; +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.vault.Skyflow; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +public class InsertExample { + + public static void main(String[] args) { + // blitz +// String vaultID = ""; +// String vaultURL = ""; + + // stage + String vaultID = "aef438f3be974c8f897795ab02248f78"; + String vaultURL = "https://cf5643204594.vault.skyflowapis.tech"; + + try { + SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); + + Configuration.setLogLevel(LogLevel.DEBUG); + Skyflow skyflowClient = Skyflow.init(config); + JSONObject records = new JSONObject(); + JSONArray recordsArray = new JSONArray(); + + JSONObject record = new JSONObject(); + record.put("table", "customers"); + JSONObject fields = new JSONObject(); + fields.put("name", "chandragupta maurya"); + fields.put("card_number", "4111111111111111"); + fields.put("email", "chandragupta.maurya@test.com"); + record.put("fields", fields); + + JSONObject record2 = new JSONObject(); + record2.put("table", "pii_fields_upsert"); + JSONObject fields2 = new JSONObject(); + fields2.put("name", "java coe"); + fields2.put("card_number", "4111111111111111"); + fields2.put("expiration_year", "2025"); + fields2.put("expiration_month", "11"); + fields2.put("expiration_date", "11/25"); + fields2.put("cvv", "123"); + record2.put("fields", fields2); + + recordsArray.add(record); +// recordsArray.add(record2); + records.put("records", recordsArray); + + InsertOptions insertOptions = new InsertOptions(false); + JSONObject res = skyflowClient.insert(records, insertOptions); + + System.out.println("final response " + res); + } catch (SkyflowException e) { + System.out.println(e); + e.printStackTrace(); + } + } + + static class DemoTokenProvider implements TokenProvider { + private String bearerToken; + + @Override + public String getBearerToken() throws Exception { + ResponseToken response = null; + String env = "stage"; + try { + String filePath = "/home/vivekj/Documents/credentials/sdk-integration-tests/" + env + "-credentials.json"; + if (Token.isExpired(bearerToken)) { + response = Token.generateBearerToken(filePath); + bearerToken = response.getAccessToken(); + } + } catch (SkyflowException e) { + e.printStackTrace(); + } + return bearerToken; + } + } +} diff --git a/src/main/java/com/skyflow/Configuration.java b/v1/src/main/java/com/skyflow/Configuration.java similarity index 100% rename from src/main/java/com/skyflow/Configuration.java rename to v1/src/main/java/com/skyflow/Configuration.java diff --git a/src/main/java/com/skyflow/common/utils/Constants.java b/v1/src/main/java/com/skyflow/common/utils/Constants.java similarity index 100% rename from src/main/java/com/skyflow/common/utils/Constants.java rename to v1/src/main/java/com/skyflow/common/utils/Constants.java diff --git a/src/main/java/com/skyflow/common/utils/Helpers.java b/v1/src/main/java/com/skyflow/common/utils/Helpers.java similarity index 100% rename from src/main/java/com/skyflow/common/utils/Helpers.java rename to v1/src/main/java/com/skyflow/common/utils/Helpers.java diff --git a/src/main/java/com/skyflow/common/utils/HttpUtility.java b/v1/src/main/java/com/skyflow/common/utils/HttpUtility.java similarity index 100% rename from src/main/java/com/skyflow/common/utils/HttpUtility.java rename to v1/src/main/java/com/skyflow/common/utils/HttpUtility.java diff --git a/src/main/java/com/skyflow/common/utils/LogUtil.java b/v1/src/main/java/com/skyflow/common/utils/LogUtil.java similarity index 100% rename from src/main/java/com/skyflow/common/utils/LogUtil.java rename to v1/src/main/java/com/skyflow/common/utils/LogUtil.java diff --git a/src/main/java/com/skyflow/common/utils/TokenUtils.java b/v1/src/main/java/com/skyflow/common/utils/TokenUtils.java similarity index 100% rename from src/main/java/com/skyflow/common/utils/TokenUtils.java rename to v1/src/main/java/com/skyflow/common/utils/TokenUtils.java diff --git a/src/main/java/com/skyflow/common/utils/Validators.java b/v1/src/main/java/com/skyflow/common/utils/Validators.java similarity index 100% rename from src/main/java/com/skyflow/common/utils/Validators.java rename to v1/src/main/java/com/skyflow/common/utils/Validators.java diff --git a/src/main/java/com/skyflow/entities/DeleteInput.java b/v1/src/main/java/com/skyflow/entities/DeleteInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/DeleteInput.java rename to v1/src/main/java/com/skyflow/entities/DeleteInput.java diff --git a/src/main/java/com/skyflow/entities/DeleteOptions.java b/v1/src/main/java/com/skyflow/entities/DeleteOptions.java similarity index 100% rename from src/main/java/com/skyflow/entities/DeleteOptions.java rename to v1/src/main/java/com/skyflow/entities/DeleteOptions.java diff --git a/src/main/java/com/skyflow/entities/DeleteRecordInput.java b/v1/src/main/java/com/skyflow/entities/DeleteRecordInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/DeleteRecordInput.java rename to v1/src/main/java/com/skyflow/entities/DeleteRecordInput.java diff --git a/src/main/java/com/skyflow/entities/DetokenizeInput.java b/v1/src/main/java/com/skyflow/entities/DetokenizeInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/DetokenizeInput.java rename to v1/src/main/java/com/skyflow/entities/DetokenizeInput.java diff --git a/src/main/java/com/skyflow/entities/DetokenizeRecord.java b/v1/src/main/java/com/skyflow/entities/DetokenizeRecord.java similarity index 100% rename from src/main/java/com/skyflow/entities/DetokenizeRecord.java rename to v1/src/main/java/com/skyflow/entities/DetokenizeRecord.java diff --git a/src/main/java/com/skyflow/entities/GetByIdInput.java b/v1/src/main/java/com/skyflow/entities/GetByIdInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/GetByIdInput.java rename to v1/src/main/java/com/skyflow/entities/GetByIdInput.java diff --git a/src/main/java/com/skyflow/entities/GetByIdRecordInput.java b/v1/src/main/java/com/skyflow/entities/GetByIdRecordInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/GetByIdRecordInput.java rename to v1/src/main/java/com/skyflow/entities/GetByIdRecordInput.java diff --git a/src/main/java/com/skyflow/entities/GetInput.java b/v1/src/main/java/com/skyflow/entities/GetInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/GetInput.java rename to v1/src/main/java/com/skyflow/entities/GetInput.java diff --git a/src/main/java/com/skyflow/entities/GetOptions.java b/v1/src/main/java/com/skyflow/entities/GetOptions.java similarity index 100% rename from src/main/java/com/skyflow/entities/GetOptions.java rename to v1/src/main/java/com/skyflow/entities/GetOptions.java diff --git a/src/main/java/com/skyflow/entities/GetRecordInput.java b/v1/src/main/java/com/skyflow/entities/GetRecordInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/GetRecordInput.java rename to v1/src/main/java/com/skyflow/entities/GetRecordInput.java diff --git a/src/main/java/com/skyflow/entities/InsertBulkOptions.java b/v1/src/main/java/com/skyflow/entities/InsertBulkOptions.java similarity index 100% rename from src/main/java/com/skyflow/entities/InsertBulkOptions.java rename to v1/src/main/java/com/skyflow/entities/InsertBulkOptions.java diff --git a/src/main/java/com/skyflow/entities/InsertInput.java b/v1/src/main/java/com/skyflow/entities/InsertInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/InsertInput.java rename to v1/src/main/java/com/skyflow/entities/InsertInput.java diff --git a/src/main/java/com/skyflow/entities/InsertOptions.java b/v1/src/main/java/com/skyflow/entities/InsertOptions.java similarity index 100% rename from src/main/java/com/skyflow/entities/InsertOptions.java rename to v1/src/main/java/com/skyflow/entities/InsertOptions.java diff --git a/src/main/java/com/skyflow/entities/InsertRecordInput.java b/v1/src/main/java/com/skyflow/entities/InsertRecordInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/InsertRecordInput.java rename to v1/src/main/java/com/skyflow/entities/InsertRecordInput.java diff --git a/src/main/java/com/skyflow/entities/LogLevel.java b/v1/src/main/java/com/skyflow/entities/LogLevel.java similarity index 100% rename from src/main/java/com/skyflow/entities/LogLevel.java rename to v1/src/main/java/com/skyflow/entities/LogLevel.java diff --git a/src/main/java/com/skyflow/entities/QueryInput.java b/v1/src/main/java/com/skyflow/entities/QueryInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/QueryInput.java rename to v1/src/main/java/com/skyflow/entities/QueryInput.java diff --git a/src/main/java/com/skyflow/entities/QueryOptions.java b/v1/src/main/java/com/skyflow/entities/QueryOptions.java similarity index 100% rename from src/main/java/com/skyflow/entities/QueryOptions.java rename to v1/src/main/java/com/skyflow/entities/QueryOptions.java diff --git a/src/main/java/com/skyflow/entities/QueryRecordInput.java b/v1/src/main/java/com/skyflow/entities/QueryRecordInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/QueryRecordInput.java rename to v1/src/main/java/com/skyflow/entities/QueryRecordInput.java diff --git a/src/main/java/com/skyflow/entities/RedactionType.java b/v1/src/main/java/com/skyflow/entities/RedactionType.java similarity index 100% rename from src/main/java/com/skyflow/entities/RedactionType.java rename to v1/src/main/java/com/skyflow/entities/RedactionType.java diff --git a/src/main/java/com/skyflow/entities/RequestMethod.java b/v1/src/main/java/com/skyflow/entities/RequestMethod.java similarity index 100% rename from src/main/java/com/skyflow/entities/RequestMethod.java rename to v1/src/main/java/com/skyflow/entities/RequestMethod.java diff --git a/src/main/java/com/skyflow/entities/ResponseToken.java b/v1/src/main/java/com/skyflow/entities/ResponseToken.java similarity index 100% rename from src/main/java/com/skyflow/entities/ResponseToken.java rename to v1/src/main/java/com/skyflow/entities/ResponseToken.java diff --git a/src/main/java/com/skyflow/entities/SkyflowConfiguration.java b/v1/src/main/java/com/skyflow/entities/SkyflowConfiguration.java similarity index 100% rename from src/main/java/com/skyflow/entities/SkyflowConfiguration.java rename to v1/src/main/java/com/skyflow/entities/SkyflowConfiguration.java diff --git a/src/main/java/com/skyflow/entities/TokenProvider.java b/v1/src/main/java/com/skyflow/entities/TokenProvider.java similarity index 100% rename from src/main/java/com/skyflow/entities/TokenProvider.java rename to v1/src/main/java/com/skyflow/entities/TokenProvider.java diff --git a/src/main/java/com/skyflow/entities/UpdateInput.java b/v1/src/main/java/com/skyflow/entities/UpdateInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/UpdateInput.java rename to v1/src/main/java/com/skyflow/entities/UpdateInput.java diff --git a/src/main/java/com/skyflow/entities/UpdateOptions.java b/v1/src/main/java/com/skyflow/entities/UpdateOptions.java similarity index 100% rename from src/main/java/com/skyflow/entities/UpdateOptions.java rename to v1/src/main/java/com/skyflow/entities/UpdateOptions.java diff --git a/src/main/java/com/skyflow/entities/UpdateRecordInput.java b/v1/src/main/java/com/skyflow/entities/UpdateRecordInput.java similarity index 100% rename from src/main/java/com/skyflow/entities/UpdateRecordInput.java rename to v1/src/main/java/com/skyflow/entities/UpdateRecordInput.java diff --git a/src/main/java/com/skyflow/entities/UpsertOption.java b/v1/src/main/java/com/skyflow/entities/UpsertOption.java similarity index 100% rename from src/main/java/com/skyflow/entities/UpsertOption.java rename to v1/src/main/java/com/skyflow/entities/UpsertOption.java diff --git a/src/main/java/com/skyflow/errors/ErrorCode.java b/v1/src/main/java/com/skyflow/errors/ErrorCode.java similarity index 100% rename from src/main/java/com/skyflow/errors/ErrorCode.java rename to v1/src/main/java/com/skyflow/errors/ErrorCode.java diff --git a/src/main/java/com/skyflow/errors/SkyflowException.java b/v1/src/main/java/com/skyflow/errors/SkyflowException.java similarity index 100% rename from src/main/java/com/skyflow/errors/SkyflowException.java rename to v1/src/main/java/com/skyflow/errors/SkyflowException.java diff --git a/src/main/java/com/skyflow/logs/DebugLogs.java b/v1/src/main/java/com/skyflow/logs/DebugLogs.java similarity index 100% rename from src/main/java/com/skyflow/logs/DebugLogs.java rename to v1/src/main/java/com/skyflow/logs/DebugLogs.java diff --git a/src/main/java/com/skyflow/logs/ErrorLogs.java b/v1/src/main/java/com/skyflow/logs/ErrorLogs.java similarity index 100% rename from src/main/java/com/skyflow/logs/ErrorLogs.java rename to v1/src/main/java/com/skyflow/logs/ErrorLogs.java diff --git a/src/main/java/com/skyflow/logs/InfoLogs.java b/v1/src/main/java/com/skyflow/logs/InfoLogs.java similarity index 100% rename from src/main/java/com/skyflow/logs/InfoLogs.java rename to v1/src/main/java/com/skyflow/logs/InfoLogs.java diff --git a/src/main/java/com/skyflow/logs/WarnLogs.java b/v1/src/main/java/com/skyflow/logs/WarnLogs.java similarity index 100% rename from src/main/java/com/skyflow/logs/WarnLogs.java rename to v1/src/main/java/com/skyflow/logs/WarnLogs.java diff --git a/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java b/v1/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java similarity index 100% rename from src/main/java/com/skyflow/serviceaccount/util/BearerToken.java rename to v1/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java diff --git a/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java b/v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java similarity index 100% rename from src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java rename to v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java diff --git a/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java b/v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java similarity index 100% rename from src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java rename to v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java diff --git a/src/main/java/com/skyflow/serviceaccount/util/Token.java b/v1/src/main/java/com/skyflow/serviceaccount/util/Token.java similarity index 100% rename from src/main/java/com/skyflow/serviceaccount/util/Token.java rename to v1/src/main/java/com/skyflow/serviceaccount/util/Token.java diff --git a/src/main/java/com/skyflow/vault/DeleteBySkyflowId.java b/v1/src/main/java/com/skyflow/vault/DeleteBySkyflowId.java similarity index 100% rename from src/main/java/com/skyflow/vault/DeleteBySkyflowId.java rename to v1/src/main/java/com/skyflow/vault/DeleteBySkyflowId.java diff --git a/src/main/java/com/skyflow/vault/Detokenize.java b/v1/src/main/java/com/skyflow/vault/Detokenize.java similarity index 100% rename from src/main/java/com/skyflow/vault/Detokenize.java rename to v1/src/main/java/com/skyflow/vault/Detokenize.java diff --git a/src/main/java/com/skyflow/vault/Get.java b/v1/src/main/java/com/skyflow/vault/Get.java similarity index 100% rename from src/main/java/com/skyflow/vault/Get.java rename to v1/src/main/java/com/skyflow/vault/Get.java diff --git a/src/main/java/com/skyflow/vault/GetBySkyflowId.java b/v1/src/main/java/com/skyflow/vault/GetBySkyflowId.java similarity index 100% rename from src/main/java/com/skyflow/vault/GetBySkyflowId.java rename to v1/src/main/java/com/skyflow/vault/GetBySkyflowId.java diff --git a/src/main/java/com/skyflow/vault/Insert.java b/v1/src/main/java/com/skyflow/vault/Insert.java similarity index 100% rename from src/main/java/com/skyflow/vault/Insert.java rename to v1/src/main/java/com/skyflow/vault/Insert.java diff --git a/src/main/java/com/skyflow/vault/Skyflow.java b/v1/src/main/java/com/skyflow/vault/Skyflow.java similarity index 100% rename from src/main/java/com/skyflow/vault/Skyflow.java rename to v1/src/main/java/com/skyflow/vault/Skyflow.java diff --git a/src/main/java/com/skyflow/vault/UpdateBySkyflowId.java b/v1/src/main/java/com/skyflow/vault/UpdateBySkyflowId.java similarity index 100% rename from src/main/java/com/skyflow/vault/UpdateBySkyflowId.java rename to v1/src/main/java/com/skyflow/vault/UpdateBySkyflowId.java diff --git a/src/test/java/com/skyflow/common/utils/HelpersTest.java b/v1/src/test/java/com/skyflow/common/utils/HelpersTest.java similarity index 100% rename from src/test/java/com/skyflow/common/utils/HelpersTest.java rename to v1/src/test/java/com/skyflow/common/utils/HelpersTest.java diff --git a/src/test/java/com/skyflow/common/utils/HttpUtilityTest.java b/v1/src/test/java/com/skyflow/common/utils/HttpUtilityTest.java similarity index 100% rename from src/test/java/com/skyflow/common/utils/HttpUtilityTest.java rename to v1/src/test/java/com/skyflow/common/utils/HttpUtilityTest.java diff --git a/src/test/java/com/skyflow/common/utils/TokenUtilsTest.java b/v1/src/test/java/com/skyflow/common/utils/TokenUtilsTest.java similarity index 100% rename from src/test/java/com/skyflow/common/utils/TokenUtilsTest.java rename to v1/src/test/java/com/skyflow/common/utils/TokenUtilsTest.java diff --git a/src/test/java/com/skyflow/common/utils/TokenUtilsValidTokenTest.java b/v1/src/test/java/com/skyflow/common/utils/TokenUtilsValidTokenTest.java similarity index 100% rename from src/test/java/com/skyflow/common/utils/TokenUtilsValidTokenTest.java rename to v1/src/test/java/com/skyflow/common/utils/TokenUtilsValidTokenTest.java diff --git a/src/test/java/com/skyflow/common/utils/ValidatorsTest.java b/v1/src/test/java/com/skyflow/common/utils/ValidatorsTest.java similarity index 100% rename from src/test/java/com/skyflow/common/utils/ValidatorsTest.java rename to v1/src/test/java/com/skyflow/common/utils/ValidatorsTest.java diff --git a/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTest.java b/v1/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTest.java similarity index 100% rename from src/test/java/com/skyflow/serviceaccount/util/BearerTokenTest.java rename to v1/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTest.java diff --git a/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokenResponseTest.java b/v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokenResponseTest.java similarity index 100% rename from src/test/java/com/skyflow/serviceaccount/util/SignedDataTokenResponseTest.java rename to v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokenResponseTest.java diff --git a/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTest.java b/v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTest.java similarity index 100% rename from src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTest.java rename to v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTest.java diff --git a/src/test/java/com/skyflow/serviceaccount/util/TokenTest.java b/v1/src/test/java/com/skyflow/serviceaccount/util/TokenTest.java similarity index 100% rename from src/test/java/com/skyflow/serviceaccount/util/TokenTest.java rename to v1/src/test/java/com/skyflow/serviceaccount/util/TokenTest.java diff --git a/src/test/java/com/skyflow/vault/DeleteMethodTest.java b/v1/src/test/java/com/skyflow/vault/DeleteMethodTest.java similarity index 100% rename from src/test/java/com/skyflow/vault/DeleteMethodTest.java rename to v1/src/test/java/com/skyflow/vault/DeleteMethodTest.java diff --git a/src/test/java/com/skyflow/vault/GetMethodTest.java b/v1/src/test/java/com/skyflow/vault/GetMethodTest.java similarity index 100% rename from src/test/java/com/skyflow/vault/GetMethodTest.java rename to v1/src/test/java/com/skyflow/vault/GetMethodTest.java diff --git a/src/test/java/com/skyflow/vault/InvokeConnectionTest.java b/v1/src/test/java/com/skyflow/vault/InvokeConnectionTest.java similarity index 100% rename from src/test/java/com/skyflow/vault/InvokeConnectionTest.java rename to v1/src/test/java/com/skyflow/vault/InvokeConnectionTest.java diff --git a/src/test/java/com/skyflow/vault/SkyflowTest.java b/v1/src/test/java/com/skyflow/vault/SkyflowTest.java similarity index 100% rename from src/test/java/com/skyflow/vault/SkyflowTest.java rename to v1/src/test/java/com/skyflow/vault/SkyflowTest.java diff --git a/src/test/resources/invalidCredentials.json b/v1/src/test/resources/invalidCredentials.json similarity index 100% rename from src/test/resources/invalidCredentials.json rename to v1/src/test/resources/invalidCredentials.json diff --git a/src/test/resources/notJson.txt b/v1/src/test/resources/notJson.txt similarity index 100% rename from src/test/resources/notJson.txt rename to v1/src/test/resources/notJson.txt diff --git a/v2/main/java/com/skyflow/client/SkyflowClient.java b/v2/main/java/com/skyflow/client/SkyflowClient.java new file mode 100644 index 00000000..70101e2d --- /dev/null +++ b/v2/main/java/com/skyflow/client/SkyflowClient.java @@ -0,0 +1,117 @@ +package com.skyflow.client; + +import com.skyflow.config.ConnectionConfig; +import com.skyflow.config.Credentials; +import com.skyflow.config.ManagementConfig; +import com.skyflow.config.VaultConfig; +import com.skyflow.management.service.ManagementService; +import com.skyflow.utils.Builder; +import com.skyflow.utils.LogLevel; +import com.skyflow.vault.controller.connections.ConnectionsController; +import com.skyflow.vault.service.VaultService; + +import java.util.ArrayList; + +public class SkyflowClient { + ArrayList vaultConfigs = new ArrayList<>(); + ArrayList connectionConfigs = new ArrayList<>(); + ArrayList managementConfigs = new ArrayList<>(); + Credentials credentials; + Builder builder; + // other members + + public SkyflowClient(VaultConfig vaultConfig, ConnectionConfig connectionConfig, ManagementConfig managementConfig, Credentials credentials) { + this.vaultConfigs.add(vaultConfig); + this.connectionConfigs.add(connectionConfig); + this.managementConfigs.add(managementConfig); + this.credentials = credentials; + } + + public Builder Builder() { + builder = new Builder(); + return builder; + } + + public Builder addVaultConfig(VaultConfig vaultConfig) { + // add vault config + return builder; + } + + public Builder removeVaultConfig(String vaultId) { + // remove vault config with vault id + return builder; + } + + public Builder updateVaultConfig(String vaultId, VaultConfig vaultConfig) { + // update vault config with vault id + return builder; + } + + public Builder addConnectionConfig(ConnectionConfig connectionConfig) { + // add connection config + return builder; + } + + public Builder removeConnectionConfig(String connectionId, ConnectionConfig connectionConfig) { + // remove connection config with connection id + return builder; + } + + public Builder updateConnectionConfig(String connectionId, ConnectionConfig connectionConfig) { + // update connection config with connection id + return builder; + } + + public Builder addManagementConfig(ManagementConfig managementConfig) { + // add management config + return builder; + } + + public Builder removeManagementConfig(String managementId, ManagementConfig managementConfig) { + // remove management config with management id + return builder; + } + + public Builder updateManagementConfig(String managementId, ManagementConfig managementConfig) { + // update management config with management id + return builder; + } + + public Builder setCredentials(Credentials credentials) { + // set credentials + return builder; + } + + public Builder logLevel(LogLevel logLevel) { + // set log level + return builder; + } + + public Builder updateLogLevel(LogLevel logLevel) { + // update log level + return builder; + } + + public SkyflowClient build() { + // return built skyflow client instance + return this; + } + + public VaultService vault(String vaultId) { + // (cache) - store the vault object in a list, don't create object if object already exits + // return vault Object using static func + return null; + } + + public ConnectionsController connection(String connectionId) { + // (cache) - store the connection object in a list, don't create object if object already exits + // return connection Object static func + return null; + } + + public ManagementService management() { + // cache management object if created + // return management object using static func + return null; + } +} diff --git a/v2/main/java/com/skyflow/config/ConnectionConfig.java b/v2/main/java/com/skyflow/config/ConnectionConfig.java new file mode 100644 index 00000000..5369b81b --- /dev/null +++ b/v2/main/java/com/skyflow/config/ConnectionConfig.java @@ -0,0 +1,11 @@ +package com.skyflow.config; + +public class ConnectionConfig { + // members + + // constructor + ConnectionConfig() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/config/Credentials.java b/v2/main/java/com/skyflow/config/Credentials.java new file mode 100644 index 00000000..44fd58fc --- /dev/null +++ b/v2/main/java/com/skyflow/config/Credentials.java @@ -0,0 +1,11 @@ +package com.skyflow.config; + +public class Credentials { + // members + + // constructor + Credentials() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/config/ManagementConfig.java b/v2/main/java/com/skyflow/config/ManagementConfig.java new file mode 100644 index 00000000..a054c8ea --- /dev/null +++ b/v2/main/java/com/skyflow/config/ManagementConfig.java @@ -0,0 +1,11 @@ +package com.skyflow.config; + +public class ManagementConfig { + // members + + // constructor + ManagementConfig() { + } + + // getters and setters +} diff --git a/v2/main/java/com/skyflow/config/VaultConfig.java b/v2/main/java/com/skyflow/config/VaultConfig.java new file mode 100644 index 00000000..c70c9850 --- /dev/null +++ b/v2/main/java/com/skyflow/config/VaultConfig.java @@ -0,0 +1,11 @@ +package com.skyflow.config; + +public class VaultConfig { + // members + + // constructor + VaultConfig() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/errors/SkyflowError.java b/v2/main/java/com/skyflow/errors/SkyflowError.java new file mode 100644 index 00000000..4b6f29a6 --- /dev/null +++ b/v2/main/java/com/skyflow/errors/SkyflowError.java @@ -0,0 +1,10 @@ +package com.skyflow.errors; + +// skyflow error class +public class SkyflowError { + // members + + // constructor + SkyflowError() { + } +} diff --git a/v2/main/java/com/skyflow/management/controller/policy/Policy.java b/v2/main/java/com/skyflow/management/controller/policy/Policy.java new file mode 100644 index 00000000..e7b27f1d --- /dev/null +++ b/v2/main/java/com/skyflow/management/controller/policy/Policy.java @@ -0,0 +1,23 @@ +package com.skyflow.management.controller.policy; + +public class Policy { + public Policy() { + } + + public static Policy initialize() { + // return policy object + return null; + } + + public Policy update() { + return null; + } + + public Policy delete() { + return null; + } + + public Policy get() { + return null; + } +} diff --git a/v2/main/java/com/skyflow/management/controller/role/Role.java b/v2/main/java/com/skyflow/management/controller/role/Role.java new file mode 100644 index 00000000..5da98b56 --- /dev/null +++ b/v2/main/java/com/skyflow/management/controller/role/Role.java @@ -0,0 +1,23 @@ +package com.skyflow.management.controller.role; + +public class Role { + public Role() { + } + + public static Role initialize() { + // return policy object + return null; + } + + public Role update() { + return null; + } + + public Role delete() { + return null; + } + + public Role get() { + return null; + } +} diff --git a/v2/main/java/com/skyflow/management/controller/vault/Vault.java b/v2/main/java/com/skyflow/management/controller/vault/Vault.java new file mode 100644 index 00000000..f1a9fea9 --- /dev/null +++ b/v2/main/java/com/skyflow/management/controller/vault/Vault.java @@ -0,0 +1,23 @@ +package com.skyflow.management.controller.vault; + +public class Vault { + public Vault() { + } + + public static Vault initialize() { + // return policy object + return null; + } + + public Vault update() { + return null; + } + + public Vault delete() { + return null; + } + + public Vault get() { + return null; + } +} diff --git a/v2/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java b/v2/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java new file mode 100644 index 00000000..dee4b447 --- /dev/null +++ b/v2/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java @@ -0,0 +1,10 @@ +package com.skyflow.management.model.request.createVault; + +public class CreateVaultRequest { + // members + + public CreateVaultRequest() { + } + + // getters and setters +} diff --git a/v2/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java b/v2/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java new file mode 100644 index 00000000..9a97af88 --- /dev/null +++ b/v2/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java @@ -0,0 +1,10 @@ +package com.skyflow.management.model.request.deletePolicy; + +public class DeletePolicyRequest { + // members + + public DeletePolicyRequest() { + } + + // getters and setters +} diff --git a/v2/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java b/v2/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java new file mode 100644 index 00000000..6d797241 --- /dev/null +++ b/v2/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java @@ -0,0 +1,10 @@ +package com.skyflow.management.model.response.createVault; + +public class CreateVaultResponse { + // members + + public CreateVaultResponse() { + } + + // getters and setters +} diff --git a/v2/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java b/v2/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java new file mode 100644 index 00000000..17795308 --- /dev/null +++ b/v2/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java @@ -0,0 +1,10 @@ +package com.skyflow.management.model.response.deletePolicy; + +public class DeletePolicyResponse { + // members + + public DeletePolicyResponse() { + } + + // getters and setters +} diff --git a/v2/main/java/com/skyflow/management/service/ManagementService.java b/v2/main/java/com/skyflow/management/service/ManagementService.java new file mode 100644 index 00000000..827eb686 --- /dev/null +++ b/v2/main/java/com/skyflow/management/service/ManagementService.java @@ -0,0 +1,46 @@ +package com.skyflow.management.service; + +public class ManagementService { + // members + + public ManagementService() { + } + + public static ManagementService initialize() { + // return management object + return null; + } + + public T createVault() { + // return vault object using static func + // cache - store the vault object in a list + return null; + } + + public T createRole() { + // return role object using static func + // cache - store the role object in a list + return null; + } + + public T createPolicy() { + // return policy object using static func + // cache - store the policy object in a list + return null; + } + + public T vault(String vaultId) { + // return vault object from the cached list + return null; + } + + public T role(String roleId) { + // return role object from the cached list + return null; + } + + public T policy(String policyId) { + // return policy object from the cached list + return null; + } +} diff --git a/v2/main/java/com/skyflow/utils/Builder.java b/v2/main/java/com/skyflow/utils/Builder.java new file mode 100644 index 00000000..5641555c --- /dev/null +++ b/v2/main/java/com/skyflow/utils/Builder.java @@ -0,0 +1,4 @@ +package com.skyflow.utils; + +public class Builder { +} diff --git a/v2/main/java/com/skyflow/utils/LogLevel.java b/v2/main/java/com/skyflow/utils/LogLevel.java new file mode 100644 index 00000000..873f8264 --- /dev/null +++ b/v2/main/java/com/skyflow/utils/LogLevel.java @@ -0,0 +1,9 @@ +package com.skyflow.utils; + +public enum LogLevel { + ERROR, + WARNING, + INFO, + DEBUG, + OFF +} diff --git a/v2/main/java/com/skyflow/utils/validations/Validations.java b/v2/main/java/com/skyflow/utils/validations/Validations.java new file mode 100644 index 00000000..600aeb10 --- /dev/null +++ b/v2/main/java/com/skyflow/utils/validations/Validations.java @@ -0,0 +1,10 @@ +package com.skyflow.utils.validations; + +// Add config and request validations +public class Validations { + public static void vaultValidations() { + } + + public static void insertValidation() { + } +} diff --git a/v2/main/java/com/skyflow/vault/controller/audit/AuditController.java b/v2/main/java/com/skyflow/vault/controller/audit/AuditController.java new file mode 100644 index 00000000..2e3af01e --- /dev/null +++ b/v2/main/java/com/skyflow/vault/controller/audit/AuditController.java @@ -0,0 +1,18 @@ +package com.skyflow.vault.controller.audit; + +import com.skyflow.vault.model.response.AuditResponse; + +public class AuditController { + public AuditController() { + } + + // return audit controller object + public static AuditController initialize() { + return null; + } + + public AuditResponse list() { + // return audit events + return null; + } +} diff --git a/v2/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java b/v2/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java new file mode 100644 index 00000000..82cbe83f --- /dev/null +++ b/v2/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java @@ -0,0 +1,18 @@ +package com.skyflow.vault.controller.binlookup; + +import com.skyflow.vault.model.response.BinLookupResponse; + +public class BinLookupController { + public BinLookupController() { + } + + // return bin lookup controller object + public static BinLookupController initialize() { + return null; + } + + public BinLookupResponse get() { + // return bin lookup response (card metadata associated with BIN) + return null; + } +} diff --git a/v2/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java b/v2/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java new file mode 100644 index 00000000..40824383 --- /dev/null +++ b/v2/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java @@ -0,0 +1,18 @@ +package com.skyflow.vault.controller.connections; + +import com.skyflow.vault.model.response.ConnectionResponse; + +public class ConnectionsController { + public ConnectionsController() { + } + + // return connections controller object + public static ConnectionsController initialize() { + return null; + } + + public ConnectionResponse invoke() { + // invoke the connection + return null; + } +} diff --git a/v2/main/java/com/skyflow/vault/controller/detect/DetectController.java b/v2/main/java/com/skyflow/vault/controller/detect/DetectController.java new file mode 100644 index 00000000..02e7920c --- /dev/null +++ b/v2/main/java/com/skyflow/vault/controller/detect/DetectController.java @@ -0,0 +1,28 @@ +package com.skyflow.vault.controller.detect; + +import com.skyflow.vault.model.response.DetectResponse; + +public class DetectController { + public DetectController() { + } + + // return detect controller object + public static DetectController initialize() { + return null; + } + + public DetectResponse deIdentify() { + // return detect response + return null; + } + + public DetectResponse text() { + // return detect response + return null; + } + + public DetectResponse file() { + // return detect response + return null; + } +} diff --git a/v2/main/java/com/skyflow/vault/model/request/AuditRequest.java b/v2/main/java/com/skyflow/vault/model/request/AuditRequest.java new file mode 100644 index 00000000..d3b8ccff --- /dev/null +++ b/v2/main/java/com/skyflow/vault/model/request/AuditRequest.java @@ -0,0 +1,11 @@ +package com.skyflow.vault.model.request; + +public class AuditRequest { + // members + + // constructor + public AuditRequest() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java b/v2/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java new file mode 100644 index 00000000..ae440ed9 --- /dev/null +++ b/v2/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java @@ -0,0 +1,11 @@ +package com.skyflow.vault.model.request; + +public class DetokenizeRequest { + // members + + // constructor + public DetokenizeRequest() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/vault/model/request/InsertRequest.java b/v2/main/java/com/skyflow/vault/model/request/InsertRequest.java new file mode 100644 index 00000000..77380111 --- /dev/null +++ b/v2/main/java/com/skyflow/vault/model/request/InsertRequest.java @@ -0,0 +1,11 @@ +package com.skyflow.vault.model.request; + +public class InsertRequest { + // members + + // constructor + public InsertRequest() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/vault/model/response/AuditResponse.java b/v2/main/java/com/skyflow/vault/model/response/AuditResponse.java new file mode 100644 index 00000000..83da593b --- /dev/null +++ b/v2/main/java/com/skyflow/vault/model/response/AuditResponse.java @@ -0,0 +1,10 @@ +package com.skyflow.vault.model.response; + +public class AuditResponse { + // members + + public AuditResponse() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/vault/model/response/BinLookupResponse.java b/v2/main/java/com/skyflow/vault/model/response/BinLookupResponse.java new file mode 100644 index 00000000..81a0b515 --- /dev/null +++ b/v2/main/java/com/skyflow/vault/model/response/BinLookupResponse.java @@ -0,0 +1,10 @@ +package com.skyflow.vault.model.response; + +public class BinLookupResponse { + // members + + public BinLookupResponse() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/vault/model/response/ConnectionResponse.java b/v2/main/java/com/skyflow/vault/model/response/ConnectionResponse.java new file mode 100644 index 00000000..283f6da8 --- /dev/null +++ b/v2/main/java/com/skyflow/vault/model/response/ConnectionResponse.java @@ -0,0 +1,10 @@ +package com.skyflow.vault.model.response; + +public class ConnectionResponse { + // members + + public ConnectionResponse() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/vault/model/response/DetectResponse.java b/v2/main/java/com/skyflow/vault/model/response/DetectResponse.java new file mode 100644 index 00000000..995a852f --- /dev/null +++ b/v2/main/java/com/skyflow/vault/model/response/DetectResponse.java @@ -0,0 +1,10 @@ +package com.skyflow.vault.model.response; + +public class DetectResponse { + // members + + public DetectResponse() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java b/v2/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java new file mode 100644 index 00000000..517dc9a6 --- /dev/null +++ b/v2/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java @@ -0,0 +1,10 @@ +package com.skyflow.vault.model.response; + +public class DetokenizeResponse { + // members + + public DetokenizeResponse() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/vault/model/response/InsertResponse.java b/v2/main/java/com/skyflow/vault/model/response/InsertResponse.java new file mode 100644 index 00000000..04fff389 --- /dev/null +++ b/v2/main/java/com/skyflow/vault/model/response/InsertResponse.java @@ -0,0 +1,10 @@ +package com.skyflow.vault.model.response; + +public class InsertResponse { + // members + + public InsertResponse() { + } + + // getters ans setters +} diff --git a/v2/main/java/com/skyflow/vault/service/VaultService.java b/v2/main/java/com/skyflow/vault/service/VaultService.java new file mode 100644 index 00000000..8b867f47 --- /dev/null +++ b/v2/main/java/com/skyflow/vault/service/VaultService.java @@ -0,0 +1,61 @@ +package com.skyflow.vault.service; + +public class VaultService { + // members + + public VaultService() { + } + + public static T initialize() { + // return vault service object + return T; + } + + + public T insert() { + return T; + } + + public T detokenize() { + return T; + } + + public T get() { + return T; + } + + public T update() { + return T; + } + + public T delete() { + return T; + } + + public T uploadFile() { + return T; + + } + + public T query() { + return T; + } + + public T lookUpBin() { + // cache bin lookup object if created + // return bin lookup object using static func + return T; + } + + public T audit() { + // cache audit object if created + // return audit object using static func + return T; + } + + public T detect() { + // cache detect object if created + // return detect object using static func + return T; + } +} From f44be854b1a454003918661ae7e955bb0dcc86ba Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Tue, 17 Sep 2024 21:31:51 +0530 Subject: [PATCH 02/68] SK-1663 Worked on feedback for scaffolding --- .../{SkyflowClient.java => Skyflow.java} | 76 +++++++++++-------- .../management/ManagementController.java | 46 +++++++++++ .../controller/audit/AuditController.java | 5 +- .../binlookup/BinLookupController.java | 4 +- .../connections/ConnectionsController.java | 5 +- .../controller/detect/DetectController.java | 11 +-- .../controller/vault/VaultController.java | 64 ++++++++++++++++ ...uditRequest.java => ListEventRequest.java} | 4 +- ...nResponse.java => DeIdentifyResponse.java} | 4 +- ...etectResponse.java => GetBinResponse.java} | 4 +- ...nse.java => InvokeConnectionResponse.java} | 4 +- ...itResponse.java => ListEventResponse.java} | 4 +- .../skyflow/vault/service/VaultService.java | 7 +- 13 files changed, 185 insertions(+), 53 deletions(-) rename v2/main/java/com/skyflow/client/{SkyflowClient.java => Skyflow.java} (59%) create mode 100644 v2/main/java/com/skyflow/management/controller/management/ManagementController.java create mode 100644 v2/main/java/com/skyflow/vault/controller/vault/VaultController.java rename v2/main/java/com/skyflow/vault/model/request/{AuditRequest.java => ListEventRequest.java} (65%) rename v2/main/java/com/skyflow/vault/model/response/{ConnectionResponse.java => DeIdentifyResponse.java} (59%) rename v2/main/java/com/skyflow/vault/model/response/{DetectResponse.java => GetBinResponse.java} (62%) rename v2/main/java/com/skyflow/vault/model/response/{BinLookupResponse.java => InvokeConnectionResponse.java} (55%) rename v2/main/java/com/skyflow/vault/model/response/{AuditResponse.java => ListEventResponse.java} (60%) diff --git a/v2/main/java/com/skyflow/client/SkyflowClient.java b/v2/main/java/com/skyflow/client/Skyflow.java similarity index 59% rename from v2/main/java/com/skyflow/client/SkyflowClient.java rename to v2/main/java/com/skyflow/client/Skyflow.java index 70101e2d..abc0504d 100644 --- a/v2/main/java/com/skyflow/client/SkyflowClient.java +++ b/v2/main/java/com/skyflow/client/Skyflow.java @@ -4,27 +4,18 @@ import com.skyflow.config.Credentials; import com.skyflow.config.ManagementConfig; import com.skyflow.config.VaultConfig; -import com.skyflow.management.service.ManagementService; +import com.skyflow.management.controller.management.ManagementController; import com.skyflow.utils.Builder; import com.skyflow.utils.LogLevel; import com.skyflow.vault.controller.connections.ConnectionsController; -import com.skyflow.vault.service.VaultService; +import com.skyflow.vault.controller.vault.VaultController; -import java.util.ArrayList; - -public class SkyflowClient { - ArrayList vaultConfigs = new ArrayList<>(); - ArrayList connectionConfigs = new ArrayList<>(); - ArrayList managementConfigs = new ArrayList<>(); - Credentials credentials; +public class Skyflow { Builder builder; // other members - public SkyflowClient(VaultConfig vaultConfig, ConnectionConfig connectionConfig, ManagementConfig managementConfig, Credentials credentials) { - this.vaultConfigs.add(vaultConfig); - this.connectionConfigs.add(connectionConfig); - this.managementConfigs.add(managementConfig); - this.credentials = credentials; + public Skyflow(VaultConfig vaultConfig, ConnectionConfig connectionConfig, ManagementConfig managementConfig, Credentials credentials) { + // set members accordingly } public Builder Builder() { @@ -37,67 +28,92 @@ public Builder addVaultConfig(VaultConfig vaultConfig) { return builder; } - public Builder removeVaultConfig(String vaultId) { - // remove vault config with vault id - return builder; + public VaultConfig getVaultConfig(String vaultId) { + // get vault config with vault id + return null; } - public Builder updateVaultConfig(String vaultId, VaultConfig vaultConfig) { + public Builder updateVaultConfig(VaultConfig vaultConfig) { // update vault config with vault id return builder; } + public Builder removeVaultConfig(String vaultId) { + // remove vault config with vault id + return builder; + } + public Builder addConnectionConfig(ConnectionConfig connectionConfig) { // add connection config return builder; } - public Builder removeConnectionConfig(String connectionId, ConnectionConfig connectionConfig) { - // remove connection config with connection id - return builder; + public ConnectionConfig getConnectionConfig(String connectionId) { + // get connection config with connection id + return null; } - public Builder updateConnectionConfig(String connectionId, ConnectionConfig connectionConfig) { + public Builder updateConnectionConfig(ConnectionConfig connectionConfig) { // update connection config with connection id return builder; } + public Builder removeConnectionConfig(String connectionId) { + // remove connection config with connection id + return builder; + } + public Builder addManagementConfig(ManagementConfig managementConfig) { // add management config return builder; } - public Builder removeManagementConfig(String managementId, ManagementConfig managementConfig) { + public ManagementConfig getManagementConfig(String managementId) { + // get management config with management id + return null; + } + + public Builder updateManagementConfig(ManagementConfig managementConfig) { + // update management config with management id + return builder; + } + + public Builder removeManagementConfig(String managementId) { // remove management config with management id return builder; } - public Builder updateManagementConfig(String managementId, ManagementConfig managementConfig) { - // update management config with management id + public Builder addSkyflowCredentials(Credentials credentials) { + // set credentials return builder; } - public Builder setCredentials(Credentials credentials) { + public Builder updateSkyflowCredentials(Credentials credentials) { // set credentials return builder; } - public Builder logLevel(LogLevel logLevel) { + public Builder setLogLevel(LogLevel logLevel) { // set log level return builder; } + public LogLevel getLogLevel() { + // get log level + return null; + } + public Builder updateLogLevel(LogLevel logLevel) { // update log level return builder; } - public SkyflowClient build() { + public Skyflow build() { // return built skyflow client instance return this; } - public VaultService vault(String vaultId) { + public VaultController vault(String vaultId) { // (cache) - store the vault object in a list, don't create object if object already exits // return vault Object using static func return null; @@ -109,7 +125,7 @@ public ConnectionsController connection(String connectionId) { return null; } - public ManagementService management() { + public ManagementController management() { // cache management object if created // return management object using static func return null; diff --git a/v2/main/java/com/skyflow/management/controller/management/ManagementController.java b/v2/main/java/com/skyflow/management/controller/management/ManagementController.java new file mode 100644 index 00000000..d397954f --- /dev/null +++ b/v2/main/java/com/skyflow/management/controller/management/ManagementController.java @@ -0,0 +1,46 @@ +package com.skyflow.management.controller.management; + +public class ManagementController { + // members + + public ManagementController() { + } + + public static ManagementController initialize() { + // return management object + return null; + } + + public T createVault() { + // return vault object using static func + // cache - store the vault object in a list + return null; + } + + public T createRole() { + // return role object using static func + // cache - store the role object in a list + return null; + } + + public T createPolicy() { + // return policy object using static func + // cache - store the policy object in a list + return null; + } + + public T vault(String vaultId) { + // return vault object from the cached list + return null; + } + + public T role(String roleId) { + // return role object from the cached list + return null; + } + + public T policy(String policyId) { + // return policy object from the cached list + return null; + } +} diff --git a/v2/main/java/com/skyflow/vault/controller/audit/AuditController.java b/v2/main/java/com/skyflow/vault/controller/audit/AuditController.java index 2e3af01e..0c2165e8 100644 --- a/v2/main/java/com/skyflow/vault/controller/audit/AuditController.java +++ b/v2/main/java/com/skyflow/vault/controller/audit/AuditController.java @@ -1,6 +1,6 @@ package com.skyflow.vault.controller.audit; -import com.skyflow.vault.model.response.AuditResponse; +import com.skyflow.vault.model.response.ListEventResponse; public class AuditController { public AuditController() { @@ -11,7 +11,8 @@ public static AuditController initialize() { return null; } - public AuditResponse list() { + // Check for correct return type in python interfaces + public ListEventResponse list() { // return audit events return null; } diff --git a/v2/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java b/v2/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java index 82cbe83f..2a3c2df6 100644 --- a/v2/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java +++ b/v2/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java @@ -1,6 +1,6 @@ package com.skyflow.vault.controller.binlookup; -import com.skyflow.vault.model.response.BinLookupResponse; +import com.skyflow.vault.model.response.GetBinResponse; public class BinLookupController { public BinLookupController() { @@ -11,7 +11,7 @@ public static BinLookupController initialize() { return null; } - public BinLookupResponse get() { + public GetBinResponse get() { // return bin lookup response (card metadata associated with BIN) return null; } diff --git a/v2/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java b/v2/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java index 40824383..bfece96d 100644 --- a/v2/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java +++ b/v2/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java @@ -1,6 +1,6 @@ package com.skyflow.vault.controller.connections; -import com.skyflow.vault.model.response.ConnectionResponse; +import com.skyflow.vault.model.response.InvokeConnectionResponse; public class ConnectionsController { public ConnectionsController() { @@ -11,7 +11,8 @@ public static ConnectionsController initialize() { return null; } - public ConnectionResponse invoke() { + // check in python interfaces + public InvokeConnectionResponse invoke() { // invoke the connection return null; } diff --git a/v2/main/java/com/skyflow/vault/controller/detect/DetectController.java b/v2/main/java/com/skyflow/vault/controller/detect/DetectController.java index 02e7920c..6e02be62 100644 --- a/v2/main/java/com/skyflow/vault/controller/detect/DetectController.java +++ b/v2/main/java/com/skyflow/vault/controller/detect/DetectController.java @@ -1,6 +1,6 @@ package com.skyflow.vault.controller.detect; -import com.skyflow.vault.model.response.DetectResponse; +import com.skyflow.vault.model.response.DeIdentifyResponse; public class DetectController { public DetectController() { @@ -11,17 +11,18 @@ public static DetectController initialize() { return null; } - public DetectResponse deIdentify() { - // return detect response + // should return detect controller + public DetectController deIdentify() { + // return detect controller return null; } - public DetectResponse text() { + public DeIdentifyResponse text() { // return detect response return null; } - public DetectResponse file() { + public DeIdentifyResponse file() { // return detect response return null; } diff --git a/v2/main/java/com/skyflow/vault/controller/vault/VaultController.java b/v2/main/java/com/skyflow/vault/controller/vault/VaultController.java new file mode 100644 index 00000000..0f5389fd --- /dev/null +++ b/v2/main/java/com/skyflow/vault/controller/vault/VaultController.java @@ -0,0 +1,64 @@ +package com.skyflow.vault.controller.vault; + +public class VaultController { + // members + + public VaultController() { + } + + public static T initialize() { + // return vault service object + return T; + } + + public T insert() { + return T; + } + + public T detokenize() { + return T; + } + + public T get() { + return T; + } + + public T update() { + return T; + } + + public T delete() { + return T; + } + + public T uploadFile() { + return T; + + } + + public T query() { + return T; + } + + public T tokenize() { + return T; + } + + public T lookUpBin() { + // cache bin lookup object if created + // return bin lookup object using static func + return T; + } + + public T audit() { + // cache audit object if created + // return audit object using static func + return T; + } + + public T detect() { + // cache detect object if created + // return detect object using static func + return T; + } +} diff --git a/v2/main/java/com/skyflow/vault/model/request/AuditRequest.java b/v2/main/java/com/skyflow/vault/model/request/ListEventRequest.java similarity index 65% rename from v2/main/java/com/skyflow/vault/model/request/AuditRequest.java rename to v2/main/java/com/skyflow/vault/model/request/ListEventRequest.java index d3b8ccff..3f0f7349 100644 --- a/v2/main/java/com/skyflow/vault/model/request/AuditRequest.java +++ b/v2/main/java/com/skyflow/vault/model/request/ListEventRequest.java @@ -1,10 +1,10 @@ package com.skyflow.vault.model.request; -public class AuditRequest { +public class ListEventRequest { // members // constructor - public AuditRequest() { + public ListEventRequest() { } // getters ans setters diff --git a/v2/main/java/com/skyflow/vault/model/response/ConnectionResponse.java b/v2/main/java/com/skyflow/vault/model/response/DeIdentifyResponse.java similarity index 59% rename from v2/main/java/com/skyflow/vault/model/response/ConnectionResponse.java rename to v2/main/java/com/skyflow/vault/model/response/DeIdentifyResponse.java index 283f6da8..4e8c2c58 100644 --- a/v2/main/java/com/skyflow/vault/model/response/ConnectionResponse.java +++ b/v2/main/java/com/skyflow/vault/model/response/DeIdentifyResponse.java @@ -1,9 +1,9 @@ package com.skyflow.vault.model.response; -public class ConnectionResponse { +public class DeIdentifyResponse { // members - public ConnectionResponse() { + public DeIdentifyResponse() { } // getters ans setters diff --git a/v2/main/java/com/skyflow/vault/model/response/DetectResponse.java b/v2/main/java/com/skyflow/vault/model/response/GetBinResponse.java similarity index 62% rename from v2/main/java/com/skyflow/vault/model/response/DetectResponse.java rename to v2/main/java/com/skyflow/vault/model/response/GetBinResponse.java index 995a852f..000280c7 100644 --- a/v2/main/java/com/skyflow/vault/model/response/DetectResponse.java +++ b/v2/main/java/com/skyflow/vault/model/response/GetBinResponse.java @@ -1,9 +1,9 @@ package com.skyflow.vault.model.response; -public class DetectResponse { +public class GetBinResponse { // members - public DetectResponse() { + public GetBinResponse() { } // getters ans setters diff --git a/v2/main/java/com/skyflow/vault/model/response/BinLookupResponse.java b/v2/main/java/com/skyflow/vault/model/response/InvokeConnectionResponse.java similarity index 55% rename from v2/main/java/com/skyflow/vault/model/response/BinLookupResponse.java rename to v2/main/java/com/skyflow/vault/model/response/InvokeConnectionResponse.java index 81a0b515..155cff66 100644 --- a/v2/main/java/com/skyflow/vault/model/response/BinLookupResponse.java +++ b/v2/main/java/com/skyflow/vault/model/response/InvokeConnectionResponse.java @@ -1,9 +1,9 @@ package com.skyflow.vault.model.response; -public class BinLookupResponse { +public class InvokeConnectionResponse { // members - public BinLookupResponse() { + public InvokeConnectionResponse() { } // getters ans setters diff --git a/v2/main/java/com/skyflow/vault/model/response/AuditResponse.java b/v2/main/java/com/skyflow/vault/model/response/ListEventResponse.java similarity index 60% rename from v2/main/java/com/skyflow/vault/model/response/AuditResponse.java rename to v2/main/java/com/skyflow/vault/model/response/ListEventResponse.java index 83da593b..5bb7d631 100644 --- a/v2/main/java/com/skyflow/vault/model/response/AuditResponse.java +++ b/v2/main/java/com/skyflow/vault/model/response/ListEventResponse.java @@ -1,9 +1,9 @@ package com.skyflow.vault.model.response; -public class AuditResponse { +public class ListEventResponse { // members - public AuditResponse() { + public ListEventResponse() { } // getters ans setters diff --git a/v2/main/java/com/skyflow/vault/service/VaultService.java b/v2/main/java/com/skyflow/vault/service/VaultService.java index 8b867f47..88ba344b 100644 --- a/v2/main/java/com/skyflow/vault/service/VaultService.java +++ b/v2/main/java/com/skyflow/vault/service/VaultService.java @@ -2,7 +2,7 @@ public class VaultService { // members - + public VaultService() { } @@ -11,7 +11,6 @@ public static T initialize() { return T; } - public T insert() { return T; } @@ -41,6 +40,10 @@ public T query() { return T; } + public T tokenize() { + return T; + } + public T lookUpBin() { // cache bin lookup object if created // return bin lookup object using static func From f9df247a058a14acfe191b73a44aeebcb05bba2a Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 18 Sep 2024 11:10:37 +0530 Subject: [PATCH 03/68] SK-1663 Moved main dir to src dir --- v2/{ => src}/main/java/com/skyflow/client/Skyflow.java | 0 v2/{ => src}/main/java/com/skyflow/config/ConnectionConfig.java | 0 v2/{ => src}/main/java/com/skyflow/config/Credentials.java | 0 v2/{ => src}/main/java/com/skyflow/config/ManagementConfig.java | 0 v2/{ => src}/main/java/com/skyflow/config/VaultConfig.java | 0 v2/{ => src}/main/java/com/skyflow/errors/SkyflowError.java | 0 .../management/controller/management/ManagementController.java | 0 .../java/com/skyflow/management/controller/policy/Policy.java | 0 .../main/java/com/skyflow/management/controller/role/Role.java | 0 .../main/java/com/skyflow/management/controller/vault/Vault.java | 0 .../management/model/request/createVault/CreateVaultRequest.java | 0 .../model/request/deletePolicy/DeletePolicyRequest.java | 0 .../model/response/createVault/CreateVaultResponse.java | 0 .../model/response/deletePolicy/DeletePolicyResponse.java | 0 .../java/com/skyflow/management/service/ManagementService.java | 0 v2/{ => src}/main/java/com/skyflow/utils/Builder.java | 0 v2/{ => src}/main/java/com/skyflow/utils/LogLevel.java | 0 .../main/java/com/skyflow/utils/validations/Validations.java | 0 .../java/com/skyflow/vault/controller/audit/AuditController.java | 0 .../skyflow/vault/controller/binlookup/BinLookupController.java | 0 .../vault/controller/connections/ConnectionsController.java | 0 .../com/skyflow/vault/controller/detect/DetectController.java | 0 .../java/com/skyflow/vault/controller/vault/VaultController.java | 0 .../java/com/skyflow/vault/model/request/DetokenizeRequest.java | 0 .../main/java/com/skyflow/vault/model/request/InsertRequest.java | 0 .../java/com/skyflow/vault/model/request/ListEventRequest.java | 0 .../java/com/skyflow/vault/model/response/DeIdentifyResponse.java | 0 .../java/com/skyflow/vault/model/response/DetokenizeResponse.java | 0 .../java/com/skyflow/vault/model/response/GetBinResponse.java | 0 .../java/com/skyflow/vault/model/response/InsertResponse.java | 0 .../skyflow/vault/model/response/InvokeConnectionResponse.java | 0 .../java/com/skyflow/vault/model/response/ListEventResponse.java | 0 .../main/java/com/skyflow/vault/service/VaultService.java | 0 33 files changed, 0 insertions(+), 0 deletions(-) rename v2/{ => src}/main/java/com/skyflow/client/Skyflow.java (100%) rename v2/{ => src}/main/java/com/skyflow/config/ConnectionConfig.java (100%) rename v2/{ => src}/main/java/com/skyflow/config/Credentials.java (100%) rename v2/{ => src}/main/java/com/skyflow/config/ManagementConfig.java (100%) rename v2/{ => src}/main/java/com/skyflow/config/VaultConfig.java (100%) rename v2/{ => src}/main/java/com/skyflow/errors/SkyflowError.java (100%) rename v2/{ => src}/main/java/com/skyflow/management/controller/management/ManagementController.java (100%) rename v2/{ => src}/main/java/com/skyflow/management/controller/policy/Policy.java (100%) rename v2/{ => src}/main/java/com/skyflow/management/controller/role/Role.java (100%) rename v2/{ => src}/main/java/com/skyflow/management/controller/vault/Vault.java (100%) rename v2/{ => src}/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java (100%) rename v2/{ => src}/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java (100%) rename v2/{ => src}/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java (100%) rename v2/{ => src}/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java (100%) rename v2/{ => src}/main/java/com/skyflow/management/service/ManagementService.java (100%) rename v2/{ => src}/main/java/com/skyflow/utils/Builder.java (100%) rename v2/{ => src}/main/java/com/skyflow/utils/LogLevel.java (100%) rename v2/{ => src}/main/java/com/skyflow/utils/validations/Validations.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/controller/audit/AuditController.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/controller/detect/DetectController.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/controller/vault/VaultController.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/model/request/InsertRequest.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/model/request/ListEventRequest.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/model/response/DeIdentifyResponse.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/model/response/GetBinResponse.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/model/response/InsertResponse.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/model/response/InvokeConnectionResponse.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/model/response/ListEventResponse.java (100%) rename v2/{ => src}/main/java/com/skyflow/vault/service/VaultService.java (100%) diff --git a/v2/main/java/com/skyflow/client/Skyflow.java b/v2/src/main/java/com/skyflow/client/Skyflow.java similarity index 100% rename from v2/main/java/com/skyflow/client/Skyflow.java rename to v2/src/main/java/com/skyflow/client/Skyflow.java diff --git a/v2/main/java/com/skyflow/config/ConnectionConfig.java b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java similarity index 100% rename from v2/main/java/com/skyflow/config/ConnectionConfig.java rename to v2/src/main/java/com/skyflow/config/ConnectionConfig.java diff --git a/v2/main/java/com/skyflow/config/Credentials.java b/v2/src/main/java/com/skyflow/config/Credentials.java similarity index 100% rename from v2/main/java/com/skyflow/config/Credentials.java rename to v2/src/main/java/com/skyflow/config/Credentials.java diff --git a/v2/main/java/com/skyflow/config/ManagementConfig.java b/v2/src/main/java/com/skyflow/config/ManagementConfig.java similarity index 100% rename from v2/main/java/com/skyflow/config/ManagementConfig.java rename to v2/src/main/java/com/skyflow/config/ManagementConfig.java diff --git a/v2/main/java/com/skyflow/config/VaultConfig.java b/v2/src/main/java/com/skyflow/config/VaultConfig.java similarity index 100% rename from v2/main/java/com/skyflow/config/VaultConfig.java rename to v2/src/main/java/com/skyflow/config/VaultConfig.java diff --git a/v2/main/java/com/skyflow/errors/SkyflowError.java b/v2/src/main/java/com/skyflow/errors/SkyflowError.java similarity index 100% rename from v2/main/java/com/skyflow/errors/SkyflowError.java rename to v2/src/main/java/com/skyflow/errors/SkyflowError.java diff --git a/v2/main/java/com/skyflow/management/controller/management/ManagementController.java b/v2/src/main/java/com/skyflow/management/controller/management/ManagementController.java similarity index 100% rename from v2/main/java/com/skyflow/management/controller/management/ManagementController.java rename to v2/src/main/java/com/skyflow/management/controller/management/ManagementController.java diff --git a/v2/main/java/com/skyflow/management/controller/policy/Policy.java b/v2/src/main/java/com/skyflow/management/controller/policy/Policy.java similarity index 100% rename from v2/main/java/com/skyflow/management/controller/policy/Policy.java rename to v2/src/main/java/com/skyflow/management/controller/policy/Policy.java diff --git a/v2/main/java/com/skyflow/management/controller/role/Role.java b/v2/src/main/java/com/skyflow/management/controller/role/Role.java similarity index 100% rename from v2/main/java/com/skyflow/management/controller/role/Role.java rename to v2/src/main/java/com/skyflow/management/controller/role/Role.java diff --git a/v2/main/java/com/skyflow/management/controller/vault/Vault.java b/v2/src/main/java/com/skyflow/management/controller/vault/Vault.java similarity index 100% rename from v2/main/java/com/skyflow/management/controller/vault/Vault.java rename to v2/src/main/java/com/skyflow/management/controller/vault/Vault.java diff --git a/v2/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java b/v2/src/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java similarity index 100% rename from v2/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java rename to v2/src/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java diff --git a/v2/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java b/v2/src/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java similarity index 100% rename from v2/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java rename to v2/src/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java diff --git a/v2/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java b/v2/src/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java similarity index 100% rename from v2/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java rename to v2/src/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java diff --git a/v2/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java b/v2/src/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java similarity index 100% rename from v2/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java rename to v2/src/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java diff --git a/v2/main/java/com/skyflow/management/service/ManagementService.java b/v2/src/main/java/com/skyflow/management/service/ManagementService.java similarity index 100% rename from v2/main/java/com/skyflow/management/service/ManagementService.java rename to v2/src/main/java/com/skyflow/management/service/ManagementService.java diff --git a/v2/main/java/com/skyflow/utils/Builder.java b/v2/src/main/java/com/skyflow/utils/Builder.java similarity index 100% rename from v2/main/java/com/skyflow/utils/Builder.java rename to v2/src/main/java/com/skyflow/utils/Builder.java diff --git a/v2/main/java/com/skyflow/utils/LogLevel.java b/v2/src/main/java/com/skyflow/utils/LogLevel.java similarity index 100% rename from v2/main/java/com/skyflow/utils/LogLevel.java rename to v2/src/main/java/com/skyflow/utils/LogLevel.java diff --git a/v2/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java similarity index 100% rename from v2/main/java/com/skyflow/utils/validations/Validations.java rename to v2/src/main/java/com/skyflow/utils/validations/Validations.java diff --git a/v2/main/java/com/skyflow/vault/controller/audit/AuditController.java b/v2/src/main/java/com/skyflow/vault/controller/audit/AuditController.java similarity index 100% rename from v2/main/java/com/skyflow/vault/controller/audit/AuditController.java rename to v2/src/main/java/com/skyflow/vault/controller/audit/AuditController.java diff --git a/v2/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java b/v2/src/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java similarity index 100% rename from v2/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java rename to v2/src/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java diff --git a/v2/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java b/v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java similarity index 100% rename from v2/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java rename to v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java diff --git a/v2/main/java/com/skyflow/vault/controller/detect/DetectController.java b/v2/src/main/java/com/skyflow/vault/controller/detect/DetectController.java similarity index 100% rename from v2/main/java/com/skyflow/vault/controller/detect/DetectController.java rename to v2/src/main/java/com/skyflow/vault/controller/detect/DetectController.java diff --git a/v2/main/java/com/skyflow/vault/controller/vault/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/vault/VaultController.java similarity index 100% rename from v2/main/java/com/skyflow/vault/controller/vault/VaultController.java rename to v2/src/main/java/com/skyflow/vault/controller/vault/VaultController.java diff --git a/v2/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java similarity index 100% rename from v2/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java rename to v2/src/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java diff --git a/v2/main/java/com/skyflow/vault/model/request/InsertRequest.java b/v2/src/main/java/com/skyflow/vault/model/request/InsertRequest.java similarity index 100% rename from v2/main/java/com/skyflow/vault/model/request/InsertRequest.java rename to v2/src/main/java/com/skyflow/vault/model/request/InsertRequest.java diff --git a/v2/main/java/com/skyflow/vault/model/request/ListEventRequest.java b/v2/src/main/java/com/skyflow/vault/model/request/ListEventRequest.java similarity index 100% rename from v2/main/java/com/skyflow/vault/model/request/ListEventRequest.java rename to v2/src/main/java/com/skyflow/vault/model/request/ListEventRequest.java diff --git a/v2/main/java/com/skyflow/vault/model/response/DeIdentifyResponse.java b/v2/src/main/java/com/skyflow/vault/model/response/DeIdentifyResponse.java similarity index 100% rename from v2/main/java/com/skyflow/vault/model/response/DeIdentifyResponse.java rename to v2/src/main/java/com/skyflow/vault/model/response/DeIdentifyResponse.java diff --git a/v2/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java b/v2/src/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java similarity index 100% rename from v2/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java rename to v2/src/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java diff --git a/v2/main/java/com/skyflow/vault/model/response/GetBinResponse.java b/v2/src/main/java/com/skyflow/vault/model/response/GetBinResponse.java similarity index 100% rename from v2/main/java/com/skyflow/vault/model/response/GetBinResponse.java rename to v2/src/main/java/com/skyflow/vault/model/response/GetBinResponse.java diff --git a/v2/main/java/com/skyflow/vault/model/response/InsertResponse.java b/v2/src/main/java/com/skyflow/vault/model/response/InsertResponse.java similarity index 100% rename from v2/main/java/com/skyflow/vault/model/response/InsertResponse.java rename to v2/src/main/java/com/skyflow/vault/model/response/InsertResponse.java diff --git a/v2/main/java/com/skyflow/vault/model/response/InvokeConnectionResponse.java b/v2/src/main/java/com/skyflow/vault/model/response/InvokeConnectionResponse.java similarity index 100% rename from v2/main/java/com/skyflow/vault/model/response/InvokeConnectionResponse.java rename to v2/src/main/java/com/skyflow/vault/model/response/InvokeConnectionResponse.java diff --git a/v2/main/java/com/skyflow/vault/model/response/ListEventResponse.java b/v2/src/main/java/com/skyflow/vault/model/response/ListEventResponse.java similarity index 100% rename from v2/main/java/com/skyflow/vault/model/response/ListEventResponse.java rename to v2/src/main/java/com/skyflow/vault/model/response/ListEventResponse.java diff --git a/v2/main/java/com/skyflow/vault/service/VaultService.java b/v2/src/main/java/com/skyflow/vault/service/VaultService.java similarity index 100% rename from v2/main/java/com/skyflow/vault/service/VaultService.java rename to v2/src/main/java/com/skyflow/vault/service/VaultService.java From 35762d2c984c63a3124990d01d7f1d02e5cd0440 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Thu, 19 Sep 2024 13:47:54 +0530 Subject: [PATCH 04/68] SK-1663 Scaffolding for java sdk v2 - Renamed packages according to design doc for sdk v2 --- v2/src/main/java/com/skyflow/Skyflow.java | 140 ++++++++++++++++++ .../main/java/com/skyflow/client/Skyflow.java | 133 ----------------- .../com/skyflow/config/ConnectionConfig.java | 19 ++- .../java/com/skyflow/config/Credentials.java | 27 +++- .../java/com/skyflow/config/VaultConfig.java | 54 ++++++- v2/src/main/java/com/skyflow/enums/ENV.java | 8 + .../skyflow/{utils => enums}/LogLevel.java | 2 +- .../management/ManagementController.java | 46 ------ .../management/controller/policy/Policy.java | 23 --- .../management/controller/role/Role.java | 23 --- .../management/controller/vault/Vault.java | 23 --- .../createVault/CreateVaultRequest.java | 10 -- .../deletePolicy/DeletePolicyRequest.java | 10 -- .../createVault/CreateVaultResponse.java | 10 -- .../deletePolicy/DeletePolicyResponse.java | 10 -- .../management/service/ManagementService.java | 46 ------ .../main/java/com/skyflow/utils/Builder.java | 4 - .../request => audit}/ListEventRequest.java | 2 +- .../response => audit}/ListEventResponse.java | 2 +- .../com/skyflow/vault/bin/GetBinRequest.java | 10 ++ .../response => bin}/GetBinResponse.java | 2 +- .../connection/InvokeConnectionRequest.java | 10 ++ .../InvokeConnectionResponse.java | 2 +- .../controller/audit/AuditController.java | 7 +- .../controller/bin/BinLookupController.java | 13 ++ .../binlookup/BinLookupController.java | 18 --- .../connections/ConnectionController.java | 14 ++ .../connections/ConnectionsController.java | 19 --- .../controller/detect/DetectController.java | 7 +- .../controller/vault/VaultController.java | 15 +- .../request => data}/InsertRequest.java | 2 +- .../response => data}/InsertResponse.java | 2 +- .../vault/detect/DeIdentifyRequest.java | 10 ++ .../DeIdentifyResponse.java | 2 +- .../skyflow/vault/service/VaultService.java | 5 - .../request => tokens}/DetokenizeRequest.java | 2 +- .../DetokenizeResponse.java | 2 +- 37 files changed, 321 insertions(+), 413 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/Skyflow.java delete mode 100644 v2/src/main/java/com/skyflow/client/Skyflow.java create mode 100644 v2/src/main/java/com/skyflow/enums/ENV.java rename v2/src/main/java/com/skyflow/{utils => enums}/LogLevel.java (74%) delete mode 100644 v2/src/main/java/com/skyflow/management/controller/management/ManagementController.java delete mode 100644 v2/src/main/java/com/skyflow/management/controller/policy/Policy.java delete mode 100644 v2/src/main/java/com/skyflow/management/controller/role/Role.java delete mode 100644 v2/src/main/java/com/skyflow/management/controller/vault/Vault.java delete mode 100644 v2/src/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java delete mode 100644 v2/src/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java delete mode 100644 v2/src/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java delete mode 100644 v2/src/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java delete mode 100644 v2/src/main/java/com/skyflow/management/service/ManagementService.java delete mode 100644 v2/src/main/java/com/skyflow/utils/Builder.java rename v2/src/main/java/com/skyflow/vault/{model/request => audit}/ListEventRequest.java (77%) rename v2/src/main/java/com/skyflow/vault/{model/response => audit}/ListEventResponse.java (74%) create mode 100644 v2/src/main/java/com/skyflow/vault/bin/GetBinRequest.java rename v2/src/main/java/com/skyflow/vault/{model/response => bin}/GetBinResponse.java (73%) create mode 100644 v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java rename v2/src/main/java/com/skyflow/vault/{model/response => connection}/InvokeConnectionResponse.java (76%) create mode 100644 v2/src/main/java/com/skyflow/vault/controller/bin/BinLookupController.java delete mode 100644 v2/src/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java create mode 100644 v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionController.java delete mode 100644 v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java rename v2/src/main/java/com/skyflow/vault/{model/request => data}/InsertRequest.java (77%) rename v2/src/main/java/com/skyflow/vault/{model/response => data}/InsertResponse.java (73%) create mode 100644 v2/src/main/java/com/skyflow/vault/detect/DeIdentifyRequest.java rename v2/src/main/java/com/skyflow/vault/{model/response => detect}/DeIdentifyResponse.java (75%) rename v2/src/main/java/com/skyflow/vault/{model/request => tokens}/DetokenizeRequest.java (78%) rename v2/src/main/java/com/skyflow/vault/{model/response => tokens}/DetokenizeResponse.java (75%) diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java new file mode 100644 index 00000000..57a1f2da --- /dev/null +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -0,0 +1,140 @@ +package com.skyflow; + +import com.skyflow.config.ConnectionConfig; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.LogLevel; +import com.skyflow.vault.controller.connections.ConnectionController; +import com.skyflow.vault.controller.vault.VaultController; + +import java.util.ArrayList; + +public class Skyflow { + private final ArrayList vaults; + private final ArrayList connections; + private Credentials skyflowCredentials; + private LogLevel logLevel; + + private Skyflow(SkyflowClientBuilder builder) { + this.vaults = builder.vaults; + this.connections = builder.connections; + this.logLevel = builder.logLevel; + this.skyflowCredentials = builder.skyflowCredentials; + } + + public static SkyflowClientBuilder builder() { + return new SkyflowClientBuilder(); + } + + public VaultConfig getVaultConfig(String vaultId) { + // get vault config with vault id + return null; + } + + public ConnectionConfig getConnectionConfig(String connectionId) { + // get connection config with connection id + return null; + } + + public LogLevel getLogLevel() { + // get log level + return this.logLevel; + } + + // in case no id is passed, return first vault controller + public VaultController vault() { + return this.vaults.get(0); + } + + public VaultController vault(String vaultId) { + // (cache) - store the vault object in a list, don't create object if object already exits + // return vault Object using static func + return null; + } + + // in case no id is passed, return first connection controller + public ConnectionController connection() { + return this.connections.get(0); + } + + public ConnectionController connection(String connectionId) { + // (cache) - store the connection object in a list, don't create object if object already exits + // return connection Object static func + return null; + } + + public static final class SkyflowClientBuilder { + private final ArrayList vaults; + private final ArrayList connections; + private Credentials skyflowCredentials; + private LogLevel logLevel; + + public SkyflowClientBuilder() { + this.vaults = new ArrayList<>(); + this.connections = new ArrayList<>(); + this.skyflowCredentials = null; + this.logLevel = LogLevel.ERROR; + } + + public SkyflowClientBuilder addVaultConfig(VaultConfig vaultConfig) { + // check if vaultConfig already exists + // display error log in case add was not successful, throw error, or both + return this; + } + + public SkyflowClientBuilder updateVaultConfig(VaultConfig vaultConfig) { + // update vault config with vault config + // display error log in case update was not successful, throw error, or both + return this; + } + + public SkyflowClientBuilder removeVaultConfig(String vaultId) { + // remove vault config with vault id + // display error log in case remove was not successful, throw error, or both + return this; + } + + + public SkyflowClientBuilder addConnectionConfig(ConnectionConfig connectionConfig) { + // add connection config + return this; + } + + public SkyflowClientBuilder updateConnectionConfig(ConnectionConfig connectionConfig) { + // update connection config with connection id + return this; + } + + public SkyflowClientBuilder removeConnectionConfig(String connectionId) { + // remove connection config with connection id + return this; + } + + public SkyflowClientBuilder addSkyflowCredentials(Credentials credentials) { + // set credentials + this.skyflowCredentials = credentials; + return this; + } + + public SkyflowClientBuilder updateSkyflowCredentials(Credentials credentials) { + // set credentials + this.skyflowCredentials = credentials; + return this; + } + + public SkyflowClientBuilder setLogLevel(LogLevel logLevel) { + this.logLevel = logLevel; + return this; + } + + public SkyflowClientBuilder updateLogLevel(LogLevel logLevel) { + this.logLevel = logLevel; + return this; + } + + public Skyflow build() { + // return built skyflow client instance + return new Skyflow(this); + } + } +} diff --git a/v2/src/main/java/com/skyflow/client/Skyflow.java b/v2/src/main/java/com/skyflow/client/Skyflow.java deleted file mode 100644 index abc0504d..00000000 --- a/v2/src/main/java/com/skyflow/client/Skyflow.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.skyflow.client; - -import com.skyflow.config.ConnectionConfig; -import com.skyflow.config.Credentials; -import com.skyflow.config.ManagementConfig; -import com.skyflow.config.VaultConfig; -import com.skyflow.management.controller.management.ManagementController; -import com.skyflow.utils.Builder; -import com.skyflow.utils.LogLevel; -import com.skyflow.vault.controller.connections.ConnectionsController; -import com.skyflow.vault.controller.vault.VaultController; - -public class Skyflow { - Builder builder; - // other members - - public Skyflow(VaultConfig vaultConfig, ConnectionConfig connectionConfig, ManagementConfig managementConfig, Credentials credentials) { - // set members accordingly - } - - public Builder Builder() { - builder = new Builder(); - return builder; - } - - public Builder addVaultConfig(VaultConfig vaultConfig) { - // add vault config - return builder; - } - - public VaultConfig getVaultConfig(String vaultId) { - // get vault config with vault id - return null; - } - - public Builder updateVaultConfig(VaultConfig vaultConfig) { - // update vault config with vault id - return builder; - } - - public Builder removeVaultConfig(String vaultId) { - // remove vault config with vault id - return builder; - } - - public Builder addConnectionConfig(ConnectionConfig connectionConfig) { - // add connection config - return builder; - } - - public ConnectionConfig getConnectionConfig(String connectionId) { - // get connection config with connection id - return null; - } - - public Builder updateConnectionConfig(ConnectionConfig connectionConfig) { - // update connection config with connection id - return builder; - } - - public Builder removeConnectionConfig(String connectionId) { - // remove connection config with connection id - return builder; - } - - public Builder addManagementConfig(ManagementConfig managementConfig) { - // add management config - return builder; - } - - public ManagementConfig getManagementConfig(String managementId) { - // get management config with management id - return null; - } - - public Builder updateManagementConfig(ManagementConfig managementConfig) { - // update management config with management id - return builder; - } - - public Builder removeManagementConfig(String managementId) { - // remove management config with management id - return builder; - } - - public Builder addSkyflowCredentials(Credentials credentials) { - // set credentials - return builder; - } - - public Builder updateSkyflowCredentials(Credentials credentials) { - // set credentials - return builder; - } - - public Builder setLogLevel(LogLevel logLevel) { - // set log level - return builder; - } - - public LogLevel getLogLevel() { - // get log level - return null; - } - - public Builder updateLogLevel(LogLevel logLevel) { - // update log level - return builder; - } - - public Skyflow build() { - // return built skyflow client instance - return this; - } - - public VaultController vault(String vaultId) { - // (cache) - store the vault object in a list, don't create object if object already exits - // return vault Object using static func - return null; - } - - public ConnectionsController connection(String connectionId) { - // (cache) - store the connection object in a list, don't create object if object already exits - // return connection Object static func - return null; - } - - public ManagementController management() { - // cache management object if created - // return management object using static func - return null; - } -} diff --git a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java index 5369b81b..a462e878 100644 --- a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java +++ b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java @@ -1,11 +1,26 @@ package com.skyflow.config; public class ConnectionConfig { - // members + private String connectionId; + private String connectionUrl; + private Credentials credentials; // constructor ConnectionConfig() { + this.connectionId = null; + this.connectionUrl = null; + this.credentials = null; } - // getters ans setters + public void setConnectionId(String connectionId) { + this.connectionId = connectionId; + } + + public void setConnectionUrl(String connectionUrl) { + this.connectionUrl = connectionUrl; + } + + public void setCredentials(Credentials credentials) { + this.credentials = credentials; + } } diff --git a/v2/src/main/java/com/skyflow/config/Credentials.java b/v2/src/main/java/com/skyflow/config/Credentials.java index 44fd58fc..7293bbff 100644 --- a/v2/src/main/java/com/skyflow/config/Credentials.java +++ b/v2/src/main/java/com/skyflow/config/Credentials.java @@ -1,11 +1,34 @@ package com.skyflow.config; +import java.util.ArrayList; + public class Credentials { - // members + private String path; + private ArrayList roles; + private String context; + private String credentialsString; // constructor Credentials() { + this.path = null; + this.roles = new ArrayList<>(); + this.context = null; + this.credentialsString = null; + } + + public void setPath(String path) { + this.path = path; + } + + public void setRoles(ArrayList roles) { + this.roles = roles; + } + + public void setContext(String context) { + this.context = context; } - // getters ans setters + public void setCredentialsString(String credentialsString) { + this.credentialsString = credentialsString; + } } diff --git a/v2/src/main/java/com/skyflow/config/VaultConfig.java b/v2/src/main/java/com/skyflow/config/VaultConfig.java index c70c9850..9bbcf55b 100644 --- a/v2/src/main/java/com/skyflow/config/VaultConfig.java +++ b/v2/src/main/java/com/skyflow/config/VaultConfig.java @@ -1,11 +1,59 @@ package com.skyflow.config; +import com.skyflow.enums.ENV; + public class VaultConfig { // members + private String vaultId; + private String clusterId; + private ENV env; + private Credentials credentials; + + public VaultConfig() { + this.vaultId = null; + this.clusterId = 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; + } - // constructor - VaultConfig() { + public void setClusterId(String clusterId) { + this.clusterId = clusterId; } - // getters ans setters + public ENV getEnv() { + return env; + } + + public void setEnv(ENV env) { + this.env = env; + } + + public Credentials getCredentials() { + return credentials; + } + + public void setCredentials(Credentials credentials) { + this.credentials = credentials; + } + + @Override + public String toString() { + return "VaultConfig{" + + "vaultId='" + vaultId + '\'' + + ", clusterId='" + clusterId + '\'' + + ", env=" + env + + '}'; + } } diff --git a/v2/src/main/java/com/skyflow/enums/ENV.java b/v2/src/main/java/com/skyflow/enums/ENV.java new file mode 100644 index 00000000..17c3e985 --- /dev/null +++ b/v2/src/main/java/com/skyflow/enums/ENV.java @@ -0,0 +1,8 @@ +package com.skyflow.enums; + +public enum ENV { + DEV, + STAGE, + SANDBOX, + PROD +} diff --git a/v2/src/main/java/com/skyflow/utils/LogLevel.java b/v2/src/main/java/com/skyflow/enums/LogLevel.java similarity index 74% rename from v2/src/main/java/com/skyflow/utils/LogLevel.java rename to v2/src/main/java/com/skyflow/enums/LogLevel.java index 873f8264..7b86db3a 100644 --- a/v2/src/main/java/com/skyflow/utils/LogLevel.java +++ b/v2/src/main/java/com/skyflow/enums/LogLevel.java @@ -1,4 +1,4 @@ -package com.skyflow.utils; +package com.skyflow.enums; public enum LogLevel { ERROR, diff --git a/v2/src/main/java/com/skyflow/management/controller/management/ManagementController.java b/v2/src/main/java/com/skyflow/management/controller/management/ManagementController.java deleted file mode 100644 index d397954f..00000000 --- a/v2/src/main/java/com/skyflow/management/controller/management/ManagementController.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.skyflow.management.controller.management; - -public class ManagementController { - // members - - public ManagementController() { - } - - public static ManagementController initialize() { - // return management object - return null; - } - - public T createVault() { - // return vault object using static func - // cache - store the vault object in a list - return null; - } - - public T createRole() { - // return role object using static func - // cache - store the role object in a list - return null; - } - - public T createPolicy() { - // return policy object using static func - // cache - store the policy object in a list - return null; - } - - public T vault(String vaultId) { - // return vault object from the cached list - return null; - } - - public T role(String roleId) { - // return role object from the cached list - return null; - } - - public T policy(String policyId) { - // return policy object from the cached list - return null; - } -} diff --git a/v2/src/main/java/com/skyflow/management/controller/policy/Policy.java b/v2/src/main/java/com/skyflow/management/controller/policy/Policy.java deleted file mode 100644 index e7b27f1d..00000000 --- a/v2/src/main/java/com/skyflow/management/controller/policy/Policy.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.skyflow.management.controller.policy; - -public class Policy { - public Policy() { - } - - public static Policy initialize() { - // return policy object - return null; - } - - public Policy update() { - return null; - } - - public Policy delete() { - return null; - } - - public Policy get() { - return null; - } -} diff --git a/v2/src/main/java/com/skyflow/management/controller/role/Role.java b/v2/src/main/java/com/skyflow/management/controller/role/Role.java deleted file mode 100644 index 5da98b56..00000000 --- a/v2/src/main/java/com/skyflow/management/controller/role/Role.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.skyflow.management.controller.role; - -public class Role { - public Role() { - } - - public static Role initialize() { - // return policy object - return null; - } - - public Role update() { - return null; - } - - public Role delete() { - return null; - } - - public Role get() { - return null; - } -} diff --git a/v2/src/main/java/com/skyflow/management/controller/vault/Vault.java b/v2/src/main/java/com/skyflow/management/controller/vault/Vault.java deleted file mode 100644 index f1a9fea9..00000000 --- a/v2/src/main/java/com/skyflow/management/controller/vault/Vault.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.skyflow.management.controller.vault; - -public class Vault { - public Vault() { - } - - public static Vault initialize() { - // return policy object - return null; - } - - public Vault update() { - return null; - } - - public Vault delete() { - return null; - } - - public Vault get() { - return null; - } -} diff --git a/v2/src/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java b/v2/src/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java deleted file mode 100644 index dee4b447..00000000 --- a/v2/src/main/java/com/skyflow/management/model/request/createVault/CreateVaultRequest.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.skyflow.management.model.request.createVault; - -public class CreateVaultRequest { - // members - - public CreateVaultRequest() { - } - - // getters and setters -} diff --git a/v2/src/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java b/v2/src/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java deleted file mode 100644 index 9a97af88..00000000 --- a/v2/src/main/java/com/skyflow/management/model/request/deletePolicy/DeletePolicyRequest.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.skyflow.management.model.request.deletePolicy; - -public class DeletePolicyRequest { - // members - - public DeletePolicyRequest() { - } - - // getters and setters -} diff --git a/v2/src/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java b/v2/src/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java deleted file mode 100644 index 6d797241..00000000 --- a/v2/src/main/java/com/skyflow/management/model/response/createVault/CreateVaultResponse.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.skyflow.management.model.response.createVault; - -public class CreateVaultResponse { - // members - - public CreateVaultResponse() { - } - - // getters and setters -} diff --git a/v2/src/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java b/v2/src/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java deleted file mode 100644 index 17795308..00000000 --- a/v2/src/main/java/com/skyflow/management/model/response/deletePolicy/DeletePolicyResponse.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.skyflow.management.model.response.deletePolicy; - -public class DeletePolicyResponse { - // members - - public DeletePolicyResponse() { - } - - // getters and setters -} diff --git a/v2/src/main/java/com/skyflow/management/service/ManagementService.java b/v2/src/main/java/com/skyflow/management/service/ManagementService.java deleted file mode 100644 index 827eb686..00000000 --- a/v2/src/main/java/com/skyflow/management/service/ManagementService.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.skyflow.management.service; - -public class ManagementService { - // members - - public ManagementService() { - } - - public static ManagementService initialize() { - // return management object - return null; - } - - public T createVault() { - // return vault object using static func - // cache - store the vault object in a list - return null; - } - - public T createRole() { - // return role object using static func - // cache - store the role object in a list - return null; - } - - public T createPolicy() { - // return policy object using static func - // cache - store the policy object in a list - return null; - } - - public T vault(String vaultId) { - // return vault object from the cached list - return null; - } - - public T role(String roleId) { - // return role object from the cached list - return null; - } - - public T policy(String policyId) { - // return policy object from the cached list - return null; - } -} diff --git a/v2/src/main/java/com/skyflow/utils/Builder.java b/v2/src/main/java/com/skyflow/utils/Builder.java deleted file mode 100644 index 5641555c..00000000 --- a/v2/src/main/java/com/skyflow/utils/Builder.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.skyflow.utils; - -public class Builder { -} diff --git a/v2/src/main/java/com/skyflow/vault/model/request/ListEventRequest.java b/v2/src/main/java/com/skyflow/vault/audit/ListEventRequest.java similarity index 77% rename from v2/src/main/java/com/skyflow/vault/model/request/ListEventRequest.java rename to v2/src/main/java/com/skyflow/vault/audit/ListEventRequest.java index 3f0f7349..b6c26b6d 100644 --- a/v2/src/main/java/com/skyflow/vault/model/request/ListEventRequest.java +++ b/v2/src/main/java/com/skyflow/vault/audit/ListEventRequest.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.model.request; +package com.skyflow.vault.audit; public class ListEventRequest { // members diff --git a/v2/src/main/java/com/skyflow/vault/model/response/ListEventResponse.java b/v2/src/main/java/com/skyflow/vault/audit/ListEventResponse.java similarity index 74% rename from v2/src/main/java/com/skyflow/vault/model/response/ListEventResponse.java rename to v2/src/main/java/com/skyflow/vault/audit/ListEventResponse.java index 5bb7d631..2647e617 100644 --- a/v2/src/main/java/com/skyflow/vault/model/response/ListEventResponse.java +++ b/v2/src/main/java/com/skyflow/vault/audit/ListEventResponse.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.model.response; +package com.skyflow.vault.audit; public class ListEventResponse { // members diff --git a/v2/src/main/java/com/skyflow/vault/bin/GetBinRequest.java b/v2/src/main/java/com/skyflow/vault/bin/GetBinRequest.java new file mode 100644 index 00000000..d059245f --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/bin/GetBinRequest.java @@ -0,0 +1,10 @@ +package com.skyflow.vault.bin; + +public class GetBinRequest { + // members + + public GetBinRequest() { + } + + // getters ans setters +} diff --git a/v2/src/main/java/com/skyflow/vault/model/response/GetBinResponse.java b/v2/src/main/java/com/skyflow/vault/bin/GetBinResponse.java similarity index 73% rename from v2/src/main/java/com/skyflow/vault/model/response/GetBinResponse.java rename to v2/src/main/java/com/skyflow/vault/bin/GetBinResponse.java index 000280c7..86210031 100644 --- a/v2/src/main/java/com/skyflow/vault/model/response/GetBinResponse.java +++ b/v2/src/main/java/com/skyflow/vault/bin/GetBinResponse.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.model.response; +package com.skyflow.vault.bin; public class GetBinResponse { // members diff --git a/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java b/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java new file mode 100644 index 00000000..886e2166 --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java @@ -0,0 +1,10 @@ +package com.skyflow.vault.connection; + +public class InvokeConnectionRequest { + // members + + public InvokeConnectionRequest() { + } + + // getters ans setters +} diff --git a/v2/src/main/java/com/skyflow/vault/model/response/InvokeConnectionResponse.java b/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java similarity index 76% rename from v2/src/main/java/com/skyflow/vault/model/response/InvokeConnectionResponse.java rename to v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java index 155cff66..4876cffd 100644 --- a/v2/src/main/java/com/skyflow/vault/model/response/InvokeConnectionResponse.java +++ b/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.model.response; +package com.skyflow.vault.connection; public class InvokeConnectionResponse { // members diff --git a/v2/src/main/java/com/skyflow/vault/controller/audit/AuditController.java b/v2/src/main/java/com/skyflow/vault/controller/audit/AuditController.java index 0c2165e8..049bfa67 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/audit/AuditController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/audit/AuditController.java @@ -1,16 +1,11 @@ package com.skyflow.vault.controller.audit; -import com.skyflow.vault.model.response.ListEventResponse; +import com.skyflow.vault.audit.ListEventResponse; public class AuditController { public AuditController() { } - // return audit controller object - public static AuditController initialize() { - return null; - } - // Check for correct return type in python interfaces public ListEventResponse list() { // return audit events diff --git a/v2/src/main/java/com/skyflow/vault/controller/bin/BinLookupController.java b/v2/src/main/java/com/skyflow/vault/controller/bin/BinLookupController.java new file mode 100644 index 00000000..e70fcefe --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/controller/bin/BinLookupController.java @@ -0,0 +1,13 @@ +package com.skyflow.vault.controller.bin; + +import com.skyflow.vault.bin.GetBinResponse; + +public class BinLookupController { + public BinLookupController() { + } + + public GetBinResponse get() { + // return bin lookup response (card metadata associated with BIN) + return null; + } +} diff --git a/v2/src/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java b/v2/src/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java deleted file mode 100644 index 2a3c2df6..00000000 --- a/v2/src/main/java/com/skyflow/vault/controller/binlookup/BinLookupController.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.skyflow.vault.controller.binlookup; - -import com.skyflow.vault.model.response.GetBinResponse; - -public class BinLookupController { - public BinLookupController() { - } - - // return bin lookup controller object - public static BinLookupController initialize() { - return null; - } - - public GetBinResponse get() { - // return bin lookup response (card metadata associated with BIN) - return null; - } -} diff --git a/v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionController.java b/v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionController.java new file mode 100644 index 00000000..139a6d49 --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionController.java @@ -0,0 +1,14 @@ +package com.skyflow.vault.controller.connections; + +import com.skyflow.vault.connection.InvokeConnectionResponse; + +public class ConnectionController { + public ConnectionController() { + } + + // check in python interfaces + public InvokeConnectionResponse invoke() { + // invoke the connection + return null; + } +} diff --git a/v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java b/v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java deleted file mode 100644 index bfece96d..00000000 --- a/v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionsController.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.skyflow.vault.controller.connections; - -import com.skyflow.vault.model.response.InvokeConnectionResponse; - -public class ConnectionsController { - public ConnectionsController() { - } - - // return connections controller object - public static ConnectionsController initialize() { - return null; - } - - // check in python interfaces - public InvokeConnectionResponse invoke() { - // invoke the connection - return null; - } -} diff --git a/v2/src/main/java/com/skyflow/vault/controller/detect/DetectController.java b/v2/src/main/java/com/skyflow/vault/controller/detect/DetectController.java index 6e02be62..a2605a5c 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/detect/DetectController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/detect/DetectController.java @@ -1,16 +1,11 @@ package com.skyflow.vault.controller.detect; -import com.skyflow.vault.model.response.DeIdentifyResponse; +import com.skyflow.vault.detect.DeIdentifyResponse; public class DetectController { public DetectController() { } - // return detect controller object - public static DetectController initialize() { - return null; - } - // should return detect controller public DetectController deIdentify() { // return detect controller diff --git a/v2/src/main/java/com/skyflow/vault/controller/vault/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/vault/VaultController.java index 0f5389fd..6954db83 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/vault/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/vault/VaultController.java @@ -1,14 +1,21 @@ package com.skyflow.vault.controller.vault; +import com.skyflow.config.VaultConfig; + public class VaultController { // members + private VaultConfig vaultConfig; - public VaultController() { + public VaultController(VaultConfig vaultConfig) { + this.vaultConfig = vaultConfig; } - public static T initialize() { - // return vault service object - return T; + public void setVaultConfig(VaultConfig vaultConfig) { + this.vaultConfig = vaultConfig; + } + + public VaultConfig getVaultConfig() { + return vaultConfig; } public T insert() { diff --git a/v2/src/main/java/com/skyflow/vault/model/request/InsertRequest.java b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java similarity index 77% rename from v2/src/main/java/com/skyflow/vault/model/request/InsertRequest.java rename to v2/src/main/java/com/skyflow/vault/data/InsertRequest.java index 77380111..84971e0b 100644 --- a/v2/src/main/java/com/skyflow/vault/model/request/InsertRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.model.request; +package com.skyflow.vault.data; public class InsertRequest { // members diff --git a/v2/src/main/java/com/skyflow/vault/model/response/InsertResponse.java b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java similarity index 73% rename from v2/src/main/java/com/skyflow/vault/model/response/InsertResponse.java rename to v2/src/main/java/com/skyflow/vault/data/InsertResponse.java index 04fff389..444418dd 100644 --- a/v2/src/main/java/com/skyflow/vault/model/response/InsertResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.model.response; +package com.skyflow.vault.data; public class InsertResponse { // members diff --git a/v2/src/main/java/com/skyflow/vault/detect/DeIdentifyRequest.java b/v2/src/main/java/com/skyflow/vault/detect/DeIdentifyRequest.java new file mode 100644 index 00000000..92be4962 --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/detect/DeIdentifyRequest.java @@ -0,0 +1,10 @@ +package com.skyflow.vault.detect; + +public class DeIdentifyRequest { + // members + + public DeIdentifyRequest() { + } + + // getters ans setters +} diff --git a/v2/src/main/java/com/skyflow/vault/model/response/DeIdentifyResponse.java b/v2/src/main/java/com/skyflow/vault/detect/DeIdentifyResponse.java similarity index 75% rename from v2/src/main/java/com/skyflow/vault/model/response/DeIdentifyResponse.java rename to v2/src/main/java/com/skyflow/vault/detect/DeIdentifyResponse.java index 4e8c2c58..05fe9a6e 100644 --- a/v2/src/main/java/com/skyflow/vault/model/response/DeIdentifyResponse.java +++ b/v2/src/main/java/com/skyflow/vault/detect/DeIdentifyResponse.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.model.response; +package com.skyflow.vault.detect; public class DeIdentifyResponse { // members diff --git a/v2/src/main/java/com/skyflow/vault/service/VaultService.java b/v2/src/main/java/com/skyflow/vault/service/VaultService.java index 88ba344b..e699d9b6 100644 --- a/v2/src/main/java/com/skyflow/vault/service/VaultService.java +++ b/v2/src/main/java/com/skyflow/vault/service/VaultService.java @@ -6,11 +6,6 @@ public class VaultService { public VaultService() { } - public static T initialize() { - // return vault service object - return T; - } - public T insert() { return T; } diff --git a/v2/src/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java similarity index 78% rename from v2/src/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java rename to v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java index ae440ed9..631353a7 100644 --- a/v2/src/main/java/com/skyflow/vault/model/request/DetokenizeRequest.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.model.request; +package com.skyflow.vault.tokens; public class DetokenizeRequest { // members diff --git a/v2/src/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java similarity index 75% rename from v2/src/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java rename to v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java index 517dc9a6..e62cbf42 100644 --- a/v2/src/main/java/com/skyflow/vault/model/response/DetokenizeResponse.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.model.response; +package com.skyflow.vault.tokens; public class DetokenizeResponse { // members From 45d96f9acc94d5a22c671d8bd02c78d39bdfd02f Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Thu, 19 Sep 2024 17:26:44 +0530 Subject: [PATCH 05/68] SK-1663 Java sdk v2 scaffolding worked on feedback --- v2/src/main/java/com/skyflow/Skyflow.java | 4 +- .../java/com/skyflow/errors/SkyflowError.java | 10 --- .../com/skyflow/errors/SkyflowException.java | 11 +++ .../main/java/com/skyflow/utils/Messages.java | 17 ++++ .../{audit => }/AuditController.java | 2 +- .../{bin => }/BinLookupController.java | 2 +- .../ConnectionController.java | 2 +- .../{detect => }/DetectController.java | 2 +- .../vault/controller/VaultController.java | 82 +++++++++++++++++++ .../controller/vault/VaultController.java | 71 ---------------- .../skyflow/vault/service/VaultService.java | 59 ------------- 11 files changed, 116 insertions(+), 146 deletions(-) delete mode 100644 v2/src/main/java/com/skyflow/errors/SkyflowError.java create mode 100644 v2/src/main/java/com/skyflow/errors/SkyflowException.java create mode 100644 v2/src/main/java/com/skyflow/utils/Messages.java rename v2/src/main/java/com/skyflow/vault/controller/{audit => }/AuditController.java (86%) rename v2/src/main/java/com/skyflow/vault/controller/{bin => }/BinLookupController.java (86%) rename v2/src/main/java/com/skyflow/vault/controller/{connections => }/ConnectionController.java (85%) rename v2/src/main/java/com/skyflow/vault/controller/{detect => }/DetectController.java (91%) create mode 100644 v2/src/main/java/com/skyflow/vault/controller/VaultController.java delete mode 100644 v2/src/main/java/com/skyflow/vault/controller/vault/VaultController.java delete mode 100644 v2/src/main/java/com/skyflow/vault/service/VaultService.java diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index 57a1f2da..b884b40c 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -4,8 +4,8 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.enums.LogLevel; -import com.skyflow.vault.controller.connections.ConnectionController; -import com.skyflow.vault.controller.vault.VaultController; +import com.skyflow.vault.controller.ConnectionController; +import com.skyflow.vault.controller.VaultController; import java.util.ArrayList; diff --git a/v2/src/main/java/com/skyflow/errors/SkyflowError.java b/v2/src/main/java/com/skyflow/errors/SkyflowError.java deleted file mode 100644 index 4b6f29a6..00000000 --- a/v2/src/main/java/com/skyflow/errors/SkyflowError.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.skyflow.errors; - -// skyflow error class -public class SkyflowError { - // members - - // constructor - SkyflowError() { - } -} diff --git a/v2/src/main/java/com/skyflow/errors/SkyflowException.java b/v2/src/main/java/com/skyflow/errors/SkyflowException.java new file mode 100644 index 00000000..7cf96536 --- /dev/null +++ b/v2/src/main/java/com/skyflow/errors/SkyflowException.java @@ -0,0 +1,11 @@ +package com.skyflow.errors; + +public class SkyflowException extends Exception { + // members + + public SkyflowException(String message) { + super(message); + } + + // getters and setters +} diff --git a/v2/src/main/java/com/skyflow/utils/Messages.java b/v2/src/main/java/com/skyflow/utils/Messages.java new file mode 100644 index 00000000..28144e0a --- /dev/null +++ b/v2/src/main/java/com/skyflow/utils/Messages.java @@ -0,0 +1,17 @@ +package com.skyflow.utils; + +public final class Messages { + public final static String INVALID_BEARER_TOKEN = "Invalid bearer token"; + public final static String INVALID_VAULT_ID = "Invalid vault id"; + public final static String INVALID_VAULT_URL = "Invalid vault url"; + // other error messages + + public final static String WARNING_MESSAGE = "Some warning message"; + // other warning messages + + public final static String INFO_MESSAGE = "Some info message"; + // other info messages + + public final static String DEBUG_MESSAGE = "Some debug message"; + // other debug messages +} diff --git a/v2/src/main/java/com/skyflow/vault/controller/audit/AuditController.java b/v2/src/main/java/com/skyflow/vault/controller/AuditController.java similarity index 86% rename from v2/src/main/java/com/skyflow/vault/controller/audit/AuditController.java rename to v2/src/main/java/com/skyflow/vault/controller/AuditController.java index 049bfa67..c0b37a52 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/audit/AuditController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/AuditController.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.controller.audit; +package com.skyflow.vault.controller; import com.skyflow.vault.audit.ListEventResponse; diff --git a/v2/src/main/java/com/skyflow/vault/controller/bin/BinLookupController.java b/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java similarity index 86% rename from v2/src/main/java/com/skyflow/vault/controller/bin/BinLookupController.java rename to v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java index e70fcefe..c458aed2 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/bin/BinLookupController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.controller.bin; +package com.skyflow.vault.controller; import com.skyflow.vault.bin.GetBinResponse; diff --git a/v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionController.java b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java similarity index 85% rename from v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionController.java rename to v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java index 139a6d49..881b2ad4 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/connections/ConnectionController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.controller.connections; +package com.skyflow.vault.controller; import com.skyflow.vault.connection.InvokeConnectionResponse; diff --git a/v2/src/main/java/com/skyflow/vault/controller/detect/DetectController.java b/v2/src/main/java/com/skyflow/vault/controller/DetectController.java similarity index 91% rename from v2/src/main/java/com/skyflow/vault/controller/detect/DetectController.java rename to v2/src/main/java/com/skyflow/vault/controller/DetectController.java index a2605a5c..df09434b 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/detect/DetectController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/DetectController.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.controller.detect; +package com.skyflow.vault.controller; import com.skyflow.vault.detect.DeIdentifyResponse; diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java new file mode 100644 index 00000000..3fbbe01d --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -0,0 +1,82 @@ +package com.skyflow.vault.controller; + +import com.skyflow.config.VaultConfig; +import com.skyflow.vault.audit.ListEventRequest; +import com.skyflow.vault.bin.GetBinRequest; +import com.skyflow.vault.data.InsertRequest; +import com.skyflow.vault.data.InsertResponse; +import com.skyflow.vault.detect.DeIdentifyRequest; +import com.skyflow.vault.tokens.DetokenizeRequest; + +public class VaultController { + private final AuditController auditController; + private final BinLookupController binLookupController; + private final DetectController detectController; + // members + private VaultConfig vaultConfig; + + public VaultController(VaultConfig vaultConfig) { + this.vaultConfig = vaultConfig; + this.auditController = new AuditController(); + this.binLookupController = new BinLookupController(); + this.detectController = new DetectController(); + } + + public VaultConfig getVaultConfig() { + return vaultConfig; + } + + public void setVaultConfig(VaultConfig vaultConfig) { + this.vaultConfig = vaultConfig; + } + + public InsertResponse insert(InsertRequest insertRequest) { + return null; + } + + public Object detokenize(DetokenizeRequest detokenizeRequest) { + return null; + } + + public Object get(Object getRequest) { + return null; + } + + public Object update(Object updateRequest) { + return null; + } + + public Object delete(Object deleteRequest) { + return null; + } + + public Object uploadFile(Object uploadFileRequest) { + return null; + } + + public Object query(Object queryRequest) { + return null; + } + + public Object tokenize(Object tokenizeRequest) { + return null; + } + + public BinLookupController lookUpBin(GetBinRequest getBinRequest) { + // cache bin lookup object if created + // return bin lookup object + return this.binLookupController; + } + + public AuditController audit(ListEventRequest listEventRequest) { + // cache audit object if created + // return audit object + return this.auditController; + } + + public DetectController detect(DeIdentifyRequest deIdentifyRequest) { + // cache detect object if created + // return detect object + return this.detectController; + } +} diff --git a/v2/src/main/java/com/skyflow/vault/controller/vault/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/vault/VaultController.java deleted file mode 100644 index 6954db83..00000000 --- a/v2/src/main/java/com/skyflow/vault/controller/vault/VaultController.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.skyflow.vault.controller.vault; - -import com.skyflow.config.VaultConfig; - -public class VaultController { - // members - private VaultConfig vaultConfig; - - public VaultController(VaultConfig vaultConfig) { - this.vaultConfig = vaultConfig; - } - - public void setVaultConfig(VaultConfig vaultConfig) { - this.vaultConfig = vaultConfig; - } - - public VaultConfig getVaultConfig() { - return vaultConfig; - } - - public T insert() { - return T; - } - - public T detokenize() { - return T; - } - - public T get() { - return T; - } - - public T update() { - return T; - } - - public T delete() { - return T; - } - - public T uploadFile() { - return T; - - } - - public T query() { - return T; - } - - public T tokenize() { - return T; - } - - public T lookUpBin() { - // cache bin lookup object if created - // return bin lookup object using static func - return T; - } - - public T audit() { - // cache audit object if created - // return audit object using static func - return T; - } - - public T detect() { - // cache detect object if created - // return detect object using static func - return T; - } -} diff --git a/v2/src/main/java/com/skyflow/vault/service/VaultService.java b/v2/src/main/java/com/skyflow/vault/service/VaultService.java deleted file mode 100644 index e699d9b6..00000000 --- a/v2/src/main/java/com/skyflow/vault/service/VaultService.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.skyflow.vault.service; - -public class VaultService { - // members - - public VaultService() { - } - - public T insert() { - return T; - } - - public T detokenize() { - return T; - } - - public T get() { - return T; - } - - public T update() { - return T; - } - - public T delete() { - return T; - } - - public T uploadFile() { - return T; - - } - - public T query() { - return T; - } - - public T tokenize() { - return T; - } - - public T lookUpBin() { - // cache bin lookup object if created - // return bin lookup object using static func - return T; - } - - public T audit() { - // cache audit object if created - // return audit object using static func - return T; - } - - public T detect() { - // cache detect object if created - // return detect object using static func - return T; - } -} From ad543ad9b59462849d0c93edb034700cacc97392 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Thu, 19 Sep 2024 17:32:38 +0530 Subject: [PATCH 06/68] SK-1663 Update method signatures for all controllers --- .../java/com/skyflow/vault/controller/AuditController.java | 3 ++- .../com/skyflow/vault/controller/BinLookupController.java | 3 ++- .../com/skyflow/vault/controller/ConnectionController.java | 3 ++- .../java/com/skyflow/vault/controller/DetectController.java | 5 +++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/v2/src/main/java/com/skyflow/vault/controller/AuditController.java b/v2/src/main/java/com/skyflow/vault/controller/AuditController.java index c0b37a52..4e685f85 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/AuditController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/AuditController.java @@ -1,5 +1,6 @@ package com.skyflow.vault.controller; +import com.skyflow.vault.audit.ListEventRequest; import com.skyflow.vault.audit.ListEventResponse; public class AuditController { @@ -7,7 +8,7 @@ public AuditController() { } // Check for correct return type in python interfaces - public ListEventResponse list() { + public ListEventResponse list(ListEventRequest listEventRequest) { // return audit events return null; } diff --git a/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java b/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java index c458aed2..1338ea8e 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java @@ -1,12 +1,13 @@ package com.skyflow.vault.controller; +import com.skyflow.vault.bin.GetBinRequest; import com.skyflow.vault.bin.GetBinResponse; public class BinLookupController { public BinLookupController() { } - public GetBinResponse get() { + public GetBinResponse get(GetBinRequest getBinRequest) { // return bin lookup response (card metadata associated with BIN) return null; } diff --git a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java index 881b2ad4..7e1d9845 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java @@ -1,5 +1,6 @@ package com.skyflow.vault.controller; +import com.skyflow.vault.connection.InvokeConnectionRequest; import com.skyflow.vault.connection.InvokeConnectionResponse; public class ConnectionController { @@ -7,7 +8,7 @@ public ConnectionController() { } // check in python interfaces - public InvokeConnectionResponse invoke() { + public InvokeConnectionResponse invoke(InvokeConnectionRequest invokeConnectionRequest) { // invoke the connection return null; } diff --git a/v2/src/main/java/com/skyflow/vault/controller/DetectController.java b/v2/src/main/java/com/skyflow/vault/controller/DetectController.java index df09434b..d5aa7750 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/DetectController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/DetectController.java @@ -1,5 +1,6 @@ package com.skyflow.vault.controller; +import com.skyflow.vault.detect.DeIdentifyRequest; import com.skyflow.vault.detect.DeIdentifyResponse; public class DetectController { @@ -12,12 +13,12 @@ public DetectController deIdentify() { return null; } - public DeIdentifyResponse text() { + public DeIdentifyResponse text(DeIdentifyRequest deIdentifyRequest) { // return detect response return null; } - public DeIdentifyResponse file() { + public DeIdentifyResponse file(DeIdentifyRequest deIdentifyRequest) { // return detect response return null; } From f44c1f7e47e56afcb6ccc87b812c18b6c29478ff Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 25 Sep 2024 14:14:20 +0530 Subject: [PATCH 07/68] SK-1663 Worked on feedback for java sdk v2 scafolding - SK-1677 Worked on client intialisation for Java SDK v2 --- v2/src/main/java/com/skyflow/Skyflow.java | 117 ++++++++++++------ .../com/skyflow/config/ConnectionConfig.java | 7 +- .../java/com/skyflow/config/VaultConfig.java | 16 ++- .../java/com/skyflow/enums/RedactionType.java | 25 ++++ .../com/skyflow/serviceaccount/Utils.java | 5 + v2/src/main/java/com/skyflow/utils/Utils.java | 30 +++++ .../vault/controller/AuditController.java | 12 +- .../vault/controller/BinLookupController.java | 12 +- .../controller/ConnectionController.java | 23 +++- .../vault/controller/DetectController.java | 9 +- .../vault/controller/VaultController.java | 66 +++++++--- .../com/skyflow/vault/data/InsertRequest.java | 104 +++++++++++++++- .../vault/tokens/DetokenizeRequest.java | 71 ++++++++++- .../vault/tokens/DetokenizeResponse.java | 68 +++++++++- 14 files changed, 489 insertions(+), 76 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/enums/RedactionType.java create mode 100644 v2/src/main/java/com/skyflow/serviceaccount/Utils.java create mode 100644 v2/src/main/java/com/skyflow/utils/Utils.java diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index b884b40c..3d1efd39 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -4,121 +4,166 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.enums.LogLevel; +import com.skyflow.errors.SkyflowException; import com.skyflow.vault.controller.ConnectionController; import com.skyflow.vault.controller.VaultController; -import java.util.ArrayList; +import java.util.LinkedHashMap; public class Skyflow { - private final ArrayList vaults; - private final ArrayList connections; - private Credentials skyflowCredentials; - private LogLevel logLevel; + private final SkyflowClientBuilder builder; private Skyflow(SkyflowClientBuilder builder) { - this.vaults = builder.vaults; - this.connections = builder.connections; - this.logLevel = builder.logLevel; - this.skyflowCredentials = builder.skyflowCredentials; + this.builder = builder; } public static SkyflowClientBuilder builder() { return new SkyflowClientBuilder(); } + public Skyflow addVaultConfig(VaultConfig vaultConfig) throws SkyflowException { + this.builder.addVaultConfig(vaultConfig); + return this; + } + public VaultConfig getVaultConfig(String vaultId) { // get vault config with vault id - return null; + return this.builder.vaultsMap.get(vaultId).getVaultConfig(); + } + + public Skyflow addConnectionConfig(ConnectionConfig connectionConfig) { + this.builder.addConnectionConfig(connectionConfig); + return this; } public ConnectionConfig getConnectionConfig(String connectionId) { // get connection config with connection id - return null; + return this.builder.connectionsMap.get(connectionId).getConnectionConfig(); + } + + public Skyflow addSkyflowCredentials(Credentials credentials) { + this.builder.addSkyflowCredentials(credentials); + return this; } public LogLevel getLogLevel() { - // get log level - return this.logLevel; + return this.builder.logLevel; } // in case no id is passed, return first vault controller public VaultController vault() { - return this.vaults.get(0); + String vaultId = (String) this.builder.vaultsMap.keySet().toArray()[0]; + return this.vault(vaultId); } public VaultController vault(String vaultId) { - // (cache) - store the vault object in a list, don't create object if object already exits - // return vault Object using static func - return null; + return this.builder.vaultsMap.get(vaultId); } // in case no id is passed, return first connection controller public ConnectionController connection() { - return this.connections.get(0); + String connectionId = (String) this.builder.connectionsMap.keySet().toArray()[0]; + return this.connection(connectionId); } public ConnectionController connection(String connectionId) { - // (cache) - store the connection object in a list, don't create object if object already exits - // return connection Object static func - return null; + return this.builder.connectionsMap.get(connectionId); } public static final class SkyflowClientBuilder { - private final ArrayList vaults; - private final ArrayList connections; + private final LinkedHashMap vaultsMap; + private final LinkedHashMap connectionsMap; private Credentials skyflowCredentials; private LogLevel logLevel; public SkyflowClientBuilder() { - this.vaults = new ArrayList<>(); - this.connections = new ArrayList<>(); + this.vaultsMap = new LinkedHashMap<>(); + this.connectionsMap = new LinkedHashMap<>(); this.skyflowCredentials = null; this.logLevel = LogLevel.ERROR; } public SkyflowClientBuilder addVaultConfig(VaultConfig vaultConfig) { // check if vaultConfig already exists - // display error log in case add was not successful, throw error, or both + if (this.vaultsMap.containsKey(vaultConfig.getVaultId())) { + // display error log, throw error, or both + } else { + this.vaultsMap.put(vaultConfig.getVaultId(), new VaultController(vaultConfig, this.skyflowCredentials)); + } return this; } - public SkyflowClientBuilder updateVaultConfig(VaultConfig vaultConfig) { - // update vault config with vault config - // display error log in case update was not successful, throw error, or both + public SkyflowClientBuilder updateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { + if (this.vaultsMap.containsKey(vaultConfig.getVaultId())) { + VaultController controller = this.vaultsMap.get(vaultConfig.getVaultId()); + controller.setVaultConfig(vaultConfig); + } else { + // display error log, throw error, or both + } return this; } public SkyflowClientBuilder removeVaultConfig(String vaultId) { - // remove vault config with vault id - // display error log in case remove was not successful, throw error, or both + if (this.vaultsMap.containsKey(vaultId)) { + this.vaultsMap.remove(vaultId); + } else { + // display error log, throw error, or both + } return this; } public SkyflowClientBuilder addConnectionConfig(ConnectionConfig connectionConfig) { - // add connection config + // check if connectionConfig already exists + if (this.connectionsMap.containsKey(connectionConfig.getConnectionId())) { + // display error log, throw error, or both + } else { + ConnectionController controller = new ConnectionController(connectionConfig, this.skyflowCredentials); + this.connectionsMap.put(connectionConfig.getConnectionId(), controller); + } return this; } public SkyflowClientBuilder updateConnectionConfig(ConnectionConfig connectionConfig) { - // update connection config with connection id + if (this.connectionsMap.containsKey(connectionConfig.getConnectionId())) { + ConnectionController controller = this.connectionsMap.get(connectionConfig.getConnectionId()); + controller.setConnectionConfig(connectionConfig); + } else { + // display error log, throw error, or both + } return this; } public SkyflowClientBuilder removeConnectionConfig(String connectionId) { - // remove connection config with connection id + if (this.connectionsMap.containsKey(connectionId)) { + this.connectionsMap.remove(connectionId); + } else { + // display error log, throw error, or both + } return this; } public SkyflowClientBuilder addSkyflowCredentials(Credentials credentials) { - // set credentials + // set credentials and update in vault controllers this.skyflowCredentials = credentials; + for (VaultController vault : this.vaultsMap.values()) { + vault.setCommonCredentials(this.skyflowCredentials); + } + for (ConnectionController controller : this.connectionsMap.values()) { + controller.setCommonCredentials(this.skyflowCredentials); + } return this; } public SkyflowClientBuilder updateSkyflowCredentials(Credentials credentials) { - // set credentials + // set credentials and update in vault and connection controllers this.skyflowCredentials = credentials; + for (VaultController vault : this.vaultsMap.values()) { + vault.setCommonCredentials(this.skyflowCredentials); + } + for (ConnectionController controller : this.connectionsMap.values()) { + controller.setCommonCredentials(this.skyflowCredentials); + } return this; } diff --git a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java index a462e878..0c2c4320 100644 --- a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java +++ b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java @@ -5,13 +5,16 @@ public class ConnectionConfig { private String connectionUrl; private Credentials credentials; - // constructor - ConnectionConfig() { + public ConnectionConfig() { this.connectionId = null; this.connectionUrl = null; this.credentials = null; } + public String getConnectionId() { + return connectionId; + } + public void setConnectionId(String connectionId) { this.connectionId = connectionId; } diff --git a/v2/src/main/java/com/skyflow/config/VaultConfig.java b/v2/src/main/java/com/skyflow/config/VaultConfig.java index 9bbcf55b..7e06c391 100644 --- a/v2/src/main/java/com/skyflow/config/VaultConfig.java +++ b/v2/src/main/java/com/skyflow/config/VaultConfig.java @@ -1,9 +1,9 @@ package com.skyflow.config; import com.skyflow.enums.ENV; +import com.skyflow.utils.Utils; public class VaultConfig { - // members private String vaultId; private String clusterId; private ENV env; @@ -48,12 +48,16 @@ public void setCredentials(Credentials credentials) { this.credentials = credentials; } + public String getVaultURL() { + return Utils.getVaultURL(this.clusterId, this.env); + } + @Override public String toString() { - return "VaultConfig{" + - "vaultId='" + vaultId + '\'' + - ", clusterId='" + clusterId + '\'' + - ", env=" + env + - '}'; + return "VaultConfig {" + + "\tvaultId: '" + vaultId + "'," + + "\tclusterId: '" + clusterId + "'," + + "\tenv: " + env + + "\n}"; } } diff --git a/v2/src/main/java/com/skyflow/enums/RedactionType.java b/v2/src/main/java/com/skyflow/enums/RedactionType.java new file mode 100644 index 00000000..af86a560 --- /dev/null +++ b/v2/src/main/java/com/skyflow/enums/RedactionType.java @@ -0,0 +1,25 @@ +package com.skyflow.enums; + +import com.skyflow.generated.rest.models.RedactionEnumREDACTION; + +public enum RedactionType { + PLAIN_TEXT(RedactionEnumREDACTION.PLAIN_TEXT), + MASKED(RedactionEnumREDACTION.MASKED), + DEFAULT(RedactionEnumREDACTION.DEFAULT), + REDACTED(RedactionEnumREDACTION.REDACTED); + + private final RedactionEnumREDACTION redaction; + + RedactionType(RedactionEnumREDACTION redaction) { + this.redaction = redaction; + } + + public RedactionEnumREDACTION getRedaction() { + return redaction; + } + + @Override + public String toString() { + return String.valueOf(redaction); + } +} diff --git a/v2/src/main/java/com/skyflow/serviceaccount/Utils.java b/v2/src/main/java/com/skyflow/serviceaccount/Utils.java new file mode 100644 index 00000000..ea6ec67b --- /dev/null +++ b/v2/src/main/java/com/skyflow/serviceaccount/Utils.java @@ -0,0 +1,5 @@ +package com.skyflow.serviceaccount; + +public class Utils { + // Add service account related methods here +} diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/v2/src/main/java/com/skyflow/utils/Utils.java new file mode 100644 index 00000000..5a804f2d --- /dev/null +++ b/v2/src/main/java/com/skyflow/utils/Utils.java @@ -0,0 +1,30 @@ +package com.skyflow.utils; + +import com.skyflow.config.Credentials; +import com.skyflow.enums.ENV; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.auth.HttpBearerAuth; + +public class Utils { + public static String getVaultURL(String clusterId, ENV env) { + switch (env) { + case DEV: + return "https://" + clusterId + ".vault.skyflowapis.dev"; + case STAGE: + return "https://" + clusterId + ".vault.skyflowapis.tech"; + case SANDBOX: + return "https://" + clusterId + ".vault.skyflowapis-preview.com"; + case PROD: + default: + return "https://" + clusterId + ".vault.skyflowapis.com"; + } + } + + public static void updateBearerTokenIfExpired(ApiClient apiClient, Credentials credentials) { + HttpBearerAuth Bearer = (HttpBearerAuth) apiClient.getAuthentication("Bearer"); + // check validity of bearer token + String token = Bearer.getBearerToken(); + // generate bearer token, set in ApiClient if expired or null + Bearer.setBearerToken("eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRwczovL21hbmFnZS5za3lmbG93YXBpcy50ZWNoIiwiY2xpIjoiYzFiMWZjODViYWEzNDk0NGJkZGNkMzQzMTA2YzIyOGQiLCJleHAiOjE3MjcyNTYyMzMsImlhdCI6MTcyNzI1MjYzNCwiaXNzIjoic2EtYXV0aEBtYW5hZ2Uuc2t5Zmxvd2FwaXMudGVjaCIsImp0aSI6Imc4ZDM3MGI2MmQ0NzQ0M2JhMjdjYWIxMzYxYmU1YjI3Iiwia2V5IjoiamI4ODgxZjRiYTM5NDg0YjkzYzY5MzVjMjhhODg5MDgiLCJzY3AiOm51bGwsInN1YiI6IlNES19FMkUifQ.kbWIbPvjqnawofNgBFwAvnBknaj5_Qo4Gpav9M9XCriOhJdBgPXP9Lc7o4rPrMmmxsI_Lsj3AIK4HGzBvKiA7jLeFOFgjNuHqBJLKzwdixURnYde3bk-7aMUmMWfkg7tzz5uxhcAfgQMrEfGhxdAIzJ_7xSBjaF_2Znz9fPY9_oDSmY1gf4NI-GWZVIx6fEdGxkEWE0W-QNl9EuEeGkGaw40il77Py0XmH8RarT8aNzsdXiTIWDqzW8McdHMiB0R99ceRPAm-a2V8HJC5FyNOEKb6uSeM4ZEz05HmAgxATTAROwL0SlRiFSDG8zh1ER4pO3QJIEIIFUkX9UNqncNuA"); + } +} diff --git a/v2/src/main/java/com/skyflow/vault/controller/AuditController.java b/v2/src/main/java/com/skyflow/vault/controller/AuditController.java index 4e685f85..82629789 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/AuditController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/AuditController.java @@ -1,10 +1,20 @@ package com.skyflow.vault.controller; +import com.skyflow.config.VaultConfig; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.api.AuditApi; import com.skyflow.vault.audit.ListEventRequest; import com.skyflow.vault.audit.ListEventResponse; public class AuditController { - public AuditController() { + private VaultConfig vaultConfig; + private ApiClient apiClient; + private AuditApi auditApi; + + public AuditController(VaultConfig vaultConfig, ApiClient apiClient) { + this.vaultConfig = vaultConfig; + this.apiClient = apiClient; + this.auditApi = new AuditApi(this.apiClient); } // Check for correct return type in python interfaces diff --git a/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java b/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java index 1338ea8e..a8dfc936 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java @@ -1,10 +1,20 @@ package com.skyflow.vault.controller; +import com.skyflow.config.VaultConfig; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.api.BinLookupApi; import com.skyflow.vault.bin.GetBinRequest; import com.skyflow.vault.bin.GetBinResponse; public class BinLookupController { - public BinLookupController() { + private VaultConfig vaultConfig; + private ApiClient apiClient; + private BinLookupApi binLookupApi; + + public BinLookupController(VaultConfig vaultConfig, ApiClient apiClient) { + this.vaultConfig = vaultConfig; + this.apiClient = apiClient; + this.binLookupApi = new BinLookupApi(this.apiClient); } public GetBinResponse get(GetBinRequest getBinRequest) { diff --git a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java index 7e1d9845..3061ca3c 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java @@ -1,15 +1,34 @@ package com.skyflow.vault.controller; +import com.skyflow.config.ConnectionConfig; +import com.skyflow.config.Credentials; import com.skyflow.vault.connection.InvokeConnectionRequest; import com.skyflow.vault.connection.InvokeConnectionResponse; public class ConnectionController { - public ConnectionController() { + private ConnectionConfig connectionConfig; + private Credentials commonCredentials; + + public ConnectionController(ConnectionConfig connectionConfig, Credentials credentials) { + this.connectionConfig = connectionConfig; + this.commonCredentials = credentials; + } + + public void setCommonCredentials(Credentials commonCredentials) { + this.commonCredentials = commonCredentials; + } + + public ConnectionConfig getConnectionConfig() { + return connectionConfig; + } + + public void setConnectionConfig(ConnectionConfig connectionConfig) { + this.connectionConfig = connectionConfig; } // check in python interfaces public InvokeConnectionResponse invoke(InvokeConnectionRequest invokeConnectionRequest) { - // invoke the connection + // invoke the connection return null; } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/DetectController.java b/v2/src/main/java/com/skyflow/vault/controller/DetectController.java index d5aa7750..5cbf4f02 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/DetectController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/DetectController.java @@ -1,10 +1,17 @@ package com.skyflow.vault.controller; +import com.skyflow.config.VaultConfig; +import com.skyflow.generated.rest.ApiClient; import com.skyflow.vault.detect.DeIdentifyRequest; import com.skyflow.vault.detect.DeIdentifyResponse; public class DetectController { - public DetectController() { + private VaultConfig vaultConfig; + private ApiClient apiClient; + + public DetectController(VaultConfig vaultConfig, ApiClient apiClient) { + this.vaultConfig = vaultConfig; + this.apiClient = apiClient; } // should return detect controller diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index 3fbbe01d..a7100f13 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -1,25 +1,46 @@ package com.skyflow.vault.controller; +import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.api.RecordsApi; +import com.skyflow.generated.rest.api.TokensApi; +import com.skyflow.generated.rest.models.V1DetokenizePayload; +import com.skyflow.generated.rest.models.V1DetokenizeResponse; +import com.skyflow.utils.Utils; import com.skyflow.vault.audit.ListEventRequest; import com.skyflow.vault.bin.GetBinRequest; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.InsertResponse; import com.skyflow.vault.detect.DeIdentifyRequest; import com.skyflow.vault.tokens.DetokenizeRequest; +import com.skyflow.vault.tokens.DetokenizeResponse; public class VaultController { - private final AuditController auditController; - private final BinLookupController binLookupController; - private final DetectController detectController; - // members + private final RecordsApi recordsApi; + private final TokensApi tokensApi; + private final ApiClient apiClient; + private DetectController detectController; + private AuditController auditController; + private BinLookupController binLookupController; private VaultConfig vaultConfig; + private Credentials commonCredentials; - public VaultController(VaultConfig vaultConfig) { + public VaultController(VaultConfig vaultConfig, Credentials credentials) { this.vaultConfig = vaultConfig; - this.auditController = new AuditController(); - this.binLookupController = new BinLookupController(); - this.detectController = new DetectController(); + this.commonCredentials = credentials; + this.auditController = null; + this.binLookupController = null; + this.detectController = null; + + this.apiClient = new ApiClient(); + this.apiClient.setBasePath(this.vaultConfig.getVaultURL()); + this.tokensApi = new TokensApi(this.apiClient); + this.recordsApi = new RecordsApi(this.apiClient); + } + + public void setCommonCredentials(Credentials commonCredentials) { + this.commonCredentials = commonCredentials; } public VaultConfig getVaultConfig() { @@ -34,8 +55,18 @@ public InsertResponse insert(InsertRequest insertRequest) { return null; } - public Object detokenize(DetokenizeRequest detokenizeRequest) { - return null; + public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) { + V1DetokenizeResponse result = null; + try { + // prioritise credentials here + Utils.updateBearerTokenIfExpired(this.apiClient, this.commonCredentials); + V1DetokenizePayload payload = detokenizeRequest.getDetokenizePayload(); + result = this.tokensApi.recordServiceDetokenize(this.vaultConfig.getVaultId(), payload); + System.out.println(result); + } catch (Exception e) { + e.printStackTrace(); + } + return new DetokenizeResponse(result); } public Object get(Object getRequest) { @@ -63,20 +94,23 @@ public Object tokenize(Object tokenizeRequest) { } public BinLookupController lookUpBin(GetBinRequest getBinRequest) { - // cache bin lookup object if created - // return bin lookup object + if (this.binLookupController == null) { + this.binLookupController = new BinLookupController(this.vaultConfig, this.apiClient); + } return this.binLookupController; } public AuditController audit(ListEventRequest listEventRequest) { - // cache audit object if created - // return audit object + if (this.auditController == null) { + this.auditController = new AuditController(this.vaultConfig, this.apiClient); + } return this.auditController; } public DetectController detect(DeIdentifyRequest deIdentifyRequest) { - // cache detect object if created - // return detect object + if (this.detectController == null) { + this.detectController = new DetectController(this.vaultConfig, this.apiClient); + } return this.detectController; } } diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java index 84971e0b..3cc4bbff 100644 --- a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java @@ -1,11 +1,107 @@ package com.skyflow.vault.data; +import com.skyflow.enums.Byot; + +import java.util.ArrayList; +import java.util.HashMap; + public class InsertRequest { - // members + private final String table; + private final ArrayList> data; + private final Boolean returnTokens; + private final String upsert; + private final Boolean homogeneous; + private final Boolean tokenMode; + private final Byot tokenStrict; + + private InsertRequest(InsertRequestBuilder builder) { + this.table = builder.table; + this.data = builder.data; + this.returnTokens = builder.returnTokens; + this.upsert = builder.upsert; + this.homogeneous = builder.homogeneous; + this.tokenMode = builder.tokenMode; + this.tokenStrict = builder.tokenStrict; + } + + public static InsertRequestBuilder builder() { + return new InsertRequestBuilder(); + } + + public String getTable() { + return table; + } + + public ArrayList> getData() { + return this.data; + } + + public Boolean getReturnTokens() { + return returnTokens; + } + + public String getUpsert() { + return upsert; + } - // constructor - public InsertRequest() { + public Boolean getHomogeneous() { + return homogeneous; } - // getters ans setters + public Boolean getTokenMode() { + return tokenMode; + } + + public Byot getTokenStrict() { + return tokenStrict; + } + + public static final class InsertRequestBuilder { + private String table; + private ArrayList> data; + private Boolean returnTokens; + private String upsert; + private Boolean homogeneous; + private Boolean tokenMode; + private Byot tokenStrict; + + public InsertRequestBuilder table(String table) { + this.table = table; + return this; + } + + public InsertRequestBuilder data(ArrayList> data) { + this.data = data; + return this; + } + + public InsertRequestBuilder returnTokens(Boolean returnTokens) { + this.returnTokens = returnTokens; + return this; + } + + public InsertRequestBuilder upsert(String upsert) { + this.upsert = upsert; + return this; + } + + public InsertRequestBuilder homogeneous(Boolean homogeneous) { + this.homogeneous = homogeneous; + return this; + } + + public InsertRequestBuilder tokenMode(Boolean tokenMode) { + this.tokenMode = tokenMode; + return this; + } + + public InsertRequestBuilder tokenStrict(Byot tokenStrict) { + this.tokenStrict = tokenStrict; + return this; + } + + public InsertRequest build() { + return new InsertRequest(this); + } + } } diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java index 631353a7..d01cf76f 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java @@ -1,11 +1,74 @@ package com.skyflow.vault.tokens; +import com.skyflow.enums.RedactionType; +import com.skyflow.generated.rest.models.V1DetokenizePayload; +import com.skyflow.generated.rest.models.V1DetokenizeRecordRequest; + +import java.util.ArrayList; + public class DetokenizeRequest { - // members + private final DetokenizeRequestBuilder builder; + + private DetokenizeRequest(DetokenizeRequestBuilder builder) { + this.builder = builder; + } + + public static DetokenizeRequestBuilder builder() { + return new DetokenizeRequestBuilder(); + } + + public ArrayList getTokens() { + return this.builder.tokens; + } + + public RedactionType getRedactionType() { + return this.builder.redactionType; + } + + public Boolean getContinueOnError() { + return this.builder.continueOnError; + } - // constructor - public DetokenizeRequest() { + public V1DetokenizePayload getDetokenizePayload() { + V1DetokenizePayload payload = new V1DetokenizePayload(); + payload.setContinueOnError(this.getContinueOnError()); + for (String token : this.getTokens()) { + V1DetokenizeRecordRequest recordRequest = new V1DetokenizeRecordRequest(); + recordRequest.setToken(token); + recordRequest.setRedaction(this.getRedactionType().getRedaction()); + payload.addDetokenizationParametersItem(recordRequest); + } + return payload; } - // getters ans setters + public static final class DetokenizeRequestBuilder { + private ArrayList tokens; + private RedactionType redactionType; + private Boolean continueOnError; + + public DetokenizeRequestBuilder() { + this.tokens = new ArrayList<>(); + this.redactionType = RedactionType.PLAIN_TEXT; + this.continueOnError = true; + } + + public DetokenizeRequestBuilder tokens(ArrayList tokens) { + this.tokens = tokens; + return this; + } + + public DetokenizeRequestBuilder redactionType(RedactionType redactionType) { + this.redactionType = redactionType; + return this; + } + + public DetokenizeRequestBuilder continueOnError(Boolean continueOnError) { + this.continueOnError = continueOnError; + return this; + } + + public DetokenizeRequest build() { + return new DetokenizeRequest(this); + } + } } diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java index e62cbf42..3ec5eeee 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java @@ -1,10 +1,72 @@ package com.skyflow.vault.tokens; +import com.skyflow.generated.rest.models.V1DetokenizeRecordResponse; +import com.skyflow.generated.rest.models.V1DetokenizeResponse; + +import java.util.ArrayList; +import java.util.List; + public class DetokenizeResponse { - // members + private final V1DetokenizeResponse generatedResponse; + private final ArrayList records; + + public DetokenizeResponse(V1DetokenizeResponse response) { + this.generatedResponse = response; + this.records = new ArrayList<>(); + this.createResponse(); + } + + public ArrayList getRecords() { + return records; + } + + private void createResponse() { + List records = this.generatedResponse.getRecords(); + for (V1DetokenizeRecordResponse record : records) { + DetokenizeRecordResponse recordResponse = new DetokenizeRecordResponse(); + recordResponse.setValue(record.getValue()); + recordResponse.setType(record.getValueType().getValue()); + this.records.add(recordResponse); + } + } - public DetokenizeResponse() { + @Override + public String toString() { + return "DetokenizeResponse {" + + "\n\t" + toIndentedString(records) + + "\n}"; } - // getters ans setters + private String toIndentedString(Object o) { + return o.toString().replace("\n", "\n\t"); + } + + public class DetokenizeRecordResponse { + private String value; + private String type; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + @Override + public String toString() { + return "DetokenizeRecordResponse {" + + "\n\t" + "value: '" + value + "'," + + "\n\t" + "type: '" + type + "'," + + "\n}"; + } + } } From 9eba2dd2dfe0047bef5af65c2c442423b0f361d5 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Tue, 1 Oct 2024 16:52:17 +0530 Subject: [PATCH 08/68] SK-1677 Delete old vault controller implementation --- .../vault/controller/VaultController.java | 116 ------------------ 1 file changed, 116 deletions(-) delete mode 100644 v2/src/main/java/com/skyflow/vault/controller/VaultController.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java deleted file mode 100644 index a7100f13..00000000 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.skyflow.vault.controller; - -import com.skyflow.config.Credentials; -import com.skyflow.config.VaultConfig; -import com.skyflow.generated.rest.ApiClient; -import com.skyflow.generated.rest.api.RecordsApi; -import com.skyflow.generated.rest.api.TokensApi; -import com.skyflow.generated.rest.models.V1DetokenizePayload; -import com.skyflow.generated.rest.models.V1DetokenizeResponse; -import com.skyflow.utils.Utils; -import com.skyflow.vault.audit.ListEventRequest; -import com.skyflow.vault.bin.GetBinRequest; -import com.skyflow.vault.data.InsertRequest; -import com.skyflow.vault.data.InsertResponse; -import com.skyflow.vault.detect.DeIdentifyRequest; -import com.skyflow.vault.tokens.DetokenizeRequest; -import com.skyflow.vault.tokens.DetokenizeResponse; - -public class VaultController { - private final RecordsApi recordsApi; - private final TokensApi tokensApi; - private final ApiClient apiClient; - private DetectController detectController; - private AuditController auditController; - private BinLookupController binLookupController; - private VaultConfig vaultConfig; - private Credentials commonCredentials; - - public VaultController(VaultConfig vaultConfig, Credentials credentials) { - this.vaultConfig = vaultConfig; - this.commonCredentials = credentials; - this.auditController = null; - this.binLookupController = null; - this.detectController = null; - - this.apiClient = new ApiClient(); - this.apiClient.setBasePath(this.vaultConfig.getVaultURL()); - this.tokensApi = new TokensApi(this.apiClient); - this.recordsApi = new RecordsApi(this.apiClient); - } - - public void setCommonCredentials(Credentials commonCredentials) { - this.commonCredentials = commonCredentials; - } - - public VaultConfig getVaultConfig() { - return vaultConfig; - } - - public void setVaultConfig(VaultConfig vaultConfig) { - this.vaultConfig = vaultConfig; - } - - public InsertResponse insert(InsertRequest insertRequest) { - return null; - } - - public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) { - V1DetokenizeResponse result = null; - try { - // prioritise credentials here - Utils.updateBearerTokenIfExpired(this.apiClient, this.commonCredentials); - V1DetokenizePayload payload = detokenizeRequest.getDetokenizePayload(); - result = this.tokensApi.recordServiceDetokenize(this.vaultConfig.getVaultId(), payload); - System.out.println(result); - } catch (Exception e) { - e.printStackTrace(); - } - return new DetokenizeResponse(result); - } - - public Object get(Object getRequest) { - return null; - } - - public Object update(Object updateRequest) { - return null; - } - - public Object delete(Object deleteRequest) { - return null; - } - - public Object uploadFile(Object uploadFileRequest) { - return null; - } - - public Object query(Object queryRequest) { - return null; - } - - public Object tokenize(Object tokenizeRequest) { - return null; - } - - public BinLookupController lookUpBin(GetBinRequest getBinRequest) { - if (this.binLookupController == null) { - this.binLookupController = new BinLookupController(this.vaultConfig, this.apiClient); - } - return this.binLookupController; - } - - public AuditController audit(ListEventRequest listEventRequest) { - if (this.auditController == null) { - this.auditController = new AuditController(this.vaultConfig, this.apiClient); - } - return this.auditController; - } - - public DetectController detect(DeIdentifyRequest deIdentifyRequest) { - if (this.detectController == null) { - this.detectController = new DetectController(this.vaultConfig, this.apiClient); - } - return this.detectController; - } -} From f7ee304d48a8897400519a1cb9768eb5e01bd298 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Tue, 1 Oct 2024 20:43:30 +0530 Subject: [PATCH 09/68] SK-1677 Client Initilisation and Credentials priorotisation --- pom.xml | 58 +++++++++++- v2/src/main/java/com/skyflow/Skyflow.java | 89 ++++++++++-------- v2/src/main/java/com/skyflow/VaultClient.java | 91 +++++++++++++++++++ v2/src/main/java/com/skyflow/utils/Utils.java | 4 +- .../vault/controller/AuditController.java | 13 +-- .../vault/controller/BinLookupController.java | 11 +-- .../vault/controller/DetectController.java | 8 +- .../vault/controller/VaultController.java | 87 ++++++++++++++++++ 8 files changed, 295 insertions(+), 66 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/VaultClient.java create mode 100644 v2/src/main/java/com/skyflow/vault/controller/VaultController.java diff --git a/pom.xml b/pom.xml index 1b5060b0..dc4fd6c4 100644 --- a/pom.xml +++ b/pom.xml @@ -32,8 +32,11 @@ - 7 - 7 + 8 + 8 + 4.12.0 + 2.10.1 + 1.9.0 @@ -48,6 +51,36 @@ + + io.github.cdimascio + dotenv-java + 3.0.0 + + + com.google.code.findbugs + jsr305 + 3.0.2 + + + io.gsonfire + gson-fire + ${gson-fire-version} + + + com.google.code.gson + gson + ${gson-version} + + + com.squareup.okhttp3 + okhttp + ${okhttp-version} + + + com.squareup.okhttp3 + logging-interceptor + ${okhttp-version} + com.fasterxml.jackson.core jackson-core @@ -174,6 +207,20 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + + test-jar + + + + + + org.apache.maven.plugins maven-gpg-plugin @@ -197,5 +244,12 @@ + + + maven_central + Maven Central + https://repo.maven.apache.org/maven2/ + + \ No newline at end of file diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index 3d1efd39..f9d39d6d 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -3,6 +3,7 @@ import com.skyflow.config.ConnectionConfig; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; +import com.skyflow.enums.ENV; import com.skyflow.enums.LogLevel; import com.skyflow.errors.SkyflowException; import com.skyflow.vault.controller.ConnectionController; @@ -10,7 +11,7 @@ import java.util.LinkedHashMap; -public class Skyflow { +public final class Skyflow { private final SkyflowClientBuilder builder; private Skyflow(SkyflowClientBuilder builder) { @@ -28,7 +29,17 @@ public Skyflow addVaultConfig(VaultConfig vaultConfig) throws SkyflowException { public VaultConfig getVaultConfig(String vaultId) { // get vault config with vault id - return this.builder.vaultsMap.get(vaultId).getVaultConfig(); + return this.builder.vaultConfigMap.get(vaultId); + } + + public Skyflow updateVaultConfig(VaultConfig vaultConfig) throws Exception { + this.builder.updateVaultConfig(vaultConfig); + return this; + } + + public Skyflow removeVaultConfig(String vaultId) throws SkyflowException { + this.builder.removeVaultConfig(vaultId); + return this; } public Skyflow addConnectionConfig(ConnectionConfig connectionConfig) { @@ -41,23 +52,24 @@ public ConnectionConfig getConnectionConfig(String connectionId) { return this.builder.connectionsMap.get(connectionId).getConnectionConfig(); } - public Skyflow addSkyflowCredentials(Credentials credentials) { - this.builder.addSkyflowCredentials(credentials); + public Skyflow updateConnectionConfig(ConnectionConfig connectionConfig) { + this.builder.updateConnectionConfig(connectionConfig); return this; } - public LogLevel getLogLevel() { - return this.builder.logLevel; + public Skyflow removeConnectionConfig(String connectionId) { + this.builder.removeConnectionConfig(connectionId); + return this; } // in case no id is passed, return first vault controller public VaultController vault() { - String vaultId = (String) this.builder.vaultsMap.keySet().toArray()[0]; + String vaultId = (String) this.builder.vaultClientsMap.keySet().toArray()[0]; return this.vault(vaultId); } public VaultController vault(String vaultId) { - return this.builder.vaultsMap.get(vaultId); + return this.builder.vaultClientsMap.get(vaultId); } // in case no id is passed, return first connection controller @@ -71,48 +83,51 @@ public ConnectionController connection(String connectionId) { } public static final class SkyflowClientBuilder { - private final LinkedHashMap vaultsMap; private final LinkedHashMap connectionsMap; + private final LinkedHashMap vaultClientsMap; + private final LinkedHashMap vaultConfigMap; private Credentials skyflowCredentials; private LogLevel logLevel; public SkyflowClientBuilder() { - this.vaultsMap = new LinkedHashMap<>(); + this.vaultClientsMap = new LinkedHashMap<>(); + this.vaultConfigMap = new LinkedHashMap<>(); this.connectionsMap = new LinkedHashMap<>(); this.skyflowCredentials = null; this.logLevel = LogLevel.ERROR; } - public SkyflowClientBuilder addVaultConfig(VaultConfig vaultConfig) { + public SkyflowClientBuilder addVaultConfig(VaultConfig vaultConfig) throws SkyflowException { // check if vaultConfig already exists - if (this.vaultsMap.containsKey(vaultConfig.getVaultId())) { + if (this.vaultClientsMap.containsKey(vaultConfig.getVaultId())) { // display error log, throw error, or both } else { - this.vaultsMap.put(vaultConfig.getVaultId(), new VaultController(vaultConfig, this.skyflowCredentials)); + this.vaultConfigMap.put(vaultConfig.getVaultId(), vaultConfig); + this.vaultClientsMap.put(vaultConfig.getVaultId(), new VaultController(vaultConfig, this.skyflowCredentials)); } return this; } public SkyflowClientBuilder updateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { - if (this.vaultsMap.containsKey(vaultConfig.getVaultId())) { - VaultController controller = this.vaultsMap.get(vaultConfig.getVaultId()); - controller.setVaultConfig(vaultConfig); + if (this.vaultClientsMap.containsKey(vaultConfig.getVaultId())) { + VaultConfig updatedConfig = findAndUpdateVaultConfig(vaultConfig); + this.vaultClientsMap.get(updatedConfig.getVaultId()).updateVaultConfig(updatedConfig); } else { // display error log, throw error, or both } return this; } - public SkyflowClientBuilder removeVaultConfig(String vaultId) { - if (this.vaultsMap.containsKey(vaultId)) { - this.vaultsMap.remove(vaultId); + public SkyflowClientBuilder removeVaultConfig(String vaultId) throws SkyflowException { + if (this.vaultClientsMap.containsKey(vaultId)) { + this.vaultClientsMap.remove(vaultId); + this.vaultConfigMap.remove(vaultId); } else { // display error log, throw error, or both } return this; } - public SkyflowClientBuilder addConnectionConfig(ConnectionConfig connectionConfig) { // check if connectionConfig already exists if (this.connectionsMap.containsKey(connectionConfig.getConnectionId())) { @@ -146,19 +161,7 @@ public SkyflowClientBuilder removeConnectionConfig(String connectionId) { public SkyflowClientBuilder addSkyflowCredentials(Credentials credentials) { // set credentials and update in vault controllers this.skyflowCredentials = credentials; - for (VaultController vault : this.vaultsMap.values()) { - vault.setCommonCredentials(this.skyflowCredentials); - } - for (ConnectionController controller : this.connectionsMap.values()) { - controller.setCommonCredentials(this.skyflowCredentials); - } - return this; - } - - public SkyflowClientBuilder updateSkyflowCredentials(Credentials credentials) { - // set credentials and update in vault and connection controllers - this.skyflowCredentials = credentials; - for (VaultController vault : this.vaultsMap.values()) { + for (VaultController vault : this.vaultClientsMap.values()) { vault.setCommonCredentials(this.skyflowCredentials); } for (ConnectionController controller : this.connectionsMap.values()) { @@ -172,14 +175,24 @@ public SkyflowClientBuilder setLogLevel(LogLevel logLevel) { return this; } - public SkyflowClientBuilder updateLogLevel(LogLevel logLevel) { - this.logLevel = logLevel; - return this; - } - public Skyflow build() { // return built skyflow client instance return new Skyflow(this); } + + private VaultConfig findAndUpdateVaultConfig(VaultConfig vaultConfig) { + VaultConfig previousConfig = this.vaultConfigMap.get(vaultConfig.getVaultId()); + if (previousConfig == null) { + // display error log, throw error, or both + } else { + ENV env = vaultConfig.getEnv() != null ? vaultConfig.getEnv() : previousConfig.getEnv(); + String clusterId = vaultConfig.getClusterId() != null ? vaultConfig.getClusterId() : previousConfig.getClusterId(); + Credentials credentials = vaultConfig.getCredentials() != null ? vaultConfig.getCredentials() : previousConfig.getCredentials(); + previousConfig.setEnv(env); + previousConfig.setClusterId(clusterId); + previousConfig.setCredentials(credentials); + } + return previousConfig; + } } } diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java new file mode 100644 index 00000000..11b31bc9 --- /dev/null +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -0,0 +1,91 @@ +package com.skyflow; + +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.ENV; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.api.RecordsApi; +import com.skyflow.generated.rest.api.TokensApi; +import com.skyflow.utils.Utils; +import io.github.cdimascio.dotenv.Dotenv; + +public class VaultClient { + private final RecordsApi recordsApi; + private final TokensApi tokensApi; + private final ApiClient apiClient; + private final VaultConfig vaultConfig; + private Credentials commonCredentials; + private Credentials finalCredentials; + + protected VaultClient(VaultConfig vaultConfig, Credentials credentials) { + super(); + this.vaultConfig = vaultConfig; + this.commonCredentials = credentials; + this.apiClient = new ApiClient(); + this.tokensApi = new TokensApi(this.apiClient); + this.recordsApi = new RecordsApi(this.apiClient); + updateVaultURL(); + prioritiseCredentials(); + } + + protected Credentials getFinalCredentials() { + return finalCredentials; + } + + protected RecordsApi getRecordsApi() { + return recordsApi; + } + + protected TokensApi getTokensApi() { + return tokensApi; + } + + protected ApiClient getApiClient() { + return apiClient; + } + + protected VaultConfig getVaultConfig() { + return vaultConfig; + } + + protected void updateVaultConfig(VaultConfig vaultConfig) { + ENV env = vaultConfig.getEnv() != null ? vaultConfig.getEnv() : this.vaultConfig.getEnv(); + String clusterId = vaultConfig.getClusterId() != null ? vaultConfig.getClusterId() : this.vaultConfig.getClusterId(); + Credentials credentials = vaultConfig.getCredentials() != null ? vaultConfig.getCredentials() : this.vaultConfig.getCredentials(); + this.vaultConfig.setEnv(env); + this.vaultConfig.setClusterId(clusterId); + this.vaultConfig.setCredentials(credentials); + updateVaultURL(); + } + + protected void setCommonCredentials(Credentials commonCredentials) { + this.commonCredentials = commonCredentials; + prioritiseCredentials(); + } + + private void updateVaultURL() { + String vaultURL = Utils.getVaultURL(this.vaultConfig.getClusterId(), this.vaultConfig.getEnv()); + this.apiClient.setBasePath(vaultURL); + } + + private void prioritiseCredentials() { + try { + if (this.vaultConfig.getCredentials() != null) { + this.finalCredentials = this.vaultConfig.getCredentials(); + } else if (this.commonCredentials != null) { + this.finalCredentials = this.commonCredentials; + } else { + Dotenv dotenv = Dotenv.load(); + String sysCredentials = dotenv.get("SKYFLOW_CREDENTIALS"); + if (sysCredentials == null) { + // throw error for not passing any credentials + } else { + this.finalCredentials = new Credentials(); + this.finalCredentials.setCredentialsString(sysCredentials); + } + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/v2/src/main/java/com/skyflow/utils/Utils.java index 5a804f2d..90fb8a48 100644 --- a/v2/src/main/java/com/skyflow/utils/Utils.java +++ b/v2/src/main/java/com/skyflow/utils/Utils.java @@ -23,8 +23,8 @@ public static String getVaultURL(String clusterId, ENV env) { public static void updateBearerTokenIfExpired(ApiClient apiClient, Credentials credentials) { HttpBearerAuth Bearer = (HttpBearerAuth) apiClient.getAuthentication("Bearer"); // check validity of bearer token - String token = Bearer.getBearerToken(); + // String token = Bearer.getBearerToken(); // generate bearer token, set in ApiClient if expired or null - Bearer.setBearerToken("eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRwczovL21hbmFnZS5za3lmbG93YXBpcy50ZWNoIiwiY2xpIjoiYzFiMWZjODViYWEzNDk0NGJkZGNkMzQzMTA2YzIyOGQiLCJleHAiOjE3MjcyNTYyMzMsImlhdCI6MTcyNzI1MjYzNCwiaXNzIjoic2EtYXV0aEBtYW5hZ2Uuc2t5Zmxvd2FwaXMudGVjaCIsImp0aSI6Imc4ZDM3MGI2MmQ0NzQ0M2JhMjdjYWIxMzYxYmU1YjI3Iiwia2V5IjoiamI4ODgxZjRiYTM5NDg0YjkzYzY5MzVjMjhhODg5MDgiLCJzY3AiOm51bGwsInN1YiI6IlNES19FMkUifQ.kbWIbPvjqnawofNgBFwAvnBknaj5_Qo4Gpav9M9XCriOhJdBgPXP9Lc7o4rPrMmmxsI_Lsj3AIK4HGzBvKiA7jLeFOFgjNuHqBJLKzwdixURnYde3bk-7aMUmMWfkg7tzz5uxhcAfgQMrEfGhxdAIzJ_7xSBjaF_2Znz9fPY9_oDSmY1gf4NI-GWZVIx6fEdGxkEWE0W-QNl9EuEeGkGaw40il77Py0XmH8RarT8aNzsdXiTIWDqzW8McdHMiB0R99ceRPAm-a2V8HJC5FyNOEKb6uSeM4ZEz05HmAgxATTAROwL0SlRiFSDG8zh1ER4pO3QJIEIIFUkX9UNqncNuA"); + Bearer.setBearerToken("eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRwczovL21hbmFnZS5za3lmbG93YXBpcy50ZWNoIiwiY2xpIjoiYzFiMWZjODViYWEzNDk0NGJkZGNkMzQzMTA2YzIyOGQiLCJleHAiOjE3Mjc3ODk0OTUsImlhdCI6MTcyNzc4NTg5NiwiaXNzIjoic2EtYXV0aEBtYW5hZ2Uuc2t5Zmxvd2FwaXMudGVjaCIsImp0aSI6InQxNjhjNTlhYWIzNDRiZTZiMDE0ZWY3MzY4MDlhMjZhIiwia2V5IjoiamI4ODgxZjRiYTM5NDg0YjkzYzY5MzVjMjhhODg5MDgiLCJzY3AiOm51bGwsInN1YiI6IlNES19FMkUifQ.EmCYoR1ieDdseC4XTWOA9oBD7EJPSd5kz4Oka7mPFqLNW4Ms21GMhXll66Q3seKXZH-_DiLR8d3juGSx3nnZZDaAmNANiPfrvNCF66LU-587RDzzIowL-I5qhGigGG8dLh2FICf0eEoRAvdtiYSolWjErbhd-o5k1whxdCZ2cU_8JHiqq3hr48Gy1pVcFYycJ_oj0bxrOqn-r3vfdv_ChruLRQ2xh74qevkzEePg3XSkuniVDemhPp_fVOW4RE6TGYo6vEaWsY6NoPqx21CL49U8avqkIISZm7Uo5PO-sfaRDh3XCy-QFvvR7KoWiMTGj8cHcIkV5uusCV-S8CFIvQ"); } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/AuditController.java b/v2/src/main/java/com/skyflow/vault/controller/AuditController.java index 82629789..9d605e6c 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/AuditController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/AuditController.java @@ -1,25 +1,20 @@ package com.skyflow.vault.controller; -import com.skyflow.config.VaultConfig; import com.skyflow.generated.rest.ApiClient; import com.skyflow.generated.rest.api.AuditApi; import com.skyflow.vault.audit.ListEventRequest; import com.skyflow.vault.audit.ListEventResponse; public class AuditController { - private VaultConfig vaultConfig; - private ApiClient apiClient; - private AuditApi auditApi; + private final AuditApi auditApi; - public AuditController(VaultConfig vaultConfig, ApiClient apiClient) { - this.vaultConfig = vaultConfig; - this.apiClient = apiClient; - this.auditApi = new AuditApi(this.apiClient); + public AuditController(ApiClient apiClient) { + this.auditApi = new AuditApi(apiClient); } // Check for correct return type in python interfaces public ListEventResponse list(ListEventRequest listEventRequest) { - // return audit events + // return audit events return null; } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java b/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java index a8dfc936..e5d9cc62 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java @@ -1,24 +1,19 @@ package com.skyflow.vault.controller; -import com.skyflow.config.VaultConfig; import com.skyflow.generated.rest.ApiClient; import com.skyflow.generated.rest.api.BinLookupApi; import com.skyflow.vault.bin.GetBinRequest; import com.skyflow.vault.bin.GetBinResponse; public class BinLookupController { - private VaultConfig vaultConfig; - private ApiClient apiClient; private BinLookupApi binLookupApi; - public BinLookupController(VaultConfig vaultConfig, ApiClient apiClient) { - this.vaultConfig = vaultConfig; - this.apiClient = apiClient; - this.binLookupApi = new BinLookupApi(this.apiClient); + public BinLookupController(ApiClient apiClient) { + this.binLookupApi = new BinLookupApi(apiClient); } public GetBinResponse get(GetBinRequest getBinRequest) { - // return bin lookup response (card metadata associated with BIN) + // return bin lookup response (card metadata associated with BIN) return null; } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/DetectController.java b/v2/src/main/java/com/skyflow/vault/controller/DetectController.java index 5cbf4f02..5b507d89 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/DetectController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/DetectController.java @@ -1,17 +1,11 @@ package com.skyflow.vault.controller; -import com.skyflow.config.VaultConfig; import com.skyflow.generated.rest.ApiClient; import com.skyflow.vault.detect.DeIdentifyRequest; import com.skyflow.vault.detect.DeIdentifyResponse; public class DetectController { - private VaultConfig vaultConfig; - private ApiClient apiClient; - - public DetectController(VaultConfig vaultConfig, ApiClient apiClient) { - this.vaultConfig = vaultConfig; - this.apiClient = apiClient; + public DetectController(ApiClient apiClient) { } // should return detect controller diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java new file mode 100644 index 00000000..9810eeb7 --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -0,0 +1,87 @@ +package com.skyflow.vault.controller; + +import com.skyflow.VaultClient; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.generated.rest.models.V1DetokenizePayload; +import com.skyflow.generated.rest.models.V1DetokenizeResponse; +import com.skyflow.utils.Utils; +import com.skyflow.vault.data.InsertRequest; +import com.skyflow.vault.data.InsertResponse; +import com.skyflow.vault.tokens.DetokenizeRequest; +import com.skyflow.vault.tokens.DetokenizeResponse; + +public final class VaultController extends VaultClient { + private DetectController detectController; + private AuditController auditController; + private BinLookupController binLookupController; + + public VaultController(VaultConfig vaultConfig, Credentials credentials) { + super(vaultConfig, credentials); + this.auditController = null; + this.binLookupController = null; + this.detectController = null; + } + + public InsertResponse insert(InsertRequest insertRequest) { + return null; + } + + public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) { + System.out.println(super.getVaultConfig()); + V1DetokenizeResponse result = null; + try { + Utils.updateBearerTokenIfExpired(super.getApiClient(), super.getFinalCredentials()); + V1DetokenizePayload payload = detokenizeRequest.getDetokenizePayload(); + result = super.getTokensApi().recordServiceDetokenize(super.getVaultConfig().getVaultId(), payload); + } catch (Exception e) { + e.printStackTrace(); + } + return new DetokenizeResponse(result); + } + + public Object get(Object getRequest) { + return null; + } + + public Object update(Object updateRequest) { + return null; + } + + public Object delete(Object deleteRequest) { + return null; + } + + public Object uploadFile(Object uploadFileRequest) { + return null; + } + + public Object query(Object queryRequest) { + return null; + } + + public Object tokenize(Object tokenizeRequest) { + return null; + } + + public BinLookupController lookUpBin() { + if (this.binLookupController == null) { + this.binLookupController = new BinLookupController(super.getApiClient()); + } + return this.binLookupController; + } + + public AuditController audit() { + if (this.auditController == null) { + this.auditController = new AuditController(super.getApiClient()); + } + return this.auditController; + } + + public DetectController detect() { + if (this.detectController == null) { + this.detectController = new DetectController(super.getApiClient()); + } + return this.detectController; + } +} From 786055ddc5944ed6a18ba747665532d202bbf174 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Thu, 3 Oct 2024 11:07:53 +0530 Subject: [PATCH 10/68] SK-1677 Client initilisation and credentials prioritisation --- v2/src/main/java/com/skyflow/VaultClient.java | 10 +++++----- v2/src/main/java/com/skyflow/config/Credentials.java | 8 ++++++-- v2/src/main/java/com/skyflow/config/VaultConfig.java | 6 +++--- v2/src/main/java/com/skyflow/serviceaccount/Utils.java | 5 ----- 4 files changed, 14 insertions(+), 15 deletions(-) delete mode 100644 v2/src/main/java/com/skyflow/serviceaccount/Utils.java diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index 11b31bc9..f725c510 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -48,6 +48,11 @@ protected VaultConfig getVaultConfig() { return vaultConfig; } + protected void setCommonCredentials(Credentials commonCredentials) { + this.commonCredentials = commonCredentials; + prioritiseCredentials(); + } + protected void updateVaultConfig(VaultConfig vaultConfig) { ENV env = vaultConfig.getEnv() != null ? vaultConfig.getEnv() : this.vaultConfig.getEnv(); String clusterId = vaultConfig.getClusterId() != null ? vaultConfig.getClusterId() : this.vaultConfig.getClusterId(); @@ -58,11 +63,6 @@ protected void updateVaultConfig(VaultConfig vaultConfig) { updateVaultURL(); } - protected void setCommonCredentials(Credentials commonCredentials) { - this.commonCredentials = commonCredentials; - prioritiseCredentials(); - } - private void updateVaultURL() { String vaultURL = Utils.getVaultURL(this.vaultConfig.getClusterId(), this.vaultConfig.getEnv()); this.apiClient.setBasePath(vaultURL); diff --git a/v2/src/main/java/com/skyflow/config/Credentials.java b/v2/src/main/java/com/skyflow/config/Credentials.java index 7293bbff..43deda99 100644 --- a/v2/src/main/java/com/skyflow/config/Credentials.java +++ b/v2/src/main/java/com/skyflow/config/Credentials.java @@ -7,15 +7,19 @@ public class Credentials { private ArrayList roles; private String context; private String credentialsString; + private String token; - // constructor - Credentials() { + public Credentials() { this.path = null; this.roles = new ArrayList<>(); this.context = null; this.credentialsString = null; } + public void setToken(String token) { + this.token = token; + } + public void setPath(String path) { this.path = path; } diff --git a/v2/src/main/java/com/skyflow/config/VaultConfig.java b/v2/src/main/java/com/skyflow/config/VaultConfig.java index 7e06c391..49bfa5e2 100644 --- a/v2/src/main/java/com/skyflow/config/VaultConfig.java +++ b/v2/src/main/java/com/skyflow/config/VaultConfig.java @@ -55,9 +55,9 @@ public String getVaultURL() { @Override public String toString() { return "VaultConfig {" + - "\tvaultId: '" + vaultId + "'," + - "\tclusterId: '" + clusterId + "'," + - "\tenv: " + env + + "\n\tvaultId: '" + vaultId + "'," + + "\n\tclusterId: '" + clusterId + "'," + + "\n\tenv: " + env + "\n}"; } } diff --git a/v2/src/main/java/com/skyflow/serviceaccount/Utils.java b/v2/src/main/java/com/skyflow/serviceaccount/Utils.java deleted file mode 100644 index ea6ec67b..00000000 --- a/v2/src/main/java/com/skyflow/serviceaccount/Utils.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.skyflow.serviceaccount; - -public class Utils { - // Add service account related methods here -} From 6049e1c99dd4becf58bc79043ae575bf9a174df0 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Thu, 3 Oct 2024 13:03:30 +0530 Subject: [PATCH 11/68] SK-1677 Used Constants instead of hard-coded strings --- v2/src/main/java/com/skyflow/Skyflow.java | 2 +- v2/src/main/java/com/skyflow/VaultClient.java | 13 +------------ .../main/java/com/skyflow/utils/Constants.java | 9 +++++++++ v2/src/main/java/com/skyflow/utils/Utils.java | 17 ++++++++++++----- 4 files changed, 23 insertions(+), 18 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/utils/Constants.java diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index f9d39d6d..2786d4cc 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -111,7 +111,7 @@ public SkyflowClientBuilder addVaultConfig(VaultConfig vaultConfig) throws Skyfl public SkyflowClientBuilder updateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { if (this.vaultClientsMap.containsKey(vaultConfig.getVaultId())) { VaultConfig updatedConfig = findAndUpdateVaultConfig(vaultConfig); - this.vaultClientsMap.get(updatedConfig.getVaultId()).updateVaultConfig(updatedConfig); + this.vaultClientsMap.get(updatedConfig.getVaultId()).updateVaultURL(); } else { // display error log, throw error, or both } diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index f725c510..456525f7 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -2,7 +2,6 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; -import com.skyflow.enums.ENV; import com.skyflow.generated.rest.ApiClient; import com.skyflow.generated.rest.api.RecordsApi; import com.skyflow.generated.rest.api.TokensApi; @@ -53,17 +52,7 @@ protected void setCommonCredentials(Credentials commonCredentials) { prioritiseCredentials(); } - protected void updateVaultConfig(VaultConfig vaultConfig) { - ENV env = vaultConfig.getEnv() != null ? vaultConfig.getEnv() : this.vaultConfig.getEnv(); - String clusterId = vaultConfig.getClusterId() != null ? vaultConfig.getClusterId() : this.vaultConfig.getClusterId(); - Credentials credentials = vaultConfig.getCredentials() != null ? vaultConfig.getCredentials() : this.vaultConfig.getCredentials(); - this.vaultConfig.setEnv(env); - this.vaultConfig.setClusterId(clusterId); - this.vaultConfig.setCredentials(credentials); - updateVaultURL(); - } - - private void updateVaultURL() { + protected void updateVaultURL() { String vaultURL = Utils.getVaultURL(this.vaultConfig.getClusterId(), this.vaultConfig.getEnv()); this.apiClient.setBasePath(vaultURL); } diff --git a/v2/src/main/java/com/skyflow/utils/Constants.java b/v2/src/main/java/com/skyflow/utils/Constants.java new file mode 100644 index 00000000..475c8e35 --- /dev/null +++ b/v2/src/main/java/com/skyflow/utils/Constants.java @@ -0,0 +1,9 @@ +package com.skyflow.utils; + +public class Constants { + public static String SECURE_PROTOCOL = "https"; + public static String DEV_DOMAIN = ".vault.skyflowapis.dev"; + public static String STAGE_DOMAIN = ".vault.skyflowapis.tech"; + public static String SANDBOX_DOMAIN = ".vault.skyflowapis-preview.com"; + public static String PROD_DOMAIN = ".vault.skyflowapis.com"; +} diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/v2/src/main/java/com/skyflow/utils/Utils.java index 90fb8a48..a1698394 100644 --- a/v2/src/main/java/com/skyflow/utils/Utils.java +++ b/v2/src/main/java/com/skyflow/utils/Utils.java @@ -7,17 +7,24 @@ public class Utils { public static String getVaultURL(String clusterId, ENV env) { + StringBuilder sb = new StringBuilder(Constants.SECURE_PROTOCOL); + sb.append(clusterId); switch (env) { case DEV: - return "https://" + clusterId + ".vault.skyflowapis.dev"; + sb.append(Constants.DEV_DOMAIN); + break; case STAGE: - return "https://" + clusterId + ".vault.skyflowapis.tech"; + sb.append(Constants.STAGE_DOMAIN); + break; case SANDBOX: - return "https://" + clusterId + ".vault.skyflowapis-preview.com"; + sb.append(Constants.SANDBOX_DOMAIN); + break; case PROD: default: - return "https://" + clusterId + ".vault.skyflowapis.com"; + sb.append(Constants.PROD_DOMAIN); + break; } + return sb.toString(); } public static void updateBearerTokenIfExpired(ApiClient apiClient, Credentials credentials) { @@ -25,6 +32,6 @@ public static void updateBearerTokenIfExpired(ApiClient apiClient, Credentials c // check validity of bearer token // String token = Bearer.getBearerToken(); // generate bearer token, set in ApiClient if expired or null - Bearer.setBearerToken("eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRwczovL21hbmFnZS5za3lmbG93YXBpcy50ZWNoIiwiY2xpIjoiYzFiMWZjODViYWEzNDk0NGJkZGNkMzQzMTA2YzIyOGQiLCJleHAiOjE3Mjc3ODk0OTUsImlhdCI6MTcyNzc4NTg5NiwiaXNzIjoic2EtYXV0aEBtYW5hZ2Uuc2t5Zmxvd2FwaXMudGVjaCIsImp0aSI6InQxNjhjNTlhYWIzNDRiZTZiMDE0ZWY3MzY4MDlhMjZhIiwia2V5IjoiamI4ODgxZjRiYTM5NDg0YjkzYzY5MzVjMjhhODg5MDgiLCJzY3AiOm51bGwsInN1YiI6IlNES19FMkUifQ.EmCYoR1ieDdseC4XTWOA9oBD7EJPSd5kz4Oka7mPFqLNW4Ms21GMhXll66Q3seKXZH-_DiLR8d3juGSx3nnZZDaAmNANiPfrvNCF66LU-587RDzzIowL-I5qhGigGG8dLh2FICf0eEoRAvdtiYSolWjErbhd-o5k1whxdCZ2cU_8JHiqq3hr48Gy1pVcFYycJ_oj0bxrOqn-r3vfdv_ChruLRQ2xh74qevkzEePg3XSkuniVDemhPp_fVOW4RE6TGYo6vEaWsY6NoPqx21CL49U8avqkIISZm7Uo5PO-sfaRDh3XCy-QFvvR7KoWiMTGj8cHcIkV5uusCV-S8CFIvQ"); + Bearer.setBearerToken("BEARER_TOKEN"); } } From 988ab14a81a10783beff3f18f4c4a2672217db5b Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 4 Oct 2024 16:56:23 +0530 Subject: [PATCH 12/68] SK-1678 Bearer Token uitlities - Implemented bearer token utilities for generating bearer token with or without context and roles - Implemented Token utilties to check for validity of tokens - Implemented signed data tokens utilities to generate signed data tokens --- pom.xml | 36 +-- v1/pom.xml | 20 ++ v2/pom.xml | 55 +++++ v2/src/main/java/com/skyflow/Skyflow.java | 16 +- v2/src/main/java/com/skyflow/VaultClient.java | 7 +- .../java/com/skyflow/config/Credentials.java | 24 +- .../serviceaccount/util/BearerToken.java | 208 ++++++++++++++++++ .../util/SignedDataTokenResponse.java | 22 ++ .../serviceaccount/util/SignedDataTokens.java | 205 +++++++++++++++++ .../skyflow/serviceaccount/util/Token.java | 44 ++++ .../java/com/skyflow/utils/Constants.java | 14 +- v2/src/main/java/com/skyflow/utils/Utils.java | 90 +++++++- .../vault/controller/VaultController.java | 17 +- 13 files changed, 708 insertions(+), 50 deletions(-) create mode 100644 v1/pom.xml create mode 100644 v2/pom.xml create mode 100644 v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java create mode 100644 v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java create mode 100644 v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java create mode 100644 v2/src/main/java/com/skyflow/serviceaccount/util/Token.java diff --git a/pom.xml b/pom.xml index dc4fd6c4..85befa48 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.skyflow skyflow-java 1.15.0 - jar + pom ${project.groupId}:${project.artifactId} Skyflow SDK for the Java programming language @@ -25,6 +25,10 @@ skyflow + + v1 + v2 + scm:git:git://github.com:skyflowapi/skyflow-java.git scm:git:ssh://github.com:skyflowapi/skyflow-java.git @@ -51,36 +55,6 @@ - - io.github.cdimascio - dotenv-java - 3.0.0 - - - com.google.code.findbugs - jsr305 - 3.0.2 - - - io.gsonfire - gson-fire - ${gson-fire-version} - - - com.google.code.gson - gson - ${gson-version} - - - com.squareup.okhttp3 - okhttp - ${okhttp-version} - - - com.squareup.okhttp3 - logging-interceptor - ${okhttp-version} - com.fasterxml.jackson.core jackson-core diff --git a/v1/pom.xml b/v1/pom.xml new file mode 100644 index 00000000..ff3fc13a --- /dev/null +++ b/v1/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + com.skyflow + skyflow-java + 1.15.0 + + + v1 + + + 8 + 8 + UTF-8 + + + \ No newline at end of file diff --git a/v2/pom.xml b/v2/pom.xml new file mode 100644 index 00000000..4e314ed9 --- /dev/null +++ b/v2/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + com.skyflow + skyflow-java + 1.15.0 + + + v2 + + + 8 + 8 + UTF-8 + 4.12.0 + 2.10.1 + 1.9.0 + + + + + io.github.cdimascio + dotenv-java + 3.0.0 + + + com.google.code.findbugs + jsr305 + 3.0.2 + + + io.gsonfire + gson-fire + ${gson-fire-version} + + + com.google.code.gson + gson + ${gson-version} + + + com.squareup.okhttp3 + okhttp + ${okhttp-version} + + + com.squareup.okhttp3 + logging-interceptor + ${okhttp-version} + + + \ No newline at end of file diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index 2786d4cc..7a0e45aa 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -62,6 +62,20 @@ public Skyflow removeConnectionConfig(String connectionId) { return this; } + public Skyflow updateSkyflowCredentials(Credentials credentials) { + this.builder.addSkyflowCredentials(credentials); + return this; + } + + public Skyflow updateLogLevel(LogLevel logLevel) { + this.builder.setLogLevel(logLevel); + return this; + } + + public LogLevel getLogLevel() { + return this.builder.logLevel; + } + // in case no id is passed, return first vault controller public VaultController vault() { String vaultId = (String) this.builder.vaultClientsMap.keySet().toArray()[0]; @@ -111,7 +125,7 @@ public SkyflowClientBuilder addVaultConfig(VaultConfig vaultConfig) throws Skyfl public SkyflowClientBuilder updateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { if (this.vaultClientsMap.containsKey(vaultConfig.getVaultId())) { VaultConfig updatedConfig = findAndUpdateVaultConfig(vaultConfig); - this.vaultClientsMap.get(updatedConfig.getVaultId()).updateVaultURL(); + this.vaultClientsMap.get(updatedConfig.getVaultId()).updateVaultConfig(); } else { // display error log, throw error, or both } diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index 456525f7..75eda5af 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -52,7 +52,12 @@ protected void setCommonCredentials(Credentials commonCredentials) { prioritiseCredentials(); } - protected void updateVaultURL() { + protected void updateVaultConfig() { + updateVaultURL(); + prioritiseCredentials(); + } + + private void updateVaultURL() { String vaultURL = Utils.getVaultURL(this.vaultConfig.getClusterId(), this.vaultConfig.getEnv()); this.apiClient.setBasePath(vaultURL); } diff --git a/v2/src/main/java/com/skyflow/config/Credentials.java b/v2/src/main/java/com/skyflow/config/Credentials.java index 43deda99..75130b90 100644 --- a/v2/src/main/java/com/skyflow/config/Credentials.java +++ b/v2/src/main/java/com/skyflow/config/Credentials.java @@ -16,23 +16,43 @@ public Credentials() { this.credentialsString = null; } - public void setToken(String token) { - this.token = token; + public String getPath() { + return path; } public void setPath(String path) { this.path = path; } + public ArrayList getRoles() { + return roles; + } + public void setRoles(ArrayList roles) { this.roles = roles; } + public String getContext() { + return context; + } + public void setContext(String context) { this.context = context; } + public String getCredentialsString() { + return credentialsString; + } + public void setCredentialsString(String credentialsString) { this.credentialsString = credentialsString; } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } } diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java b/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java new file mode 100644 index 00000000..6d15fef1 --- /dev/null +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java @@ -0,0 +1,208 @@ +package com.skyflow.serviceaccount.util; + +import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.ApiException; +import com.skyflow.generated.rest.api.AuthenticationApi; +import com.skyflow.generated.rest.models.V1GetAuthTokenRequest; +import com.skyflow.generated.rest.models.V1GetAuthTokenResponse; +import com.skyflow.utils.Constants; +import com.skyflow.utils.Utils; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.net.MalformedURLException; +import java.security.PrivateKey; +import java.util.ArrayList; +import java.util.Date; +import java.util.Objects; + +public class BearerToken { + private static final ApiClient apiClient = new ApiClient(); + private static final AuthenticationApi authenticationApi = new AuthenticationApi(apiClient); + private final File credentialsFile; + private final String credentialsString; + private final String ctx; + private final ArrayList roles; + private final String credentialsType; + + private BearerToken(BearerTokenBuilder builder) { + this.credentialsFile = builder.credentialsFile; + this.credentialsString = builder.credentialsString; + this.ctx = builder.ctx; + this.roles = builder.roles; + this.credentialsType = builder.credentialsType; + } + + public static BearerTokenBuilder builder() { + return new BearerTokenBuilder(); + } + + private static V1GetAuthTokenResponse generateBearerTokenFromCredentials( + File credentialsPath, String context, ArrayList roles + ) throws SkyflowException { + JSONParser parser = new JSONParser(); + try { + if (credentialsPath == null || !credentialsPath.isFile()) { + throw new SkyflowException("credentials string cannot bt empty"); + } + Object obj = parser.parse(new FileReader(String.valueOf(credentialsPath))); + JSONObject serviceAccountCredentials = (JSONObject) obj; + return getBearerTokenFromCredentials(serviceAccountCredentials, context, roles); + } catch (ParseException e) { + throw new SkyflowException("credentials string is not in valid json string format"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static V1GetAuthTokenResponse generateBearerTokenFromCredentialString( + String credentials, String context, ArrayList roles + ) throws SkyflowException { + JSONParser parser = new JSONParser(); + try { + if (credentials == null || credentials.isEmpty()) { + throw new SkyflowException("credentials string cannot bt empty"); + } + Object obj = parser.parse(credentials); + JSONObject serviceAccountCredentials = (JSONObject) obj; + return getBearerTokenFromCredentials(serviceAccountCredentials, context, roles); + } catch (ParseException e) { + throw new SkyflowException("credentials string is not in valid json string format"); + } + } + + private static V1GetAuthTokenResponse getBearerTokenFromCredentials( + JSONObject credentials, String context, ArrayList roles + ) throws SkyflowException { + try { + String privateKey = (String) credentials.get("privateKey"); + if (privateKey == null) { + throw new SkyflowException("privateKey not found"); + } + + String clientID = (String) credentials.get("clientID"); + if (clientID == null) { + throw new SkyflowException("clientID not found"); + } + + String keyID = (String) credentials.get("keyID"); + if (keyID == null) { + throw new SkyflowException("keyID not found"); + } + + String tokenURI = (String) credentials.get("tokenURI"); + if (tokenURI == null) { + throw new SkyflowException("tokenURI not found"); + } + + PrivateKey pvtKey = Utils.getPrivateKeyFromPem(privateKey); + String signedUserJWT = getSignedToken(clientID, keyID, tokenURI, pvtKey, context); + + String basePath = Utils.getBaseURL(tokenURI); + apiClient.setBasePath(basePath); + + V1GetAuthTokenRequest body = new V1GetAuthTokenRequest(); + body.setGrantType(Constants.GRANT_TYPE); + body.setAssertion(signedUserJWT); + + if (roles != null) { + String scopedRoles = getScopeUsingRoles(roles); + body.setScope(scopedRoles); + } + return authenticationApi.authenticationServiceGetAuthToken(body); + } catch (MalformedURLException e) { + throw new SkyflowException("Invalid value for tokenURI in credentials"); + } catch (ApiException e) { + throw new RuntimeException(e); + } + } + + private static String getSignedToken( + String clientID, String keyID, String tokenURI, PrivateKey pvtKey, String context + ) { + final Date createdDate = new Date(); + final Date expirationDate = new Date(createdDate.getTime() + (3600 * 1000)); + return Jwts.builder() + .claim("iss", clientID) + .claim("key", keyID) + .claim("aud", tokenURI) + .claim("sub", clientID) + .claim("ctx", context) + .setExpiration(expirationDate) + .signWith(SignatureAlgorithm.RS256, pvtKey) + .compact(); + } + + private static String getScopeUsingRoles(ArrayList roles) { + StringBuilder scope = new StringBuilder(); + if (roles != null) { + for (String role : roles) { + scope.append(" role:").append(role); + } + } + return scope.toString(); + } + + public synchronized String getBearerToken() throws SkyflowException { + V1GetAuthTokenResponse response; + String accessToken = null; + try { + if (this.credentialsFile != null && Objects.equals(this.credentialsType, "FILE")) { + response = generateBearerTokenFromCredentials(this.credentialsFile, this.ctx, this.roles); + accessToken = response.getAccessToken(); + } else if (this.credentialsString != null && Objects.equals(this.credentialsType, "STRING")) { + response = generateBearerTokenFromCredentialString(this.credentialsString, this.ctx, this.roles); + accessToken = response.getAccessToken(); + } + } catch (SkyflowException e) { + e.printStackTrace(); + } + return accessToken; + } + + // Builder class + public static class BearerTokenBuilder { + private File credentialsFile; + private String credentialsString; + private String ctx; + private ArrayList roles; + private String credentialsType; + + private void setCredentialsType(String credentialsType) { + this.credentialsType = credentialsType; + } + + public BearerTokenBuilder setCredentials(File credentialsFile) { + setCredentialsType("FILE"); + this.credentialsFile = credentialsFile; + return this; + } + + public BearerTokenBuilder setCredentials(String credentialsString) { + setCredentialsType("STRING"); + this.credentialsString = credentialsString; + return this; + } + + public BearerTokenBuilder setCtx(String ctx) { + this.ctx = ctx; + return this; + } + + public BearerTokenBuilder setRoles(ArrayList roles) { + this.roles = roles; + return this; + } + + public BearerToken build() { + return new BearerToken(this); + } + } +} diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java new file mode 100644 index 00000000..e7e966bc --- /dev/null +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java @@ -0,0 +1,22 @@ +package com.skyflow.serviceaccount.util; + +import com.skyflow.utils.Constants; + +public class SignedDataTokenResponse { + private static final String prefix = Constants.SIGNED_DATA_TOKEN_PREFIX; + private final String dataToken; + private final String signedDataToken; + + public SignedDataTokenResponse(String dataToken, String signedDataToken) { + this.dataToken = dataToken; + this.signedDataToken = new StringBuilder(prefix).append(signedDataToken).toString(); + } + + @Override + public String toString() { + return "{" + + "\n\t\"dataToken\":\"" + this.dataToken + "\"," + + "\n\t\"signedDataToken\":\"" + this.signedDataToken + "\"," + + "\n}"; + } +} diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java new file mode 100644 index 00000000..482398b7 --- /dev/null +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java @@ -0,0 +1,205 @@ +package com.skyflow.serviceaccount.util; + +import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.Utils; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.security.PrivateKey; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +public class SignedDataTokens { + private final File credentialsFile; + private final String credentialsString; + private final String credentialsType; + private final String ctx; + private final ArrayList dataTokens; + private final Integer timeToLive; + + private SignedDataTokens(SignedDataTokensBuilder builder) { + this.credentialsFile = builder.credentialsFile; + this.credentialsString = builder.credentialsString; + this.credentialsType = builder.credentialsType; + this.ctx = builder.ctx; + this.dataTokens = builder.dataTokens; + this.timeToLive = builder.timeToLive; + } + + public static SignedDataTokensBuilder builder() { + return new SignedDataTokensBuilder(); + } + + private static List generateSignedTokens( + File credentialsPath, ArrayList dataTokens, Integer timeToLive, String context + ) throws SkyflowException { + // print info log + JSONParser parser = new JSONParser(); + List responseToken; + try { + if (credentialsPath == null || !credentialsPath.isFile()) { + // print error log + throw new SkyflowException("credentials string cannot be empty"); + } + Object obj = parser.parse(new FileReader(String.valueOf(credentialsPath))); + JSONObject serviceAccountCredentials = (JSONObject) obj; + responseToken = getSignedTokenFromCredentialsFile(serviceAccountCredentials, dataTokens, timeToLive, context); + } catch (ParseException e) { + // print error log + throw new SkyflowException("credentials string is not in valid json string format"); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return responseToken; + } + + private static List generateSignedTokensFromCredentialsString( + String credentials, ArrayList dataTokens, Integer timeToLive, String context + ) throws SkyflowException { + // print info log + JSONParser parser = new JSONParser(); + List responseToken; + // print info log + try { + if (credentials == null || credentials.isEmpty()) { + // print error log + throw new SkyflowException("credentials string cannot by empty"); + } + Object obj = parser.parse(credentials); + JSONObject serviceAccountCredentials = (JSONObject) obj; + responseToken = getSignedTokenFromCredentialsFile(serviceAccountCredentials, dataTokens, timeToLive, context); + + } catch (ParseException e) { + // print error log + throw new SkyflowException("credentials string is not in valid json string format"); + } + + return responseToken; + } + + private static List getSignedTokenFromCredentialsFile( + JSONObject credentials, ArrayList dataTokens, Integer timeToLive, String context + ) throws SkyflowException { + List signedDataTokens = null; + try { + String privateKey = (String) credentials.get("privateKey"); + if (privateKey == null) { + throw new SkyflowException("privateKey not found"); + } + + String clientID = (String) credentials.get("clientID"); + if (clientID == null) { + // print error log + throw new SkyflowException("invalid clientID"); + } + String keyID = (String) credentials.get("keyID"); + if (keyID == null) { + // print error log + throw new SkyflowException("invalid KeyID"); + } + PrivateKey pvtKey = Utils.getPrivateKeyFromPem(privateKey); + signedDataTokens = getSignedToken(clientID, keyID, pvtKey, dataTokens, timeToLive, context); + } catch (RuntimeException e) { + // throw error + } + return signedDataTokens; + } + + private static List getSignedToken( + String clientID, String keyID, PrivateKey pvtKey, + ArrayList dataTokens, Integer timeToLive, String context + ) { + final Date createdDate = new Date(); + final Date expirationDate; + + if (timeToLive != null) { + expirationDate = new Date(createdDate.getTime() + (timeToLive * 1000)); + } else { + expirationDate = new Date(createdDate.getTime() + 60000); // Valid for 60 seconds + } + + List list = new ArrayList<>(); + for (String dataToken : dataTokens) { + String eachSignedDataToken = Jwts.builder() + .claim("iss", "sdk") + .claim("iat", (createdDate.getTime() / 1000)) + .claim("key", keyID) + .claim("sub", clientID) + .claim("ctx", context) + .claim("tok", dataToken) + .setExpiration(expirationDate) + .signWith(SignatureAlgorithm.RS256, pvtKey) + .compact(); + SignedDataTokenResponse responseObject = new SignedDataTokenResponse(dataToken, eachSignedDataToken); + list.add(responseObject); + } + return list; + } + + public synchronized List getSignedDataTokens() throws SkyflowException { + List signedToken = new ArrayList<>(); + try { + if (this.credentialsFile != null && Objects.equals(this.credentialsType, "FILE")) { + signedToken = generateSignedTokens(this.credentialsFile, this.dataTokens, this.timeToLive, this.ctx); + } else if (this.credentialsString != null && Objects.equals(this.credentialsType, "STRING")) { + signedToken = generateSignedTokensFromCredentialsString(this.credentialsString, this.dataTokens, this.timeToLive, this.ctx); + } + } catch (SkyflowException e) { + e.printStackTrace(); + } + return signedToken; + } + + public static class SignedDataTokensBuilder { + private ArrayList dataTokens; + private Integer timeToLive; + private File credentialsFile; + private String credentialsString; + private String ctx; + private String credentialsType; + + private void setCredentialsType(String credentialsType) { + this.credentialsType = credentialsType; + } + + public SignedDataTokensBuilder setCredentials(File credentialsFile) { + setCredentialsType("FILE"); + this.credentialsFile = credentialsFile; + return this; + } + + public SignedDataTokensBuilder setCredentials(String credentialsString) { + setCredentialsType("STRING"); + this.credentialsString = credentialsString; + return this; + } + + public SignedDataTokensBuilder setCtx(String ctx) { + this.ctx = ctx; + return this; + } + + public SignedDataTokensBuilder setDataTokens(ArrayList dataTokens) { + this.dataTokens = dataTokens; + return this; + } + + public SignedDataTokensBuilder setTimeToLive(Integer timeToLive) { + this.timeToLive = timeToLive; + return this; + } + + public SignedDataTokens build() { + return new SignedDataTokens(this); + } + } +} diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/Token.java b/v2/src/main/java/com/skyflow/serviceaccount/util/Token.java new file mode 100644 index 00000000..60e49947 --- /dev/null +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/Token.java @@ -0,0 +1,44 @@ +package com.skyflow.serviceaccount.util; + +import com.skyflow.errors.SkyflowException; +import org.apache.commons.codec.binary.Base64; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.util.Date; + +public class Token { + public static boolean isExpired(String token) { + long expiryTime; + long currentTime; + try { + if (token == null || token.isEmpty()) { + // print info log + return true; + } + + currentTime = new Date().getTime() / 1000; + expiryTime = (long) decoded(token).get("exp"); + + } catch (ParseException e) { + // display info log + return true; + } catch (SkyflowException e) { + // display info log + return true; + } + return currentTime > expiryTime; + } + + static JSONObject decoded(String encodedToken) throws ParseException, SkyflowException { + String[] split = encodedToken.split("\\."); + if (split.length < 3) { + throw new SkyflowException("invalid bearer token"); + } + byte[] decodedBytes = Base64.decodeBase64(split[1]); + return (JSONObject) new JSONParser().parse(new String(decodedBytes, StandardCharsets.UTF_8)); + } +} diff --git a/v2/src/main/java/com/skyflow/utils/Constants.java b/v2/src/main/java/com/skyflow/utils/Constants.java index 475c8e35..8aacabe2 100644 --- a/v2/src/main/java/com/skyflow/utils/Constants.java +++ b/v2/src/main/java/com/skyflow/utils/Constants.java @@ -1,9 +1,13 @@ package com.skyflow.utils; public class Constants { - public static String SECURE_PROTOCOL = "https"; - public static String DEV_DOMAIN = ".vault.skyflowapis.dev"; - public static String STAGE_DOMAIN = ".vault.skyflowapis.tech"; - public static String SANDBOX_DOMAIN = ".vault.skyflowapis-preview.com"; - public static String PROD_DOMAIN = ".vault.skyflowapis.com"; + public static final String SECURE_PROTOCOL = "https://"; + public static final String DEV_DOMAIN = ".vault.skyflowapis.dev"; + public static final String STAGE_DOMAIN = ".vault.skyflowapis.tech"; + public static final String SANDBOX_DOMAIN = ".vault.skyflowapis-preview.com"; + public static final String PROD_DOMAIN = ".vault.skyflowapis.com"; + public static final String PKCS8_PRIVATE_HEADER = "-----BEGIN PRIVATE KEY-----"; + public static final String PKCS8_PRIVATE_FOOTER = "-----END PRIVATE KEY-----"; + public static final String GRANT_TYPE = "urn:ietf:params:oauth:grant-type:jwt-bearer"; + public static final String SIGNED_DATA_TOKEN_PREFIX = "signed_token_"; } diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/v2/src/main/java/com/skyflow/utils/Utils.java index a1698394..c3ddf355 100644 --- a/v2/src/main/java/com/skyflow/utils/Utils.java +++ b/v2/src/main/java/com/skyflow/utils/Utils.java @@ -2,8 +2,18 @@ import com.skyflow.config.Credentials; import com.skyflow.enums.ENV; -import com.skyflow.generated.rest.ApiClient; -import com.skyflow.generated.rest.auth.HttpBearerAuth; +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.BearerToken; +import org.apache.commons.codec.binary.Base64; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; public class Utils { public static String getVaultURL(String clusterId, ENV env) { @@ -27,11 +37,75 @@ public static String getVaultURL(String clusterId, ENV env) { return sb.toString(); } - public static void updateBearerTokenIfExpired(ApiClient apiClient, Credentials credentials) { - HttpBearerAuth Bearer = (HttpBearerAuth) apiClient.getAuthentication("Bearer"); - // check validity of bearer token - // String token = Bearer.getBearerToken(); - // generate bearer token, set in ApiClient if expired or null - Bearer.setBearerToken("BEARER_TOKEN"); + public static String generateBearerToken(Credentials credentials) throws SkyflowException { + if (credentials.getPath() != null) { + return BearerToken.builder() + .setCredentials(new File(credentials.getPath())) + .setRoles(credentials.getRoles()) + .setCtx(credentials.getContext()) + .build() + .getBearerToken(); + } else if (credentials.getCredentialsString() != null) { + return BearerToken.builder() + .setCredentials(credentials.getCredentialsString()) + .setRoles(credentials.getRoles()) + .setCtx(credentials.getContext()) + .build() + .getBearerToken(); + } else { + return credentials.getToken(); + } + } + + public static PrivateKey getPrivateKeyFromPem(String pemKey) throws SkyflowException { + String PKCS8PrivateHeader = Constants.PKCS8_PRIVATE_HEADER; + String PKCS8PrivateFooter = Constants.PKCS8_PRIVATE_FOOTER; + + String privateKeyContent = pemKey; + PrivateKey privateKey = null; + + if (pemKey.contains(PKCS8PrivateHeader)) { + privateKeyContent = privateKeyContent.replace(PKCS8PrivateHeader, ""); + privateKeyContent = privateKeyContent.replace(PKCS8PrivateFooter, ""); + privateKeyContent = privateKeyContent.replace("\n", ""); + privateKeyContent = privateKeyContent.replace("\r\n", ""); + privateKey = parsePkcs8PrivateKey(Base64.decodeBase64(privateKeyContent)); + } else { + // display error log and throw error + } + return privateKey; + } + + public static String getBaseURL(String url) throws MalformedURLException { + URL parsedUrl = new URL(url); + String protocol = parsedUrl.getProtocol(); + String host = parsedUrl.getHost(); + return new StringBuilder(protocol).append("://").append(host).toString(); + } + + public static void verifyCredentials(Credentials credentials) throws SkyflowException { + int nonNullMembers = 0; + if (credentials.getPath() != null) nonNullMembers++; + if (credentials.getCredentialsString() != null) nonNullMembers++; + if (credentials.getToken() != null) nonNullMembers++; + + if (nonNullMembers != 1) { + throw new SkyflowException("only one of tokens, path, and credentialsString is allowed"); + } + } + + private static PrivateKey parsePkcs8PrivateKey(byte[] pkcs8Bytes) throws SkyflowException { + KeyFactory keyFactory; + PrivateKey privateKey = null; + try { + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(pkcs8Bytes); + keyFactory = KeyFactory.getInstance("RSA"); + privateKey = keyFactory.generatePrivate(keySpec); + } catch (NoSuchAlgorithmException e) { + // display error log and throw error + } catch (InvalidKeySpecException e) { + // display error log and throw error + } + return privateKey; } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index 9810eeb7..704ab54b 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -3,8 +3,11 @@ import com.skyflow.VaultClient; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; +import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.auth.HttpBearerAuth; import com.skyflow.generated.rest.models.V1DetokenizePayload; import com.skyflow.generated.rest.models.V1DetokenizeResponse; +import com.skyflow.serviceaccount.util.Token; import com.skyflow.utils.Utils; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.InsertResponse; @@ -16,6 +19,8 @@ public final class VaultController extends VaultClient { private AuditController auditController; private BinLookupController binLookupController; + private String token; + public VaultController(VaultConfig vaultConfig, Credentials credentials) { super(vaultConfig, credentials); this.auditController = null; @@ -28,10 +33,9 @@ public InsertResponse insert(InsertRequest insertRequest) { } public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) { - System.out.println(super.getVaultConfig()); V1DetokenizeResponse result = null; try { - Utils.updateBearerTokenIfExpired(super.getApiClient(), super.getFinalCredentials()); + setBearerToken(); V1DetokenizePayload payload = detokenizeRequest.getDetokenizePayload(); result = super.getTokensApi().recordServiceDetokenize(super.getVaultConfig().getVaultId(), payload); } catch (Exception e) { @@ -84,4 +88,13 @@ public DetectController detect() { } return this.detectController; } + + private void setBearerToken() throws SkyflowException { + Utils.verifyCredentials(super.getFinalCredentials()); + if (token == null || Token.isExpired(token)) { + token = Utils.generateBearerToken(super.getFinalCredentials()); + } + HttpBearerAuth Bearer = (HttpBearerAuth) super.getApiClient().getAuthentication("Bearer"); + Bearer.setBearerToken(token); + } } From 5ad62c7f759100602d1221c7b44cb4812d0e4e90 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Mon, 7 Oct 2024 18:44:25 +0530 Subject: [PATCH 13/68] SK-1665 Generate and integrate Data API code --- .../skyflow/generated/rest/ApiCallback.java | 62 + .../com/skyflow/generated/rest/ApiClient.java | 1615 +++++++++++++++ .../skyflow/generated/rest/ApiException.java | 167 ++ .../skyflow/generated/rest/ApiResponse.java | 76 + .../skyflow/generated/rest/Configuration.java | 41 + .../rest/GzipRequestInterceptor.java | 85 + .../java/com/skyflow/generated/rest/JSON.java | 440 +++++ .../java/com/skyflow/generated/rest/Pair.java | 57 + .../generated/rest/ProgressRequestBody.java | 73 + .../generated/rest/ProgressResponseBody.java | 70 + .../generated/rest/ServerConfiguration.java | 72 + .../generated/rest/ServerVariable.java | 37 + .../skyflow/generated/rest/StringUtil.java | 83 + .../skyflow/generated/rest/api/AuditApi.java | 466 +++++ .../generated/rest/api/AuthenticationApi.java | 216 ++ .../generated/rest/api/BinLookupApi.java | 208 ++ .../skyflow/generated/rest/api/QueryApi.java | 218 +++ .../generated/rest/api/RecordsApi.java | 1730 +++++++++++++++++ .../skyflow/generated/rest/api/TokensApi.java | 361 ++++ .../generated/rest/auth/ApiKeyAuth.java | 80 + .../generated/rest/auth/Authentication.java | 36 + .../generated/rest/auth/HttpBasicAuth.java | 55 + .../generated/rest/auth/HttpBearerAuth.java | 75 + .../rest/models/AbstractOpenApiSchema.java | 146 ++ .../models/AuditEventAuditResourceType.java | 134 ++ .../rest/models/AuditEventContext.java | 530 +++++ .../generated/rest/models/AuditEventData.java | 205 ++ .../rest/models/AuditEventHTTPInfo.java | 234 +++ .../rest/models/BatchRecordMethod.java | 84 + .../rest/models/ContextAccessType.java | 80 + .../rest/models/ContextAuthMode.java | 82 + .../DetokenizeRecordResponseValueType.java | 92 + .../rest/models/GooglerpcStatus.java | 272 +++ .../generated/rest/models/ProtobufAny.java | 286 +++ .../models/QueryServiceExecuteQueryBody.java | 205 ++ .../RecordServiceBatchOperationBody.java | 284 +++ .../RecordServiceBulkDeleteRecordBody.java | 216 ++ .../models/RecordServiceInsertRecordBody.java | 339 ++++ .../models/RecordServiceUpdateRecordBody.java | 264 +++ .../rest/models/RedactionEnumREDACTION.java | 82 + .../rest/models/RequestActionType.java | 110 ++ .../rest/models/V1AuditAfterOptions.java | 234 +++ .../rest/models/V1AuditEventResponse.java | 291 +++ .../rest/models/V1AuditResponse.java | 258 +++ .../rest/models/V1AuditResponseEvent.java | 367 ++++ .../models/V1AuditResponseEventRequest.java | 456 +++++ .../rest/models/V1BINListRequest.java | 305 +++ .../rest/models/V1BINListResponse.java | 227 +++ .../skyflow/generated/rest/models/V1BYOT.java | 80 + .../rest/models/V1BatchOperationResponse.java | 245 +++ .../generated/rest/models/V1BatchRecord.java | 458 +++++ .../models/V1BulkDeleteRecordResponse.java | 216 ++ .../rest/models/V1BulkGetRecordResponse.java | 227 +++ .../skyflow/generated/rest/models/V1Card.java | 437 +++++ .../rest/models/V1DeleteFileResponse.java | 231 +++ .../rest/models/V1DeleteRecordResponse.java | 231 +++ .../rest/models/V1DetokenizePayload.java | 279 +++ .../models/V1DetokenizeRecordRequest.java | 236 +++ .../models/V1DetokenizeRecordResponse.java | 294 +++ .../rest/models/V1DetokenizeResponse.java | 227 +++ .../generated/rest/models/V1FieldRecords.java | 228 +++ .../rest/models/V1FileAVScanStatus.java | 92 + .../rest/models/V1GetAuthTokenRequest.java | 359 ++++ .../rest/models/V1GetAuthTokenResponse.java | 234 +++ .../models/V1GetFileScanStatusResponse.java | 207 ++ .../rest/models/V1GetQueryResponse.java | 227 +++ .../rest/models/V1InsertRecordResponse.java | 227 +++ .../generated/rest/models/V1MemberType.java | 80 + .../rest/models/V1RecordMetaProperties.java | 231 +++ .../rest/models/V1TokenizePayload.java | 227 +++ .../rest/models/V1TokenizeRecordRequest.java | 234 +++ .../rest/models/V1TokenizeRecordResponse.java | 205 ++ .../rest/models/V1TokenizeResponse.java | 227 +++ .../rest/models/V1UpdateRecordResponse.java | 231 +++ .../rest/models/V1VaultFieldMapping.java | 263 +++ .../rest/models/V1VaultSchemaConfig.java | 265 +++ 76 files changed, 18804 insertions(+) create mode 100644 v2/src/main/java/com/skyflow/generated/rest/ApiCallback.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/ApiClient.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/ApiException.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/ApiResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/Configuration.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/GzipRequestInterceptor.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/JSON.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/Pair.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/ProgressRequestBody.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/ProgressResponseBody.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/ServerConfiguration.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/ServerVariable.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/StringUtil.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/api/AuditApi.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/api/AuthenticationApi.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/api/BinLookupApi.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/api/QueryApi.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/api/RecordsApi.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/api/TokensApi.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/auth/ApiKeyAuth.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/auth/Authentication.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/auth/HttpBasicAuth.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/auth/HttpBearerAuth.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/AbstractOpenApiSchema.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/AuditEventAuditResourceType.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/AuditEventContext.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/AuditEventData.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/AuditEventHTTPInfo.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/BatchRecordMethod.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/ContextAccessType.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/ContextAuthMode.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/DetokenizeRecordResponseValueType.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/GooglerpcStatus.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/ProtobufAny.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/QueryServiceExecuteQueryBody.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBatchOperationBody.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBulkDeleteRecordBody.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceInsertRecordBody.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceUpdateRecordBody.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/RedactionEnumREDACTION.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/RequestActionType.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1AuditAfterOptions.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1AuditEventResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEvent.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEventRequest.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1BINListRequest.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1BINListResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1BYOT.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1BatchOperationResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1BatchRecord.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1BulkDeleteRecordResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1BulkGetRecordResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1Card.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteFileResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteRecordResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizePayload.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordRequest.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1FieldRecords.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1FileAVScanStatus.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenRequest.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1GetFileScanStatusResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1GetQueryResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1InsertRecordResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1MemberType.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1RecordMetaProperties.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizePayload.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordRequest.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1UpdateRecordResponse.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1VaultFieldMapping.java create mode 100644 v2/src/main/java/com/skyflow/generated/rest/models/V1VaultSchemaConfig.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/ApiCallback.java b/v2/src/main/java/com/skyflow/generated/rest/ApiCallback.java new file mode 100644 index 00000000..84a241d3 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/ApiCallback.java @@ -0,0 +1,62 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +import java.io.IOException; + +import java.util.Map; +import java.util.List; + +/** + * Callback for asynchronous API call. + * + * @param The return type + */ +public interface ApiCallback { + /** + * This is called when the API call fails. + * + * @param e The exception causing the failure + * @param statusCode Status code of the response if available, otherwise it would be 0 + * @param responseHeaders Headers of the response if available, otherwise it would be null + */ + void onFailure(ApiException e, int statusCode, Map> responseHeaders); + + /** + * This is called when the API call succeeded. + * + * @param result The result deserialized from response + * @param statusCode Status code of the response + * @param responseHeaders Headers of the response + */ + void onSuccess(T result, int statusCode, Map> responseHeaders); + + /** + * This is called when the API upload processing. + * + * @param bytesWritten bytes Written + * @param contentLength content length of request body + * @param done write end + */ + void onUploadProgress(long bytesWritten, long contentLength, boolean done); + + /** + * This is called when the API download processing. + * + * @param bytesRead bytes Read + * @param contentLength content length of the response + * @param done Read end + */ + void onDownloadProgress(long bytesRead, long contentLength, boolean done); +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/ApiClient.java b/v2/src/main/java/com/skyflow/generated/rest/ApiClient.java new file mode 100644 index 00000000..bb0391a4 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/ApiClient.java @@ -0,0 +1,1615 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +import okhttp3.*; +import okhttp3.internal.http.HttpMethod; +import okhttp3.internal.tls.OkHostnameVerifier; +import okhttp3.logging.HttpLoggingInterceptor; +import okhttp3.logging.HttpLoggingInterceptor.Level; +import okio.Buffer; +import okio.BufferedSink; +import okio.Okio; + +import javax.net.ssl.*; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Type; +import java.net.URI; +import java.net.URLConnection; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.GeneralSecurityException; +import java.security.KeyStore; +import java.security.SecureRandom; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.text.DateFormat; +import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.Map.Entry; +import java.util.concurrent.TimeUnit; +import java.util.function.Supplier; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.skyflow.generated.rest.auth.Authentication; +import com.skyflow.generated.rest.auth.HttpBasicAuth; +import com.skyflow.generated.rest.auth.HttpBearerAuth; +import com.skyflow.generated.rest.auth.ApiKeyAuth; + +/** + *

ApiClient class.

+ */ +public class ApiClient { + + private String basePath = "https://identifier.vault.skyflowapis.com"; + protected List servers = new ArrayList(Arrays.asList( + new ServerConfiguration( + "https://identifier.vault.skyflowapis.com", + "Production", + new HashMap() + ), + new ServerConfiguration( + "https://identifier.vault.skyflowapis-preview.com", + "Sandbox", + new HashMap() + ) + )); + protected Integer serverIndex = 0; + protected Map serverVariables = null; + private boolean debugging = false; + private Map defaultHeaderMap = new HashMap(); + private Map defaultCookieMap = new HashMap(); + private String tempFolderPath = null; + + private Map authentications; + + private DateFormat dateFormat; + private DateFormat datetimeFormat; + private boolean lenientDatetimeFormat; + private int dateLength; + + private InputStream sslCaCert; + private boolean verifyingSsl; + private KeyManager[] keyManagers; + + private OkHttpClient httpClient; + private JSON json; + + private HttpLoggingInterceptor loggingInterceptor; + + /** + * Basic constructor for ApiClient + */ + public ApiClient() { + init(); + initHttpClient(); + + // Setup authentications (key: authentication name, value: authentication). + authentications.put("Bearer", new HttpBearerAuth("bearer")); + // Prevent the authentications from being modified. + authentications = Collections.unmodifiableMap(authentications); + } + + /** + * Basic constructor with custom OkHttpClient + * + * @param client a {@link okhttp3.OkHttpClient} object + */ + public ApiClient(OkHttpClient client) { + init(); + + httpClient = client; + + // Setup authentications (key: authentication name, value: authentication). + authentications.put("Bearer", new HttpBearerAuth("bearer")); + // Prevent the authentications from being modified. + authentications = Collections.unmodifiableMap(authentications); + } + + private void initHttpClient() { + initHttpClient(Collections.emptyList()); + } + + private void initHttpClient(List interceptors) { + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + builder.addNetworkInterceptor(getProgressInterceptor()); + for (Interceptor interceptor: interceptors) { + builder.addInterceptor(interceptor); + } + + httpClient = builder.build(); + } + + private void init() { + verifyingSsl = true; + + json = new JSON(); + + // Set default User-Agent. + setUserAgent("OpenAPI-Generator/v1/java"); + + authentications = new HashMap(); + } + + /** + * Get base path + * + * @return Base path + */ + public String getBasePath() { + return basePath; + } + + /** + * Set base path + * + * @param basePath Base path of the URL (e.g https://identifier.vault.skyflowapis.com + * @return An instance of OkHttpClient + */ + public ApiClient setBasePath(String basePath) { + this.basePath = basePath; + this.serverIndex = null; + return this; + } + + public List getServers() { + return servers; + } + + public ApiClient setServers(List servers) { + this.servers = servers; + return this; + } + + public Integer getServerIndex() { + return serverIndex; + } + + public ApiClient setServerIndex(Integer serverIndex) { + this.serverIndex = serverIndex; + return this; + } + + public Map getServerVariables() { + return serverVariables; + } + + public ApiClient setServerVariables(Map serverVariables) { + this.serverVariables = serverVariables; + return this; + } + + /** + * Get HTTP client + * + * @return An instance of OkHttpClient + */ + public OkHttpClient getHttpClient() { + return httpClient; + } + + /** + * Set HTTP client, which must never be null. + * + * @param newHttpClient An instance of OkHttpClient + * @return Api Client + * @throws java.lang.NullPointerException when newHttpClient is null + */ + public ApiClient setHttpClient(OkHttpClient newHttpClient) { + this.httpClient = Objects.requireNonNull(newHttpClient, "HttpClient must not be null!"); + return this; + } + + /** + * Get JSON + * + * @return JSON object + */ + public JSON getJSON() { + return json; + } + + /** + * Set JSON + * + * @param json JSON object + * @return Api client + */ + public ApiClient setJSON(JSON json) { + this.json = json; + return this; + } + + /** + * True if isVerifyingSsl flag is on + * + * @return True if isVerifySsl flag is on + */ + public boolean isVerifyingSsl() { + return verifyingSsl; + } + + /** + * Configure whether to verify certificate and hostname when making https requests. + * Default to true. + * NOTE: Do NOT set to false in production code, otherwise you would face multiple types of cryptographic attacks. + * + * @param verifyingSsl True to verify TLS/SSL connection + * @return ApiClient + */ + public ApiClient setVerifyingSsl(boolean verifyingSsl) { + this.verifyingSsl = verifyingSsl; + applySslSettings(); + return this; + } + + /** + * Get SSL CA cert. + * + * @return Input stream to the SSL CA cert + */ + public InputStream getSslCaCert() { + return sslCaCert; + } + + /** + * Configure the CA certificate to be trusted when making https requests. + * Use null to reset to default. + * + * @param sslCaCert input stream for SSL CA cert + * @return ApiClient + */ + public ApiClient setSslCaCert(InputStream sslCaCert) { + this.sslCaCert = sslCaCert; + applySslSettings(); + return this; + } + + /** + *

Getter for the field keyManagers.

+ * + * @return an array of {@link javax.net.ssl.KeyManager} objects + */ + public KeyManager[] getKeyManagers() { + return keyManagers; + } + + /** + * Configure client keys to use for authorization in an SSL session. + * Use null to reset to default. + * + * @param managers The KeyManagers to use + * @return ApiClient + */ + public ApiClient setKeyManagers(KeyManager[] managers) { + this.keyManagers = managers; + applySslSettings(); + return this; + } + + /** + *

Getter for the field dateFormat.

+ * + * @return a {@link java.text.DateFormat} object + */ + public DateFormat getDateFormat() { + return dateFormat; + } + + /** + *

Setter for the field dateFormat.

+ * + * @param dateFormat a {@link java.text.DateFormat} object + * @return a {@link com.skyflow.generated.rest.ApiClient} object + */ + public ApiClient setDateFormat(DateFormat dateFormat) { + JSON.setDateFormat(dateFormat); + return this; + } + + /** + *

Set SqlDateFormat.

+ * + * @param dateFormat a {@link java.text.DateFormat} object + * @return a {@link com.skyflow.generated.rest.ApiClient} object + */ + public ApiClient setSqlDateFormat(DateFormat dateFormat) { + JSON.setSqlDateFormat(dateFormat); + return this; + } + + /** + *

Set OffsetDateTimeFormat.

+ * + * @param dateFormat a {@link java.time.format.DateTimeFormatter} object + * @return a {@link com.skyflow.generated.rest.ApiClient} object + */ + public ApiClient setOffsetDateTimeFormat(DateTimeFormatter dateFormat) { + JSON.setOffsetDateTimeFormat(dateFormat); + return this; + } + + /** + *

Set LocalDateFormat.

+ * + * @param dateFormat a {@link java.time.format.DateTimeFormatter} object + * @return a {@link com.skyflow.generated.rest.ApiClient} object + */ + public ApiClient setLocalDateFormat(DateTimeFormatter dateFormat) { + JSON.setLocalDateFormat(dateFormat); + return this; + } + + /** + *

Set LenientOnJson.

+ * + * @param lenientOnJson a boolean + * @return a {@link com.skyflow.generated.rest.ApiClient} object + */ + public ApiClient setLenientOnJson(boolean lenientOnJson) { + JSON.setLenientOnJson(lenientOnJson); + return this; + } + + /** + * Get authentications (key: authentication name, value: authentication). + * + * @return Map of authentication objects + */ + public Map getAuthentications() { + return authentications; + } + + /** + * Get authentication for the given name. + * + * @param authName The authentication name + * @return The authentication, null if not found + */ + public Authentication getAuthentication(String authName) { + return authentications.get(authName); + } + + /** + * Helper method to set access token for the first Bearer authentication. + * @param bearerToken Bearer token + */ + public void setBearerToken(String bearerToken) { + setBearerToken(() -> bearerToken); + } + + /** + * Helper method to set the supplier of access tokens for Bearer authentication. + * + * @param tokenSupplier The supplier of bearer tokens + */ + public void setBearerToken(Supplier tokenSupplier) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBearerAuth) { + ((HttpBearerAuth) auth).setBearerToken(tokenSupplier); + return; + } + } + throw new RuntimeException("No Bearer authentication configured!"); + } + + /** + * Helper method to set username for the first HTTP basic authentication. + * + * @param username Username + */ + public void setUsername(String username) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setUsername(username); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set password for the first HTTP basic authentication. + * + * @param password Password + */ + public void setPassword(String password) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setPassword(password); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set API key value for the first API key authentication. + * + * @param apiKey API key + */ + public void setApiKey(String apiKey) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKey(apiKey); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Helper method to set API key prefix for the first API key authentication. + * + * @param apiKeyPrefix API key prefix + */ + public void setApiKeyPrefix(String apiKeyPrefix) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Helper method to set access token for the first OAuth2 authentication. + * + * @param accessToken Access token + */ + public void setAccessToken(String accessToken) { + throw new RuntimeException("No OAuth2 authentication configured!"); + } + + /** + * Helper method to set credentials for AWSV4 Signature + * + * @param accessKey Access Key + * @param secretKey Secret Key + * @param region Region + * @param service Service to access to + */ + public void setAWS4Configuration(String accessKey, String secretKey, String region, String service) { + throw new RuntimeException("No AWS4 authentication configured!"); + } + + /** + * Helper method to set credentials for AWSV4 Signature + * + * @param accessKey Access Key + * @param secretKey Secret Key + * @param sessionToken Session Token + * @param region Region + * @param service Service to access to + */ + public void setAWS4Configuration(String accessKey, String secretKey, String sessionToken, String region, String service) { + throw new RuntimeException("No AWS4 authentication configured!"); + } + + /** + * Set the User-Agent header's value (by adding to the default header map). + * + * @param userAgent HTTP request's user agent + * @return ApiClient + */ + public ApiClient setUserAgent(String userAgent) { + addDefaultHeader("User-Agent", userAgent); + return this; + } + + /** + * Add a default header. + * + * @param key The header's key + * @param value The header's value + * @return ApiClient + */ + public ApiClient addDefaultHeader(String key, String value) { + defaultHeaderMap.put(key, value); + return this; + } + + /** + * Add a default cookie. + * + * @param key The cookie's key + * @param value The cookie's value + * @return ApiClient + */ + public ApiClient addDefaultCookie(String key, String value) { + defaultCookieMap.put(key, value); + return this; + } + + /** + * Check that whether debugging is enabled for this API client. + * + * @return True if debugging is enabled, false otherwise. + */ + public boolean isDebugging() { + return debugging; + } + + /** + * Enable/disable debugging for this API client. + * + * @param debugging To enable (true) or disable (false) debugging + * @return ApiClient + */ + public ApiClient setDebugging(boolean debugging) { + if (debugging != this.debugging) { + if (debugging) { + loggingInterceptor = new HttpLoggingInterceptor(); + loggingInterceptor.setLevel(Level.BODY); + httpClient = httpClient.newBuilder().addInterceptor(loggingInterceptor).build(); + } else { + final OkHttpClient.Builder builder = httpClient.newBuilder(); + builder.interceptors().remove(loggingInterceptor); + httpClient = builder.build(); + loggingInterceptor = null; + } + } + this.debugging = debugging; + return this; + } + + /** + * The path of temporary folder used to store downloaded files from endpoints + * with file response. The default value is null, i.e. using + * the system's default temporary folder. + * + * @see createTempFile + * @return Temporary folder path + */ + public String getTempFolderPath() { + return tempFolderPath; + } + + /** + * Set the temporary folder path (for downloading files) + * + * @param tempFolderPath Temporary folder path + * @return ApiClient + */ + public ApiClient setTempFolderPath(String tempFolderPath) { + this.tempFolderPath = tempFolderPath; + return this; + } + + /** + * Get connection timeout (in milliseconds). + * + * @return Timeout in milliseconds + */ + public int getConnectTimeout() { + return httpClient.connectTimeoutMillis(); + } + + /** + * Sets the connect timeout (in milliseconds). + * A value of 0 means no timeout, otherwise values must be between 1 and + * {@link java.lang.Integer#MAX_VALUE}. + * + * @param connectionTimeout connection timeout in milliseconds + * @return Api client + */ + public ApiClient setConnectTimeout(int connectionTimeout) { + httpClient = httpClient.newBuilder().connectTimeout(connectionTimeout, TimeUnit.MILLISECONDS).build(); + return this; + } + + /** + * Get read timeout (in milliseconds). + * + * @return Timeout in milliseconds + */ + public int getReadTimeout() { + return httpClient.readTimeoutMillis(); + } + + /** + * Sets the read timeout (in milliseconds). + * A value of 0 means no timeout, otherwise values must be between 1 and + * {@link java.lang.Integer#MAX_VALUE}. + * + * @param readTimeout read timeout in milliseconds + * @return Api client + */ + public ApiClient setReadTimeout(int readTimeout) { + httpClient = httpClient.newBuilder().readTimeout(readTimeout, TimeUnit.MILLISECONDS).build(); + return this; + } + + /** + * Get write timeout (in milliseconds). + * + * @return Timeout in milliseconds + */ + public int getWriteTimeout() { + return httpClient.writeTimeoutMillis(); + } + + /** + * Sets the write timeout (in milliseconds). + * A value of 0 means no timeout, otherwise values must be between 1 and + * {@link java.lang.Integer#MAX_VALUE}. + * + * @param writeTimeout connection timeout in milliseconds + * @return Api client + */ + public ApiClient setWriteTimeout(int writeTimeout) { + httpClient = httpClient.newBuilder().writeTimeout(writeTimeout, TimeUnit.MILLISECONDS).build(); + return this; + } + + + /** + * Format the given parameter object into string. + * + * @param param Parameter + * @return String representation of the parameter + */ + public String parameterToString(Object param) { + if (param == null) { + return ""; + } else if (param instanceof Date || param instanceof OffsetDateTime || param instanceof LocalDate) { + //Serialize to json string and remove the " enclosing characters + String jsonStr = JSON.serialize(param); + return jsonStr.substring(1, jsonStr.length() - 1); + } else if (param instanceof Collection) { + StringBuilder b = new StringBuilder(); + for (Object o : (Collection) param) { + if (b.length() > 0) { + b.append(","); + } + b.append(o); + } + return b.toString(); + } else { + return String.valueOf(param); + } + } + + /** + * Formats the specified query parameter to a list containing a single {@code Pair} object. + * + * Note that {@code value} must not be a collection. + * + * @param name The name of the parameter. + * @param value The value of the parameter. + * @return A list containing a single {@code Pair} object. + */ + public List parameterToPair(String name, Object value) { + List params = new ArrayList(); + + // preconditions + if (name == null || name.isEmpty() || value == null || value instanceof Collection) { + return params; + } + + params.add(new Pair(name, parameterToString(value))); + return params; + } + + /** + * Formats the specified collection query parameters to a list of {@code Pair} objects. + * + * Note that the values of each of the returned Pair objects are percent-encoded. + * + * @param collectionFormat The collection format of the parameter. + * @param name The name of the parameter. + * @param value The value of the parameter. + * @return A list of {@code Pair} objects. + */ + public List parameterToPairs(String collectionFormat, String name, Collection value) { + List params = new ArrayList(); + + // preconditions + if (name == null || name.isEmpty() || value == null || value.isEmpty()) { + return params; + } + + // create the params based on the collection format + if ("multi".equals(collectionFormat)) { + for (Object item : value) { + params.add(new Pair(name, escapeString(parameterToString(item)))); + } + return params; + } + + // collectionFormat is assumed to be "csv" by default + String delimiter = ","; + + // escape all delimiters except commas, which are URI reserved + // characters + if ("ssv".equals(collectionFormat)) { + delimiter = escapeString(" "); + } else if ("tsv".equals(collectionFormat)) { + delimiter = escapeString("\t"); + } else if ("pipes".equals(collectionFormat)) { + delimiter = escapeString("|"); + } + + StringBuilder sb = new StringBuilder(); + for (Object item : value) { + sb.append(delimiter); + sb.append(escapeString(parameterToString(item))); + } + + params.add(new Pair(name, sb.substring(delimiter.length()))); + + return params; + } + + /** + * Formats the specified free-form query parameters to a list of {@code Pair} objects. + * + * @param value The free-form query parameters. + * @return A list of {@code Pair} objects. + */ + public List freeFormParameterToPairs(Object value) { + List params = new ArrayList<>(); + + // preconditions + if (value == null || !(value instanceof Map )) { + return params; + } + + final Map valuesMap = (Map) value; + + for (Map.Entry entry : valuesMap.entrySet()) { + params.add(new Pair(entry.getKey(), parameterToString(entry.getValue()))); + } + + return params; + } + + + /** + * Formats the specified collection path parameter to a string value. + * + * @param collectionFormat The collection format of the parameter. + * @param value The value of the parameter. + * @return String representation of the parameter + */ + public String collectionPathParameterToString(String collectionFormat, Collection value) { + // create the value based on the collection format + if ("multi".equals(collectionFormat)) { + // not valid for path params + return parameterToString(value); + } + + // collectionFormat is assumed to be "csv" by default + String delimiter = ","; + + if ("ssv".equals(collectionFormat)) { + delimiter = " "; + } else if ("tsv".equals(collectionFormat)) { + delimiter = "\t"; + } else if ("pipes".equals(collectionFormat)) { + delimiter = "|"; + } + + StringBuilder sb = new StringBuilder() ; + for (Object item : value) { + sb.append(delimiter); + sb.append(parameterToString(item)); + } + + return sb.substring(delimiter.length()); + } + + /** + * Sanitize filename by removing path. + * e.g. ../../sun.gif becomes sun.gif + * + * @param filename The filename to be sanitized + * @return The sanitized filename + */ + public String sanitizeFilename(String filename) { + return filename.replaceAll(".*[/\\\\]", ""); + } + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + * application/vnd.company+json + * "* / *" is also default to JSON + * @param mime MIME (Multipurpose Internet Mail Extensions) + * @return True if the given MIME is JSON, false otherwise. + */ + public boolean isJsonMime(String mime) { + String jsonMime = "(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$"; + return mime != null && (mime.matches(jsonMime) || mime.equals("*/*")); + } + + /** + * Select the Accept header's value from the given accepts array: + * if JSON exists in the given array, use it; + * otherwise use all of them (joining into a string) + * + * @param accepts The accepts array to select from + * @return The Accept header to use. If the given array is empty, + * null will be returned (not to set the Accept header explicitly). + */ + public String selectHeaderAccept(String[] accepts) { + if (accepts.length == 0) { + return null; + } + for (String accept : accepts) { + if (isJsonMime(accept)) { + return accept; + } + } + return StringUtil.join(accepts, ","); + } + + /** + * Select the Content-Type header's value from the given array: + * if JSON exists in the given array, use it; + * otherwise use the first one of the array. + * + * @param contentTypes The Content-Type array to select from + * @return The Content-Type header to use. If the given array is empty, + * returns null. If it matches "any", JSON will be used. + */ + public String selectHeaderContentType(String[] contentTypes) { + if (contentTypes.length == 0) { + return null; + } + + if (contentTypes[0].equals("*/*")) { + return "application/json"; + } + + for (String contentType : contentTypes) { + if (isJsonMime(contentType)) { + return contentType; + } + } + + return contentTypes[0]; + } + + /** + * Escape the given string to be used as URL query value. + * + * @param str String to be escaped + * @return Escaped string + */ + public String escapeString(String str) { + try { + return URLEncoder.encode(str, "utf8").replaceAll("\\+", "%20"); + } catch (UnsupportedEncodingException e) { + return str; + } + } + + /** + * Deserialize response body to Java object, according to the return type and + * the Content-Type response header. + * + * @param Type + * @param response HTTP response + * @param returnType The type of the Java object + * @return The deserialized Java object + * @throws com.skyflow.generated.rest.ApiException If fail to deserialize response body, i.e. cannot read response body + * or the Content-Type of the response is not supported. + */ + @SuppressWarnings("unchecked") + public T deserialize(Response response, Type returnType) throws ApiException { + if (response == null || returnType == null) { + return null; + } + + if ("byte[]".equals(returnType.toString())) { + // Handle binary response (byte array). + try { + return (T) response.body().bytes(); + } catch (IOException e) { + throw new ApiException(e); + } + } else if (returnType.equals(File.class)) { + // Handle file downloading. + return (T) downloadFileFromResponse(response); + } + + String respBody; + try { + if (response.body() != null) + respBody = response.body().string(); + else + respBody = null; + } catch (IOException e) { + throw new ApiException(e); + } + + if (respBody == null || "".equals(respBody)) { + return null; + } + + String contentType = response.headers().get("Content-Type"); + if (contentType == null) { + // ensuring a default content type + contentType = "application/json"; + } + if (isJsonMime(contentType)) { + return JSON.deserialize(respBody, returnType); + } else if (returnType.equals(String.class)) { + // Expecting string, return the raw response body. + return (T) respBody; + } else { + throw new ApiException( + "Content type \"" + contentType + "\" is not supported for type: " + returnType, + response.code(), + response.headers().toMultimap(), + respBody); + } + } + + /** + * Serialize the given Java object into request body according to the object's + * class and the request Content-Type. + * + * @param obj The Java object + * @param contentType The request Content-Type + * @return The serialized request body + * @throws com.skyflow.generated.rest.ApiException If fail to serialize the given object + */ + public RequestBody serialize(Object obj, String contentType) throws ApiException { + if (obj instanceof byte[]) { + // Binary (byte array) body parameter support. + return RequestBody.create((byte[]) obj, MediaType.parse(contentType)); + } else if (obj instanceof File) { + // File body parameter support. + return RequestBody.create((File) obj, MediaType.parse(contentType)); + } else if ("text/plain".equals(contentType) && obj instanceof String) { + return RequestBody.create((String) obj, MediaType.parse(contentType)); + } else if (isJsonMime(contentType)) { + String content; + if (obj != null) { + content = JSON.serialize(obj); + } else { + content = null; + } + return RequestBody.create(content, MediaType.parse(contentType)); + } else if (obj instanceof String) { + return RequestBody.create((String) obj, MediaType.parse(contentType)); + } else { + throw new ApiException("Content type \"" + contentType + "\" is not supported"); + } + } + + /** + * Download file from the given response. + * + * @param response An instance of the Response object + * @throws com.skyflow.generated.rest.ApiException If fail to read file content from response and write to disk + * @return Downloaded file + */ + public File downloadFileFromResponse(Response response) throws ApiException { + try { + File file = prepareDownloadFile(response); + BufferedSink sink = Okio.buffer(Okio.sink(file)); + sink.writeAll(response.body().source()); + sink.close(); + return file; + } catch (IOException e) { + throw new ApiException(e); + } + } + + /** + * Prepare file for download + * + * @param response An instance of the Response object + * @return Prepared file for the download + * @throws java.io.IOException If fail to prepare file for download + */ + public File prepareDownloadFile(Response response) throws IOException { + String filename = null; + String contentDisposition = response.header("Content-Disposition"); + if (contentDisposition != null && !"".equals(contentDisposition)) { + // Get filename from the Content-Disposition header. + Pattern pattern = Pattern.compile("filename=['\"]?([^'\"\\s]+)['\"]?"); + Matcher matcher = pattern.matcher(contentDisposition); + if (matcher.find()) { + filename = sanitizeFilename(matcher.group(1)); + } + } + + String prefix = null; + String suffix = null; + if (filename == null) { + prefix = "download-"; + suffix = ""; + } else { + int pos = filename.lastIndexOf("."); + if (pos == -1) { + prefix = filename + "-"; + } else { + prefix = filename.substring(0, pos) + "-"; + suffix = filename.substring(pos); + } + // Files.createTempFile requires the prefix to be at least three characters long + if (prefix.length() < 3) + prefix = "download-"; + } + + if (tempFolderPath == null) + return Files.createTempFile(prefix, suffix).toFile(); + else + return Files.createTempFile(Paths.get(tempFolderPath), prefix, suffix).toFile(); + } + + /** + * {@link #execute(Call, Type)} + * + * @param Type + * @param call An instance of the Call object + * @return ApiResponse<T> + * @throws com.skyflow.generated.rest.ApiException If fail to execute the call + */ + public ApiResponse execute(Call call) throws ApiException { + return execute(call, null); + } + + /** + * Execute HTTP call and deserialize the HTTP response body into the given return type. + * + * @param returnType The return type used to deserialize HTTP response body + * @param The return type corresponding to (same with) returnType + * @param call Call + * @return ApiResponse object containing response status, headers and + * data, which is a Java object deserialized from response body and would be null + * when returnType is null. + * @throws com.skyflow.generated.rest.ApiException If fail to execute the call + */ + public ApiResponse execute(Call call, Type returnType) throws ApiException { + try { + Response response = call.execute(); + T data = handleResponse(response, returnType); + return new ApiResponse(response.code(), response.headers().toMultimap(), data); + } catch (IOException e) { + throw new ApiException(e); + } + } + + /** + * {@link #executeAsync(Call, Type, ApiCallback)} + * + * @param Type + * @param call An instance of the Call object + * @param callback ApiCallback<T> + */ + public void executeAsync(Call call, ApiCallback callback) { + executeAsync(call, null, callback); + } + + /** + * Execute HTTP call asynchronously. + * + * @param Type + * @param call The callback to be executed when the API call finishes + * @param returnType Return type + * @param callback ApiCallback + * @see #execute(Call, Type) + */ + @SuppressWarnings("unchecked") + public void executeAsync(Call call, final Type returnType, final ApiCallback callback) { + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + callback.onFailure(new ApiException(e), 0, null); + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + T result; + try { + result = (T) handleResponse(response, returnType); + } catch (ApiException e) { + callback.onFailure(e, response.code(), response.headers().toMultimap()); + return; + } catch (Exception e) { + callback.onFailure(new ApiException(e), response.code(), response.headers().toMultimap()); + return; + } + callback.onSuccess(result, response.code(), response.headers().toMultimap()); + } + }); + } + + /** + * Handle the given response, return the deserialized object when the response is successful. + * + * @param Type + * @param response Response + * @param returnType Return type + * @return Type + * @throws com.skyflow.generated.rest.ApiException If the response has an unsuccessful status code or + * fail to deserialize the response body + */ + public T handleResponse(Response response, Type returnType) throws ApiException { + if (response.isSuccessful()) { + if (returnType == null || response.code() == 204) { + // returning null if the returnType is not defined, + // or the status code is 204 (No Content) + if (response.body() != null) { + try { + response.body().close(); + } catch (Exception e) { + throw new ApiException(response.message(), e, response.code(), response.headers().toMultimap()); + } + } + return null; + } else { + return deserialize(response, returnType); + } + } else { + String respBody = null; + if (response.body() != null) { + try { + respBody = response.body().string(); + } catch (IOException e) { + throw new ApiException(response.message(), e, response.code(), response.headers().toMultimap()); + } + } + throw new ApiException(response.message(), response.code(), response.headers().toMultimap(), respBody); + } + } + + /** + * Build HTTP call with the given options. + * + * @param baseUrl The base URL + * @param path The sub-path of the HTTP URL + * @param method The request method, one of "GET", "HEAD", "OPTIONS", "POST", "PUT", "PATCH" and "DELETE" + * @param queryParams The query parameters + * @param collectionQueryParams The collection query parameters + * @param body The request body object + * @param headerParams The header parameters + * @param cookieParams The cookie parameters + * @param formParams The form parameters + * @param authNames The authentications to apply + * @param callback Callback for upload/download progress + * @return The HTTP call + * @throws com.skyflow.generated.rest.ApiException If fail to serialize the request body object + */ + public Call buildCall(String baseUrl, String path, String method, List queryParams, List collectionQueryParams, Object body, Map headerParams, Map cookieParams, Map formParams, String[] authNames, ApiCallback callback) throws ApiException { + Request request = buildRequest(baseUrl, path, method, queryParams, collectionQueryParams, body, headerParams, cookieParams, formParams, authNames, callback); + + return httpClient.newCall(request); + } + + /** + * Build an HTTP request with the given options. + * + * @param baseUrl The base URL + * @param path The sub-path of the HTTP URL + * @param method The request method, one of "GET", "HEAD", "OPTIONS", "POST", "PUT", "PATCH" and "DELETE" + * @param queryParams The query parameters + * @param collectionQueryParams The collection query parameters + * @param body The request body object + * @param headerParams The header parameters + * @param cookieParams The cookie parameters + * @param formParams The form parameters + * @param authNames The authentications to apply + * @param callback Callback for upload/download progress + * @return The HTTP request + * @throws com.skyflow.generated.rest.ApiException If fail to serialize the request body object + */ + public Request buildRequest(String baseUrl, String path, String method, List queryParams, List collectionQueryParams, Object body, Map headerParams, Map cookieParams, Map formParams, String[] authNames, ApiCallback callback) throws ApiException { + final String url = buildUrl(baseUrl, path, queryParams, collectionQueryParams); + + // prepare HTTP request body + RequestBody reqBody; + String contentType = headerParams.get("Content-Type"); + String contentTypePure = contentType; + if (contentTypePure != null && contentTypePure.contains(";")) { + contentTypePure = contentType.substring(0, contentType.indexOf(";")); + } + if (!HttpMethod.permitsRequestBody(method)) { + reqBody = null; + } else if ("application/x-www-form-urlencoded".equals(contentTypePure)) { + reqBody = buildRequestBodyFormEncoding(formParams); + } else if ("multipart/form-data".equals(contentTypePure)) { + reqBody = buildRequestBodyMultipart(formParams); + } else if (body == null) { + if ("DELETE".equals(method)) { + // allow calling DELETE without sending a request body + reqBody = null; + } else { + // use an empty request body (for POST, PUT and PATCH) + reqBody = RequestBody.create("", contentType == null ? null : MediaType.parse(contentType)); + } + } else { + reqBody = serialize(body, contentType); + } + + List updatedQueryParams = new ArrayList<>(queryParams); + + // update parameters with authentication settings + updateParamsForAuth(authNames, updatedQueryParams, headerParams, cookieParams, requestBodyToString(reqBody), method, URI.create(url)); + + final Request.Builder reqBuilder = new Request.Builder().url(buildUrl(baseUrl, path, updatedQueryParams, collectionQueryParams)); + processHeaderParams(headerParams, reqBuilder); + processCookieParams(cookieParams, reqBuilder); + + // Associate callback with request (if not null) so interceptor can + // access it when creating ProgressResponseBody + reqBuilder.tag(callback); + + Request request = null; + + if (callback != null && reqBody != null) { + ProgressRequestBody progressRequestBody = new ProgressRequestBody(reqBody, callback); + request = reqBuilder.method(method, progressRequestBody).build(); + } else { + request = reqBuilder.method(method, reqBody).build(); + } + + return request; + } + + /** + * Build full URL by concatenating base path, the given sub path and query parameters. + * + * @param baseUrl The base URL + * @param path The sub path + * @param queryParams The query parameters + * @param collectionQueryParams The collection query parameters + * @return The full URL + */ + public String buildUrl(String baseUrl, String path, List queryParams, List collectionQueryParams) { + final StringBuilder url = new StringBuilder(); + if (baseUrl != null) { + url.append(baseUrl).append(path); + } else { + String baseURL; + if (serverIndex != null) { + if (serverIndex < 0 || serverIndex >= servers.size()) { + throw new ArrayIndexOutOfBoundsException(String.format( + "Invalid index %d when selecting the host settings. Must be less than %d", serverIndex, servers.size() + )); + } + baseURL = servers.get(serverIndex).URL(serverVariables); + } else { + baseURL = basePath; + } + url.append(baseURL).append(path); + } + + if (queryParams != null && !queryParams.isEmpty()) { + // support (constant) query string in `path`, e.g. "/posts?draft=1" + String prefix = path.contains("?") ? "&" : "?"; + for (Pair param : queryParams) { + if (param.getValue() != null) { + if (prefix != null) { + url.append(prefix); + prefix = null; + } else { + url.append("&"); + } + String value = parameterToString(param.getValue()); + url.append(escapeString(param.getName())).append("=").append(escapeString(value)); + } + } + } + + if (collectionQueryParams != null && !collectionQueryParams.isEmpty()) { + String prefix = url.toString().contains("?") ? "&" : "?"; + for (Pair param : collectionQueryParams) { + if (param.getValue() != null) { + if (prefix != null) { + url.append(prefix); + prefix = null; + } else { + url.append("&"); + } + String value = parameterToString(param.getValue()); + // collection query parameter value already escaped as part of parameterToPairs + url.append(escapeString(param.getName())).append("=").append(value); + } + } + } + + return url.toString(); + } + + /** + * Set header parameters to the request builder, including default headers. + * + * @param headerParams Header parameters in the form of Map + * @param reqBuilder Request.Builder + */ + public void processHeaderParams(Map headerParams, Request.Builder reqBuilder) { + for (Entry param : headerParams.entrySet()) { + reqBuilder.header(param.getKey(), parameterToString(param.getValue())); + } + for (Entry header : defaultHeaderMap.entrySet()) { + if (!headerParams.containsKey(header.getKey())) { + reqBuilder.header(header.getKey(), parameterToString(header.getValue())); + } + } + } + + /** + * Set cookie parameters to the request builder, including default cookies. + * + * @param cookieParams Cookie parameters in the form of Map + * @param reqBuilder Request.Builder + */ + public void processCookieParams(Map cookieParams, Request.Builder reqBuilder) { + for (Entry param : cookieParams.entrySet()) { + reqBuilder.addHeader("Cookie", String.format("%s=%s", param.getKey(), param.getValue())); + } + for (Entry param : defaultCookieMap.entrySet()) { + if (!cookieParams.containsKey(param.getKey())) { + reqBuilder.addHeader("Cookie", String.format("%s=%s", param.getKey(), param.getValue())); + } + } + } + + /** + * Update query and header parameters based on authentication settings. + * + * @param authNames The authentications to apply + * @param queryParams List of query parameters + * @param headerParams Map of header parameters + * @param cookieParams Map of cookie parameters + * @param payload HTTP request body + * @param method HTTP method + * @param uri URI + * @throws com.skyflow.generated.rest.ApiException If fails to update the parameters + */ + public void updateParamsForAuth(String[] authNames, List queryParams, Map headerParams, + Map cookieParams, String payload, String method, URI uri) throws ApiException { + for (String authName : authNames) { + Authentication auth = authentications.get(authName); + if (auth == null) { + throw new RuntimeException("Authentication undefined: " + authName); + } + auth.applyToParams(queryParams, headerParams, cookieParams, payload, method, uri); + } + } + + /** + * Build a form-encoding request body with the given form parameters. + * + * @param formParams Form parameters in the form of Map + * @return RequestBody + */ + public RequestBody buildRequestBodyFormEncoding(Map formParams) { + okhttp3.FormBody.Builder formBuilder = new okhttp3.FormBody.Builder(); + for (Entry param : formParams.entrySet()) { + formBuilder.add(param.getKey(), parameterToString(param.getValue())); + } + return formBuilder.build(); + } + + /** + * Build a multipart (file uploading) request body with the given form parameters, + * which could contain text fields and file fields. + * + * @param formParams Form parameters in the form of Map + * @return RequestBody + */ + public RequestBody buildRequestBodyMultipart(Map formParams) { + MultipartBody.Builder mpBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM); + for (Entry param : formParams.entrySet()) { + if (param.getValue() instanceof File) { + File file = (File) param.getValue(); + addPartToMultiPartBuilder(mpBuilder, param.getKey(), file); + } else if (param.getValue() instanceof List) { + List list = (List) param.getValue(); + for (Object item: list) { + if (item instanceof File) { + addPartToMultiPartBuilder(mpBuilder, param.getKey(), (File) item); + } else { + addPartToMultiPartBuilder(mpBuilder, param.getKey(), param.getValue()); + } + } + } else { + addPartToMultiPartBuilder(mpBuilder, param.getKey(), param.getValue()); + } + } + return mpBuilder.build(); + } + + /** + * Guess Content-Type header from the given file (defaults to "application/octet-stream"). + * + * @param file The given file + * @return The guessed Content-Type + */ + public String guessContentTypeFromFile(File file) { + String contentType = URLConnection.guessContentTypeFromName(file.getName()); + if (contentType == null) { + return "application/octet-stream"; + } else { + return contentType; + } + } + + /** + * Add a Content-Disposition Header for the given key and file to the MultipartBody Builder. + * + * @param mpBuilder MultipartBody.Builder + * @param key The key of the Header element + * @param file The file to add to the Header + */ + private void addPartToMultiPartBuilder(MultipartBody.Builder mpBuilder, String key, File file) { + Headers partHeaders = Headers.of("Content-Disposition", "form-data; name=\"" + key + "\"; filename=\"" + file.getName() + "\""); + MediaType mediaType = MediaType.parse(guessContentTypeFromFile(file)); + mpBuilder.addPart(partHeaders, RequestBody.create(file, mediaType)); + } + + /** + * Add a Content-Disposition Header for the given key and complex object to the MultipartBody Builder. + * + * @param mpBuilder MultipartBody.Builder + * @param key The key of the Header element + * @param obj The complex object to add to the Header + */ + private void addPartToMultiPartBuilder(MultipartBody.Builder mpBuilder, String key, Object obj) { + RequestBody requestBody; + if (obj instanceof String) { + requestBody = RequestBody.create((String) obj, MediaType.parse("text/plain")); + } else { + String content; + if (obj != null) { + content = JSON.serialize(obj); + } else { + content = null; + } + requestBody = RequestBody.create(content, MediaType.parse("application/json")); + } + + Headers partHeaders = Headers.of("Content-Disposition", "form-data; name=\"" + key + "\""); + mpBuilder.addPart(partHeaders, requestBody); + } + + /** + * Get network interceptor to add it to the httpClient to track download progress for + * async requests. + */ + private Interceptor getProgressInterceptor() { + return new Interceptor() { + @Override + public Response intercept(Interceptor.Chain chain) throws IOException { + final Request request = chain.request(); + final Response originalResponse = chain.proceed(request); + if (request.tag() instanceof ApiCallback) { + final ApiCallback callback = (ApiCallback) request.tag(); + return originalResponse.newBuilder() + .body(new ProgressResponseBody(originalResponse.body(), callback)) + .build(); + } + return originalResponse; + } + }; + } + + /** + * Apply SSL related settings to httpClient according to the current values of + * verifyingSsl and sslCaCert. + */ + private void applySslSettings() { + try { + TrustManager[] trustManagers; + HostnameVerifier hostnameVerifier; + if (!verifyingSsl) { + trustManagers = new TrustManager[]{ + new X509TrustManager() { + @Override + public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { + } + + @Override + public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { + } + + @Override + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return new java.security.cert.X509Certificate[]{}; + } + } + }; + hostnameVerifier = new HostnameVerifier() { + @Override + public boolean verify(String hostname, SSLSession session) { + return true; + } + }; + } else { + TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + + if (sslCaCert == null) { + trustManagerFactory.init((KeyStore) null); + } else { + char[] password = null; // Any password will work. + CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); + Collection certificates = certificateFactory.generateCertificates(sslCaCert); + if (certificates.isEmpty()) { + throw new IllegalArgumentException("expected non-empty set of trusted certificates"); + } + KeyStore caKeyStore = newEmptyKeyStore(password); + int index = 0; + for (Certificate certificate : certificates) { + String certificateAlias = "ca" + (index++); + caKeyStore.setCertificateEntry(certificateAlias, certificate); + } + trustManagerFactory.init(caKeyStore); + } + trustManagers = trustManagerFactory.getTrustManagers(); + hostnameVerifier = OkHostnameVerifier.INSTANCE; + } + + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(keyManagers, trustManagers, new SecureRandom()); + httpClient = httpClient.newBuilder() + .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustManagers[0]) + .hostnameVerifier(hostnameVerifier) + .build(); + } catch (GeneralSecurityException e) { + throw new RuntimeException(e); + } + } + + private KeyStore newEmptyKeyStore(char[] password) throws GeneralSecurityException { + try { + KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); + keyStore.load(null, password); + return keyStore; + } catch (IOException e) { + throw new AssertionError(e); + } + } + + /** + * Convert the HTTP request body to a string. + * + * @param requestBody The HTTP request object + * @return The string representation of the HTTP request body + * @throws com.skyflow.generated.rest.ApiException If fail to serialize the request body object into a string + */ + private String requestBodyToString(RequestBody requestBody) throws ApiException { + if (requestBody != null) { + try { + final Buffer buffer = new Buffer(); + requestBody.writeTo(buffer); + return buffer.readUtf8(); + } catch (final IOException e) { + throw new ApiException(e); + } + } + + // empty http request body + return ""; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/ApiException.java b/v2/src/main/java/com/skyflow/generated/rest/ApiException.java new file mode 100644 index 00000000..d10c995e --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/ApiException.java @@ -0,0 +1,167 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +import java.util.Map; +import java.util.List; + + +/** + *

ApiException class.

+ */ +@SuppressWarnings("serial") +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class ApiException extends Exception { + private static final long serialVersionUID = 1L; + + private int code = 0; + private Map> responseHeaders = null; + private String responseBody = null; + + /** + *

Constructor for ApiException.

+ */ + public ApiException() {} + + /** + *

Constructor for ApiException.

+ * + * @param throwable a {@link java.lang.Throwable} object + */ + public ApiException(Throwable throwable) { + super(throwable); + } + + /** + *

Constructor for ApiException.

+ * + * @param message the error message + */ + public ApiException(String message) { + super(message); + } + + /** + *

Constructor for ApiException.

+ * + * @param message the error message + * @param throwable a {@link java.lang.Throwable} object + * @param code HTTP status code + * @param responseHeaders a {@link java.util.Map} of HTTP response headers + * @param responseBody the response body + */ + public ApiException(String message, Throwable throwable, int code, Map> responseHeaders, String responseBody) { + super(message, throwable); + this.code = code; + this.responseHeaders = responseHeaders; + this.responseBody = responseBody; + } + + /** + *

Constructor for ApiException.

+ * + * @param message the error message + * @param code HTTP status code + * @param responseHeaders a {@link java.util.Map} of HTTP response headers + * @param responseBody the response body + */ + public ApiException(String message, int code, Map> responseHeaders, String responseBody) { + this(message, (Throwable) null, code, responseHeaders, responseBody); + } + + /** + *

Constructor for ApiException.

+ * + * @param message the error message + * @param throwable a {@link java.lang.Throwable} object + * @param code HTTP status code + * @param responseHeaders a {@link java.util.Map} of HTTP response headers + */ + public ApiException(String message, Throwable throwable, int code, Map> responseHeaders) { + this(message, throwable, code, responseHeaders, null); + } + + /** + *

Constructor for ApiException.

+ * + * @param code HTTP status code + * @param responseHeaders a {@link java.util.Map} of HTTP response headers + * @param responseBody the response body + */ + public ApiException(int code, Map> responseHeaders, String responseBody) { + this("Response Code: " + code + " Response Body: " + responseBody, (Throwable) null, code, responseHeaders, responseBody); + } + + /** + *

Constructor for ApiException.

+ * + * @param code HTTP status code + * @param message a {@link java.lang.String} object + */ + public ApiException(int code, String message) { + super(message); + this.code = code; + } + + /** + *

Constructor for ApiException.

+ * + * @param code HTTP status code + * @param message the error message + * @param responseHeaders a {@link java.util.Map} of HTTP response headers + * @param responseBody the response body + */ + public ApiException(int code, String message, Map> responseHeaders, String responseBody) { + this(code, message); + this.responseHeaders = responseHeaders; + this.responseBody = responseBody; + } + + /** + * Get the HTTP status code. + * + * @return HTTP status code + */ + public int getCode() { + return code; + } + + /** + * Get the HTTP response headers. + * + * @return A map of list of string + */ + public Map> getResponseHeaders() { + return responseHeaders; + } + + /** + * Get the HTTP response body. + * + * @return Response body in the form of string + */ + public String getResponseBody() { + return responseBody; + } + + /** + * Get the exception message including HTTP response data. + * + * @return The exception message + */ + public String getMessage() { + return String.format("Message: %s%nHTTP response code: %s%nHTTP response body: %s%nHTTP response headers: %s", + super.getMessage(), this.getCode(), this.getResponseBody(), this.getResponseHeaders()); + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/ApiResponse.java b/v2/src/main/java/com/skyflow/generated/rest/ApiResponse.java new file mode 100644 index 00000000..d3cdb698 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/ApiResponse.java @@ -0,0 +1,76 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +import java.util.List; +import java.util.Map; + +/** + * API response returned by API call. + */ +public class ApiResponse { + final private int statusCode; + final private Map> headers; + final private T data; + + /** + *

Constructor for ApiResponse.

+ * + * @param statusCode The status code of HTTP response + * @param headers The headers of HTTP response + */ + public ApiResponse(int statusCode, Map> headers) { + this(statusCode, headers, null); + } + + /** + *

Constructor for ApiResponse.

+ * + * @param statusCode The status code of HTTP response + * @param headers The headers of HTTP response + * @param data The object deserialized from response bod + */ + public ApiResponse(int statusCode, Map> headers, T data) { + this.statusCode = statusCode; + this.headers = headers; + this.data = data; + } + + /** + *

Get the status code.

+ * + * @return the status code + */ + public int getStatusCode() { + return statusCode; + } + + /** + *

Get the headers.

+ * + * @return a {@link java.util.Map} of headers + */ + public Map> getHeaders() { + return headers; + } + + /** + *

Get the data.

+ * + * @return the data + */ + public T getData() { + return data; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/Configuration.java b/v2/src/main/java/com/skyflow/generated/rest/Configuration.java new file mode 100644 index 00000000..6b12e8bb --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/Configuration.java @@ -0,0 +1,41 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class Configuration { + public static final String VERSION = "v1"; + + private static ApiClient defaultApiClient = new ApiClient(); + + /** + * Get the default API client, which would be used when creating API + * instances without providing an API client. + * + * @return Default API client + */ + public static ApiClient getDefaultApiClient() { + return defaultApiClient; + } + + /** + * Set the default API client, which would be used when creating API + * instances without providing an API client. + * + * @param apiClient API client + */ + public static void setDefaultApiClient(ApiClient apiClient) { + defaultApiClient = apiClient; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/GzipRequestInterceptor.java b/v2/src/main/java/com/skyflow/generated/rest/GzipRequestInterceptor.java new file mode 100644 index 00000000..2b69f358 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/GzipRequestInterceptor.java @@ -0,0 +1,85 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +import okhttp3.*; +import okio.Buffer; +import okio.BufferedSink; +import okio.GzipSink; +import okio.Okio; + +import java.io.IOException; + +/** + * Encodes request bodies using gzip. + * + * Taken from https://github.com/square/okhttp/issues/350 + */ +class GzipRequestInterceptor implements Interceptor { + @Override + public Response intercept(Chain chain) throws IOException { + Request originalRequest = chain.request(); + if (originalRequest.body() == null || originalRequest.header("Content-Encoding") != null) { + return chain.proceed(originalRequest); + } + + Request compressedRequest = originalRequest.newBuilder() + .header("Content-Encoding", "gzip") + .method(originalRequest.method(), forceContentLength(gzip(originalRequest.body()))) + .build(); + return chain.proceed(compressedRequest); + } + + private RequestBody forceContentLength(final RequestBody requestBody) throws IOException { + final Buffer buffer = new Buffer(); + requestBody.writeTo(buffer); + return new RequestBody() { + @Override + public MediaType contentType() { + return requestBody.contentType(); + } + + @Override + public long contentLength() { + return buffer.size(); + } + + @Override + public void writeTo(BufferedSink sink) throws IOException { + sink.write(buffer.snapshot()); + } + }; + } + + private RequestBody gzip(final RequestBody body) { + return new RequestBody() { + @Override + public MediaType contentType() { + return body.contentType(); + } + + @Override + public long contentLength() { + return -1; // We don't know the compressed length in advance! + } + + @Override + public void writeTo(BufferedSink sink) throws IOException { + BufferedSink gzipSink = Okio.buffer(new GzipSink(sink)); + body.writeTo(gzipSink); + gzipSink.close(); + } + }; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/JSON.java b/v2/src/main/java/com/skyflow/generated/rest/JSON.java new file mode 100644 index 00000000..8e6e8375 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/JSON.java @@ -0,0 +1,440 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapter; +import com.google.gson.internal.bind.util.ISO8601Utils; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.google.gson.JsonElement; +import io.gsonfire.GsonFireBuilder; +import io.gsonfire.TypeSelector; + +import okio.ByteString; + +import java.io.IOException; +import java.io.StringReader; +import java.lang.reflect.Type; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.ParsePosition; +import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.Locale; +import java.util.Map; +import java.util.HashMap; + +/* + * A JSON utility class + * + * NOTE: in the future, this class may be converted to static, which may break + * backward-compatibility + */ +public class JSON { + private static Gson gson; + private static boolean isLenientOnJson = false; + private static DateTypeAdapter dateTypeAdapter = new DateTypeAdapter(); + private static SqlDateTypeAdapter sqlDateTypeAdapter = new SqlDateTypeAdapter(); + private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter(); + private static LocalDateTypeAdapter localDateTypeAdapter = new LocalDateTypeAdapter(); + private static ByteArrayAdapter byteArrayAdapter = new ByteArrayAdapter(); + + @SuppressWarnings("unchecked") + public static GsonBuilder createGson() { + GsonFireBuilder fireBuilder = new GsonFireBuilder() + ; + GsonBuilder builder = fireBuilder.createGsonBuilder(); + return builder; + } + + private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) { + JsonElement element = readElement.getAsJsonObject().get(discriminatorField); + if (null == element) { + throw new IllegalArgumentException("missing discriminator field: <" + discriminatorField + ">"); + } + return element.getAsString(); + } + + /** + * Returns the Java class that implements the OpenAPI schema for the specified discriminator value. + * + * @param classByDiscriminatorValue The map of discriminator values to Java classes. + * @param discriminatorValue The value of the OpenAPI discriminator in the input data. + * @return The Java class that implements the OpenAPI schema + */ + private static Class getClassByDiscriminator(Map classByDiscriminatorValue, String discriminatorValue) { + Class clazz = (Class) classByDiscriminatorValue.get(discriminatorValue); + if (null == clazz) { + throw new IllegalArgumentException("cannot determine model class of name: <" + discriminatorValue + ">"); + } + return clazz; + } + + static { + GsonBuilder gsonBuilder = createGson(); + gsonBuilder.registerTypeAdapter(Date.class, dateTypeAdapter); + gsonBuilder.registerTypeAdapter(java.sql.Date.class, sqlDateTypeAdapter); + gsonBuilder.registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter); + gsonBuilder.registerTypeAdapter(LocalDate.class, localDateTypeAdapter); + gsonBuilder.registerTypeAdapter(byte[].class, byteArrayAdapter); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.AuditEventContext.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.AuditEventData.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.AuditEventHTTPInfo.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.GooglerpcStatus.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.ProtobufAny.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.QueryServiceExecuteQueryBody.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.RecordServiceBatchOperationBody.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.RecordServiceBulkDeleteRecordBody.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.RecordServiceInsertRecordBody.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.RecordServiceUpdateRecordBody.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1AuditAfterOptions.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1AuditEventResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1AuditResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1AuditResponseEvent.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1AuditResponseEventRequest.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1BINListRequest.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1BINListResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1BatchOperationResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1BatchRecord.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1BulkDeleteRecordResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1BulkGetRecordResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1Card.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1DeleteFileResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1DeleteRecordResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1DetokenizePayload.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1DetokenizeRecordRequest.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1DetokenizeRecordResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1DetokenizeResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1FieldRecords.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1GetFileScanStatusResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1GetQueryResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1InsertRecordResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1RecordMetaProperties.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1TokenizePayload.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1TokenizeRecordRequest.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1TokenizeRecordResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1TokenizeResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1UpdateRecordResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1VaultFieldMapping.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new com.skyflow.generated.rest.models.V1VaultSchemaConfig.CustomTypeAdapterFactory()); + gson = gsonBuilder.create(); + } + + /** + * Get Gson. + * + * @return Gson + */ + public static Gson getGson() { + return gson; + } + + /** + * Set Gson. + * + * @param gson Gson + */ + public static void setGson(Gson gson) { + JSON.gson = gson; + } + + public static void setLenientOnJson(boolean lenientOnJson) { + isLenientOnJson = lenientOnJson; + } + + /** + * Serialize the given Java object into JSON string. + * + * @param obj Object + * @return String representation of the JSON + */ + public static String serialize(Object obj) { + return gson.toJson(obj); + } + + /** + * Deserialize the given JSON string to Java object. + * + * @param Type + * @param body The JSON string + * @param returnType The type to deserialize into + * @return The deserialized Java object + */ + @SuppressWarnings("unchecked") + public static T deserialize(String body, Type returnType) { + try { + if (isLenientOnJson) { + JsonReader jsonReader = new JsonReader(new StringReader(body)); + // see https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/stream/JsonReader.html#setLenient(boolean) + jsonReader.setLenient(true); + return gson.fromJson(jsonReader, returnType); + } else { + return gson.fromJson(body, returnType); + } + } catch (JsonParseException e) { + // Fallback processing when failed to parse JSON form response body: + // return the response body string directly for the String return type; + if (returnType.equals(String.class)) { + return (T) body; + } else { + throw (e); + } + } + } + + /** + * Gson TypeAdapter for Byte Array type + */ + public static class ByteArrayAdapter extends TypeAdapter { + + @Override + public void write(JsonWriter out, byte[] value) throws IOException { + if (value == null) { + out.nullValue(); + } else { + out.value(ByteString.of(value).base64()); + } + } + + @Override + public byte[] read(JsonReader in) throws IOException { + switch (in.peek()) { + case NULL: + in.nextNull(); + return null; + default: + String bytesAsBase64 = in.nextString(); + ByteString byteString = ByteString.decodeBase64(bytesAsBase64); + return byteString.toByteArray(); + } + } + } + + /** + * Gson TypeAdapter for JSR310 OffsetDateTime type + */ + public static class OffsetDateTimeTypeAdapter extends TypeAdapter { + + private DateTimeFormatter formatter; + + public OffsetDateTimeTypeAdapter() { + this(DateTimeFormatter.ISO_OFFSET_DATE_TIME); + } + + public OffsetDateTimeTypeAdapter(DateTimeFormatter formatter) { + this.formatter = formatter; + } + + public void setFormat(DateTimeFormatter dateFormat) { + this.formatter = dateFormat; + } + + @Override + public void write(JsonWriter out, OffsetDateTime date) throws IOException { + if (date == null) { + out.nullValue(); + } else { + out.value(formatter.format(date)); + } + } + + @Override + public OffsetDateTime read(JsonReader in) throws IOException { + switch (in.peek()) { + case NULL: + in.nextNull(); + return null; + default: + String date = in.nextString(); + if (date.endsWith("+0000")) { + date = date.substring(0, date.length()-5) + "Z"; + } + return OffsetDateTime.parse(date, formatter); + } + } + } + + /** + * Gson TypeAdapter for JSR310 LocalDate type + */ + public static class LocalDateTypeAdapter extends TypeAdapter { + + private DateTimeFormatter formatter; + + public LocalDateTypeAdapter() { + this(DateTimeFormatter.ISO_LOCAL_DATE); + } + + public LocalDateTypeAdapter(DateTimeFormatter formatter) { + this.formatter = formatter; + } + + public void setFormat(DateTimeFormatter dateFormat) { + this.formatter = dateFormat; + } + + @Override + public void write(JsonWriter out, LocalDate date) throws IOException { + if (date == null) { + out.nullValue(); + } else { + out.value(formatter.format(date)); + } + } + + @Override + public LocalDate read(JsonReader in) throws IOException { + switch (in.peek()) { + case NULL: + in.nextNull(); + return null; + default: + String date = in.nextString(); + return LocalDate.parse(date, formatter); + } + } + } + + public static void setOffsetDateTimeFormat(DateTimeFormatter dateFormat) { + offsetDateTimeTypeAdapter.setFormat(dateFormat); + } + + public static void setLocalDateFormat(DateTimeFormatter dateFormat) { + localDateTypeAdapter.setFormat(dateFormat); + } + + /** + * Gson TypeAdapter for java.sql.Date type + * If the dateFormat is null, a simple "yyyy-MM-dd" format will be used + * (more efficient than SimpleDateFormat). + */ + public static class SqlDateTypeAdapter extends TypeAdapter { + + private DateFormat dateFormat; + + public SqlDateTypeAdapter() {} + + public SqlDateTypeAdapter(DateFormat dateFormat) { + this.dateFormat = dateFormat; + } + + public void setFormat(DateFormat dateFormat) { + this.dateFormat = dateFormat; + } + + @Override + public void write(JsonWriter out, java.sql.Date date) throws IOException { + if (date == null) { + out.nullValue(); + } else { + String value; + if (dateFormat != null) { + value = dateFormat.format(date); + } else { + value = date.toString(); + } + out.value(value); + } + } + + @Override + public java.sql.Date read(JsonReader in) throws IOException { + switch (in.peek()) { + case NULL: + in.nextNull(); + return null; + default: + String date = in.nextString(); + try { + if (dateFormat != null) { + return new java.sql.Date(dateFormat.parse(date).getTime()); + } + return new java.sql.Date(ISO8601Utils.parse(date, new ParsePosition(0)).getTime()); + } catch (ParseException e) { + throw new JsonParseException(e); + } + } + } + } + + /** + * Gson TypeAdapter for java.util.Date type + * If the dateFormat is null, ISO8601Utils will be used. + */ + public static class DateTypeAdapter extends TypeAdapter { + + private DateFormat dateFormat; + + public DateTypeAdapter() {} + + public DateTypeAdapter(DateFormat dateFormat) { + this.dateFormat = dateFormat; + } + + public void setFormat(DateFormat dateFormat) { + this.dateFormat = dateFormat; + } + + @Override + public void write(JsonWriter out, Date date) throws IOException { + if (date == null) { + out.nullValue(); + } else { + String value; + if (dateFormat != null) { + value = dateFormat.format(date); + } else { + value = ISO8601Utils.format(date, true); + } + out.value(value); + } + } + + @Override + public Date read(JsonReader in) throws IOException { + try { + switch (in.peek()) { + case NULL: + in.nextNull(); + return null; + default: + String date = in.nextString(); + try { + if (dateFormat != null) { + return dateFormat.parse(date); + } + return ISO8601Utils.parse(date, new ParsePosition(0)); + } catch (ParseException e) { + throw new JsonParseException(e); + } + } + } catch (IllegalArgumentException e) { + throw new JsonParseException(e); + } + } + } + + public static void setDateFormat(DateFormat dateFormat) { + dateTypeAdapter.setFormat(dateFormat); + } + + public static void setSqlDateFormat(DateFormat dateFormat) { + sqlDateTypeAdapter.setFormat(dateFormat); + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/Pair.java b/v2/src/main/java/com/skyflow/generated/rest/Pair.java new file mode 100644 index 00000000..0f182d02 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/Pair.java @@ -0,0 +1,57 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class Pair { + private String name = ""; + private String value = ""; + + public Pair (String name, String value) { + setName(name); + setValue(value); + } + + private void setName(String name) { + if (!isValidString(name)) { + return; + } + + this.name = name; + } + + private void setValue(String value) { + if (!isValidString(value)) { + return; + } + + this.value = value; + } + + public String getName() { + return this.name; + } + + public String getValue() { + return this.value; + } + + private boolean isValidString(String arg) { + if (arg == null) { + return false; + } + + return true; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/ProgressRequestBody.java b/v2/src/main/java/com/skyflow/generated/rest/ProgressRequestBody.java new file mode 100644 index 00000000..38d16e94 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/ProgressRequestBody.java @@ -0,0 +1,73 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +import okhttp3.MediaType; +import okhttp3.RequestBody; + +import java.io.IOException; + +import okio.Buffer; +import okio.BufferedSink; +import okio.ForwardingSink; +import okio.Okio; +import okio.Sink; + +public class ProgressRequestBody extends RequestBody { + + private final RequestBody requestBody; + + private final ApiCallback callback; + + public ProgressRequestBody(RequestBody requestBody, ApiCallback callback) { + this.requestBody = requestBody; + this.callback = callback; + } + + @Override + public MediaType contentType() { + return requestBody.contentType(); + } + + @Override + public long contentLength() throws IOException { + return requestBody.contentLength(); + } + + @Override + public void writeTo(BufferedSink sink) throws IOException { + BufferedSink bufferedSink = Okio.buffer(sink(sink)); + requestBody.writeTo(bufferedSink); + bufferedSink.flush(); + } + + private Sink sink(Sink sink) { + return new ForwardingSink(sink) { + + long bytesWritten = 0L; + long contentLength = 0L; + + @Override + public void write(Buffer source, long byteCount) throws IOException { + super.write(source, byteCount); + if (contentLength == 0) { + contentLength = contentLength(); + } + + bytesWritten += byteCount; + callback.onUploadProgress(bytesWritten, contentLength, bytesWritten == contentLength); + } + }; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/ProgressResponseBody.java b/v2/src/main/java/com/skyflow/generated/rest/ProgressResponseBody.java new file mode 100644 index 00000000..6bd61b5a --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/ProgressResponseBody.java @@ -0,0 +1,70 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +import okhttp3.MediaType; +import okhttp3.ResponseBody; + +import java.io.IOException; + +import okio.Buffer; +import okio.BufferedSource; +import okio.ForwardingSource; +import okio.Okio; +import okio.Source; + +public class ProgressResponseBody extends ResponseBody { + + private final ResponseBody responseBody; + private final ApiCallback callback; + private BufferedSource bufferedSource; + + public ProgressResponseBody(ResponseBody responseBody, ApiCallback callback) { + this.responseBody = responseBody; + this.callback = callback; + } + + @Override + public MediaType contentType() { + return responseBody.contentType(); + } + + @Override + public long contentLength() { + return responseBody.contentLength(); + } + + @Override + public BufferedSource source() { + if (bufferedSource == null) { + bufferedSource = Okio.buffer(source(responseBody.source())); + } + return bufferedSource; + } + + private Source source(Source source) { + return new ForwardingSource(source) { + long totalBytesRead = 0L; + + @Override + public long read(Buffer sink, long byteCount) throws IOException { + long bytesRead = super.read(sink, byteCount); + // read() returns the number of bytes read, or -1 if this source is exhausted. + totalBytesRead += bytesRead != -1 ? bytesRead : 0; + callback.onDownloadProgress(totalBytesRead, responseBody.contentLength(), bytesRead == -1); + return bytesRead; + } + }; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/ServerConfiguration.java b/v2/src/main/java/com/skyflow/generated/rest/ServerConfiguration.java new file mode 100644 index 00000000..f91ef52d --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/ServerConfiguration.java @@ -0,0 +1,72 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +import java.util.Map; + +/** + * Representing a Server configuration. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class ServerConfiguration { + public String URL; + public String description; + public Map variables; + + /** + * @param URL A URL to the target host. + * @param description A description of the host designated by the URL. + * @param variables A map between a variable name and its value. The value is used for substitution in the server's URL template. + */ + public ServerConfiguration(String URL, String description, Map variables) { + this.URL = URL; + this.description = description; + this.variables = variables; + } + + /** + * Format URL template using given variables. + * + * @param variables A map between a variable name and its value. + * @return Formatted URL. + */ + public String URL(Map variables) { + String url = this.URL; + + // go through variables and replace placeholders + for (Map.Entry variable: this.variables.entrySet()) { + String name = variable.getKey(); + ServerVariable serverVariable = variable.getValue(); + String value = serverVariable.defaultValue; + + if (variables != null && variables.containsKey(name)) { + value = variables.get(name); + if (serverVariable.enumValues.size() > 0 && !serverVariable.enumValues.contains(value)) { + throw new IllegalArgumentException("The variable " + name + " in the server URL has invalid value " + value + "."); + } + } + url = url.replace("{" + name + "}", value); + } + return url; + } + + /** + * Format URL template using default server variables. + * + * @return Formatted URL. + */ + public String URL() { + return URL(null); + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/ServerVariable.java b/v2/src/main/java/com/skyflow/generated/rest/ServerVariable.java new file mode 100644 index 00000000..53b17180 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/ServerVariable.java @@ -0,0 +1,37 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +import java.util.HashSet; + +/** + * Representing a Server Variable for server URL template substitution. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class ServerVariable { + public String description; + public String defaultValue; + public HashSet enumValues = null; + + /** + * @param description A description for the server variable. + * @param defaultValue The default value to use for substitution. + * @param enumValues An enumeration of string values to be used if the substitution options are from a limited set. + */ + public ServerVariable(String description, String defaultValue, HashSet enumValues) { + this.description = description; + this.defaultValue = defaultValue; + this.enumValues = enumValues; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/StringUtil.java b/v2/src/main/java/com/skyflow/generated/rest/StringUtil.java new file mode 100644 index 00000000..433e15d7 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/StringUtil.java @@ -0,0 +1,83 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest; + +import java.util.Collection; +import java.util.Iterator; + +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class StringUtil { + /** + * Check if the given array contains the given value (with case-insensitive comparison). + * + * @param array The array + * @param value The value to search + * @return true if the array contains the value + */ + public static boolean containsIgnoreCase(String[] array, String value) { + for (String str : array) { + if (value == null && str == null) { + return true; + } + if (value != null && value.equalsIgnoreCase(str)) { + return true; + } + } + return false; + } + + /** + * Join an array of strings with the given separator. + *

+ * Note: This might be replaced by utility method from commons-lang or guava someday + * if one of those libraries is added as dependency. + *

+ * + * @param array The array of strings + * @param separator The separator + * @return the resulting string + */ + public static String join(String[] array, String separator) { + int len = array.length; + if (len == 0) { + return ""; + } + + StringBuilder out = new StringBuilder(); + out.append(array[0]); + for (int i = 1; i < len; i++) { + out.append(separator).append(array[i]); + } + return out.toString(); + } + + /** + * Join a list of strings with the given separator. + * + * @param list The list of strings + * @param separator The separator + * @return the resulting string + */ + public static String join(Collection list, String separator) { + Iterator iterator = list.iterator(); + StringBuilder out = new StringBuilder(); + if (iterator.hasNext()) { + out.append(iterator.next()); + } + while (iterator.hasNext()) { + out.append(separator).append(iterator.next()); + } + return out.toString(); + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/AuditApi.java b/v2/src/main/java/com/skyflow/generated/rest/api/AuditApi.java new file mode 100644 index 00000000..6b441971 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/api/AuditApi.java @@ -0,0 +1,466 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.api; + +import com.skyflow.generated.rest.ApiCallback; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.ApiException; +import com.skyflow.generated.rest.ApiResponse; +import com.skyflow.generated.rest.Configuration; +import com.skyflow.generated.rest.Pair; +import com.skyflow.generated.rest.ProgressRequestBody; +import com.skyflow.generated.rest.ProgressResponseBody; + +import com.google.gson.reflect.TypeToken; + +import java.io.IOException; + + +import com.skyflow.generated.rest.models.GooglerpcStatus; +import com.skyflow.generated.rest.models.V1AuditResponse; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class AuditApi { + private ApiClient localVarApiClient; + private int localHostIndex; + private String localCustomBaseUrl; + + public AuditApi() { + this(Configuration.getDefaultApiClient()); + } + + public AuditApi(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public ApiClient getApiClient() { + return localVarApiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public int getHostIndex() { + return localHostIndex; + } + + public void setHostIndex(int hostIndex) { + this.localHostIndex = hostIndex; + } + + public String getCustomBaseUrl() { + return localCustomBaseUrl; + } + + public void setCustomBaseUrl(String customBaseUrl) { + this.localCustomBaseUrl = customBaseUrl; + } + + /** + * Build call for auditServiceListAuditEvents + * @param filterOpsAccountID Resources with the specified account ID. (required) + * @param filterOpsContextChangeID ID for the audit event. (optional) + * @param filterOpsContextRequestID ID for the request that caused the event. (optional) + * @param filterOpsContextTraceID ID for the request set by the service that received the request. (optional) + * @param filterOpsContextSessionID ID for the session in which the request was sent. (optional) + * @param filterOpsContextActor Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. (optional) + * @param filterOpsContextActorType Type of member who sent the request. (optional, default to NONE) + * @param filterOpsContextAccessType Type of access for the request. (optional, default to ACCESS_NONE) + * @param filterOpsContextIpAddress IP Address of the client that made the request. (optional) + * @param filterOpsContextOrigin HTTP Origin request header (including scheme, hostname, and port) of the request. (optional) + * @param filterOpsContextAuthMode Authentication mode the `actor` used. (optional, default to AUTH_NONE) + * @param filterOpsContextJwtID ID of the JWT token. (optional) + * @param filterOpsContextBearerTokenContextID Embedded User Context. (optional) + * @param filterOpsParentAccountID Resources with the specified parent account ID. (optional) + * @param filterOpsWorkspaceID Resources with the specified workspace ID. (optional) + * @param filterOpsVaultID Resources with the specified vault ID. (optional) + * @param filterOpsResourceIDs Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". (optional) + * @param filterOpsActionType Events with the specified action type. (optional, default to NONE) + * @param filterOpsResourceType Resources with the specified type. (optional, default to NONE_API) + * @param filterOpsTags Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". (optional) + * @param filterOpsResponseCode HTTP response code of the request. (optional) + * @param filterOpsStartTime Start timestamp for the query, in SQL format. (optional) + * @param filterOpsEndTime End timestamp for the query, in SQL format. (optional) + * @param filterOpsApiName Name of the API called in the request. (optional) + * @param filterOpsResponseMessage Response message of the request. (optional) + * @param filterOpsHttpMethod HTTP method of the request. (optional) + * @param filterOpsHttpURI HTTP URI of the request. (optional) + * @param sortOpsSortBy Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). (optional) + * @param sortOpsOrderBy Ascending or descending ordering of results. (optional, default to ASCENDING) + * @param afterOpsTimestamp Timestamp provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. (optional) + * @param afterOpsChangeID Change ID provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. (optional) + * @param limit Number of results to return. (optional, default to 25) + * @param offset Record position at which to start returning results. (optional, default to 0) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details +
+ + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call auditServiceListAuditEventsCall(String filterOpsAccountID, String filterOpsContextChangeID, String filterOpsContextRequestID, String filterOpsContextTraceID, String filterOpsContextSessionID, String filterOpsContextActor, String filterOpsContextActorType, String filterOpsContextAccessType, String filterOpsContextIpAddress, String filterOpsContextOrigin, String filterOpsContextAuthMode, String filterOpsContextJwtID, String filterOpsContextBearerTokenContextID, String filterOpsParentAccountID, String filterOpsWorkspaceID, String filterOpsVaultID, String filterOpsResourceIDs, String filterOpsActionType, String filterOpsResourceType, String filterOpsTags, Integer filterOpsResponseCode, String filterOpsStartTime, String filterOpsEndTime, String filterOpsApiName, String filterOpsResponseMessage, String filterOpsHttpMethod, String filterOpsHttpURI, String sortOpsSortBy, String sortOpsOrderBy, String afterOpsTimestamp, String afterOpsChangeID, Long limit, Long offset, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = null; + + // create path and map variables + String localVarPath = "/v1/audit/events"; + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + if (filterOpsContextChangeID != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.changeID", filterOpsContextChangeID)); + } + + if (filterOpsContextRequestID != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.requestID", filterOpsContextRequestID)); + } + + if (filterOpsContextTraceID != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.traceID", filterOpsContextTraceID)); + } + + if (filterOpsContextSessionID != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.sessionID", filterOpsContextSessionID)); + } + + if (filterOpsContextActor != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.actor", filterOpsContextActor)); + } + + if (filterOpsContextActorType != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.actorType", filterOpsContextActorType)); + } + + if (filterOpsContextAccessType != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.accessType", filterOpsContextAccessType)); + } + + if (filterOpsContextIpAddress != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.ipAddress", filterOpsContextIpAddress)); + } + + if (filterOpsContextOrigin != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.origin", filterOpsContextOrigin)); + } + + if (filterOpsContextAuthMode != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.authMode", filterOpsContextAuthMode)); + } + + if (filterOpsContextJwtID != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.jwtID", filterOpsContextJwtID)); + } + + if (filterOpsContextBearerTokenContextID != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.context.bearerTokenContextID", filterOpsContextBearerTokenContextID)); + } + + if (filterOpsParentAccountID != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.parentAccountID", filterOpsParentAccountID)); + } + + if (filterOpsAccountID != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.accountID", filterOpsAccountID)); + } + + if (filterOpsWorkspaceID != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.workspaceID", filterOpsWorkspaceID)); + } + + if (filterOpsVaultID != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.vaultID", filterOpsVaultID)); + } + + if (filterOpsResourceIDs != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.resourceIDs", filterOpsResourceIDs)); + } + + if (filterOpsActionType != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.actionType", filterOpsActionType)); + } + + if (filterOpsResourceType != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.resourceType", filterOpsResourceType)); + } + + if (filterOpsTags != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.tags", filterOpsTags)); + } + + if (filterOpsResponseCode != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.responseCode", filterOpsResponseCode)); + } + + if (filterOpsStartTime != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.startTime", filterOpsStartTime)); + } + + if (filterOpsEndTime != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.endTime", filterOpsEndTime)); + } + + if (filterOpsApiName != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.apiName", filterOpsApiName)); + } + + if (filterOpsResponseMessage != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.responseMessage", filterOpsResponseMessage)); + } + + if (filterOpsHttpMethod != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.httpMethod", filterOpsHttpMethod)); + } + + if (filterOpsHttpURI != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("filterOps.httpURI", filterOpsHttpURI)); + } + + if (sortOpsSortBy != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("sortOps.sortBy", sortOpsSortBy)); + } + + if (sortOpsOrderBy != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("sortOps.orderBy", sortOpsOrderBy)); + } + + if (afterOpsTimestamp != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("afterOps.timestamp", afterOpsTimestamp)); + } + + if (afterOpsChangeID != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("afterOps.changeID", afterOpsChangeID)); + } + + if (limit != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("limit", limit)); + } + + if (offset != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("offset", offset)); + } + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call auditServiceListAuditEventsValidateBeforeCall(String filterOpsAccountID, String filterOpsContextChangeID, String filterOpsContextRequestID, String filterOpsContextTraceID, String filterOpsContextSessionID, String filterOpsContextActor, String filterOpsContextActorType, String filterOpsContextAccessType, String filterOpsContextIpAddress, String filterOpsContextOrigin, String filterOpsContextAuthMode, String filterOpsContextJwtID, String filterOpsContextBearerTokenContextID, String filterOpsParentAccountID, String filterOpsWorkspaceID, String filterOpsVaultID, String filterOpsResourceIDs, String filterOpsActionType, String filterOpsResourceType, String filterOpsTags, Integer filterOpsResponseCode, String filterOpsStartTime, String filterOpsEndTime, String filterOpsApiName, String filterOpsResponseMessage, String filterOpsHttpMethod, String filterOpsHttpURI, String sortOpsSortBy, String sortOpsOrderBy, String afterOpsTimestamp, String afterOpsChangeID, Long limit, Long offset, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'filterOpsAccountID' is set + if (filterOpsAccountID == null) { + throw new ApiException("Missing the required parameter 'filterOpsAccountID' when calling auditServiceListAuditEvents(Async)"); + } + + return auditServiceListAuditEventsCall(filterOpsAccountID, filterOpsContextChangeID, filterOpsContextRequestID, filterOpsContextTraceID, filterOpsContextSessionID, filterOpsContextActor, filterOpsContextActorType, filterOpsContextAccessType, filterOpsContextIpAddress, filterOpsContextOrigin, filterOpsContextAuthMode, filterOpsContextJwtID, filterOpsContextBearerTokenContextID, filterOpsParentAccountID, filterOpsWorkspaceID, filterOpsVaultID, filterOpsResourceIDs, filterOpsActionType, filterOpsResourceType, filterOpsTags, filterOpsResponseCode, filterOpsStartTime, filterOpsEndTime, filterOpsApiName, filterOpsResponseMessage, filterOpsHttpMethod, filterOpsHttpURI, sortOpsSortBy, sortOpsOrderBy, afterOpsTimestamp, afterOpsChangeID, limit, offset, _callback); + + } + + /** + * List Audit Events + * Lists audit events that match query parameters. + * @param filterOpsAccountID Resources with the specified account ID. (required) + * @param filterOpsContextChangeID ID for the audit event. (optional) + * @param filterOpsContextRequestID ID for the request that caused the event. (optional) + * @param filterOpsContextTraceID ID for the request set by the service that received the request. (optional) + * @param filterOpsContextSessionID ID for the session in which the request was sent. (optional) + * @param filterOpsContextActor Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. (optional) + * @param filterOpsContextActorType Type of member who sent the request. (optional, default to NONE) + * @param filterOpsContextAccessType Type of access for the request. (optional, default to ACCESS_NONE) + * @param filterOpsContextIpAddress IP Address of the client that made the request. (optional) + * @param filterOpsContextOrigin HTTP Origin request header (including scheme, hostname, and port) of the request. (optional) + * @param filterOpsContextAuthMode Authentication mode the `actor` used. (optional, default to AUTH_NONE) + * @param filterOpsContextJwtID ID of the JWT token. (optional) + * @param filterOpsContextBearerTokenContextID Embedded User Context. (optional) + * @param filterOpsParentAccountID Resources with the specified parent account ID. (optional) + * @param filterOpsWorkspaceID Resources with the specified workspace ID. (optional) + * @param filterOpsVaultID Resources with the specified vault ID. (optional) + * @param filterOpsResourceIDs Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". (optional) + * @param filterOpsActionType Events with the specified action type. (optional, default to NONE) + * @param filterOpsResourceType Resources with the specified type. (optional, default to NONE_API) + * @param filterOpsTags Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". (optional) + * @param filterOpsResponseCode HTTP response code of the request. (optional) + * @param filterOpsStartTime Start timestamp for the query, in SQL format. (optional) + * @param filterOpsEndTime End timestamp for the query, in SQL format. (optional) + * @param filterOpsApiName Name of the API called in the request. (optional) + * @param filterOpsResponseMessage Response message of the request. (optional) + * @param filterOpsHttpMethod HTTP method of the request. (optional) + * @param filterOpsHttpURI HTTP URI of the request. (optional) + * @param sortOpsSortBy Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). (optional) + * @param sortOpsOrderBy Ascending or descending ordering of results. (optional, default to ASCENDING) + * @param afterOpsTimestamp Timestamp provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. (optional) + * @param afterOpsChangeID Change ID provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. (optional) + * @param limit Number of results to return. (optional, default to 25) + * @param offset Record position at which to start returning results. (optional, default to 0) + * @return V1AuditResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1AuditResponse auditServiceListAuditEvents(String filterOpsAccountID, String filterOpsContextChangeID, String filterOpsContextRequestID, String filterOpsContextTraceID, String filterOpsContextSessionID, String filterOpsContextActor, String filterOpsContextActorType, String filterOpsContextAccessType, String filterOpsContextIpAddress, String filterOpsContextOrigin, String filterOpsContextAuthMode, String filterOpsContextJwtID, String filterOpsContextBearerTokenContextID, String filterOpsParentAccountID, String filterOpsWorkspaceID, String filterOpsVaultID, String filterOpsResourceIDs, String filterOpsActionType, String filterOpsResourceType, String filterOpsTags, Integer filterOpsResponseCode, String filterOpsStartTime, String filterOpsEndTime, String filterOpsApiName, String filterOpsResponseMessage, String filterOpsHttpMethod, String filterOpsHttpURI, String sortOpsSortBy, String sortOpsOrderBy, String afterOpsTimestamp, String afterOpsChangeID, Long limit, Long offset) throws ApiException { + ApiResponse localVarResp = auditServiceListAuditEventsWithHttpInfo(filterOpsAccountID, filterOpsContextChangeID, filterOpsContextRequestID, filterOpsContextTraceID, filterOpsContextSessionID, filterOpsContextActor, filterOpsContextActorType, filterOpsContextAccessType, filterOpsContextIpAddress, filterOpsContextOrigin, filterOpsContextAuthMode, filterOpsContextJwtID, filterOpsContextBearerTokenContextID, filterOpsParentAccountID, filterOpsWorkspaceID, filterOpsVaultID, filterOpsResourceIDs, filterOpsActionType, filterOpsResourceType, filterOpsTags, filterOpsResponseCode, filterOpsStartTime, filterOpsEndTime, filterOpsApiName, filterOpsResponseMessage, filterOpsHttpMethod, filterOpsHttpURI, sortOpsSortBy, sortOpsOrderBy, afterOpsTimestamp, afterOpsChangeID, limit, offset); + return localVarResp.getData(); + } + + /** + * List Audit Events + * Lists audit events that match query parameters. + * @param filterOpsAccountID Resources with the specified account ID. (required) + * @param filterOpsContextChangeID ID for the audit event. (optional) + * @param filterOpsContextRequestID ID for the request that caused the event. (optional) + * @param filterOpsContextTraceID ID for the request set by the service that received the request. (optional) + * @param filterOpsContextSessionID ID for the session in which the request was sent. (optional) + * @param filterOpsContextActor Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. (optional) + * @param filterOpsContextActorType Type of member who sent the request. (optional, default to NONE) + * @param filterOpsContextAccessType Type of access for the request. (optional, default to ACCESS_NONE) + * @param filterOpsContextIpAddress IP Address of the client that made the request. (optional) + * @param filterOpsContextOrigin HTTP Origin request header (including scheme, hostname, and port) of the request. (optional) + * @param filterOpsContextAuthMode Authentication mode the `actor` used. (optional, default to AUTH_NONE) + * @param filterOpsContextJwtID ID of the JWT token. (optional) + * @param filterOpsContextBearerTokenContextID Embedded User Context. (optional) + * @param filterOpsParentAccountID Resources with the specified parent account ID. (optional) + * @param filterOpsWorkspaceID Resources with the specified workspace ID. (optional) + * @param filterOpsVaultID Resources with the specified vault ID. (optional) + * @param filterOpsResourceIDs Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". (optional) + * @param filterOpsActionType Events with the specified action type. (optional, default to NONE) + * @param filterOpsResourceType Resources with the specified type. (optional, default to NONE_API) + * @param filterOpsTags Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". (optional) + * @param filterOpsResponseCode HTTP response code of the request. (optional) + * @param filterOpsStartTime Start timestamp for the query, in SQL format. (optional) + * @param filterOpsEndTime End timestamp for the query, in SQL format. (optional) + * @param filterOpsApiName Name of the API called in the request. (optional) + * @param filterOpsResponseMessage Response message of the request. (optional) + * @param filterOpsHttpMethod HTTP method of the request. (optional) + * @param filterOpsHttpURI HTTP URI of the request. (optional) + * @param sortOpsSortBy Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). (optional) + * @param sortOpsOrderBy Ascending or descending ordering of results. (optional, default to ASCENDING) + * @param afterOpsTimestamp Timestamp provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. (optional) + * @param afterOpsChangeID Change ID provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. (optional) + * @param limit Number of results to return. (optional, default to 25) + * @param offset Record position at which to start returning results. (optional, default to 0) + * @return ApiResponse<V1AuditResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse auditServiceListAuditEventsWithHttpInfo(String filterOpsAccountID, String filterOpsContextChangeID, String filterOpsContextRequestID, String filterOpsContextTraceID, String filterOpsContextSessionID, String filterOpsContextActor, String filterOpsContextActorType, String filterOpsContextAccessType, String filterOpsContextIpAddress, String filterOpsContextOrigin, String filterOpsContextAuthMode, String filterOpsContextJwtID, String filterOpsContextBearerTokenContextID, String filterOpsParentAccountID, String filterOpsWorkspaceID, String filterOpsVaultID, String filterOpsResourceIDs, String filterOpsActionType, String filterOpsResourceType, String filterOpsTags, Integer filterOpsResponseCode, String filterOpsStartTime, String filterOpsEndTime, String filterOpsApiName, String filterOpsResponseMessage, String filterOpsHttpMethod, String filterOpsHttpURI, String sortOpsSortBy, String sortOpsOrderBy, String afterOpsTimestamp, String afterOpsChangeID, Long limit, Long offset) throws ApiException { + okhttp3.Call localVarCall = auditServiceListAuditEventsValidateBeforeCall(filterOpsAccountID, filterOpsContextChangeID, filterOpsContextRequestID, filterOpsContextTraceID, filterOpsContextSessionID, filterOpsContextActor, filterOpsContextActorType, filterOpsContextAccessType, filterOpsContextIpAddress, filterOpsContextOrigin, filterOpsContextAuthMode, filterOpsContextJwtID, filterOpsContextBearerTokenContextID, filterOpsParentAccountID, filterOpsWorkspaceID, filterOpsVaultID, filterOpsResourceIDs, filterOpsActionType, filterOpsResourceType, filterOpsTags, filterOpsResponseCode, filterOpsStartTime, filterOpsEndTime, filterOpsApiName, filterOpsResponseMessage, filterOpsHttpMethod, filterOpsHttpURI, sortOpsSortBy, sortOpsOrderBy, afterOpsTimestamp, afterOpsChangeID, limit, offset, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * List Audit Events (asynchronously) + * Lists audit events that match query parameters. + * @param filterOpsAccountID Resources with the specified account ID. (required) + * @param filterOpsContextChangeID ID for the audit event. (optional) + * @param filterOpsContextRequestID ID for the request that caused the event. (optional) + * @param filterOpsContextTraceID ID for the request set by the service that received the request. (optional) + * @param filterOpsContextSessionID ID for the session in which the request was sent. (optional) + * @param filterOpsContextActor Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. (optional) + * @param filterOpsContextActorType Type of member who sent the request. (optional, default to NONE) + * @param filterOpsContextAccessType Type of access for the request. (optional, default to ACCESS_NONE) + * @param filterOpsContextIpAddress IP Address of the client that made the request. (optional) + * @param filterOpsContextOrigin HTTP Origin request header (including scheme, hostname, and port) of the request. (optional) + * @param filterOpsContextAuthMode Authentication mode the `actor` used. (optional, default to AUTH_NONE) + * @param filterOpsContextJwtID ID of the JWT token. (optional) + * @param filterOpsContextBearerTokenContextID Embedded User Context. (optional) + * @param filterOpsParentAccountID Resources with the specified parent account ID. (optional) + * @param filterOpsWorkspaceID Resources with the specified workspace ID. (optional) + * @param filterOpsVaultID Resources with the specified vault ID. (optional) + * @param filterOpsResourceIDs Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". (optional) + * @param filterOpsActionType Events with the specified action type. (optional, default to NONE) + * @param filterOpsResourceType Resources with the specified type. (optional, default to NONE_API) + * @param filterOpsTags Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". (optional) + * @param filterOpsResponseCode HTTP response code of the request. (optional) + * @param filterOpsStartTime Start timestamp for the query, in SQL format. (optional) + * @param filterOpsEndTime End timestamp for the query, in SQL format. (optional) + * @param filterOpsApiName Name of the API called in the request. (optional) + * @param filterOpsResponseMessage Response message of the request. (optional) + * @param filterOpsHttpMethod HTTP method of the request. (optional) + * @param filterOpsHttpURI HTTP URI of the request. (optional) + * @param sortOpsSortBy Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). (optional) + * @param sortOpsOrderBy Ascending or descending ordering of results. (optional, default to ASCENDING) + * @param afterOpsTimestamp Timestamp provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. (optional) + * @param afterOpsChangeID Change ID provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. (optional) + * @param limit Number of results to return. (optional, default to 25) + * @param offset Record position at which to start returning results. (optional, default to 0) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call auditServiceListAuditEventsAsync(String filterOpsAccountID, String filterOpsContextChangeID, String filterOpsContextRequestID, String filterOpsContextTraceID, String filterOpsContextSessionID, String filterOpsContextActor, String filterOpsContextActorType, String filterOpsContextAccessType, String filterOpsContextIpAddress, String filterOpsContextOrigin, String filterOpsContextAuthMode, String filterOpsContextJwtID, String filterOpsContextBearerTokenContextID, String filterOpsParentAccountID, String filterOpsWorkspaceID, String filterOpsVaultID, String filterOpsResourceIDs, String filterOpsActionType, String filterOpsResourceType, String filterOpsTags, Integer filterOpsResponseCode, String filterOpsStartTime, String filterOpsEndTime, String filterOpsApiName, String filterOpsResponseMessage, String filterOpsHttpMethod, String filterOpsHttpURI, String sortOpsSortBy, String sortOpsOrderBy, String afterOpsTimestamp, String afterOpsChangeID, Long limit, Long offset, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = auditServiceListAuditEventsValidateBeforeCall(filterOpsAccountID, filterOpsContextChangeID, filterOpsContextRequestID, filterOpsContextTraceID, filterOpsContextSessionID, filterOpsContextActor, filterOpsContextActorType, filterOpsContextAccessType, filterOpsContextIpAddress, filterOpsContextOrigin, filterOpsContextAuthMode, filterOpsContextJwtID, filterOpsContextBearerTokenContextID, filterOpsParentAccountID, filterOpsWorkspaceID, filterOpsVaultID, filterOpsResourceIDs, filterOpsActionType, filterOpsResourceType, filterOpsTags, filterOpsResponseCode, filterOpsStartTime, filterOpsEndTime, filterOpsApiName, filterOpsResponseMessage, filterOpsHttpMethod, filterOpsHttpURI, sortOpsSortBy, sortOpsOrderBy, afterOpsTimestamp, afterOpsChangeID, limit, offset, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/AuthenticationApi.java b/v2/src/main/java/com/skyflow/generated/rest/api/AuthenticationApi.java new file mode 100644 index 00000000..e26da776 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/api/AuthenticationApi.java @@ -0,0 +1,216 @@ +/* + * Skyflow Management API + * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.api; + +import com.skyflow.generated.rest.ApiCallback; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.ApiException; +import com.skyflow.generated.rest.ApiResponse; +import com.skyflow.generated.rest.Configuration; +import com.skyflow.generated.rest.Pair; +import com.skyflow.generated.rest.ProgressRequestBody; +import com.skyflow.generated.rest.ProgressResponseBody; + +import com.google.gson.reflect.TypeToken; + +import java.io.IOException; + + +import com.skyflow.generated.rest.models.GooglerpcStatus; +import com.skyflow.generated.rest.models.V1GetAuthTokenRequest; +import com.skyflow.generated.rest.models.V1GetAuthTokenResponse; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class AuthenticationApi { + private ApiClient localVarApiClient; + private int localHostIndex; + private String localCustomBaseUrl; + + public AuthenticationApi() { + this(Configuration.getDefaultApiClient()); + } + + public AuthenticationApi(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public ApiClient getApiClient() { + return localVarApiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public int getHostIndex() { + return localHostIndex; + } + + public void setHostIndex(int hostIndex) { + this.localHostIndex = hostIndex; + } + + public String getCustomBaseUrl() { + return localCustomBaseUrl; + } + + public void setCustomBaseUrl(String customBaseUrl) { + this.localCustomBaseUrl = customBaseUrl; + } + + /** + * Build call for authenticationServiceGetAuthToken + * @param body (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details +
+ + + + + + +
Status Code Description Response Headers
200 A successful response. -
400 Invalid scope format. -
401 Key expired or JWT token unparseable. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call authenticationServiceGetAuthTokenCall(V1GetAuthTokenRequest body, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = body; + + // create path and map variables + String localVarPath = "/v1/auth/sa/oauth/token"; + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + "application/json" + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call authenticationServiceGetAuthTokenValidateBeforeCall(V1GetAuthTokenRequest body, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException("Missing the required parameter 'body' when calling authenticationServiceGetAuthToken(Async)"); + } + + return authenticationServiceGetAuthTokenCall(body, _callback); + + } + + /** + * Get Bearer Token + * <p>Generates a Bearer Token to authenticate with Skyflow. This method doesn't require the <code>Authorization</code> header.</p><p><b>Note:</b> For recommended ways to authenticate, see <a href='/api-authentication/'>API authentication</a>.</p> + * @param body (required) + * @return V1GetAuthTokenResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + + + +
Status Code Description Response Headers
200 A successful response. -
400 Invalid scope format. -
401 Key expired or JWT token unparseable. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1GetAuthTokenResponse authenticationServiceGetAuthToken(V1GetAuthTokenRequest body) throws ApiException { + ApiResponse localVarResp = authenticationServiceGetAuthTokenWithHttpInfo(body); + return localVarResp.getData(); + } + + /** + * Get Bearer Token + * <p>Generates a Bearer Token to authenticate with Skyflow. This method doesn't require the <code>Authorization</code> header.</p><p><b>Note:</b> For recommended ways to authenticate, see <a href='/api-authentication/'>API authentication</a>.</p> + * @param body (required) + * @return ApiResponse<V1GetAuthTokenResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + + + +
Status Code Description Response Headers
200 A successful response. -
400 Invalid scope format. -
401 Key expired or JWT token unparseable. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse authenticationServiceGetAuthTokenWithHttpInfo(V1GetAuthTokenRequest body) throws ApiException { + okhttp3.Call localVarCall = authenticationServiceGetAuthTokenValidateBeforeCall(body, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Get Bearer Token (asynchronously) + * <p>Generates a Bearer Token to authenticate with Skyflow. This method doesn't require the <code>Authorization</code> header.</p><p><b>Note:</b> For recommended ways to authenticate, see <a href='/api-authentication/'>API authentication</a>.</p> + * @param body (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + + + +
Status Code Description Response Headers
200 A successful response. -
400 Invalid scope format. -
401 Key expired or JWT token unparseable. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call authenticationServiceGetAuthTokenAsync(V1GetAuthTokenRequest body, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = authenticationServiceGetAuthTokenValidateBeforeCall(body, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/BinLookupApi.java b/v2/src/main/java/com/skyflow/generated/rest/api/BinLookupApi.java new file mode 100644 index 00000000..da1a862a --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/api/BinLookupApi.java @@ -0,0 +1,208 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.api; + +import com.skyflow.generated.rest.ApiCallback; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.ApiException; +import com.skyflow.generated.rest.ApiResponse; +import com.skyflow.generated.rest.Configuration; +import com.skyflow.generated.rest.Pair; +import com.skyflow.generated.rest.ProgressRequestBody; +import com.skyflow.generated.rest.ProgressResponseBody; + +import com.google.gson.reflect.TypeToken; + +import java.io.IOException; + + +import com.skyflow.generated.rest.models.GooglerpcStatus; +import com.skyflow.generated.rest.models.V1BINListRequest; +import com.skyflow.generated.rest.models.V1BINListResponse; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class BinLookupApi { + private ApiClient localVarApiClient; + private int localHostIndex; + private String localCustomBaseUrl; + + public BinLookupApi() { + this(Configuration.getDefaultApiClient()); + } + + public BinLookupApi(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public ApiClient getApiClient() { + return localVarApiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public int getHostIndex() { + return localHostIndex; + } + + public void setHostIndex(int hostIndex) { + this.localHostIndex = hostIndex; + } + + public String getCustomBaseUrl() { + return localCustomBaseUrl; + } + + public void setCustomBaseUrl(String customBaseUrl) { + this.localCustomBaseUrl = customBaseUrl; + } + + /** + * Build call for bINListServiceListCardsOfBIN + * @param body Request to return specific card metadata. (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details +
+ + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call bINListServiceListCardsOfBINCall(V1BINListRequest body, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = body; + + // create path and map variables + String localVarPath = "/v1/card_lookup"; + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + "application/json" + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call bINListServiceListCardsOfBINValidateBeforeCall(V1BINListRequest body, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException("Missing the required parameter 'body' when calling bINListServiceListCardsOfBIN(Async)"); + } + + return bINListServiceListCardsOfBINCall(body, _callback); + + } + + /** + * Get BIN + * <b>Note</b>: This endpoint is in beta and subject to change. <br><br> Returns the specified card metadata. + * @param body Request to return specific card metadata. (required) + * @return V1BINListResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1BINListResponse bINListServiceListCardsOfBIN(V1BINListRequest body) throws ApiException { + ApiResponse localVarResp = bINListServiceListCardsOfBINWithHttpInfo(body); + return localVarResp.getData(); + } + + /** + * Get BIN + * <b>Note</b>: This endpoint is in beta and subject to change. <br><br> Returns the specified card metadata. + * @param body Request to return specific card metadata. (required) + * @return ApiResponse<V1BINListResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse bINListServiceListCardsOfBINWithHttpInfo(V1BINListRequest body) throws ApiException { + okhttp3.Call localVarCall = bINListServiceListCardsOfBINValidateBeforeCall(body, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Get BIN (asynchronously) + * <b>Note</b>: This endpoint is in beta and subject to change. <br><br> Returns the specified card metadata. + * @param body Request to return specific card metadata. (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call bINListServiceListCardsOfBINAsync(V1BINListRequest body, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = bINListServiceListCardsOfBINValidateBeforeCall(body, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/QueryApi.java b/v2/src/main/java/com/skyflow/generated/rest/api/QueryApi.java new file mode 100644 index 00000000..fad624ce --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/api/QueryApi.java @@ -0,0 +1,218 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.api; + +import com.skyflow.generated.rest.ApiCallback; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.ApiException; +import com.skyflow.generated.rest.ApiResponse; +import com.skyflow.generated.rest.Configuration; +import com.skyflow.generated.rest.Pair; +import com.skyflow.generated.rest.ProgressRequestBody; +import com.skyflow.generated.rest.ProgressResponseBody; + +import com.google.gson.reflect.TypeToken; + +import java.io.IOException; + + +import com.skyflow.generated.rest.models.GooglerpcStatus; +import com.skyflow.generated.rest.models.QueryServiceExecuteQueryBody; +import com.skyflow.generated.rest.models.V1GetQueryResponse; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class QueryApi { + private ApiClient localVarApiClient; + private int localHostIndex; + private String localCustomBaseUrl; + + public QueryApi() { + this(Configuration.getDefaultApiClient()); + } + + public QueryApi(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public ApiClient getApiClient() { + return localVarApiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public int getHostIndex() { + return localHostIndex; + } + + public void setHostIndex(int hostIndex) { + this.localHostIndex = hostIndex; + } + + public String getCustomBaseUrl() { + return localCustomBaseUrl; + } + + public void setCustomBaseUrl(String customBaseUrl) { + this.localCustomBaseUrl = customBaseUrl; + } + + /** + * Build call for queryServiceExecuteQuery + * @param vaultID ID of the vault. (required) + * @param body (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details +
+ + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call queryServiceExecuteQueryCall(String vaultID, QueryServiceExecuteQueryBody body, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = body; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/query" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + "application/json" + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call queryServiceExecuteQueryValidateBeforeCall(String vaultID, QueryServiceExecuteQueryBody body, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling queryServiceExecuteQuery(Async)"); + } + + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException("Missing the required parameter 'body' when calling queryServiceExecuteQuery(Async)"); + } + + return queryServiceExecuteQueryCall(vaultID, body, _callback); + + } + + /** + * Execute Query + * Returns records for a valid SQL query. This endpoint <ul><li>Can return redacted record values.</li><li>Supports only the <code>SELECT</code> command.</li><li>Returns a maximum of 25 records. To return additional records, perform another query using the <code>OFFSET</code> keyword.</li><li>Can't modify the vault or perform transactions.</li><li>Can't return tokens.</li><li>Can't return file download or render URLs.</li><li>Doesn't support the <code>WHERE</code> keyword with columns using transient tokenization.</li><li>Doesn't support `?` conditional for columns with column-level encryption disabled.</li><ul> + * @param vaultID ID of the vault. (required) + * @param body (required) + * @return V1GetQueryResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1GetQueryResponse queryServiceExecuteQuery(String vaultID, QueryServiceExecuteQueryBody body) throws ApiException { + ApiResponse localVarResp = queryServiceExecuteQueryWithHttpInfo(vaultID, body); + return localVarResp.getData(); + } + + /** + * Execute Query + * Returns records for a valid SQL query. This endpoint <ul><li>Can return redacted record values.</li><li>Supports only the <code>SELECT</code> command.</li><li>Returns a maximum of 25 records. To return additional records, perform another query using the <code>OFFSET</code> keyword.</li><li>Can't modify the vault or perform transactions.</li><li>Can't return tokens.</li><li>Can't return file download or render URLs.</li><li>Doesn't support the <code>WHERE</code> keyword with columns using transient tokenization.</li><li>Doesn't support `?` conditional for columns with column-level encryption disabled.</li><ul> + * @param vaultID ID of the vault. (required) + * @param body (required) + * @return ApiResponse<V1GetQueryResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse queryServiceExecuteQueryWithHttpInfo(String vaultID, QueryServiceExecuteQueryBody body) throws ApiException { + okhttp3.Call localVarCall = queryServiceExecuteQueryValidateBeforeCall(vaultID, body, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Execute Query (asynchronously) + * Returns records for a valid SQL query. This endpoint <ul><li>Can return redacted record values.</li><li>Supports only the <code>SELECT</code> command.</li><li>Returns a maximum of 25 records. To return additional records, perform another query using the <code>OFFSET</code> keyword.</li><li>Can't modify the vault or perform transactions.</li><li>Can't return tokens.</li><li>Can't return file download or render URLs.</li><li>Doesn't support the <code>WHERE</code> keyword with columns using transient tokenization.</li><li>Doesn't support `?` conditional for columns with column-level encryption disabled.</li><ul> + * @param vaultID ID of the vault. (required) + * @param body (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call queryServiceExecuteQueryAsync(String vaultID, QueryServiceExecuteQueryBody body, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = queryServiceExecuteQueryValidateBeforeCall(vaultID, body, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/RecordsApi.java b/v2/src/main/java/com/skyflow/generated/rest/api/RecordsApi.java new file mode 100644 index 00000000..d8d8257b --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/api/RecordsApi.java @@ -0,0 +1,1730 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.api; + +import com.skyflow.generated.rest.ApiCallback; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.ApiException; +import com.skyflow.generated.rest.ApiResponse; +import com.skyflow.generated.rest.Configuration; +import com.skyflow.generated.rest.Pair; +import com.skyflow.generated.rest.ProgressRequestBody; +import com.skyflow.generated.rest.ProgressResponseBody; + +import com.google.gson.reflect.TypeToken; + +import java.io.IOException; + + +import java.io.File; +import com.skyflow.generated.rest.models.GooglerpcStatus; +import com.skyflow.generated.rest.models.RecordServiceBatchOperationBody; +import com.skyflow.generated.rest.models.RecordServiceBulkDeleteRecordBody; +import com.skyflow.generated.rest.models.RecordServiceInsertRecordBody; +import com.skyflow.generated.rest.models.RecordServiceUpdateRecordBody; +import com.skyflow.generated.rest.models.V1BatchOperationResponse; +import com.skyflow.generated.rest.models.V1BulkDeleteRecordResponse; +import com.skyflow.generated.rest.models.V1BulkGetRecordResponse; +import com.skyflow.generated.rest.models.V1DeleteFileResponse; +import com.skyflow.generated.rest.models.V1DeleteRecordResponse; +import com.skyflow.generated.rest.models.V1FieldRecords; +import com.skyflow.generated.rest.models.V1GetFileScanStatusResponse; +import com.skyflow.generated.rest.models.V1InsertRecordResponse; +import com.skyflow.generated.rest.models.V1UpdateRecordResponse; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class RecordsApi { + private ApiClient localVarApiClient; + private int localHostIndex; + private String localCustomBaseUrl; + + public RecordsApi() { + this(Configuration.getDefaultApiClient()); + } + + public RecordsApi(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public ApiClient getApiClient() { + return localVarApiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public int getHostIndex() { + return localHostIndex; + } + + public void setHostIndex(int hostIndex) { + this.localHostIndex = hostIndex; + } + + public String getCustomBaseUrl() { + return localCustomBaseUrl; + } + + public void setCustomBaseUrl(String customBaseUrl) { + this.localCustomBaseUrl = customBaseUrl; + } + + /** + * Build call for fileServiceDeleteFile + * @param vaultID ID of the vault. (required) + * @param tableName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param columnName Name of the column that contains the file. (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details +
+ + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call fileServiceDeleteFileCall(String vaultID, String tableName, String ID, String columnName, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = null; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/{tableName}/{ID}/files/{columnName}" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())) + .replace("{" + "tableName" + "}", localVarApiClient.escapeString(tableName.toString())) + .replace("{" + "ID" + "}", localVarApiClient.escapeString(ID.toString())) + .replace("{" + "columnName" + "}", localVarApiClient.escapeString(columnName.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call fileServiceDeleteFileValidateBeforeCall(String vaultID, String tableName, String ID, String columnName, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling fileServiceDeleteFile(Async)"); + } + + // verify the required parameter 'tableName' is set + if (tableName == null) { + throw new ApiException("Missing the required parameter 'tableName' when calling fileServiceDeleteFile(Async)"); + } + + // verify the required parameter 'ID' is set + if (ID == null) { + throw new ApiException("Missing the required parameter 'ID' when calling fileServiceDeleteFile(Async)"); + } + + // verify the required parameter 'columnName' is set + if (columnName == null) { + throw new ApiException("Missing the required parameter 'columnName' when calling fileServiceDeleteFile(Async)"); + } + + return fileServiceDeleteFileCall(vaultID, tableName, ID, columnName, _callback); + + } + + /** + * Delete File + * Deletes a file from the specified record. + * @param vaultID ID of the vault. (required) + * @param tableName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param columnName Name of the column that contains the file. (required) + * @return V1DeleteFileResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1DeleteFileResponse fileServiceDeleteFile(String vaultID, String tableName, String ID, String columnName) throws ApiException { + ApiResponse localVarResp = fileServiceDeleteFileWithHttpInfo(vaultID, tableName, ID, columnName); + return localVarResp.getData(); + } + + /** + * Delete File + * Deletes a file from the specified record. + * @param vaultID ID of the vault. (required) + * @param tableName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param columnName Name of the column that contains the file. (required) + * @return ApiResponse<V1DeleteFileResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse fileServiceDeleteFileWithHttpInfo(String vaultID, String tableName, String ID, String columnName) throws ApiException { + okhttp3.Call localVarCall = fileServiceDeleteFileValidateBeforeCall(vaultID, tableName, ID, columnName, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Delete File (asynchronously) + * Deletes a file from the specified record. + * @param vaultID ID of the vault. (required) + * @param tableName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param columnName Name of the column that contains the file. (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call fileServiceDeleteFileAsync(String vaultID, String tableName, String ID, String columnName, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = fileServiceDeleteFileValidateBeforeCall(vaultID, tableName, ID, columnName, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } + /** + * Build call for fileServiceGetFileScanStatus + * @param vaultID ID of the vault. (required) + * @param tableName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param columnName Name of the column that contains the file. (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call fileServiceGetFileScanStatusCall(String vaultID, String tableName, String ID, String columnName, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = null; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/{tableName}/{ID}/files/{columnName}/scan-status" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())) + .replace("{" + "tableName" + "}", localVarApiClient.escapeString(tableName.toString())) + .replace("{" + "ID" + "}", localVarApiClient.escapeString(ID.toString())) + .replace("{" + "columnName" + "}", localVarApiClient.escapeString(columnName.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call fileServiceGetFileScanStatusValidateBeforeCall(String vaultID, String tableName, String ID, String columnName, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling fileServiceGetFileScanStatus(Async)"); + } + + // verify the required parameter 'tableName' is set + if (tableName == null) { + throw new ApiException("Missing the required parameter 'tableName' when calling fileServiceGetFileScanStatus(Async)"); + } + + // verify the required parameter 'ID' is set + if (ID == null) { + throw new ApiException("Missing the required parameter 'ID' when calling fileServiceGetFileScanStatus(Async)"); + } + + // verify the required parameter 'columnName' is set + if (columnName == null) { + throw new ApiException("Missing the required parameter 'columnName' when calling fileServiceGetFileScanStatus(Async)"); + } + + return fileServiceGetFileScanStatusCall(vaultID, tableName, ID, columnName, _callback); + + } + + /** + * Get File Scan Status + * Returns the anti-virus scan status of a file. + * @param vaultID ID of the vault. (required) + * @param tableName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param columnName Name of the column that contains the file. (required) + * @return V1GetFileScanStatusResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1GetFileScanStatusResponse fileServiceGetFileScanStatus(String vaultID, String tableName, String ID, String columnName) throws ApiException { + ApiResponse localVarResp = fileServiceGetFileScanStatusWithHttpInfo(vaultID, tableName, ID, columnName); + return localVarResp.getData(); + } + + /** + * Get File Scan Status + * Returns the anti-virus scan status of a file. + * @param vaultID ID of the vault. (required) + * @param tableName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param columnName Name of the column that contains the file. (required) + * @return ApiResponse<V1GetFileScanStatusResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse fileServiceGetFileScanStatusWithHttpInfo(String vaultID, String tableName, String ID, String columnName) throws ApiException { + okhttp3.Call localVarCall = fileServiceGetFileScanStatusValidateBeforeCall(vaultID, tableName, ID, columnName, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Get File Scan Status (asynchronously) + * Returns the anti-virus scan status of a file. + * @param vaultID ID of the vault. (required) + * @param tableName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param columnName Name of the column that contains the file. (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call fileServiceGetFileScanStatusAsync(String vaultID, String tableName, String ID, String columnName, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = fileServiceGetFileScanStatusValidateBeforeCall(vaultID, tableName, ID, columnName, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } + /** + * Build call for fileServiceUploadFile + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param fileColumnName Name of the column to store the file in. The column must have a file data type. (optional) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call fileServiceUploadFileCall(String vaultID, String objectName, String ID, File fileColumnName, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = null; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/{objectName}/{ID}/files" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())) + .replace("{" + "objectName" + "}", localVarApiClient.escapeString(objectName.toString())) + .replace("{" + "ID" + "}", localVarApiClient.escapeString(ID.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + if (fileColumnName != null) { + localVarFormParams.put("fileColumnName", fileColumnName); + } + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call fileServiceUploadFileValidateBeforeCall(String vaultID, String objectName, String ID, File fileColumnName, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling fileServiceUploadFile(Async)"); + } + + // verify the required parameter 'objectName' is set + if (objectName == null) { + throw new ApiException("Missing the required parameter 'objectName' when calling fileServiceUploadFile(Async)"); + } + + // verify the required parameter 'ID' is set + if (ID == null) { + throw new ApiException("Missing the required parameter 'ID' when calling fileServiceUploadFile(Async)"); + } + + return fileServiceUploadFileCall(vaultID, objectName, ID, fileColumnName, _callback); + + } + + /** + * Upload File + * Uploads a file to the specified record. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param fileColumnName Name of the column to store the file in. The column must have a file data type. (optional) + * @return V1UpdateRecordResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1UpdateRecordResponse fileServiceUploadFile(String vaultID, String objectName, String ID, File fileColumnName) throws ApiException { + ApiResponse localVarResp = fileServiceUploadFileWithHttpInfo(vaultID, objectName, ID, fileColumnName); + return localVarResp.getData(); + } + + /** + * Upload File + * Uploads a file to the specified record. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param fileColumnName Name of the column to store the file in. The column must have a file data type. (optional) + * @return ApiResponse<V1UpdateRecordResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse fileServiceUploadFileWithHttpInfo(String vaultID, String objectName, String ID, File fileColumnName) throws ApiException { + okhttp3.Call localVarCall = fileServiceUploadFileValidateBeforeCall(vaultID, objectName, ID, fileColumnName, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Upload File (asynchronously) + * Uploads a file to the specified record. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param fileColumnName Name of the column to store the file in. The column must have a file data type. (optional) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call fileServiceUploadFileAsync(String vaultID, String objectName, String ID, File fileColumnName, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = fileServiceUploadFileValidateBeforeCall(vaultID, objectName, ID, fileColumnName, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } + /** + * Build call for recordServiceBatchOperation + * @param vaultID ID of the vault. (required) + * @param body (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceBatchOperationCall(String vaultID, RecordServiceBatchOperationBody body, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = body; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + "application/json" + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call recordServiceBatchOperationValidateBeforeCall(String vaultID, RecordServiceBatchOperationBody body, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling recordServiceBatchOperation(Async)"); + } + + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException("Missing the required parameter 'body' when calling recordServiceBatchOperation(Async)"); + } + + return recordServiceBatchOperationCall(vaultID, body, _callback); + + } + + /** + * Batch Operation + * Performs multiple record operations in a single transaction. + * @param vaultID ID of the vault. (required) + * @param body (required) + * @return V1BatchOperationResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1BatchOperationResponse recordServiceBatchOperation(String vaultID, RecordServiceBatchOperationBody body) throws ApiException { + ApiResponse localVarResp = recordServiceBatchOperationWithHttpInfo(vaultID, body); + return localVarResp.getData(); + } + + /** + * Batch Operation + * Performs multiple record operations in a single transaction. + * @param vaultID ID of the vault. (required) + * @param body (required) + * @return ApiResponse<V1BatchOperationResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse recordServiceBatchOperationWithHttpInfo(String vaultID, RecordServiceBatchOperationBody body) throws ApiException { + okhttp3.Call localVarCall = recordServiceBatchOperationValidateBeforeCall(vaultID, body, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Batch Operation (asynchronously) + * Performs multiple record operations in a single transaction. + * @param vaultID ID of the vault. (required) + * @param body (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceBatchOperationAsync(String vaultID, RecordServiceBatchOperationBody body, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = recordServiceBatchOperationValidateBeforeCall(vaultID, body, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } + /** + * Build call for recordServiceBulkDeleteRecord + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param body (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceBulkDeleteRecordCall(String vaultID, String objectName, RecordServiceBulkDeleteRecordBody body, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = body; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/{objectName}" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())) + .replace("{" + "objectName" + "}", localVarApiClient.escapeString(objectName.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + "application/json" + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call recordServiceBulkDeleteRecordValidateBeforeCall(String vaultID, String objectName, RecordServiceBulkDeleteRecordBody body, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling recordServiceBulkDeleteRecord(Async)"); + } + + // verify the required parameter 'objectName' is set + if (objectName == null) { + throw new ApiException("Missing the required parameter 'objectName' when calling recordServiceBulkDeleteRecord(Async)"); + } + + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException("Missing the required parameter 'body' when calling recordServiceBulkDeleteRecord(Async)"); + } + + return recordServiceBulkDeleteRecordCall(vaultID, objectName, body, _callback); + + } + + /** + * Bulk Delete Records + * Deletes the specified records from a table. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param body (required) + * @return V1BulkDeleteRecordResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1BulkDeleteRecordResponse recordServiceBulkDeleteRecord(String vaultID, String objectName, RecordServiceBulkDeleteRecordBody body) throws ApiException { + ApiResponse localVarResp = recordServiceBulkDeleteRecordWithHttpInfo(vaultID, objectName, body); + return localVarResp.getData(); + } + + /** + * Bulk Delete Records + * Deletes the specified records from a table. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param body (required) + * @return ApiResponse<V1BulkDeleteRecordResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse recordServiceBulkDeleteRecordWithHttpInfo(String vaultID, String objectName, RecordServiceBulkDeleteRecordBody body) throws ApiException { + okhttp3.Call localVarCall = recordServiceBulkDeleteRecordValidateBeforeCall(vaultID, objectName, body, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Bulk Delete Records (asynchronously) + * Deletes the specified records from a table. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param body (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceBulkDeleteRecordAsync(String vaultID, String objectName, RecordServiceBulkDeleteRecordBody body, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = recordServiceBulkDeleteRecordValidateBeforeCall(vaultID, objectName, body, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } + /** + * Build call for recordServiceBulkGetRecord + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table that contains the records. (required) + * @param skyflowIds `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. (optional) + * @param redaction Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. (optional, default to DEFAULT) + * @param tokenization If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. (optional) + * @param fields Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. (optional) + * @param offset Record position at which to start receiving data. (optional, default to 0) + * @param limit Number of record to return. Maximum 25. (optional, default to 25) + * @param downloadURL If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. (optional) + * @param columnName Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. (optional) + * @param columnValues Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. (optional) + * @param orderBy Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. (optional, default to ASCENDING) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceBulkGetRecordCall(String vaultID, String objectName, List skyflowIds, String redaction, Boolean tokenization, List fields, String offset, String limit, Boolean downloadURL, String columnName, List columnValues, String orderBy, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = null; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/{objectName}" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())) + .replace("{" + "objectName" + "}", localVarApiClient.escapeString(objectName.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + if (skyflowIds != null) { + localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("multi", "skyflow_ids", skyflowIds)); + } + + if (redaction != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("redaction", redaction)); + } + + if (tokenization != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("tokenization", tokenization)); + } + + if (fields != null) { + localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("multi", "fields", fields)); + } + + if (offset != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("offset", offset)); + } + + if (limit != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("limit", limit)); + } + + if (downloadURL != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("downloadURL", downloadURL)); + } + + if (columnName != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("column_name", columnName)); + } + + if (columnValues != null) { + localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("multi", "column_values", columnValues)); + } + + if (orderBy != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("order_by", orderBy)); + } + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call recordServiceBulkGetRecordValidateBeforeCall(String vaultID, String objectName, List skyflowIds, String redaction, Boolean tokenization, List fields, String offset, String limit, Boolean downloadURL, String columnName, List columnValues, String orderBy, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling recordServiceBulkGetRecord(Async)"); + } + + // verify the required parameter 'objectName' is set + if (objectName == null) { + throw new ApiException("Missing the required parameter 'objectName' when calling recordServiceBulkGetRecord(Async)"); + } + + return recordServiceBulkGetRecordCall(vaultID, objectName, skyflowIds, redaction, tokenization, fields, offset, limit, downloadURL, columnName, columnValues, orderBy, _callback); + + } + + /** + * Get Record(s) + * Gets the specified records from a table. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table that contains the records. (required) + * @param skyflowIds `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. (optional) + * @param redaction Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. (optional, default to DEFAULT) + * @param tokenization If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. (optional) + * @param fields Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. (optional) + * @param offset Record position at which to start receiving data. (optional, default to 0) + * @param limit Number of record to return. Maximum 25. (optional, default to 25) + * @param downloadURL If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. (optional) + * @param columnName Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. (optional) + * @param columnValues Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. (optional) + * @param orderBy Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. (optional, default to ASCENDING) + * @return V1BulkGetRecordResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1BulkGetRecordResponse recordServiceBulkGetRecord(String vaultID, String objectName, List skyflowIds, String redaction, Boolean tokenization, List fields, String offset, String limit, Boolean downloadURL, String columnName, List columnValues, String orderBy) throws ApiException { + ApiResponse localVarResp = recordServiceBulkGetRecordWithHttpInfo(vaultID, objectName, skyflowIds, redaction, tokenization, fields, offset, limit, downloadURL, columnName, columnValues, orderBy); + return localVarResp.getData(); + } + + /** + * Get Record(s) + * Gets the specified records from a table. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table that contains the records. (required) + * @param skyflowIds `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. (optional) + * @param redaction Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. (optional, default to DEFAULT) + * @param tokenization If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. (optional) + * @param fields Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. (optional) + * @param offset Record position at which to start receiving data. (optional, default to 0) + * @param limit Number of record to return. Maximum 25. (optional, default to 25) + * @param downloadURL If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. (optional) + * @param columnName Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. (optional) + * @param columnValues Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. (optional) + * @param orderBy Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. (optional, default to ASCENDING) + * @return ApiResponse<V1BulkGetRecordResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse recordServiceBulkGetRecordWithHttpInfo(String vaultID, String objectName, List skyflowIds, String redaction, Boolean tokenization, List fields, String offset, String limit, Boolean downloadURL, String columnName, List columnValues, String orderBy) throws ApiException { + okhttp3.Call localVarCall = recordServiceBulkGetRecordValidateBeforeCall(vaultID, objectName, skyflowIds, redaction, tokenization, fields, offset, limit, downloadURL, columnName, columnValues, orderBy, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Get Record(s) (asynchronously) + * Gets the specified records from a table. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table that contains the records. (required) + * @param skyflowIds `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. (optional) + * @param redaction Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. (optional, default to DEFAULT) + * @param tokenization If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. (optional) + * @param fields Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. (optional) + * @param offset Record position at which to start receiving data. (optional, default to 0) + * @param limit Number of record to return. Maximum 25. (optional, default to 25) + * @param downloadURL If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. (optional) + * @param columnName Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. (optional) + * @param columnValues Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. (optional) + * @param orderBy Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. (optional, default to ASCENDING) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceBulkGetRecordAsync(String vaultID, String objectName, List skyflowIds, String redaction, Boolean tokenization, List fields, String offset, String limit, Boolean downloadURL, String columnName, List columnValues, String orderBy, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = recordServiceBulkGetRecordValidateBeforeCall(vaultID, objectName, skyflowIds, redaction, tokenization, fields, offset, limit, downloadURL, columnName, columnValues, orderBy, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } + /** + * Build call for recordServiceDeleteRecord + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record to delete. (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceDeleteRecordCall(String vaultID, String objectName, String ID, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = null; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/{objectName}/{ID}" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())) + .replace("{" + "objectName" + "}", localVarApiClient.escapeString(objectName.toString())) + .replace("{" + "ID" + "}", localVarApiClient.escapeString(ID.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call recordServiceDeleteRecordValidateBeforeCall(String vaultID, String objectName, String ID, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling recordServiceDeleteRecord(Async)"); + } + + // verify the required parameter 'objectName' is set + if (objectName == null) { + throw new ApiException("Missing the required parameter 'objectName' when calling recordServiceDeleteRecord(Async)"); + } + + // verify the required parameter 'ID' is set + if (ID == null) { + throw new ApiException("Missing the required parameter 'ID' when calling recordServiceDeleteRecord(Async)"); + } + + return recordServiceDeleteRecordCall(vaultID, objectName, ID, _callback); + + } + + /** + * Delete Record + * Deletes the specified record from a table.<br /><br /><b>Note:</b> This method doesn't delete transient field tokens. Transient field values are available until they expire based on the fields' time-to-live (TTL) setting. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record to delete. (required) + * @return V1DeleteRecordResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1DeleteRecordResponse recordServiceDeleteRecord(String vaultID, String objectName, String ID) throws ApiException { + ApiResponse localVarResp = recordServiceDeleteRecordWithHttpInfo(vaultID, objectName, ID); + return localVarResp.getData(); + } + + /** + * Delete Record + * Deletes the specified record from a table.<br /><br /><b>Note:</b> This method doesn't delete transient field tokens. Transient field values are available until they expire based on the fields' time-to-live (TTL) setting. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record to delete. (required) + * @return ApiResponse<V1DeleteRecordResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse recordServiceDeleteRecordWithHttpInfo(String vaultID, String objectName, String ID) throws ApiException { + okhttp3.Call localVarCall = recordServiceDeleteRecordValidateBeforeCall(vaultID, objectName, ID, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Delete Record (asynchronously) + * Deletes the specified record from a table.<br /><br /><b>Note:</b> This method doesn't delete transient field tokens. Transient field values are available until they expire based on the fields' time-to-live (TTL) setting. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record to delete. (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceDeleteRecordAsync(String vaultID, String objectName, String ID, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = recordServiceDeleteRecordValidateBeforeCall(vaultID, objectName, ID, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } + /** + * Build call for recordServiceGetRecord + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param redaction Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. (optional, default to DEFAULT) + * @param tokenization If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. (optional) + * @param fields Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. (optional) + * @param downloadURL If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. (optional) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceGetRecordCall(String vaultID, String objectName, String ID, String redaction, Boolean tokenization, List fields, Boolean downloadURL, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = null; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/{objectName}/{ID}" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())) + .replace("{" + "objectName" + "}", localVarApiClient.escapeString(objectName.toString())) + .replace("{" + "ID" + "}", localVarApiClient.escapeString(ID.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + if (redaction != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("redaction", redaction)); + } + + if (tokenization != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("tokenization", tokenization)); + } + + if (fields != null) { + localVarCollectionQueryParams.addAll(localVarApiClient.parameterToPairs("multi", "fields", fields)); + } + + if (downloadURL != null) { + localVarQueryParams.addAll(localVarApiClient.parameterToPair("downloadURL", downloadURL)); + } + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call recordServiceGetRecordValidateBeforeCall(String vaultID, String objectName, String ID, String redaction, Boolean tokenization, List fields, Boolean downloadURL, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling recordServiceGetRecord(Async)"); + } + + // verify the required parameter 'objectName' is set + if (objectName == null) { + throw new ApiException("Missing the required parameter 'objectName' when calling recordServiceGetRecord(Async)"); + } + + // verify the required parameter 'ID' is set + if (ID == null) { + throw new ApiException("Missing the required parameter 'ID' when calling recordServiceGetRecord(Async)"); + } + + return recordServiceGetRecordCall(vaultID, objectName, ID, redaction, tokenization, fields, downloadURL, _callback); + + } + + /** + * Get Record By ID + * Returns the specified record from a table. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param redaction Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. (optional, default to DEFAULT) + * @param tokenization If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. (optional) + * @param fields Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. (optional) + * @param downloadURL If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. (optional) + * @return V1FieldRecords + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1FieldRecords recordServiceGetRecord(String vaultID, String objectName, String ID, String redaction, Boolean tokenization, List fields, Boolean downloadURL) throws ApiException { + ApiResponse localVarResp = recordServiceGetRecordWithHttpInfo(vaultID, objectName, ID, redaction, tokenization, fields, downloadURL); + return localVarResp.getData(); + } + + /** + * Get Record By ID + * Returns the specified record from a table. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param redaction Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. (optional, default to DEFAULT) + * @param tokenization If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. (optional) + * @param fields Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. (optional) + * @param downloadURL If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. (optional) + * @return ApiResponse<V1FieldRecords> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse recordServiceGetRecordWithHttpInfo(String vaultID, String objectName, String ID, String redaction, Boolean tokenization, List fields, Boolean downloadURL) throws ApiException { + okhttp3.Call localVarCall = recordServiceGetRecordValidateBeforeCall(vaultID, objectName, ID, redaction, tokenization, fields, downloadURL, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Get Record By ID (asynchronously) + * Returns the specified record from a table. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param redaction Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. (optional, default to DEFAULT) + * @param tokenization If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. (optional) + * @param fields Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. (optional) + * @param downloadURL If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. (optional) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceGetRecordAsync(String vaultID, String objectName, String ID, String redaction, Boolean tokenization, List fields, Boolean downloadURL, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = recordServiceGetRecordValidateBeforeCall(vaultID, objectName, ID, redaction, tokenization, fields, downloadURL, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } + /** + * Build call for recordServiceInsertRecord + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param body (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceInsertRecordCall(String vaultID, String objectName, RecordServiceInsertRecordBody body, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = body; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/{objectName}" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())) + .replace("{" + "objectName" + "}", localVarApiClient.escapeString(objectName.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + "application/json" + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call recordServiceInsertRecordValidateBeforeCall(String vaultID, String objectName, RecordServiceInsertRecordBody body, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling recordServiceInsertRecord(Async)"); + } + + // verify the required parameter 'objectName' is set + if (objectName == null) { + throw new ApiException("Missing the required parameter 'objectName' when calling recordServiceInsertRecord(Async)"); + } + + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException("Missing the required parameter 'body' when calling recordServiceInsertRecord(Async)"); + } + + return recordServiceInsertRecordCall(vaultID, objectName, body, _callback); + + } + + /** + * Insert Records + * Inserts a record in the specified table.<br /><br />The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.<br /><br />Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param body (required) + * @return V1InsertRecordResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1InsertRecordResponse recordServiceInsertRecord(String vaultID, String objectName, RecordServiceInsertRecordBody body) throws ApiException { + ApiResponse localVarResp = recordServiceInsertRecordWithHttpInfo(vaultID, objectName, body); + return localVarResp.getData(); + } + + /** + * Insert Records + * Inserts a record in the specified table.<br /><br />The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.<br /><br />Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param body (required) + * @return ApiResponse<V1InsertRecordResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse recordServiceInsertRecordWithHttpInfo(String vaultID, String objectName, RecordServiceInsertRecordBody body) throws ApiException { + okhttp3.Call localVarCall = recordServiceInsertRecordValidateBeforeCall(vaultID, objectName, body, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Insert Records (asynchronously) + * Inserts a record in the specified table.<br /><br />The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.<br /><br />Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param body (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceInsertRecordAsync(String vaultID, String objectName, RecordServiceInsertRecordBody body, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = recordServiceInsertRecordValidateBeforeCall(vaultID, objectName, body, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } + /** + * Build call for recordServiceUpdateRecord + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param body (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceUpdateRecordCall(String vaultID, String objectName, String ID, RecordServiceUpdateRecordBody body, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = body; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/{objectName}/{ID}" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())) + .replace("{" + "objectName" + "}", localVarApiClient.escapeString(objectName.toString())) + .replace("{" + "ID" + "}", localVarApiClient.escapeString(ID.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + "application/json" + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call recordServiceUpdateRecordValidateBeforeCall(String vaultID, String objectName, String ID, RecordServiceUpdateRecordBody body, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling recordServiceUpdateRecord(Async)"); + } + + // verify the required parameter 'objectName' is set + if (objectName == null) { + throw new ApiException("Missing the required parameter 'objectName' when calling recordServiceUpdateRecord(Async)"); + } + + // verify the required parameter 'ID' is set + if (ID == null) { + throw new ApiException("Missing the required parameter 'ID' when calling recordServiceUpdateRecord(Async)"); + } + + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException("Missing the required parameter 'body' when calling recordServiceUpdateRecord(Async)"); + } + + return recordServiceUpdateRecordCall(vaultID, objectName, ID, body, _callback); + + } + + /** + * Update Record + * Updates the specified record in a table.<br /><br />When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn't included, it's removed.<br /><br />The time-to-live (TTL) for a transient field resets when the field value is updated. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param body (required) + * @return V1UpdateRecordResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1UpdateRecordResponse recordServiceUpdateRecord(String vaultID, String objectName, String ID, RecordServiceUpdateRecordBody body) throws ApiException { + ApiResponse localVarResp = recordServiceUpdateRecordWithHttpInfo(vaultID, objectName, ID, body); + return localVarResp.getData(); + } + + /** + * Update Record + * Updates the specified record in a table.<br /><br />When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn't included, it's removed.<br /><br />The time-to-live (TTL) for a transient field resets when the field value is updated. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param body (required) + * @return ApiResponse<V1UpdateRecordResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse recordServiceUpdateRecordWithHttpInfo(String vaultID, String objectName, String ID, RecordServiceUpdateRecordBody body) throws ApiException { + okhttp3.Call localVarCall = recordServiceUpdateRecordValidateBeforeCall(vaultID, objectName, ID, body, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Update Record (asynchronously) + * Updates the specified record in a table.<br /><br />When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn't included, it's removed.<br /><br />The time-to-live (TTL) for a transient field resets when the field value is updated. + * @param vaultID ID of the vault. (required) + * @param objectName Name of the table. (required) + * @param ID `skyflow_id` of the record. (required) + * @param body (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceUpdateRecordAsync(String vaultID, String objectName, String ID, RecordServiceUpdateRecordBody body, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = recordServiceUpdateRecordValidateBeforeCall(vaultID, objectName, ID, body, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/TokensApi.java b/v2/src/main/java/com/skyflow/generated/rest/api/TokensApi.java new file mode 100644 index 00000000..f2ec51a3 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/api/TokensApi.java @@ -0,0 +1,361 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.api; + +import com.skyflow.generated.rest.ApiCallback; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.ApiException; +import com.skyflow.generated.rest.ApiResponse; +import com.skyflow.generated.rest.Configuration; +import com.skyflow.generated.rest.Pair; +import com.skyflow.generated.rest.ProgressRequestBody; +import com.skyflow.generated.rest.ProgressResponseBody; + +import com.google.gson.reflect.TypeToken; + +import java.io.IOException; + + +import com.skyflow.generated.rest.models.GooglerpcStatus; +import com.skyflow.generated.rest.models.V1DetokenizePayload; +import com.skyflow.generated.rest.models.V1DetokenizeResponse; +import com.skyflow.generated.rest.models.V1TokenizePayload; +import com.skyflow.generated.rest.models.V1TokenizeResponse; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TokensApi { + private ApiClient localVarApiClient; + private int localHostIndex; + private String localCustomBaseUrl; + + public TokensApi() { + this(Configuration.getDefaultApiClient()); + } + + public TokensApi(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public ApiClient getApiClient() { + return localVarApiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.localVarApiClient = apiClient; + } + + public int getHostIndex() { + return localHostIndex; + } + + public void setHostIndex(int hostIndex) { + this.localHostIndex = hostIndex; + } + + public String getCustomBaseUrl() { + return localCustomBaseUrl; + } + + public void setCustomBaseUrl(String customBaseUrl) { + this.localCustomBaseUrl = customBaseUrl; + } + + /** + * Build call for recordServiceDetokenize + * @param vaultID ID of the vault. (required) + * @param detokenizePayload (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details +
+ + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceDetokenizeCall(String vaultID, V1DetokenizePayload detokenizePayload, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = detokenizePayload; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/detokenize" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + "application/json" + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call recordServiceDetokenizeValidateBeforeCall(String vaultID, V1DetokenizePayload detokenizePayload, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling recordServiceDetokenize(Async)"); + } + + // verify the required parameter 'detokenizePayload' is set + if (detokenizePayload == null) { + throw new ApiException("Missing the required parameter 'detokenizePayload' when calling recordServiceDetokenize(Async)"); + } + + return recordServiceDetokenizeCall(vaultID, detokenizePayload, _callback); + + } + + /** + * Detokenize + * Returns records that correspond to the specified tokens. + * @param vaultID ID of the vault. (required) + * @param detokenizePayload (required) + * @return V1DetokenizeResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1DetokenizeResponse recordServiceDetokenize(String vaultID, V1DetokenizePayload detokenizePayload) throws ApiException { + ApiResponse localVarResp = recordServiceDetokenizeWithHttpInfo(vaultID, detokenizePayload); + return localVarResp.getData(); + } + + /** + * Detokenize + * Returns records that correspond to the specified tokens. + * @param vaultID ID of the vault. (required) + * @param detokenizePayload (required) + * @return ApiResponse<V1DetokenizeResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse recordServiceDetokenizeWithHttpInfo(String vaultID, V1DetokenizePayload detokenizePayload) throws ApiException { + okhttp3.Call localVarCall = recordServiceDetokenizeValidateBeforeCall(vaultID, detokenizePayload, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Detokenize (asynchronously) + * Returns records that correspond to the specified tokens. + * @param vaultID ID of the vault. (required) + * @param detokenizePayload (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceDetokenizeAsync(String vaultID, V1DetokenizePayload detokenizePayload, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = recordServiceDetokenizeValidateBeforeCall(vaultID, detokenizePayload, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } + /** + * Build call for recordServiceTokenize + * @param vaultID ID of the vault. (required) + * @param tokenizePayload (required) + * @param _callback Callback for upload/download progress + * @return Call to execute + * @throws ApiException If fail to serialize the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceTokenizeCall(String vaultID, V1TokenizePayload tokenizePayload, final ApiCallback _callback) throws ApiException { + String basePath = null; + // Operation Servers + String[] localBasePaths = new String[] { }; + + // Determine Base Path to Use + if (localCustomBaseUrl != null){ + basePath = localCustomBaseUrl; + } else if ( localBasePaths.length > 0 ) { + basePath = localBasePaths[localHostIndex]; + } else { + basePath = null; + } + + Object localVarPostBody = tokenizePayload; + + // create path and map variables + String localVarPath = "/v1/vaults/{vaultID}/tokenize" + .replace("{" + "vaultID" + "}", localVarApiClient.escapeString(vaultID.toString())); + + List localVarQueryParams = new ArrayList(); + List localVarCollectionQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + Map localVarCookieParams = new HashMap(); + Map localVarFormParams = new HashMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts); + if (localVarAccept != null) { + localVarHeaderParams.put("Accept", localVarAccept); + } + + final String[] localVarContentTypes = { + "application/json" + }; + final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes); + if (localVarContentType != null) { + localVarHeaderParams.put("Content-Type", localVarContentType); + } + + String[] localVarAuthNames = new String[] { "Bearer" }; + return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); + } + + @SuppressWarnings("rawtypes") + private okhttp3.Call recordServiceTokenizeValidateBeforeCall(String vaultID, V1TokenizePayload tokenizePayload, final ApiCallback _callback) throws ApiException { + // verify the required parameter 'vaultID' is set + if (vaultID == null) { + throw new ApiException("Missing the required parameter 'vaultID' when calling recordServiceTokenize(Async)"); + } + + // verify the required parameter 'tokenizePayload' is set + if (tokenizePayload == null) { + throw new ApiException("Missing the required parameter 'tokenizePayload' when calling recordServiceTokenize(Async)"); + } + + return recordServiceTokenizeCall(vaultID, tokenizePayload, _callback); + + } + + /** + * Tokenize + * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.<br /><br /><b>Note:</b> This endpoint doesn't insert records—it returns tokens for existing values. To insert records and tokenize that new record's values, see <a href='#RecordService_InsertRecord'>Insert Record</a> and the tokenization parameter. + * @param vaultID ID of the vault. (required) + * @param tokenizePayload (required) + * @return V1TokenizeResponse + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public V1TokenizeResponse recordServiceTokenize(String vaultID, V1TokenizePayload tokenizePayload) throws ApiException { + ApiResponse localVarResp = recordServiceTokenizeWithHttpInfo(vaultID, tokenizePayload); + return localVarResp.getData(); + } + + /** + * Tokenize + * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.<br /><br /><b>Note:</b> This endpoint doesn't insert records—it returns tokens for existing values. To insert records and tokenize that new record's values, see <a href='#RecordService_InsertRecord'>Insert Record</a> and the tokenization parameter. + * @param vaultID ID of the vault. (required) + * @param tokenizePayload (required) + * @return ApiResponse<V1TokenizeResponse> + * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public ApiResponse recordServiceTokenizeWithHttpInfo(String vaultID, V1TokenizePayload tokenizePayload) throws ApiException { + okhttp3.Call localVarCall = recordServiceTokenizeValidateBeforeCall(vaultID, tokenizePayload, null); + Type localVarReturnType = new TypeToken(){}.getType(); + return localVarApiClient.execute(localVarCall, localVarReturnType); + } + + /** + * Tokenize (asynchronously) + * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.<br /><br /><b>Note:</b> This endpoint doesn't insert records—it returns tokens for existing values. To insert records and tokenize that new record's values, see <a href='#RecordService_InsertRecord'>Insert Record</a> and the tokenization parameter. + * @param vaultID ID of the vault. (required) + * @param tokenizePayload (required) + * @param _callback The callback to be executed when the API call finishes + * @return The request call + * @throws ApiException If fail to process the API call, e.g. serializing the request body object + * @http.response.details + + + + + +
Status Code Description Response Headers
200 A successful response. -
404 Returned when the resource does not exist. -
0 An unexpected error response. -
+ */ + public okhttp3.Call recordServiceTokenizeAsync(String vaultID, V1TokenizePayload tokenizePayload, final ApiCallback _callback) throws ApiException { + + okhttp3.Call localVarCall = recordServiceTokenizeValidateBeforeCall(vaultID, tokenizePayload, _callback); + Type localVarReturnType = new TypeToken(){}.getType(); + localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback); + return localVarCall; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/auth/ApiKeyAuth.java b/v2/src/main/java/com/skyflow/generated/rest/auth/ApiKeyAuth.java new file mode 100644 index 00000000..79949c2b --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/auth/ApiKeyAuth.java @@ -0,0 +1,80 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.auth; + +import com.skyflow.generated.rest.ApiException; +import com.skyflow.generated.rest.Pair; + +import java.net.URI; +import java.util.Map; +import java.util.List; + +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class ApiKeyAuth implements Authentication { + private final String location; + private final String paramName; + + private String apiKey; + private String apiKeyPrefix; + + public ApiKeyAuth(String location, String paramName) { + this.location = location; + this.paramName = paramName; + } + + public String getLocation() { + return location; + } + + public String getParamName() { + return paramName; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getApiKeyPrefix() { + return apiKeyPrefix; + } + + public void setApiKeyPrefix(String apiKeyPrefix) { + this.apiKeyPrefix = apiKeyPrefix; + } + + @Override + public void applyToParams(List queryParams, Map headerParams, Map cookieParams, + String payload, String method, URI uri) throws ApiException { + if (apiKey == null) { + return; + } + String value; + if (apiKeyPrefix != null) { + value = apiKeyPrefix + " " + apiKey; + } else { + value = apiKey; + } + if ("query".equals(location)) { + queryParams.add(new Pair(paramName, value)); + } else if ("header".equals(location)) { + headerParams.put(paramName, value); + } else if ("cookie".equals(location)) { + cookieParams.put(paramName, value); + } + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/auth/Authentication.java b/v2/src/main/java/com/skyflow/generated/rest/auth/Authentication.java new file mode 100644 index 00000000..219caa17 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/auth/Authentication.java @@ -0,0 +1,36 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.auth; + +import com.skyflow.generated.rest.Pair; +import com.skyflow.generated.rest.ApiException; + +import java.net.URI; +import java.util.Map; +import java.util.List; + +public interface Authentication { + /** + * Apply authentication settings to header and query params. + * + * @param queryParams List of query parameters + * @param headerParams Map of header parameters + * @param cookieParams Map of cookie parameters + * @param payload HTTP request body + * @param method HTTP method + * @param uri URI + * @throws ApiException if failed to update the parameters + */ + void applyToParams(List queryParams, Map headerParams, Map cookieParams, String payload, String method, URI uri) throws ApiException; +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/auth/HttpBasicAuth.java b/v2/src/main/java/com/skyflow/generated/rest/auth/HttpBasicAuth.java new file mode 100644 index 00000000..5bf3124a --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/auth/HttpBasicAuth.java @@ -0,0 +1,55 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.auth; + +import com.skyflow.generated.rest.Pair; +import com.skyflow.generated.rest.ApiException; + +import okhttp3.Credentials; + +import java.net.URI; +import java.util.Map; +import java.util.List; + +public class HttpBasicAuth implements Authentication { + private String username; + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public void applyToParams(List queryParams, Map headerParams, Map cookieParams, + String payload, String method, URI uri) throws ApiException { + if (username == null && password == null) { + return; + } + headerParams.put("Authorization", Credentials.basic( + username == null ? "" : username, + password == null ? "" : password)); + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/auth/HttpBearerAuth.java b/v2/src/main/java/com/skyflow/generated/rest/auth/HttpBearerAuth.java new file mode 100644 index 00000000..e8797964 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/auth/HttpBearerAuth.java @@ -0,0 +1,75 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.auth; + +import com.skyflow.generated.rest.ApiException; +import com.skyflow.generated.rest.Pair; + +import java.net.URI; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Supplier; + +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class HttpBearerAuth implements Authentication { + private final String scheme; + private Supplier tokenSupplier; + + public HttpBearerAuth(String scheme) { + this.scheme = scheme; + } + + /** + * Gets the token, which together with the scheme, will be sent as the value of the Authorization header. + * + * @return The bearer token + */ + public String getBearerToken() { + return tokenSupplier.get(); + } + + /** + * Sets the token, which together with the scheme, will be sent as the value of the Authorization header. + * + * @param bearerToken The bearer token to send in the Authorization header + */ + public void setBearerToken(String bearerToken) { + this.tokenSupplier = () -> bearerToken; + } + + /** + * Sets the supplier of tokens, which together with the scheme, will be sent as the value of the Authorization header. + * + * @param tokenSupplier The supplier of bearer tokens to send in the Authorization header + */ + public void setBearerToken(Supplier tokenSupplier) { + this.tokenSupplier = tokenSupplier; + } + + @Override + public void applyToParams(List queryParams, Map headerParams, Map cookieParams, + String payload, String method, URI uri) throws ApiException { + String bearerToken = Optional.ofNullable(tokenSupplier).map(Supplier::get).orElse(null); + if (bearerToken == null) { + return; + } + + headerParams.put("Authorization", (scheme != null ? upperCaseBearer(scheme) + " " : "") + bearerToken); + } + + private static String upperCaseBearer(String scheme) { + return ("bearer".equalsIgnoreCase(scheme)) ? "Bearer" : scheme; + } +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/AbstractOpenApiSchema.java b/v2/src/main/java/com/skyflow/generated/rest/models/AbstractOpenApiSchema.java new file mode 100644 index 00000000..c506e085 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/AbstractOpenApiSchema.java @@ -0,0 +1,146 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import com.skyflow.generated.rest.ApiException; +import java.util.Objects; +import java.lang.reflect.Type; +import java.util.Map; + +/** + * Abstract class for oneOf,anyOf schemas defined in OpenAPI spec + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public abstract class AbstractOpenApiSchema { + + // store the actual instance of the schema/object + private Object instance; + + // is nullable + private Boolean isNullable; + + // schema type (e.g. oneOf, anyOf) + private final String schemaType; + + public AbstractOpenApiSchema(String schemaType, Boolean isNullable) { + this.schemaType = schemaType; + this.isNullable = isNullable; + } + + /** + * Get the list of oneOf/anyOf composed schemas allowed to be stored in this object + * + * @return an instance of the actual schema/object + */ + public abstract Map> getSchemas(); + + /** + * Get the actual instance + * + * @return an instance of the actual schema/object + */ + //@JsonValue + public Object getActualInstance() {return instance;} + + /** + * Set the actual instance + * + * @param instance the actual instance of the schema/object + */ + public void setActualInstance(Object instance) {this.instance = instance;} + + /** + * Get the instant recursively when the schemas defined in oneOf/anyof happen to be oneOf/anyOf schema as well + * + * @return an instance of the actual schema/object + */ + public Object getActualInstanceRecursively() { + return getActualInstanceRecursively(this); + } + + private Object getActualInstanceRecursively(AbstractOpenApiSchema object) { + if (object.getActualInstance() == null) { + return null; + } else if (object.getActualInstance() instanceof AbstractOpenApiSchema) { + return getActualInstanceRecursively((AbstractOpenApiSchema)object.getActualInstance()); + } else { + return object.getActualInstance(); + } + } + + /** + * Get the schema type (e.g. anyOf, oneOf) + * + * @return the schema type + */ + public String getSchemaType() { + return schemaType; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ").append(getClass()).append(" {\n"); + sb.append(" instance: ").append(toIndentedString(instance)).append("\n"); + sb.append(" isNullable: ").append(toIndentedString(isNullable)).append("\n"); + sb.append(" schemaType: ").append(toIndentedString(schemaType)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AbstractOpenApiSchema a = (AbstractOpenApiSchema) o; + return Objects.equals(this.instance, a.instance) && + Objects.equals(this.isNullable, a.isNullable) && + Objects.equals(this.schemaType, a.schemaType); + } + + @Override + public int hashCode() { + return Objects.hash(instance, isNullable, schemaType); + } + + /** + * Is nullable + * + * @return true if it's nullable + */ + public Boolean isNullable() { + if (Boolean.TRUE.equals(isNullable)) { + return Boolean.TRUE; + } else { + return Boolean.FALSE; + } + } + + + +} diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventAuditResourceType.java b/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventAuditResourceType.java new file mode 100644 index 00000000..ee029542 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventAuditResourceType.java @@ -0,0 +1,134 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.annotations.SerializedName; + +import java.io.IOException; +import com.google.gson.TypeAdapter; +import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Type of the resource. + */ +@JsonAdapter(AuditEventAuditResourceType.Adapter.class) +public enum AuditEventAuditResourceType { + + NONE_API("NONE_API"), + + ACCOUNT("ACCOUNT"), + + AUDIT("AUDIT"), + + BASE_DATA_TYPE("BASE_DATA_TYPE"), + + FIELD_TEMPLATE("FIELD_TEMPLATE"), + + FILE("FILE"), + + KEY("KEY"), + + POLICY("POLICY"), + + PROTO_PARSE("PROTO_PARSE"), + + RECORD("RECORD"), + + ROLE("ROLE"), + + RULE("RULE"), + + SECRET("SECRET"), + + SERVICE_ACCOUNT("SERVICE_ACCOUNT"), + + TOKEN("TOKEN"), + + USER("USER"), + + VAULT("VAULT"), + + VAULT_TEMPLATE("VAULT_TEMPLATE"), + + WORKSPACE("WORKSPACE"), + + TABLE("TABLE"), + + POLICY_TEMPLATE("POLICY_TEMPLATE"), + + MEMBER("MEMBER"), + + TAG("TAG"), + + CONNECTION("CONNECTION"), + + MIGRATION("MIGRATION"), + + SCHEDULED_JOB("SCHEDULED_JOB"), + + JOB("JOB"), + + COLUMN_NAME("COLUMN_NAME"), + + NETWORK_TOKEN("NETWORK_TOKEN"), + + SUBSCRIPTION("SUBSCRIPTION"); + + private String value; + + AuditEventAuditResourceType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static AuditEventAuditResourceType fromValue(String value) { + for (AuditEventAuditResourceType b : AuditEventAuditResourceType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + public static class Adapter extends TypeAdapter { + @Override + public void write(final JsonWriter jsonWriter, final AuditEventAuditResourceType enumeration) throws IOException { + jsonWriter.value(enumeration.getValue()); + } + + @Override + public AuditEventAuditResourceType read(final JsonReader jsonReader) throws IOException { + String value = jsonReader.nextString(); + return AuditEventAuditResourceType.fromValue(value); + } + } + + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + String value = jsonElement.getAsString(); + AuditEventAuditResourceType.fromValue(value); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventContext.java b/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventContext.java new file mode 100644 index 00000000..5732e155 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventContext.java @@ -0,0 +1,530 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.ContextAccessType; +import com.skyflow.generated.rest.models.ContextAuthMode; +import com.skyflow.generated.rest.models.V1MemberType; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * Context for an audit event. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class AuditEventContext { + public static final String SERIALIZED_NAME_CHANGE_I_D = "changeID"; + @SerializedName(SERIALIZED_NAME_CHANGE_I_D) + private String changeID; + + public static final String SERIALIZED_NAME_REQUEST_I_D = "requestID"; + @SerializedName(SERIALIZED_NAME_REQUEST_I_D) + private String requestID; + + public static final String SERIALIZED_NAME_TRACE_I_D = "traceID"; + @SerializedName(SERIALIZED_NAME_TRACE_I_D) + private String traceID; + + public static final String SERIALIZED_NAME_SESSION_I_D = "sessionID"; + @SerializedName(SERIALIZED_NAME_SESSION_I_D) + private String sessionID; + + public static final String SERIALIZED_NAME_ACTOR = "actor"; + @SerializedName(SERIALIZED_NAME_ACTOR) + private String actor; + + public static final String SERIALIZED_NAME_ACTOR_TYPE = "actorType"; + @SerializedName(SERIALIZED_NAME_ACTOR_TYPE) + private V1MemberType actorType = V1MemberType.NONE; + + public static final String SERIALIZED_NAME_ACCESS_TYPE = "accessType"; + @SerializedName(SERIALIZED_NAME_ACCESS_TYPE) + private ContextAccessType accessType = ContextAccessType.ACCESS_NONE; + + public static final String SERIALIZED_NAME_IP_ADDRESS = "ipAddress"; + @SerializedName(SERIALIZED_NAME_IP_ADDRESS) + private String ipAddress; + + public static final String SERIALIZED_NAME_ORIGIN = "origin"; + @SerializedName(SERIALIZED_NAME_ORIGIN) + private String origin; + + public static final String SERIALIZED_NAME_AUTH_MODE = "authMode"; + @SerializedName(SERIALIZED_NAME_AUTH_MODE) + private ContextAuthMode authMode = ContextAuthMode.AUTH_NONE; + + public static final String SERIALIZED_NAME_JWT_I_D = "jwtID"; + @SerializedName(SERIALIZED_NAME_JWT_I_D) + private String jwtID; + + public static final String SERIALIZED_NAME_BEARER_TOKEN_CONTEXT_I_D = "bearerTokenContextID"; + @SerializedName(SERIALIZED_NAME_BEARER_TOKEN_CONTEXT_I_D) + private String bearerTokenContextID; + + public AuditEventContext() { + } + + public AuditEventContext changeID(String changeID) { + this.changeID = changeID; + return this; + } + + /** + * ID for the audit event. + * @return changeID + */ + @javax.annotation.Nullable + public String getChangeID() { + return changeID; + } + + public void setChangeID(String changeID) { + this.changeID = changeID; + } + + + public AuditEventContext requestID(String requestID) { + this.requestID = requestID; + return this; + } + + /** + * ID for the request that caused the event. + * @return requestID + */ + @javax.annotation.Nullable + public String getRequestID() { + return requestID; + } + + public void setRequestID(String requestID) { + this.requestID = requestID; + } + + + public AuditEventContext traceID(String traceID) { + this.traceID = traceID; + return this; + } + + /** + * ID for the request set by the service that received the request. + * @return traceID + */ + @javax.annotation.Nullable + public String getTraceID() { + return traceID; + } + + public void setTraceID(String traceID) { + this.traceID = traceID; + } + + + public AuditEventContext sessionID(String sessionID) { + this.sessionID = sessionID; + return this; + } + + /** + * ID for the session in which the request was sent. + * @return sessionID + */ + @javax.annotation.Nullable + public String getSessionID() { + return sessionID; + } + + public void setSessionID(String sessionID) { + this.sessionID = sessionID; + } + + + public AuditEventContext actor(String actor) { + this.actor = actor; + return this; + } + + /** + * Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. + * @return actor + */ + @javax.annotation.Nullable + public String getActor() { + return actor; + } + + public void setActor(String actor) { + this.actor = actor; + } + + + public AuditEventContext actorType(V1MemberType actorType) { + this.actorType = actorType; + return this; + } + + /** + * Get actorType + * @return actorType + */ + @javax.annotation.Nullable + public V1MemberType getActorType() { + return actorType; + } + + public void setActorType(V1MemberType actorType) { + this.actorType = actorType; + } + + + public AuditEventContext accessType(ContextAccessType accessType) { + this.accessType = accessType; + return this; + } + + /** + * Get accessType + * @return accessType + */ + @javax.annotation.Nullable + public ContextAccessType getAccessType() { + return accessType; + } + + public void setAccessType(ContextAccessType accessType) { + this.accessType = accessType; + } + + + public AuditEventContext ipAddress(String ipAddress) { + this.ipAddress = ipAddress; + return this; + } + + /** + * IP Address of the client that made the request. + * @return ipAddress + */ + @javax.annotation.Nullable + public String getIpAddress() { + return ipAddress; + } + + public void setIpAddress(String ipAddress) { + this.ipAddress = ipAddress; + } + + + public AuditEventContext origin(String origin) { + this.origin = origin; + return this; + } + + /** + * HTTP Origin request header (including scheme, hostname, and port) of the request. + * @return origin + */ + @javax.annotation.Nullable + public String getOrigin() { + return origin; + } + + public void setOrigin(String origin) { + this.origin = origin; + } + + + public AuditEventContext authMode(ContextAuthMode authMode) { + this.authMode = authMode; + return this; + } + + /** + * Get authMode + * @return authMode + */ + @javax.annotation.Nullable + public ContextAuthMode getAuthMode() { + return authMode; + } + + public void setAuthMode(ContextAuthMode authMode) { + this.authMode = authMode; + } + + + public AuditEventContext jwtID(String jwtID) { + this.jwtID = jwtID; + return this; + } + + /** + * ID of the JWT token. + * @return jwtID + */ + @javax.annotation.Nullable + public String getJwtID() { + return jwtID; + } + + public void setJwtID(String jwtID) { + this.jwtID = jwtID; + } + + + public AuditEventContext bearerTokenContextID(String bearerTokenContextID) { + this.bearerTokenContextID = bearerTokenContextID; + return this; + } + + /** + * Embedded User Context. + * @return bearerTokenContextID + */ + @javax.annotation.Nullable + public String getBearerTokenContextID() { + return bearerTokenContextID; + } + + public void setBearerTokenContextID(String bearerTokenContextID) { + this.bearerTokenContextID = bearerTokenContextID; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AuditEventContext auditEventContext = (AuditEventContext) o; + return Objects.equals(this.changeID, auditEventContext.changeID) && + Objects.equals(this.requestID, auditEventContext.requestID) && + Objects.equals(this.traceID, auditEventContext.traceID) && + Objects.equals(this.sessionID, auditEventContext.sessionID) && + Objects.equals(this.actor, auditEventContext.actor) && + Objects.equals(this.actorType, auditEventContext.actorType) && + Objects.equals(this.accessType, auditEventContext.accessType) && + Objects.equals(this.ipAddress, auditEventContext.ipAddress) && + Objects.equals(this.origin, auditEventContext.origin) && + Objects.equals(this.authMode, auditEventContext.authMode) && + Objects.equals(this.jwtID, auditEventContext.jwtID) && + Objects.equals(this.bearerTokenContextID, auditEventContext.bearerTokenContextID); + } + + @Override + public int hashCode() { + return Objects.hash(changeID, requestID, traceID, sessionID, actor, actorType, accessType, ipAddress, origin, authMode, jwtID, bearerTokenContextID); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AuditEventContext {\n"); + sb.append(" changeID: ").append(toIndentedString(changeID)).append("\n"); + sb.append(" requestID: ").append(toIndentedString(requestID)).append("\n"); + sb.append(" traceID: ").append(toIndentedString(traceID)).append("\n"); + sb.append(" sessionID: ").append(toIndentedString(sessionID)).append("\n"); + sb.append(" actor: ").append(toIndentedString(actor)).append("\n"); + sb.append(" actorType: ").append(toIndentedString(actorType)).append("\n"); + sb.append(" accessType: ").append(toIndentedString(accessType)).append("\n"); + sb.append(" ipAddress: ").append(toIndentedString(ipAddress)).append("\n"); + sb.append(" origin: ").append(toIndentedString(origin)).append("\n"); + sb.append(" authMode: ").append(toIndentedString(authMode)).append("\n"); + sb.append(" jwtID: ").append(toIndentedString(jwtID)).append("\n"); + sb.append(" bearerTokenContextID: ").append(toIndentedString(bearerTokenContextID)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("changeID"); + openapiFields.add("requestID"); + openapiFields.add("traceID"); + openapiFields.add("sessionID"); + openapiFields.add("actor"); + openapiFields.add("actorType"); + openapiFields.add("accessType"); + openapiFields.add("ipAddress"); + openapiFields.add("origin"); + openapiFields.add("authMode"); + openapiFields.add("jwtID"); + openapiFields.add("bearerTokenContextID"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to AuditEventContext + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!AuditEventContext.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in AuditEventContext is not found in the empty JSON string", AuditEventContext.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!AuditEventContext.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `AuditEventContext` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("changeID") != null && !jsonObj.get("changeID").isJsonNull()) && !jsonObj.get("changeID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `changeID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("changeID").toString())); + } + if ((jsonObj.get("requestID") != null && !jsonObj.get("requestID").isJsonNull()) && !jsonObj.get("requestID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `requestID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("requestID").toString())); + } + if ((jsonObj.get("traceID") != null && !jsonObj.get("traceID").isJsonNull()) && !jsonObj.get("traceID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `traceID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("traceID").toString())); + } + if ((jsonObj.get("sessionID") != null && !jsonObj.get("sessionID").isJsonNull()) && !jsonObj.get("sessionID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `sessionID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("sessionID").toString())); + } + if ((jsonObj.get("actor") != null && !jsonObj.get("actor").isJsonNull()) && !jsonObj.get("actor").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `actor` to be a primitive type in the JSON string but got `%s`", jsonObj.get("actor").toString())); + } + // validate the optional field `actorType` + if (jsonObj.get("actorType") != null && !jsonObj.get("actorType").isJsonNull()) { + V1MemberType.validateJsonElement(jsonObj.get("actorType")); + } + // validate the optional field `accessType` + if (jsonObj.get("accessType") != null && !jsonObj.get("accessType").isJsonNull()) { + ContextAccessType.validateJsonElement(jsonObj.get("accessType")); + } + if ((jsonObj.get("ipAddress") != null && !jsonObj.get("ipAddress").isJsonNull()) && !jsonObj.get("ipAddress").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `ipAddress` to be a primitive type in the JSON string but got `%s`", jsonObj.get("ipAddress").toString())); + } + if ((jsonObj.get("origin") != null && !jsonObj.get("origin").isJsonNull()) && !jsonObj.get("origin").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `origin` to be a primitive type in the JSON string but got `%s`", jsonObj.get("origin").toString())); + } + // validate the optional field `authMode` + if (jsonObj.get("authMode") != null && !jsonObj.get("authMode").isJsonNull()) { + ContextAuthMode.validateJsonElement(jsonObj.get("authMode")); + } + if ((jsonObj.get("jwtID") != null && !jsonObj.get("jwtID").isJsonNull()) && !jsonObj.get("jwtID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `jwtID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("jwtID").toString())); + } + if ((jsonObj.get("bearerTokenContextID") != null && !jsonObj.get("bearerTokenContextID").isJsonNull()) && !jsonObj.get("bearerTokenContextID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `bearerTokenContextID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("bearerTokenContextID").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!AuditEventContext.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'AuditEventContext' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(AuditEventContext.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, AuditEventContext value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public AuditEventContext read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of AuditEventContext given an JSON string + * + * @param jsonString JSON string + * @return An instance of AuditEventContext + * @throws IOException if the JSON string is invalid with respect to AuditEventContext + */ + public static AuditEventContext fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, AuditEventContext.class); + } + + /** + * Convert an instance of AuditEventContext to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventData.java b/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventData.java new file mode 100644 index 00000000..4631467b --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventData.java @@ -0,0 +1,205 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * Any Sensitive data that needs to be wrapped. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class AuditEventData { + public static final String SERIALIZED_NAME_CONTENT = "content"; + @SerializedName(SERIALIZED_NAME_CONTENT) + private String content; + + public AuditEventData() { + } + + public AuditEventData content(String content) { + this.content = content; + return this; + } + + /** + * The entire body of the data requested or the query fired. + * @return content + */ + @javax.annotation.Nullable + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AuditEventData auditEventData = (AuditEventData) o; + return Objects.equals(this.content, auditEventData.content); + } + + @Override + public int hashCode() { + return Objects.hash(content); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AuditEventData {\n"); + sb.append(" content: ").append(toIndentedString(content)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("content"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to AuditEventData + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!AuditEventData.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in AuditEventData is not found in the empty JSON string", AuditEventData.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!AuditEventData.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `AuditEventData` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("content") != null && !jsonObj.get("content").isJsonNull()) && !jsonObj.get("content").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `content` to be a primitive type in the JSON string but got `%s`", jsonObj.get("content").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!AuditEventData.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'AuditEventData' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(AuditEventData.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, AuditEventData value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public AuditEventData read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of AuditEventData given an JSON string + * + * @param jsonString JSON string + * @return An instance of AuditEventData + * @throws IOException if the JSON string is invalid with respect to AuditEventData + */ + public static AuditEventData fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, AuditEventData.class); + } + + /** + * Convert an instance of AuditEventData to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventHTTPInfo.java b/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventHTTPInfo.java new file mode 100644 index 00000000..8d35595f --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventHTTPInfo.java @@ -0,0 +1,234 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * AuditEventHTTPInfo + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class AuditEventHTTPInfo { + public static final String SERIALIZED_NAME_U_R_I = "URI"; + @SerializedName(SERIALIZED_NAME_U_R_I) + private String URI; + + public static final String SERIALIZED_NAME_METHOD = "method"; + @SerializedName(SERIALIZED_NAME_METHOD) + private String method; + + public AuditEventHTTPInfo() { + } + + public AuditEventHTTPInfo URI(String URI) { + this.URI = URI; + return this; + } + + /** + * The http URI that is used. + * @return URI + */ + @javax.annotation.Nullable + public String getURI() { + return URI; + } + + public void setURI(String URI) { + this.URI = URI; + } + + + public AuditEventHTTPInfo method(String method) { + this.method = method; + return this; + } + + /** + * http method used. + * @return method + */ + @javax.annotation.Nullable + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AuditEventHTTPInfo auditEventHTTPInfo = (AuditEventHTTPInfo) o; + return Objects.equals(this.URI, auditEventHTTPInfo.URI) && + Objects.equals(this.method, auditEventHTTPInfo.method); + } + + @Override + public int hashCode() { + return Objects.hash(URI, method); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AuditEventHTTPInfo {\n"); + sb.append(" URI: ").append(toIndentedString(URI)).append("\n"); + sb.append(" method: ").append(toIndentedString(method)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("URI"); + openapiFields.add("method"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to AuditEventHTTPInfo + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!AuditEventHTTPInfo.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in AuditEventHTTPInfo is not found in the empty JSON string", AuditEventHTTPInfo.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!AuditEventHTTPInfo.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `AuditEventHTTPInfo` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("URI") != null && !jsonObj.get("URI").isJsonNull()) && !jsonObj.get("URI").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `URI` to be a primitive type in the JSON string but got `%s`", jsonObj.get("URI").toString())); + } + if ((jsonObj.get("method") != null && !jsonObj.get("method").isJsonNull()) && !jsonObj.get("method").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `method` to be a primitive type in the JSON string but got `%s`", jsonObj.get("method").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!AuditEventHTTPInfo.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'AuditEventHTTPInfo' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(AuditEventHTTPInfo.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, AuditEventHTTPInfo value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public AuditEventHTTPInfo read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of AuditEventHTTPInfo given an JSON string + * + * @param jsonString JSON string + * @return An instance of AuditEventHTTPInfo + * @throws IOException if the JSON string is invalid with respect to AuditEventHTTPInfo + */ + public static AuditEventHTTPInfo fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, AuditEventHTTPInfo.class); + } + + /** + * Convert an instance of AuditEventHTTPInfo to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/BatchRecordMethod.java b/v2/src/main/java/com/skyflow/generated/rest/models/BatchRecordMethod.java new file mode 100644 index 00000000..4ef6d0f4 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/BatchRecordMethod.java @@ -0,0 +1,84 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.annotations.SerializedName; + +import java.io.IOException; +import com.google.gson.TypeAdapter; +import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Method of the operation. + */ +@JsonAdapter(BatchRecordMethod.Adapter.class) +public enum BatchRecordMethod { + + NONE("NONE"), + + POST("POST"), + + PUT("PUT"), + + GET("GET"), + + DELETE("DELETE"); + + private String value; + + BatchRecordMethod(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static BatchRecordMethod fromValue(String value) { + for (BatchRecordMethod b : BatchRecordMethod.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + public static class Adapter extends TypeAdapter { + @Override + public void write(final JsonWriter jsonWriter, final BatchRecordMethod enumeration) throws IOException { + jsonWriter.value(enumeration.getValue()); + } + + @Override + public BatchRecordMethod read(final JsonReader jsonReader) throws IOException { + String value = jsonReader.nextString(); + return BatchRecordMethod.fromValue(value); + } + } + + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + String value = jsonElement.getAsString(); + BatchRecordMethod.fromValue(value); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/ContextAccessType.java b/v2/src/main/java/com/skyflow/generated/rest/models/ContextAccessType.java new file mode 100644 index 00000000..92075e20 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/ContextAccessType.java @@ -0,0 +1,80 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.annotations.SerializedName; + +import java.io.IOException; +import com.google.gson.TypeAdapter; +import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Type of access for the request. + */ +@JsonAdapter(ContextAccessType.Adapter.class) +public enum ContextAccessType { + + ACCESS_NONE("ACCESS_NONE"), + + API("API"), + + SQL("SQL"); + + private String value; + + ContextAccessType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static ContextAccessType fromValue(String value) { + for (ContextAccessType b : ContextAccessType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + public static class Adapter extends TypeAdapter { + @Override + public void write(final JsonWriter jsonWriter, final ContextAccessType enumeration) throws IOException { + jsonWriter.value(enumeration.getValue()); + } + + @Override + public ContextAccessType read(final JsonReader jsonReader) throws IOException { + String value = jsonReader.nextString(); + return ContextAccessType.fromValue(value); + } + } + + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + String value = jsonElement.getAsString(); + ContextAccessType.fromValue(value); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/ContextAuthMode.java b/v2/src/main/java/com/skyflow/generated/rest/models/ContextAuthMode.java new file mode 100644 index 00000000..d0fc0afc --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/ContextAuthMode.java @@ -0,0 +1,82 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.annotations.SerializedName; + +import java.io.IOException; +import com.google.gson.TypeAdapter; +import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Authentication mode the `actor` used. + */ +@JsonAdapter(ContextAuthMode.Adapter.class) +public enum ContextAuthMode { + + AUTH_NONE("AUTH_NONE"), + + OKTA_JWT("OKTA_JWT"), + + SERVICE_ACCOUNT_JWT("SERVICE_ACCOUNT_JWT"), + + PAT_JWT("PAT_JWT"); + + private String value; + + ContextAuthMode(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static ContextAuthMode fromValue(String value) { + for (ContextAuthMode b : ContextAuthMode.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + public static class Adapter extends TypeAdapter { + @Override + public void write(final JsonWriter jsonWriter, final ContextAuthMode enumeration) throws IOException { + jsonWriter.value(enumeration.getValue()); + } + + @Override + public ContextAuthMode read(final JsonReader jsonReader) throws IOException { + String value = jsonReader.nextString(); + return ContextAuthMode.fromValue(value); + } + } + + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + String value = jsonElement.getAsString(); + ContextAuthMode.fromValue(value); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/DetokenizeRecordResponseValueType.java b/v2/src/main/java/com/skyflow/generated/rest/models/DetokenizeRecordResponseValueType.java new file mode 100644 index 00000000..346833e6 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/DetokenizeRecordResponseValueType.java @@ -0,0 +1,92 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.annotations.SerializedName; + +import java.io.IOException; +import com.google.gson.TypeAdapter; +import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Gets or Sets DetokenizeRecordResponseValueType + */ +@JsonAdapter(DetokenizeRecordResponseValueType.Adapter.class) +public enum DetokenizeRecordResponseValueType { + + NONE("NONE"), + + STRING("STRING"), + + INTEGER("INTEGER"), + + FLOAT("FLOAT"), + + BOOL("BOOL"), + + DATETIME("DATETIME"), + + JSON("JSON"), + + ARRAY("ARRAY"), + + DATE("DATE"); + + private String value; + + DetokenizeRecordResponseValueType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static DetokenizeRecordResponseValueType fromValue(String value) { + for (DetokenizeRecordResponseValueType b : DetokenizeRecordResponseValueType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + public static class Adapter extends TypeAdapter { + @Override + public void write(final JsonWriter jsonWriter, final DetokenizeRecordResponseValueType enumeration) throws IOException { + jsonWriter.value(enumeration.getValue()); + } + + @Override + public DetokenizeRecordResponseValueType read(final JsonReader jsonReader) throws IOException { + String value = jsonReader.nextString(); + return DetokenizeRecordResponseValueType.fromValue(value); + } + } + + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + String value = jsonElement.getAsString(); + DetokenizeRecordResponseValueType.fromValue(value); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/GooglerpcStatus.java b/v2/src/main/java/com/skyflow/generated/rest/models/GooglerpcStatus.java new file mode 100644 index 00000000..44ca3e7f --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/GooglerpcStatus.java @@ -0,0 +1,272 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.ProtobufAny; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * GooglerpcStatus + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class GooglerpcStatus { + public static final String SERIALIZED_NAME_CODE = "code"; + @SerializedName(SERIALIZED_NAME_CODE) + private Integer code; + + public static final String SERIALIZED_NAME_MESSAGE = "message"; + @SerializedName(SERIALIZED_NAME_MESSAGE) + private String message; + + public static final String SERIALIZED_NAME_DETAILS = "details"; + @SerializedName(SERIALIZED_NAME_DETAILS) + private List details = new ArrayList<>(); + + public GooglerpcStatus() { + } + + public GooglerpcStatus code(Integer code) { + this.code = code; + return this; + } + + /** + * Get code + * @return code + */ + @javax.annotation.Nullable + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + + public GooglerpcStatus message(String message) { + this.message = message; + return this; + } + + /** + * Get message + * @return message + */ + @javax.annotation.Nullable + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + + public GooglerpcStatus details(List details) { + this.details = details; + return this; + } + + public GooglerpcStatus addDetailsItem(ProtobufAny detailsItem) { + if (this.details == null) { + this.details = new ArrayList<>(); + } + this.details.add(detailsItem); + return this; + } + + /** + * Get details + * @return details + */ + @javax.annotation.Nullable + public List getDetails() { + return details; + } + + public void setDetails(List details) { + this.details = details; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GooglerpcStatus googlerpcStatus = (GooglerpcStatus) o; + return Objects.equals(this.code, googlerpcStatus.code) && + Objects.equals(this.message, googlerpcStatus.message) && + Objects.equals(this.details, googlerpcStatus.details); + } + + @Override + public int hashCode() { + return Objects.hash(code, message, details); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GooglerpcStatus {\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append(" message: ").append(toIndentedString(message)).append("\n"); + sb.append(" details: ").append(toIndentedString(details)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("code"); + openapiFields.add("message"); + openapiFields.add("details"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to GooglerpcStatus + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!GooglerpcStatus.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in GooglerpcStatus is not found in the empty JSON string", GooglerpcStatus.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!GooglerpcStatus.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `GooglerpcStatus` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("message") != null && !jsonObj.get("message").isJsonNull()) && !jsonObj.get("message").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `message` to be a primitive type in the JSON string but got `%s`", jsonObj.get("message").toString())); + } + // ensure the optional json data is an array if present + if (jsonObj.get("details") != null && !jsonObj.get("details").isJsonNull() && !jsonObj.get("details").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `details` to be an array in the JSON string but got `%s`", jsonObj.get("details").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!GooglerpcStatus.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'GooglerpcStatus' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(GooglerpcStatus.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, GooglerpcStatus value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public GooglerpcStatus read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of GooglerpcStatus given an JSON string + * + * @param jsonString JSON string + * @return An instance of GooglerpcStatus + * @throws IOException if the JSON string is invalid with respect to GooglerpcStatus + */ + public static GooglerpcStatus fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, GooglerpcStatus.class); + } + + /** + * Convert an instance of GooglerpcStatus to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/ProtobufAny.java b/v2/src/main/java/com/skyflow/generated/rest/models/ProtobufAny.java new file mode 100644 index 00000000..658d341e --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/ProtobufAny.java @@ -0,0 +1,286 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * ProtobufAny + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class ProtobufAny { + public static final String SERIALIZED_NAME_AT_TYPE = "@type"; + @SerializedName(SERIALIZED_NAME_AT_TYPE) + private String atType; + + public ProtobufAny() { + } + + public ProtobufAny atType(String atType) { + this.atType = atType; + return this; + } + + /** + * Get atType + * @return atType + */ + @javax.annotation.Nullable + public String getAtType() { + return atType; + } + + public void setAtType(String atType) { + this.atType = atType; + } + + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. + * If the property does not already exist, create it otherwise replace it. + * + * @param key name of the property + * @param value value of the property + * @return the ProtobufAny instance itself + */ + public ProtobufAny putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return a map of objects + */ + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key name of the property + * @return an object + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ProtobufAny protobufAny = (ProtobufAny) o; + return Objects.equals(this.atType, protobufAny.atType)&& + Objects.equals(this.additionalProperties, protobufAny.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(atType, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ProtobufAny {\n"); + sb.append(" atType: ").append(toIndentedString(atType)).append("\n"); + sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("@type"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to ProtobufAny + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!ProtobufAny.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in ProtobufAny is not found in the empty JSON string", ProtobufAny.openapiRequiredFields.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("@type") != null && !jsonObj.get("@type").isJsonNull()) && !jsonObj.get("@type").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `@type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("@type").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!ProtobufAny.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'ProtobufAny' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(ProtobufAny.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, ProtobufAny value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + obj.remove("additionalProperties"); + // serialize additional properties + if (value.getAdditionalProperties() != null) { + for (Map.Entry entry : value.getAdditionalProperties().entrySet()) { + if (entry.getValue() instanceof String) + obj.addProperty(entry.getKey(), (String) entry.getValue()); + else if (entry.getValue() instanceof Number) + obj.addProperty(entry.getKey(), (Number) entry.getValue()); + else if (entry.getValue() instanceof Boolean) + obj.addProperty(entry.getKey(), (Boolean) entry.getValue()); + else if (entry.getValue() instanceof Character) + obj.addProperty(entry.getKey(), (Character) entry.getValue()); + else { + JsonElement jsonElement = gson.toJsonTree(entry.getValue()); + if (jsonElement.isJsonArray()) { + obj.add(entry.getKey(), jsonElement.getAsJsonArray()); + } else { + obj.add(entry.getKey(), jsonElement.getAsJsonObject()); + } + } + } + } + elementAdapter.write(out, obj); + } + + @Override + public ProtobufAny read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + JsonObject jsonObj = jsonElement.getAsJsonObject(); + // store additional fields in the deserialized instance + ProtobufAny instance = thisAdapter.fromJsonTree(jsonObj); + for (Map.Entry entry : jsonObj.entrySet()) { + if (!openapiFields.contains(entry.getKey())) { + if (entry.getValue().isJsonPrimitive()) { // primitive type + if (entry.getValue().getAsJsonPrimitive().isString()) + instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsString()); + else if (entry.getValue().getAsJsonPrimitive().isNumber()) + instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsNumber()); + else if (entry.getValue().getAsJsonPrimitive().isBoolean()) + instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsBoolean()); + else + throw new IllegalArgumentException(String.format("The field `%s` has unknown primitive type. Value: %s", entry.getKey(), entry.getValue().toString())); + } else if (entry.getValue().isJsonArray()) { + instance.putAdditionalProperty(entry.getKey(), gson.fromJson(entry.getValue(), List.class)); + } else { // JSON object + instance.putAdditionalProperty(entry.getKey(), gson.fromJson(entry.getValue(), HashMap.class)); + } + } + } + return instance; + } + + }.nullSafe(); + } + } + + /** + * Create an instance of ProtobufAny given an JSON string + * + * @param jsonString JSON string + * @return An instance of ProtobufAny + * @throws IOException if the JSON string is invalid with respect to ProtobufAny + */ + public static ProtobufAny fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, ProtobufAny.class); + } + + /** + * Convert an instance of ProtobufAny to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/QueryServiceExecuteQueryBody.java b/v2/src/main/java/com/skyflow/generated/rest/models/QueryServiceExecuteQueryBody.java new file mode 100644 index 00000000..3a7790a0 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/QueryServiceExecuteQueryBody.java @@ -0,0 +1,205 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * QueryServiceExecuteQueryBody + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class QueryServiceExecuteQueryBody { + public static final String SERIALIZED_NAME_QUERY = "query"; + @SerializedName(SERIALIZED_NAME_QUERY) + private String query; + + public QueryServiceExecuteQueryBody() { + } + + public QueryServiceExecuteQueryBody query(String query) { + this.query = query; + return this; + } + + /** + * The SQL query to execute.<br><br><b>Supported commands:</b> <ul> <li><code>SELECT</code></li> </ul> <b>Supported operators:</b> <ul> <li><code>&gt;</code></li> <li><code>&lt;</code></li> <li><code>=</code></li> <li><code>AND</code></li> <li><code>OR</code></li> <li><code>NOT</code></li> <li><code>LIKE</code></li> <li><code>ILIKE</code></li> <li><code>NULL</code></li> <li><code>NOT NULL</code></li> </ul> <b>Supported keywords:</b> <ul> <li><code>FROM</code></li> <li><code>JOIN</code></li> <li><code>INNER JOIN</code></li> <li><code>LEFT OUTER JOIN</code></li> <li><code>LEFT JOIN</code></li> <li><code>RIGHT OUTER JOIN</code></li> <li><code>RIGHT JOIN</code></li> <li><code>FULL OUTER JOIN</code></li> <li><code>FULL JOIN</code></li> <li><code>OFFSET</code></li> <li><code>LIMIT</code></li> <li><code>WHERE</code></li> </ul> <b>Supported functions:</b> <ul> <li><code>AVG()</code></li> <li><code>SUM()</code></li> <li><code>COUNT()</code></li> <li><code>MIN()</code></li> <li><code>MAX()</code></li> <li><code>REDACTION()</code></li> </ul> + * @return query + */ + @javax.annotation.Nullable + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + QueryServiceExecuteQueryBody queryServiceExecuteQueryBody = (QueryServiceExecuteQueryBody) o; + return Objects.equals(this.query, queryServiceExecuteQueryBody.query); + } + + @Override + public int hashCode() { + return Objects.hash(query); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class QueryServiceExecuteQueryBody {\n"); + sb.append(" query: ").append(toIndentedString(query)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("query"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to QueryServiceExecuteQueryBody + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!QueryServiceExecuteQueryBody.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in QueryServiceExecuteQueryBody is not found in the empty JSON string", QueryServiceExecuteQueryBody.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!QueryServiceExecuteQueryBody.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `QueryServiceExecuteQueryBody` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("query") != null && !jsonObj.get("query").isJsonNull()) && !jsonObj.get("query").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `query` to be a primitive type in the JSON string but got `%s`", jsonObj.get("query").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!QueryServiceExecuteQueryBody.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'QueryServiceExecuteQueryBody' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(QueryServiceExecuteQueryBody.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, QueryServiceExecuteQueryBody value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public QueryServiceExecuteQueryBody read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of QueryServiceExecuteQueryBody given an JSON string + * + * @param jsonString JSON string + * @return An instance of QueryServiceExecuteQueryBody + * @throws IOException if the JSON string is invalid with respect to QueryServiceExecuteQueryBody + */ + public static QueryServiceExecuteQueryBody fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, QueryServiceExecuteQueryBody.class); + } + + /** + * Convert an instance of QueryServiceExecuteQueryBody to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBatchOperationBody.java b/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBatchOperationBody.java new file mode 100644 index 00000000..ec0c3f95 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBatchOperationBody.java @@ -0,0 +1,284 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1BYOT; +import com.skyflow.generated.rest.models.V1BatchRecord; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * RecordServiceBatchOperationBody + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class RecordServiceBatchOperationBody { + public static final String SERIALIZED_NAME_RECORDS = "records"; + @SerializedName(SERIALIZED_NAME_RECORDS) + private List records = new ArrayList<>(); + + public static final String SERIALIZED_NAME_CONTINUE_ON_ERROR = "continueOnError"; + @SerializedName(SERIALIZED_NAME_CONTINUE_ON_ERROR) + private Boolean continueOnError; + + public static final String SERIALIZED_NAME_BYOT = "byot"; + @SerializedName(SERIALIZED_NAME_BYOT) + private V1BYOT byot = V1BYOT.DISABLE; + + public RecordServiceBatchOperationBody() { + } + + public RecordServiceBatchOperationBody records(List records) { + this.records = records; + return this; + } + + public RecordServiceBatchOperationBody addRecordsItem(V1BatchRecord recordsItem) { + if (this.records == null) { + this.records = new ArrayList<>(); + } + this.records.add(recordsItem); + return this; + } + + /** + * Record operations to perform. + * @return records + */ + @javax.annotation.Nullable + public List getRecords() { + return records; + } + + public void setRecords(List records) { + this.records = records; + } + + + public RecordServiceBatchOperationBody continueOnError(Boolean continueOnError) { + this.continueOnError = continueOnError; + return this; + } + + /** + * Continue performing operations on partial errors. + * @return continueOnError + */ + @javax.annotation.Nullable + public Boolean getContinueOnError() { + return continueOnError; + } + + public void setContinueOnError(Boolean continueOnError) { + this.continueOnError = continueOnError; + } + + + public RecordServiceBatchOperationBody byot(V1BYOT byot) { + this.byot = byot; + return this; + } + + /** + * Get byot + * @return byot + */ + @javax.annotation.Nullable + public V1BYOT getByot() { + return byot; + } + + public void setByot(V1BYOT byot) { + this.byot = byot; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RecordServiceBatchOperationBody recordServiceBatchOperationBody = (RecordServiceBatchOperationBody) o; + return Objects.equals(this.records, recordServiceBatchOperationBody.records) && + Objects.equals(this.continueOnError, recordServiceBatchOperationBody.continueOnError) && + Objects.equals(this.byot, recordServiceBatchOperationBody.byot); + } + + @Override + public int hashCode() { + return Objects.hash(records, continueOnError, byot); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RecordServiceBatchOperationBody {\n"); + sb.append(" records: ").append(toIndentedString(records)).append("\n"); + sb.append(" continueOnError: ").append(toIndentedString(continueOnError)).append("\n"); + sb.append(" byot: ").append(toIndentedString(byot)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("records"); + openapiFields.add("continueOnError"); + openapiFields.add("byot"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to RecordServiceBatchOperationBody + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!RecordServiceBatchOperationBody.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in RecordServiceBatchOperationBody is not found in the empty JSON string", RecordServiceBatchOperationBody.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!RecordServiceBatchOperationBody.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `RecordServiceBatchOperationBody` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (jsonObj.get("records") != null && !jsonObj.get("records").isJsonNull()) { + JsonArray jsonArrayrecords = jsonObj.getAsJsonArray("records"); + if (jsonArrayrecords != null) { + // ensure the json data is an array + if (!jsonObj.get("records").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `records` to be an array in the JSON string but got `%s`", jsonObj.get("records").toString())); + } + + // validate the optional field `records` (array) + for (int i = 0; i < jsonArrayrecords.size(); i++) { + V1BatchRecord.validateJsonElement(jsonArrayrecords.get(i)); + }; + } + } + // validate the optional field `byot` + if (jsonObj.get("byot") != null && !jsonObj.get("byot").isJsonNull()) { + V1BYOT.validateJsonElement(jsonObj.get("byot")); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!RecordServiceBatchOperationBody.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'RecordServiceBatchOperationBody' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(RecordServiceBatchOperationBody.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, RecordServiceBatchOperationBody value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public RecordServiceBatchOperationBody read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of RecordServiceBatchOperationBody given an JSON string + * + * @param jsonString JSON string + * @return An instance of RecordServiceBatchOperationBody + * @throws IOException if the JSON string is invalid with respect to RecordServiceBatchOperationBody + */ + public static RecordServiceBatchOperationBody fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, RecordServiceBatchOperationBody.class); + } + + /** + * Convert an instance of RecordServiceBatchOperationBody to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBulkDeleteRecordBody.java b/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBulkDeleteRecordBody.java new file mode 100644 index 00000000..b7358e49 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBulkDeleteRecordBody.java @@ -0,0 +1,216 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * RecordServiceBulkDeleteRecordBody + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class RecordServiceBulkDeleteRecordBody { + public static final String SERIALIZED_NAME_SKYFLOW_IDS = "skyflow_ids"; + @SerializedName(SERIALIZED_NAME_SKYFLOW_IDS) + private List skyflowIds = new ArrayList<>(); + + public RecordServiceBulkDeleteRecordBody() { + } + + public RecordServiceBulkDeleteRecordBody skyflowIds(List skyflowIds) { + this.skyflowIds = skyflowIds; + return this; + } + + public RecordServiceBulkDeleteRecordBody addSkyflowIdsItem(String skyflowIdsItem) { + if (this.skyflowIds == null) { + this.skyflowIds = new ArrayList<>(); + } + this.skyflowIds.add(skyflowIdsItem); + return this; + } + + /** + * `skyflow_id` values of the records to delete. If `*` is specified, this operation deletes all records in the table. + * @return skyflowIds + */ + @javax.annotation.Nullable + public List getSkyflowIds() { + return skyflowIds; + } + + public void setSkyflowIds(List skyflowIds) { + this.skyflowIds = skyflowIds; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RecordServiceBulkDeleteRecordBody recordServiceBulkDeleteRecordBody = (RecordServiceBulkDeleteRecordBody) o; + return Objects.equals(this.skyflowIds, recordServiceBulkDeleteRecordBody.skyflowIds); + } + + @Override + public int hashCode() { + return Objects.hash(skyflowIds); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RecordServiceBulkDeleteRecordBody {\n"); + sb.append(" skyflowIds: ").append(toIndentedString(skyflowIds)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("skyflow_ids"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to RecordServiceBulkDeleteRecordBody + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!RecordServiceBulkDeleteRecordBody.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in RecordServiceBulkDeleteRecordBody is not found in the empty JSON string", RecordServiceBulkDeleteRecordBody.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!RecordServiceBulkDeleteRecordBody.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `RecordServiceBulkDeleteRecordBody` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + // ensure the optional json data is an array if present + if (jsonObj.get("skyflow_ids") != null && !jsonObj.get("skyflow_ids").isJsonNull() && !jsonObj.get("skyflow_ids").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `skyflow_ids` to be an array in the JSON string but got `%s`", jsonObj.get("skyflow_ids").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!RecordServiceBulkDeleteRecordBody.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'RecordServiceBulkDeleteRecordBody' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(RecordServiceBulkDeleteRecordBody.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, RecordServiceBulkDeleteRecordBody value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public RecordServiceBulkDeleteRecordBody read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of RecordServiceBulkDeleteRecordBody given an JSON string + * + * @param jsonString JSON string + * @return An instance of RecordServiceBulkDeleteRecordBody + * @throws IOException if the JSON string is invalid with respect to RecordServiceBulkDeleteRecordBody + */ + public static RecordServiceBulkDeleteRecordBody fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, RecordServiceBulkDeleteRecordBody.class); + } + + /** + * Convert an instance of RecordServiceBulkDeleteRecordBody to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceInsertRecordBody.java b/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceInsertRecordBody.java new file mode 100644 index 00000000..0ffe7ce8 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceInsertRecordBody.java @@ -0,0 +1,339 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1BYOT; +import com.skyflow.generated.rest.models.V1FieldRecords; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * RecordServiceInsertRecordBody + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class RecordServiceInsertRecordBody { + public static final String SERIALIZED_NAME_RECORDS = "records"; + @SerializedName(SERIALIZED_NAME_RECORDS) + private List records = new ArrayList<>(); + + public static final String SERIALIZED_NAME_TOKENIZATION = "tokenization"; + @SerializedName(SERIALIZED_NAME_TOKENIZATION) + private Boolean tokenization; + + public static final String SERIALIZED_NAME_UPSERT = "upsert"; + @SerializedName(SERIALIZED_NAME_UPSERT) + private String upsert; + + public static final String SERIALIZED_NAME_HOMOGENEOUS = "homogeneous"; + @SerializedName(SERIALIZED_NAME_HOMOGENEOUS) + private Boolean homogeneous = false; + + public static final String SERIALIZED_NAME_BYOT = "byot"; + @SerializedName(SERIALIZED_NAME_BYOT) + private V1BYOT byot = V1BYOT.DISABLE; + + public RecordServiceInsertRecordBody() { + } + + public RecordServiceInsertRecordBody records(List records) { + this.records = records; + return this; + } + + public RecordServiceInsertRecordBody addRecordsItem(V1FieldRecords recordsItem) { + if (this.records == null) { + this.records = new ArrayList<>(); + } + this.records.add(recordsItem); + return this; + } + + /** + * Record values and tokens. + * @return records + */ + @javax.annotation.Nullable + public List getRecords() { + return records; + } + + public void setRecords(List records) { + this.records = records; + } + + + public RecordServiceInsertRecordBody tokenization(Boolean tokenization) { + this.tokenization = tokenization; + return this; + } + + /** + * If `true`, this operation returns tokens for fields with tokenization enabled. + * @return tokenization + */ + @javax.annotation.Nullable + public Boolean getTokenization() { + return tokenization; + } + + public void setTokenization(Boolean tokenization) { + this.tokenization = tokenization; + } + + + public RecordServiceInsertRecordBody upsert(String upsert) { + this.upsert = upsert; + return this; + } + + /** + * Name of a unique column in the table. Uses upsert operations to check if a record exists based on the unique column's value. If a matching record exists, the record updates with the values you provide. If a matching record doesn't exist, the upsert operation inserts a new record.<br /><br />When you upsert a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn't included, it's removed. + * @return upsert + */ + @javax.annotation.Nullable + public String getUpsert() { + return upsert; + } + + public void setUpsert(String upsert) { + this.upsert = upsert; + } + + + public RecordServiceInsertRecordBody homogeneous(Boolean homogeneous) { + this.homogeneous = homogeneous; + return this; + } + + /** + * If `true`, this operation mandates that all the records have the same fields. This parameter does not work with upsert. + * @return homogeneous + */ + @javax.annotation.Nullable + public Boolean getHomogeneous() { + return homogeneous; + } + + public void setHomogeneous(Boolean homogeneous) { + this.homogeneous = homogeneous; + } + + + public RecordServiceInsertRecordBody byot(V1BYOT byot) { + this.byot = byot; + return this; + } + + /** + * Get byot + * @return byot + */ + @javax.annotation.Nullable + public V1BYOT getByot() { + return byot; + } + + public void setByot(V1BYOT byot) { + this.byot = byot; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RecordServiceInsertRecordBody recordServiceInsertRecordBody = (RecordServiceInsertRecordBody) o; + return Objects.equals(this.records, recordServiceInsertRecordBody.records) && + Objects.equals(this.tokenization, recordServiceInsertRecordBody.tokenization) && + Objects.equals(this.upsert, recordServiceInsertRecordBody.upsert) && + Objects.equals(this.homogeneous, recordServiceInsertRecordBody.homogeneous) && + Objects.equals(this.byot, recordServiceInsertRecordBody.byot); + } + + @Override + public int hashCode() { + return Objects.hash(records, tokenization, upsert, homogeneous, byot); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RecordServiceInsertRecordBody {\n"); + sb.append(" records: ").append(toIndentedString(records)).append("\n"); + sb.append(" tokenization: ").append(toIndentedString(tokenization)).append("\n"); + sb.append(" upsert: ").append(toIndentedString(upsert)).append("\n"); + sb.append(" homogeneous: ").append(toIndentedString(homogeneous)).append("\n"); + sb.append(" byot: ").append(toIndentedString(byot)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("records"); + openapiFields.add("tokenization"); + openapiFields.add("upsert"); + openapiFields.add("homogeneous"); + openapiFields.add("byot"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to RecordServiceInsertRecordBody + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!RecordServiceInsertRecordBody.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in RecordServiceInsertRecordBody is not found in the empty JSON string", RecordServiceInsertRecordBody.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!RecordServiceInsertRecordBody.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `RecordServiceInsertRecordBody` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (jsonObj.get("records") != null && !jsonObj.get("records").isJsonNull()) { + JsonArray jsonArrayrecords = jsonObj.getAsJsonArray("records"); + if (jsonArrayrecords != null) { + // ensure the json data is an array + if (!jsonObj.get("records").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `records` to be an array in the JSON string but got `%s`", jsonObj.get("records").toString())); + } + + // validate the optional field `records` (array) + for (int i = 0; i < jsonArrayrecords.size(); i++) { + V1FieldRecords.validateJsonElement(jsonArrayrecords.get(i)); + }; + } + } + if ((jsonObj.get("upsert") != null && !jsonObj.get("upsert").isJsonNull()) && !jsonObj.get("upsert").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `upsert` to be a primitive type in the JSON string but got `%s`", jsonObj.get("upsert").toString())); + } + // validate the optional field `byot` + if (jsonObj.get("byot") != null && !jsonObj.get("byot").isJsonNull()) { + V1BYOT.validateJsonElement(jsonObj.get("byot")); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!RecordServiceInsertRecordBody.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'RecordServiceInsertRecordBody' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(RecordServiceInsertRecordBody.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, RecordServiceInsertRecordBody value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public RecordServiceInsertRecordBody read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of RecordServiceInsertRecordBody given an JSON string + * + * @param jsonString JSON string + * @return An instance of RecordServiceInsertRecordBody + * @throws IOException if the JSON string is invalid with respect to RecordServiceInsertRecordBody + */ + public static RecordServiceInsertRecordBody fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, RecordServiceInsertRecordBody.class); + } + + /** + * Convert an instance of RecordServiceInsertRecordBody to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceUpdateRecordBody.java b/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceUpdateRecordBody.java new file mode 100644 index 00000000..27e8f48a --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceUpdateRecordBody.java @@ -0,0 +1,264 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1BYOT; +import com.skyflow.generated.rest.models.V1FieldRecords; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * RecordServiceUpdateRecordBody + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class RecordServiceUpdateRecordBody { + public static final String SERIALIZED_NAME_RECORD = "record"; + @SerializedName(SERIALIZED_NAME_RECORD) + private V1FieldRecords record; + + public static final String SERIALIZED_NAME_TOKENIZATION = "tokenization"; + @SerializedName(SERIALIZED_NAME_TOKENIZATION) + private Boolean tokenization; + + public static final String SERIALIZED_NAME_BYOT = "byot"; + @SerializedName(SERIALIZED_NAME_BYOT) + private V1BYOT byot = V1BYOT.DISABLE; + + public RecordServiceUpdateRecordBody() { + } + + public RecordServiceUpdateRecordBody record(V1FieldRecords record) { + this.record = record; + return this; + } + + /** + * Get record + * @return record + */ + @javax.annotation.Nullable + public V1FieldRecords getRecord() { + return record; + } + + public void setRecord(V1FieldRecords record) { + this.record = record; + } + + + public RecordServiceUpdateRecordBody tokenization(Boolean tokenization) { + this.tokenization = tokenization; + return this; + } + + /** + * If `true`, this operation returns tokens for fields with tokenization enabled. + * @return tokenization + */ + @javax.annotation.Nullable + public Boolean getTokenization() { + return tokenization; + } + + public void setTokenization(Boolean tokenization) { + this.tokenization = tokenization; + } + + + public RecordServiceUpdateRecordBody byot(V1BYOT byot) { + this.byot = byot; + return this; + } + + /** + * Get byot + * @return byot + */ + @javax.annotation.Nullable + public V1BYOT getByot() { + return byot; + } + + public void setByot(V1BYOT byot) { + this.byot = byot; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RecordServiceUpdateRecordBody recordServiceUpdateRecordBody = (RecordServiceUpdateRecordBody) o; + return Objects.equals(this.record, recordServiceUpdateRecordBody.record) && + Objects.equals(this.tokenization, recordServiceUpdateRecordBody.tokenization) && + Objects.equals(this.byot, recordServiceUpdateRecordBody.byot); + } + + @Override + public int hashCode() { + return Objects.hash(record, tokenization, byot); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RecordServiceUpdateRecordBody {\n"); + sb.append(" record: ").append(toIndentedString(record)).append("\n"); + sb.append(" tokenization: ").append(toIndentedString(tokenization)).append("\n"); + sb.append(" byot: ").append(toIndentedString(byot)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("record"); + openapiFields.add("tokenization"); + openapiFields.add("byot"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to RecordServiceUpdateRecordBody + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!RecordServiceUpdateRecordBody.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in RecordServiceUpdateRecordBody is not found in the empty JSON string", RecordServiceUpdateRecordBody.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!RecordServiceUpdateRecordBody.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `RecordServiceUpdateRecordBody` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + // validate the optional field `record` + if (jsonObj.get("record") != null && !jsonObj.get("record").isJsonNull()) { + V1FieldRecords.validateJsonElement(jsonObj.get("record")); + } + // validate the optional field `byot` + if (jsonObj.get("byot") != null && !jsonObj.get("byot").isJsonNull()) { + V1BYOT.validateJsonElement(jsonObj.get("byot")); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!RecordServiceUpdateRecordBody.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'RecordServiceUpdateRecordBody' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(RecordServiceUpdateRecordBody.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, RecordServiceUpdateRecordBody value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public RecordServiceUpdateRecordBody read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of RecordServiceUpdateRecordBody given an JSON string + * + * @param jsonString JSON string + * @return An instance of RecordServiceUpdateRecordBody + * @throws IOException if the JSON string is invalid with respect to RecordServiceUpdateRecordBody + */ + public static RecordServiceUpdateRecordBody fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, RecordServiceUpdateRecordBody.class); + } + + /** + * Convert an instance of RecordServiceUpdateRecordBody to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RedactionEnumREDACTION.java b/v2/src/main/java/com/skyflow/generated/rest/models/RedactionEnumREDACTION.java new file mode 100644 index 00000000..e0c8ea98 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/RedactionEnumREDACTION.java @@ -0,0 +1,82 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.annotations.SerializedName; + +import java.io.IOException; +import com.google.gson.TypeAdapter; +import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Redaction type. Subject to policies assigned to the API caller. When used for detokenization, only supported for vaults that support [column groups](/tokenization-column-groups/). + */ +@JsonAdapter(RedactionEnumREDACTION.Adapter.class) +public enum RedactionEnumREDACTION { + + DEFAULT("DEFAULT"), + + REDACTED("REDACTED"), + + MASKED("MASKED"), + + PLAIN_TEXT("PLAIN_TEXT"); + + private String value; + + RedactionEnumREDACTION(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static RedactionEnumREDACTION fromValue(String value) { + for (RedactionEnumREDACTION b : RedactionEnumREDACTION.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + public static class Adapter extends TypeAdapter { + @Override + public void write(final JsonWriter jsonWriter, final RedactionEnumREDACTION enumeration) throws IOException { + jsonWriter.value(enumeration.getValue()); + } + + @Override + public RedactionEnumREDACTION read(final JsonReader jsonReader) throws IOException { + String value = jsonReader.nextString(); + return RedactionEnumREDACTION.fromValue(value); + } + } + + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + String value = jsonElement.getAsString(); + RedactionEnumREDACTION.fromValue(value); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RequestActionType.java b/v2/src/main/java/com/skyflow/generated/rest/models/RequestActionType.java new file mode 100644 index 00000000..d5e979d8 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/RequestActionType.java @@ -0,0 +1,110 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.annotations.SerializedName; + +import java.io.IOException; +import com.google.gson.TypeAdapter; +import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Gets or Sets RequestActionType + */ +@JsonAdapter(RequestActionType.Adapter.class) +public enum RequestActionType { + + NONE("NONE"), + + ASSIGN("ASSIGN"), + + CREATE("CREATE"), + + DELETE("DELETE"), + + EXECUTE("EXECUTE"), + + LIST("LIST"), + + READ("READ"), + + UNASSIGN("UNASSIGN"), + + UPDATE("UPDATE"), + + VALIDATE("VALIDATE"), + + LOGIN("LOGIN"), + + ROTATE("ROTATE"), + + SCHEDULEROTATION("SCHEDULEROTATION"), + + SCHEDULEROTATIONALERT("SCHEDULEROTATIONALERT"), + + IMPORT("IMPORT"), + + GETIMPORTPARAMETERS("GETIMPORTPARAMETERS"), + + PING("PING"), + + GETCLOUDPROVIDER("GETCLOUDPROVIDER"); + + private String value; + + RequestActionType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static RequestActionType fromValue(String value) { + for (RequestActionType b : RequestActionType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + public static class Adapter extends TypeAdapter { + @Override + public void write(final JsonWriter jsonWriter, final RequestActionType enumeration) throws IOException { + jsonWriter.value(enumeration.getValue()); + } + + @Override + public RequestActionType read(final JsonReader jsonReader) throws IOException { + String value = jsonReader.nextString(); + return RequestActionType.fromValue(value); + } + } + + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + String value = jsonElement.getAsString(); + RequestActionType.fromValue(value); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditAfterOptions.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditAfterOptions.java new file mode 100644 index 00000000..faf2c5b3 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditAfterOptions.java @@ -0,0 +1,234 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1AuditAfterOptions + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1AuditAfterOptions { + public static final String SERIALIZED_NAME_TIMESTAMP = "timestamp"; + @SerializedName(SERIALIZED_NAME_TIMESTAMP) + private String timestamp; + + public static final String SERIALIZED_NAME_CHANGE_I_D = "changeID"; + @SerializedName(SERIALIZED_NAME_CHANGE_I_D) + private String changeID; + + public V1AuditAfterOptions() { + } + + public V1AuditAfterOptions timestamp(String timestamp) { + this.timestamp = timestamp; + return this; + } + + /** + * Timestamp provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. + * @return timestamp + */ + @javax.annotation.Nullable + public String getTimestamp() { + return timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + + + public V1AuditAfterOptions changeID(String changeID) { + this.changeID = changeID; + return this; + } + + /** + * Change ID provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. + * @return changeID + */ + @javax.annotation.Nullable + public String getChangeID() { + return changeID; + } + + public void setChangeID(String changeID) { + this.changeID = changeID; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1AuditAfterOptions v1AuditAfterOptions = (V1AuditAfterOptions) o; + return Objects.equals(this.timestamp, v1AuditAfterOptions.timestamp) && + Objects.equals(this.changeID, v1AuditAfterOptions.changeID); + } + + @Override + public int hashCode() { + return Objects.hash(timestamp, changeID); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1AuditAfterOptions {\n"); + sb.append(" timestamp: ").append(toIndentedString(timestamp)).append("\n"); + sb.append(" changeID: ").append(toIndentedString(changeID)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("timestamp"); + openapiFields.add("changeID"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1AuditAfterOptions + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1AuditAfterOptions.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1AuditAfterOptions is not found in the empty JSON string", V1AuditAfterOptions.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1AuditAfterOptions.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1AuditAfterOptions` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("timestamp") != null && !jsonObj.get("timestamp").isJsonNull()) && !jsonObj.get("timestamp").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `timestamp` to be a primitive type in the JSON string but got `%s`", jsonObj.get("timestamp").toString())); + } + if ((jsonObj.get("changeID") != null && !jsonObj.get("changeID").isJsonNull()) && !jsonObj.get("changeID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `changeID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("changeID").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1AuditAfterOptions.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1AuditAfterOptions' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1AuditAfterOptions.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1AuditAfterOptions value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1AuditAfterOptions read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1AuditAfterOptions given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1AuditAfterOptions + * @throws IOException if the JSON string is invalid with respect to V1AuditAfterOptions + */ + public static V1AuditAfterOptions fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1AuditAfterOptions.class); + } + + /** + * Convert an instance of V1AuditAfterOptions to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditEventResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditEventResponse.java new file mode 100644 index 00000000..97134351 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditEventResponse.java @@ -0,0 +1,291 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.AuditEventData; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * Contains fields for defining Response Properties. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1AuditEventResponse { + public static final String SERIALIZED_NAME_CODE = "code"; + @SerializedName(SERIALIZED_NAME_CODE) + private Integer code; + + public static final String SERIALIZED_NAME_MESSAGE = "message"; + @SerializedName(SERIALIZED_NAME_MESSAGE) + private String message; + + public static final String SERIALIZED_NAME_DATA = "data"; + @SerializedName(SERIALIZED_NAME_DATA) + private AuditEventData data; + + public static final String SERIALIZED_NAME_TIMESTAMP = "timestamp"; + @SerializedName(SERIALIZED_NAME_TIMESTAMP) + private String timestamp; + + public V1AuditEventResponse() { + } + + public V1AuditEventResponse code(Integer code) { + this.code = code; + return this; + } + + /** + * The status of the overall operation. + * @return code + */ + @javax.annotation.Nullable + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + + public V1AuditEventResponse message(String message) { + this.message = message; + return this; + } + + /** + * The status message for the overall operation. + * @return message + */ + @javax.annotation.Nullable + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + + public V1AuditEventResponse data(AuditEventData data) { + this.data = data; + return this; + } + + /** + * Get data + * @return data + */ + @javax.annotation.Nullable + public AuditEventData getData() { + return data; + } + + public void setData(AuditEventData data) { + this.data = data; + } + + + public V1AuditEventResponse timestamp(String timestamp) { + this.timestamp = timestamp; + return this; + } + + /** + * time when this response is generated, use extention method to set it. + * @return timestamp + */ + @javax.annotation.Nullable + public String getTimestamp() { + return timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1AuditEventResponse v1AuditEventResponse = (V1AuditEventResponse) o; + return Objects.equals(this.code, v1AuditEventResponse.code) && + Objects.equals(this.message, v1AuditEventResponse.message) && + Objects.equals(this.data, v1AuditEventResponse.data) && + Objects.equals(this.timestamp, v1AuditEventResponse.timestamp); + } + + @Override + public int hashCode() { + return Objects.hash(code, message, data, timestamp); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1AuditEventResponse {\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append(" message: ").append(toIndentedString(message)).append("\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" timestamp: ").append(toIndentedString(timestamp)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("code"); + openapiFields.add("message"); + openapiFields.add("data"); + openapiFields.add("timestamp"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1AuditEventResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1AuditEventResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1AuditEventResponse is not found in the empty JSON string", V1AuditEventResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1AuditEventResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1AuditEventResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("message") != null && !jsonObj.get("message").isJsonNull()) && !jsonObj.get("message").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `message` to be a primitive type in the JSON string but got `%s`", jsonObj.get("message").toString())); + } + // validate the optional field `data` + if (jsonObj.get("data") != null && !jsonObj.get("data").isJsonNull()) { + AuditEventData.validateJsonElement(jsonObj.get("data")); + } + if ((jsonObj.get("timestamp") != null && !jsonObj.get("timestamp").isJsonNull()) && !jsonObj.get("timestamp").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `timestamp` to be a primitive type in the JSON string but got `%s`", jsonObj.get("timestamp").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1AuditEventResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1AuditEventResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1AuditEventResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1AuditEventResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1AuditEventResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1AuditEventResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1AuditEventResponse + * @throws IOException if the JSON string is invalid with respect to V1AuditEventResponse + */ + public static V1AuditEventResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1AuditEventResponse.class); + } + + /** + * Convert an instance of V1AuditEventResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponse.java new file mode 100644 index 00000000..1d0268b4 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponse.java @@ -0,0 +1,258 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1AuditAfterOptions; +import com.skyflow.generated.rest.models.V1AuditResponseEvent; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1AuditResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1AuditResponse { + public static final String SERIALIZED_NAME_EVENT = "event"; + @SerializedName(SERIALIZED_NAME_EVENT) + private List event = new ArrayList<>(); + + public static final String SERIALIZED_NAME_NEXT_OPS = "nextOps"; + @SerializedName(SERIALIZED_NAME_NEXT_OPS) + private V1AuditAfterOptions nextOps; + + public V1AuditResponse() { + } + + public V1AuditResponse event(List event) { + this.event = event; + return this; + } + + public V1AuditResponse addEventItem(V1AuditResponseEvent eventItem) { + if (this.event == null) { + this.event = new ArrayList<>(); + } + this.event.add(eventItem); + return this; + } + + /** + * Events matching the query. + * @return event + */ + @javax.annotation.Nullable + public List getEvent() { + return event; + } + + public void setEvent(List event) { + this.event = event; + } + + + public V1AuditResponse nextOps(V1AuditAfterOptions nextOps) { + this.nextOps = nextOps; + return this; + } + + /** + * Get nextOps + * @return nextOps + */ + @javax.annotation.Nullable + public V1AuditAfterOptions getNextOps() { + return nextOps; + } + + public void setNextOps(V1AuditAfterOptions nextOps) { + this.nextOps = nextOps; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1AuditResponse v1AuditResponse = (V1AuditResponse) o; + return Objects.equals(this.event, v1AuditResponse.event) && + Objects.equals(this.nextOps, v1AuditResponse.nextOps); + } + + @Override + public int hashCode() { + return Objects.hash(event, nextOps); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1AuditResponse {\n"); + sb.append(" event: ").append(toIndentedString(event)).append("\n"); + sb.append(" nextOps: ").append(toIndentedString(nextOps)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("event"); + openapiFields.add("nextOps"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1AuditResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1AuditResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1AuditResponse is not found in the empty JSON string", V1AuditResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1AuditResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1AuditResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (jsonObj.get("event") != null && !jsonObj.get("event").isJsonNull()) { + JsonArray jsonArrayevent = jsonObj.getAsJsonArray("event"); + if (jsonArrayevent != null) { + // ensure the json data is an array + if (!jsonObj.get("event").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `event` to be an array in the JSON string but got `%s`", jsonObj.get("event").toString())); + } + + // validate the optional field `event` (array) + for (int i = 0; i < jsonArrayevent.size(); i++) { + V1AuditResponseEvent.validateJsonElement(jsonArrayevent.get(i)); + }; + } + } + // validate the optional field `nextOps` + if (jsonObj.get("nextOps") != null && !jsonObj.get("nextOps").isJsonNull()) { + V1AuditAfterOptions.validateJsonElement(jsonObj.get("nextOps")); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1AuditResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1AuditResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1AuditResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1AuditResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1AuditResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1AuditResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1AuditResponse + * @throws IOException if the JSON string is invalid with respect to V1AuditResponse + */ + public static V1AuditResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1AuditResponse.class); + } + + /** + * Convert an instance of V1AuditResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEvent.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEvent.java new file mode 100644 index 00000000..0e2070ae --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEvent.java @@ -0,0 +1,367 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.AuditEventContext; +import com.skyflow.generated.rest.models.V1AuditEventResponse; +import com.skyflow.generated.rest.models.V1AuditResponseEventRequest; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * Audit event details. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1AuditResponseEvent { + public static final String SERIALIZED_NAME_CONTEXT = "context"; + @SerializedName(SERIALIZED_NAME_CONTEXT) + private AuditEventContext context; + + public static final String SERIALIZED_NAME_REQUEST = "request"; + @SerializedName(SERIALIZED_NAME_REQUEST) + private V1AuditResponseEventRequest request; + + public static final String SERIALIZED_NAME_RESPONSE = "response"; + @SerializedName(SERIALIZED_NAME_RESPONSE) + private V1AuditEventResponse response; + + public static final String SERIALIZED_NAME_PARENT_ACCOUNT_I_D = "parentAccountID"; + @SerializedName(SERIALIZED_NAME_PARENT_ACCOUNT_I_D) + private String parentAccountID; + + public static final String SERIALIZED_NAME_ACCOUNT_I_D = "accountID"; + @SerializedName(SERIALIZED_NAME_ACCOUNT_I_D) + private String accountID; + + public static final String SERIALIZED_NAME_RESOURCE_I_DS = "resourceIDs"; + @SerializedName(SERIALIZED_NAME_RESOURCE_I_DS) + private List resourceIDs = new ArrayList<>(); + + public V1AuditResponseEvent() { + } + + public V1AuditResponseEvent context(AuditEventContext context) { + this.context = context; + return this; + } + + /** + * Get context + * @return context + */ + @javax.annotation.Nullable + public AuditEventContext getContext() { + return context; + } + + public void setContext(AuditEventContext context) { + this.context = context; + } + + + public V1AuditResponseEvent request(V1AuditResponseEventRequest request) { + this.request = request; + return this; + } + + /** + * Get request + * @return request + */ + @javax.annotation.Nullable + public V1AuditResponseEventRequest getRequest() { + return request; + } + + public void setRequest(V1AuditResponseEventRequest request) { + this.request = request; + } + + + public V1AuditResponseEvent response(V1AuditEventResponse response) { + this.response = response; + return this; + } + + /** + * Get response + * @return response + */ + @javax.annotation.Nullable + public V1AuditEventResponse getResponse() { + return response; + } + + public void setResponse(V1AuditEventResponse response) { + this.response = response; + } + + + public V1AuditResponseEvent parentAccountID(String parentAccountID) { + this.parentAccountID = parentAccountID; + return this; + } + + /** + * Parent account ID of the account that made the request, if any. + * @return parentAccountID + */ + @javax.annotation.Nullable + public String getParentAccountID() { + return parentAccountID; + } + + public void setParentAccountID(String parentAccountID) { + this.parentAccountID = parentAccountID; + } + + + public V1AuditResponseEvent accountID(String accountID) { + this.accountID = accountID; + return this; + } + + /** + * ID of the account that made the request. + * @return accountID + */ + @javax.annotation.Nullable + public String getAccountID() { + return accountID; + } + + public void setAccountID(String accountID) { + this.accountID = accountID; + } + + + public V1AuditResponseEvent resourceIDs(List resourceIDs) { + this.resourceIDs = resourceIDs; + return this; + } + + public V1AuditResponseEvent addResourceIDsItem(String resourceIDsItem) { + if (this.resourceIDs == null) { + this.resourceIDs = new ArrayList<>(); + } + this.resourceIDs.add(resourceIDsItem); + return this; + } + + /** + * IDs for resources involved in the event. Presented in `{resourceType}/{resourceID}` format. For example, `VAULT/cd1d815aa09b4cbfbb803bd20349f202`. + * @return resourceIDs + */ + @javax.annotation.Nullable + public List getResourceIDs() { + return resourceIDs; + } + + public void setResourceIDs(List resourceIDs) { + this.resourceIDs = resourceIDs; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1AuditResponseEvent v1AuditResponseEvent = (V1AuditResponseEvent) o; + return Objects.equals(this.context, v1AuditResponseEvent.context) && + Objects.equals(this.request, v1AuditResponseEvent.request) && + Objects.equals(this.response, v1AuditResponseEvent.response) && + Objects.equals(this.parentAccountID, v1AuditResponseEvent.parentAccountID) && + Objects.equals(this.accountID, v1AuditResponseEvent.accountID) && + Objects.equals(this.resourceIDs, v1AuditResponseEvent.resourceIDs); + } + + @Override + public int hashCode() { + return Objects.hash(context, request, response, parentAccountID, accountID, resourceIDs); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1AuditResponseEvent {\n"); + sb.append(" context: ").append(toIndentedString(context)).append("\n"); + sb.append(" request: ").append(toIndentedString(request)).append("\n"); + sb.append(" response: ").append(toIndentedString(response)).append("\n"); + sb.append(" parentAccountID: ").append(toIndentedString(parentAccountID)).append("\n"); + sb.append(" accountID: ").append(toIndentedString(accountID)).append("\n"); + sb.append(" resourceIDs: ").append(toIndentedString(resourceIDs)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("context"); + openapiFields.add("request"); + openapiFields.add("response"); + openapiFields.add("parentAccountID"); + openapiFields.add("accountID"); + openapiFields.add("resourceIDs"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1AuditResponseEvent + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1AuditResponseEvent.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1AuditResponseEvent is not found in the empty JSON string", V1AuditResponseEvent.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1AuditResponseEvent.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1AuditResponseEvent` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + // validate the optional field `context` + if (jsonObj.get("context") != null && !jsonObj.get("context").isJsonNull()) { + AuditEventContext.validateJsonElement(jsonObj.get("context")); + } + // validate the optional field `request` + if (jsonObj.get("request") != null && !jsonObj.get("request").isJsonNull()) { + V1AuditResponseEventRequest.validateJsonElement(jsonObj.get("request")); + } + // validate the optional field `response` + if (jsonObj.get("response") != null && !jsonObj.get("response").isJsonNull()) { + V1AuditEventResponse.validateJsonElement(jsonObj.get("response")); + } + if ((jsonObj.get("parentAccountID") != null && !jsonObj.get("parentAccountID").isJsonNull()) && !jsonObj.get("parentAccountID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `parentAccountID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("parentAccountID").toString())); + } + if ((jsonObj.get("accountID") != null && !jsonObj.get("accountID").isJsonNull()) && !jsonObj.get("accountID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `accountID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("accountID").toString())); + } + // ensure the optional json data is an array if present + if (jsonObj.get("resourceIDs") != null && !jsonObj.get("resourceIDs").isJsonNull() && !jsonObj.get("resourceIDs").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `resourceIDs` to be an array in the JSON string but got `%s`", jsonObj.get("resourceIDs").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1AuditResponseEvent.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1AuditResponseEvent' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1AuditResponseEvent.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1AuditResponseEvent value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1AuditResponseEvent read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1AuditResponseEvent given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1AuditResponseEvent + * @throws IOException if the JSON string is invalid with respect to V1AuditResponseEvent + */ + public static V1AuditResponseEvent fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1AuditResponseEvent.class); + } + + /** + * Convert an instance of V1AuditResponseEvent to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEventRequest.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEventRequest.java new file mode 100644 index 00000000..d4b69f55 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEventRequest.java @@ -0,0 +1,456 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.AuditEventAuditResourceType; +import com.skyflow.generated.rest.models.AuditEventData; +import com.skyflow.generated.rest.models.AuditEventHTTPInfo; +import com.skyflow.generated.rest.models.RequestActionType; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * Contains fields for defining Request Properties. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1AuditResponseEventRequest { + public static final String SERIALIZED_NAME_DATA = "data"; + @SerializedName(SERIALIZED_NAME_DATA) + private AuditEventData data; + + public static final String SERIALIZED_NAME_API_NAME = "apiName"; + @SerializedName(SERIALIZED_NAME_API_NAME) + private String apiName; + + public static final String SERIALIZED_NAME_WORKSPACE_I_D = "workspaceID"; + @SerializedName(SERIALIZED_NAME_WORKSPACE_I_D) + private String workspaceID; + + public static final String SERIALIZED_NAME_VAULT_I_D = "vaultID"; + @SerializedName(SERIALIZED_NAME_VAULT_I_D) + private String vaultID; + + public static final String SERIALIZED_NAME_TAGS = "tags"; + @SerializedName(SERIALIZED_NAME_TAGS) + private List tags = new ArrayList<>(); + + public static final String SERIALIZED_NAME_TIMESTAMP = "timestamp"; + @SerializedName(SERIALIZED_NAME_TIMESTAMP) + private String timestamp; + + public static final String SERIALIZED_NAME_ACTION_TYPE = "actionType"; + @SerializedName(SERIALIZED_NAME_ACTION_TYPE) + private RequestActionType actionType = RequestActionType.NONE; + + public static final String SERIALIZED_NAME_RESOURCE_TYPE = "resourceType"; + @SerializedName(SERIALIZED_NAME_RESOURCE_TYPE) + private AuditEventAuditResourceType resourceType = AuditEventAuditResourceType.NONE_API; + + public static final String SERIALIZED_NAME_HTTP_INFO = "httpInfo"; + @SerializedName(SERIALIZED_NAME_HTTP_INFO) + private AuditEventHTTPInfo httpInfo; + + public V1AuditResponseEventRequest() { + } + + public V1AuditResponseEventRequest data(AuditEventData data) { + this.data = data; + return this; + } + + /** + * Get data + * @return data + */ + @javax.annotation.Nullable + public AuditEventData getData() { + return data; + } + + public void setData(AuditEventData data) { + this.data = data; + } + + + public V1AuditResponseEventRequest apiName(String apiName) { + this.apiName = apiName; + return this; + } + + /** + * API name. + * @return apiName + */ + @javax.annotation.Nullable + public String getApiName() { + return apiName; + } + + public void setApiName(String apiName) { + this.apiName = apiName; + } + + + public V1AuditResponseEventRequest workspaceID(String workspaceID) { + this.workspaceID = workspaceID; + return this; + } + + /** + * The workspaceID (if any) of the request. + * @return workspaceID + */ + @javax.annotation.Nullable + public String getWorkspaceID() { + return workspaceID; + } + + public void setWorkspaceID(String workspaceID) { + this.workspaceID = workspaceID; + } + + + public V1AuditResponseEventRequest vaultID(String vaultID) { + this.vaultID = vaultID; + return this; + } + + /** + * The vaultID (if any) of the request. + * @return vaultID + */ + @javax.annotation.Nullable + public String getVaultID() { + return vaultID; + } + + public void setVaultID(String vaultID) { + this.vaultID = vaultID; + } + + + public V1AuditResponseEventRequest tags(List tags) { + this.tags = tags; + return this; + } + + public V1AuditResponseEventRequest addTagsItem(String tagsItem) { + if (this.tags == null) { + this.tags = new ArrayList<>(); + } + this.tags.add(tagsItem); + return this; + } + + /** + * Tags associated with the event. To provide better search capabilities. Like login. + * @return tags + */ + @javax.annotation.Nullable + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } + + + public V1AuditResponseEventRequest timestamp(String timestamp) { + this.timestamp = timestamp; + return this; + } + + /** + * time when this request is generated, use extention method to set it. + * @return timestamp + */ + @javax.annotation.Nullable + public String getTimestamp() { + return timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + + + public V1AuditResponseEventRequest actionType(RequestActionType actionType) { + this.actionType = actionType; + return this; + } + + /** + * Get actionType + * @return actionType + */ + @javax.annotation.Nullable + public RequestActionType getActionType() { + return actionType; + } + + public void setActionType(RequestActionType actionType) { + this.actionType = actionType; + } + + + public V1AuditResponseEventRequest resourceType(AuditEventAuditResourceType resourceType) { + this.resourceType = resourceType; + return this; + } + + /** + * Get resourceType + * @return resourceType + */ + @javax.annotation.Nullable + public AuditEventAuditResourceType getResourceType() { + return resourceType; + } + + public void setResourceType(AuditEventAuditResourceType resourceType) { + this.resourceType = resourceType; + } + + + public V1AuditResponseEventRequest httpInfo(AuditEventHTTPInfo httpInfo) { + this.httpInfo = httpInfo; + return this; + } + + /** + * Get httpInfo + * @return httpInfo + */ + @javax.annotation.Nullable + public AuditEventHTTPInfo getHttpInfo() { + return httpInfo; + } + + public void setHttpInfo(AuditEventHTTPInfo httpInfo) { + this.httpInfo = httpInfo; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1AuditResponseEventRequest v1AuditResponseEventRequest = (V1AuditResponseEventRequest) o; + return Objects.equals(this.data, v1AuditResponseEventRequest.data) && + Objects.equals(this.apiName, v1AuditResponseEventRequest.apiName) && + Objects.equals(this.workspaceID, v1AuditResponseEventRequest.workspaceID) && + Objects.equals(this.vaultID, v1AuditResponseEventRequest.vaultID) && + Objects.equals(this.tags, v1AuditResponseEventRequest.tags) && + Objects.equals(this.timestamp, v1AuditResponseEventRequest.timestamp) && + Objects.equals(this.actionType, v1AuditResponseEventRequest.actionType) && + Objects.equals(this.resourceType, v1AuditResponseEventRequest.resourceType) && + Objects.equals(this.httpInfo, v1AuditResponseEventRequest.httpInfo); + } + + @Override + public int hashCode() { + return Objects.hash(data, apiName, workspaceID, vaultID, tags, timestamp, actionType, resourceType, httpInfo); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1AuditResponseEventRequest {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" apiName: ").append(toIndentedString(apiName)).append("\n"); + sb.append(" workspaceID: ").append(toIndentedString(workspaceID)).append("\n"); + sb.append(" vaultID: ").append(toIndentedString(vaultID)).append("\n"); + sb.append(" tags: ").append(toIndentedString(tags)).append("\n"); + sb.append(" timestamp: ").append(toIndentedString(timestamp)).append("\n"); + sb.append(" actionType: ").append(toIndentedString(actionType)).append("\n"); + sb.append(" resourceType: ").append(toIndentedString(resourceType)).append("\n"); + sb.append(" httpInfo: ").append(toIndentedString(httpInfo)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("data"); + openapiFields.add("apiName"); + openapiFields.add("workspaceID"); + openapiFields.add("vaultID"); + openapiFields.add("tags"); + openapiFields.add("timestamp"); + openapiFields.add("actionType"); + openapiFields.add("resourceType"); + openapiFields.add("httpInfo"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1AuditResponseEventRequest + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1AuditResponseEventRequest.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1AuditResponseEventRequest is not found in the empty JSON string", V1AuditResponseEventRequest.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1AuditResponseEventRequest.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1AuditResponseEventRequest` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + // validate the optional field `data` + if (jsonObj.get("data") != null && !jsonObj.get("data").isJsonNull()) { + AuditEventData.validateJsonElement(jsonObj.get("data")); + } + if ((jsonObj.get("apiName") != null && !jsonObj.get("apiName").isJsonNull()) && !jsonObj.get("apiName").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `apiName` to be a primitive type in the JSON string but got `%s`", jsonObj.get("apiName").toString())); + } + if ((jsonObj.get("workspaceID") != null && !jsonObj.get("workspaceID").isJsonNull()) && !jsonObj.get("workspaceID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `workspaceID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("workspaceID").toString())); + } + if ((jsonObj.get("vaultID") != null && !jsonObj.get("vaultID").isJsonNull()) && !jsonObj.get("vaultID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `vaultID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("vaultID").toString())); + } + // ensure the optional json data is an array if present + if (jsonObj.get("tags") != null && !jsonObj.get("tags").isJsonNull() && !jsonObj.get("tags").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `tags` to be an array in the JSON string but got `%s`", jsonObj.get("tags").toString())); + } + if ((jsonObj.get("timestamp") != null && !jsonObj.get("timestamp").isJsonNull()) && !jsonObj.get("timestamp").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `timestamp` to be a primitive type in the JSON string but got `%s`", jsonObj.get("timestamp").toString())); + } + // validate the optional field `actionType` + if (jsonObj.get("actionType") != null && !jsonObj.get("actionType").isJsonNull()) { + RequestActionType.validateJsonElement(jsonObj.get("actionType")); + } + // validate the optional field `resourceType` + if (jsonObj.get("resourceType") != null && !jsonObj.get("resourceType").isJsonNull()) { + AuditEventAuditResourceType.validateJsonElement(jsonObj.get("resourceType")); + } + // validate the optional field `httpInfo` + if (jsonObj.get("httpInfo") != null && !jsonObj.get("httpInfo").isJsonNull()) { + AuditEventHTTPInfo.validateJsonElement(jsonObj.get("httpInfo")); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1AuditResponseEventRequest.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1AuditResponseEventRequest' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1AuditResponseEventRequest.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1AuditResponseEventRequest value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1AuditResponseEventRequest read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1AuditResponseEventRequest given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1AuditResponseEventRequest + * @throws IOException if the JSON string is invalid with respect to V1AuditResponseEventRequest + */ + public static V1AuditResponseEventRequest fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1AuditResponseEventRequest.class); + } + + /** + * Convert an instance of V1AuditResponseEventRequest to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BINListRequest.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1BINListRequest.java new file mode 100644 index 00000000..292bd674 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1BINListRequest.java @@ -0,0 +1,305 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1VaultSchemaConfig; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * Request to return specific card metadata. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1BINListRequest { + public static final String SERIALIZED_NAME_FIELDS = "fields"; + @SerializedName(SERIALIZED_NAME_FIELDS) + private List fields = new ArrayList<>(); + + public static final String SERIALIZED_NAME_B_I_N = "BIN"; + @SerializedName(SERIALIZED_NAME_B_I_N) + private String BIN; + + public static final String SERIALIZED_NAME_VAULT_SCHEMA_CONFIG = "vault_schema_config"; + @SerializedName(SERIALIZED_NAME_VAULT_SCHEMA_CONFIG) + private V1VaultSchemaConfig vaultSchemaConfig; + + public static final String SERIALIZED_NAME_SKYFLOW_ID = "skyflow_id"; + @SerializedName(SERIALIZED_NAME_SKYFLOW_ID) + private String skyflowId; + + public V1BINListRequest() { + } + + public V1BINListRequest fields(List fields) { + this.fields = fields; + return this; + } + + public V1BINListRequest addFieldsItem(String fieldsItem) { + if (this.fields == null) { + this.fields = new ArrayList<>(); + } + this.fields.add(fieldsItem); + return this; + } + + /** + * Fields to return. If not specified, all fields are returned. + * @return fields + */ + @javax.annotation.Nullable + public List getFields() { + return fields; + } + + public void setFields(List fields) { + this.fields = fields; + } + + + public V1BINListRequest BIN(String BIN) { + this.BIN = BIN; + return this; + } + + /** + * BIN of the card. + * @return BIN + */ + @javax.annotation.Nullable + public String getBIN() { + return BIN; + } + + public void setBIN(String BIN) { + this.BIN = BIN; + } + + + public V1BINListRequest vaultSchemaConfig(V1VaultSchemaConfig vaultSchemaConfig) { + this.vaultSchemaConfig = vaultSchemaConfig; + return this; + } + + /** + * Get vaultSchemaConfig + * @return vaultSchemaConfig + */ + @javax.annotation.Nullable + public V1VaultSchemaConfig getVaultSchemaConfig() { + return vaultSchemaConfig; + } + + public void setVaultSchemaConfig(V1VaultSchemaConfig vaultSchemaConfig) { + this.vaultSchemaConfig = vaultSchemaConfig; + } + + + public V1BINListRequest skyflowId(String skyflowId) { + this.skyflowId = skyflowId; + return this; + } + + /** + * <code>skyflow_id</code> of the record. + * @return skyflowId + */ + @javax.annotation.Nullable + public String getSkyflowId() { + return skyflowId; + } + + public void setSkyflowId(String skyflowId) { + this.skyflowId = skyflowId; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1BINListRequest v1BINListRequest = (V1BINListRequest) o; + return Objects.equals(this.fields, v1BINListRequest.fields) && + Objects.equals(this.BIN, v1BINListRequest.BIN) && + Objects.equals(this.vaultSchemaConfig, v1BINListRequest.vaultSchemaConfig) && + Objects.equals(this.skyflowId, v1BINListRequest.skyflowId); + } + + @Override + public int hashCode() { + return Objects.hash(fields, BIN, vaultSchemaConfig, skyflowId); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1BINListRequest {\n"); + sb.append(" fields: ").append(toIndentedString(fields)).append("\n"); + sb.append(" BIN: ").append(toIndentedString(BIN)).append("\n"); + sb.append(" vaultSchemaConfig: ").append(toIndentedString(vaultSchemaConfig)).append("\n"); + sb.append(" skyflowId: ").append(toIndentedString(skyflowId)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("fields"); + openapiFields.add("BIN"); + openapiFields.add("vault_schema_config"); + openapiFields.add("skyflow_id"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1BINListRequest + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1BINListRequest.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1BINListRequest is not found in the empty JSON string", V1BINListRequest.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1BINListRequest.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1BINListRequest` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + // ensure the optional json data is an array if present + if (jsonObj.get("fields") != null && !jsonObj.get("fields").isJsonNull() && !jsonObj.get("fields").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `fields` to be an array in the JSON string but got `%s`", jsonObj.get("fields").toString())); + } + if ((jsonObj.get("BIN") != null && !jsonObj.get("BIN").isJsonNull()) && !jsonObj.get("BIN").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `BIN` to be a primitive type in the JSON string but got `%s`", jsonObj.get("BIN").toString())); + } + // validate the optional field `vault_schema_config` + if (jsonObj.get("vault_schema_config") != null && !jsonObj.get("vault_schema_config").isJsonNull()) { + V1VaultSchemaConfig.validateJsonElement(jsonObj.get("vault_schema_config")); + } + if ((jsonObj.get("skyflow_id") != null && !jsonObj.get("skyflow_id").isJsonNull()) && !jsonObj.get("skyflow_id").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `skyflow_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("skyflow_id").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1BINListRequest.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1BINListRequest' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1BINListRequest.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1BINListRequest value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1BINListRequest read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1BINListRequest given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1BINListRequest + * @throws IOException if the JSON string is invalid with respect to V1BINListRequest + */ + public static V1BINListRequest fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1BINListRequest.class); + } + + /** + * Convert an instance of V1BINListRequest to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BINListResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1BINListResponse.java new file mode 100644 index 00000000..47f30610 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1BINListResponse.java @@ -0,0 +1,227 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1Card; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * Response to the Get BIN request. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1BINListResponse { + public static final String SERIALIZED_NAME_CARDS_DATA = "cards_data"; + @SerializedName(SERIALIZED_NAME_CARDS_DATA) + private List cardsData = new ArrayList<>(); + + public V1BINListResponse() { + } + + public V1BINListResponse cardsData(List cardsData) { + this.cardsData = cardsData; + return this; + } + + public V1BINListResponse addCardsDataItem(V1Card cardsDataItem) { + if (this.cardsData == null) { + this.cardsData = new ArrayList<>(); + } + this.cardsData.add(cardsDataItem); + return this; + } + + /** + * Card metadata associated with the specified BIN. + * @return cardsData + */ + @javax.annotation.Nullable + public List getCardsData() { + return cardsData; + } + + public void setCardsData(List cardsData) { + this.cardsData = cardsData; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1BINListResponse v1BINListResponse = (V1BINListResponse) o; + return Objects.equals(this.cardsData, v1BINListResponse.cardsData); + } + + @Override + public int hashCode() { + return Objects.hash(cardsData); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1BINListResponse {\n"); + sb.append(" cardsData: ").append(toIndentedString(cardsData)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("cards_data"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1BINListResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1BINListResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1BINListResponse is not found in the empty JSON string", V1BINListResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1BINListResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1BINListResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (jsonObj.get("cards_data") != null && !jsonObj.get("cards_data").isJsonNull()) { + JsonArray jsonArraycardsData = jsonObj.getAsJsonArray("cards_data"); + if (jsonArraycardsData != null) { + // ensure the json data is an array + if (!jsonObj.get("cards_data").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `cards_data` to be an array in the JSON string but got `%s`", jsonObj.get("cards_data").toString())); + } + + // validate the optional field `cards_data` (array) + for (int i = 0; i < jsonArraycardsData.size(); i++) { + V1Card.validateJsonElement(jsonArraycardsData.get(i)); + }; + } + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1BINListResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1BINListResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1BINListResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1BINListResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1BINListResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1BINListResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1BINListResponse + * @throws IOException if the JSON string is invalid with respect to V1BINListResponse + */ + public static V1BINListResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1BINListResponse.class); + } + + /** + * Convert an instance of V1BINListResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BYOT.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1BYOT.java new file mode 100644 index 00000000..28bd87e9 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1BYOT.java @@ -0,0 +1,80 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.annotations.SerializedName; + +import java.io.IOException; +import com.google.gson.TypeAdapter; +import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Token insertion behavior. - DISABLE: Tokens aren't allowed for any fields. If tokens are specified, the request fails. - ENABLE: Tokens are allowed—but not required—for all fields. If tokens are specified, they're inserted. - ENABLE_STRICT: Tokens are required for all fields. If tokens are specified, they're inserted. If not, the request fails. + */ +@JsonAdapter(V1BYOT.Adapter.class) +public enum V1BYOT { + + DISABLE("DISABLE"), + + ENABLE("ENABLE"), + + ENABLE_STRICT("ENABLE_STRICT"); + + private String value; + + V1BYOT(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static V1BYOT fromValue(String value) { + for (V1BYOT b : V1BYOT.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + public static class Adapter extends TypeAdapter { + @Override + public void write(final JsonWriter jsonWriter, final V1BYOT enumeration) throws IOException { + jsonWriter.value(enumeration.getValue()); + } + + @Override + public V1BYOT read(final JsonReader jsonReader) throws IOException { + String value = jsonReader.nextString(); + return V1BYOT.fromValue(value); + } + } + + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + String value = jsonElement.getAsString(); + V1BYOT.fromValue(value); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BatchOperationResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1BatchOperationResponse.java new file mode 100644 index 00000000..2d98e66e --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1BatchOperationResponse.java @@ -0,0 +1,245 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1BatchOperationResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1BatchOperationResponse { + public static final String SERIALIZED_NAME_VAULT_I_D = "vaultID"; + @SerializedName(SERIALIZED_NAME_VAULT_I_D) + private String vaultID; + + public static final String SERIALIZED_NAME_RESPONSES = "responses"; + @SerializedName(SERIALIZED_NAME_RESPONSES) + private List responses = new ArrayList<>(); + + public V1BatchOperationResponse() { + } + + public V1BatchOperationResponse vaultID(String vaultID) { + this.vaultID = vaultID; + return this; + } + + /** + * ID of the vault. + * @return vaultID + */ + @javax.annotation.Nullable + public String getVaultID() { + return vaultID; + } + + public void setVaultID(String vaultID) { + this.vaultID = vaultID; + } + + + public V1BatchOperationResponse responses(List responses) { + this.responses = responses; + return this; + } + + public V1BatchOperationResponse addResponsesItem(Object responsesItem) { + if (this.responses == null) { + this.responses = new ArrayList<>(); + } + this.responses.add(responsesItem); + return this; + } + + /** + * Responses in the same order as in the request. Responses have the same payload structure as their corresponding APIs: <br/><ul><li>`POST` returns an Insert Records response.</li><li>`PUT` returns an Update Record response.</li><li>`GET` returns a Get Record response.</li><li>`DELETE` returns a Delete Record response.</li></ul> + * @return responses + */ + @javax.annotation.Nullable + public List getResponses() { + return responses; + } + + public void setResponses(List responses) { + this.responses = responses; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1BatchOperationResponse v1BatchOperationResponse = (V1BatchOperationResponse) o; + return Objects.equals(this.vaultID, v1BatchOperationResponse.vaultID) && + Objects.equals(this.responses, v1BatchOperationResponse.responses); + } + + @Override + public int hashCode() { + return Objects.hash(vaultID, responses); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1BatchOperationResponse {\n"); + sb.append(" vaultID: ").append(toIndentedString(vaultID)).append("\n"); + sb.append(" responses: ").append(toIndentedString(responses)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("vaultID"); + openapiFields.add("responses"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1BatchOperationResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1BatchOperationResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1BatchOperationResponse is not found in the empty JSON string", V1BatchOperationResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1BatchOperationResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1BatchOperationResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("vaultID") != null && !jsonObj.get("vaultID").isJsonNull()) && !jsonObj.get("vaultID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `vaultID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("vaultID").toString())); + } + // ensure the optional json data is an array if present + if (jsonObj.get("responses") != null && !jsonObj.get("responses").isJsonNull() && !jsonObj.get("responses").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `responses` to be an array in the JSON string but got `%s`", jsonObj.get("responses").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1BatchOperationResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1BatchOperationResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1BatchOperationResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1BatchOperationResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1BatchOperationResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1BatchOperationResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1BatchOperationResponse + * @throws IOException if the JSON string is invalid with respect to V1BatchOperationResponse + */ + public static V1BatchOperationResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1BatchOperationResponse.class); + } + + /** + * Convert an instance of V1BatchOperationResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BatchRecord.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1BatchRecord.java new file mode 100644 index 00000000..21ab2cf9 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1BatchRecord.java @@ -0,0 +1,458 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.BatchRecordMethod; +import com.skyflow.generated.rest.models.RedactionEnumREDACTION; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1BatchRecord + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1BatchRecord { + public static final String SERIALIZED_NAME_FIELDS = "fields"; + @SerializedName(SERIALIZED_NAME_FIELDS) + private Object fields; + + public static final String SERIALIZED_NAME_TABLE_NAME = "tableName"; + @SerializedName(SERIALIZED_NAME_TABLE_NAME) + private String tableName; + + public static final String SERIALIZED_NAME_METHOD = "method"; + @SerializedName(SERIALIZED_NAME_METHOD) + private BatchRecordMethod method = BatchRecordMethod.NONE; + + public static final String SERIALIZED_NAME_BATCH_I_D = "batchID"; + @SerializedName(SERIALIZED_NAME_BATCH_I_D) + private String batchID; + + public static final String SERIALIZED_NAME_REDACTION = "redaction"; + @SerializedName(SERIALIZED_NAME_REDACTION) + private RedactionEnumREDACTION redaction = RedactionEnumREDACTION.DEFAULT; + + public static final String SERIALIZED_NAME_TOKENIZATION = "tokenization"; + @SerializedName(SERIALIZED_NAME_TOKENIZATION) + private Boolean tokenization; + + public static final String SERIALIZED_NAME_I_D = "ID"; + @SerializedName(SERIALIZED_NAME_I_D) + private String ID; + + public static final String SERIALIZED_NAME_DOWNLOAD_U_R_L = "downloadURL"; + @SerializedName(SERIALIZED_NAME_DOWNLOAD_U_R_L) + private Boolean downloadURL; + + public static final String SERIALIZED_NAME_UPSERT = "upsert"; + @SerializedName(SERIALIZED_NAME_UPSERT) + private String upsert; + + public static final String SERIALIZED_NAME_TOKENS = "tokens"; + @SerializedName(SERIALIZED_NAME_TOKENS) + private Object tokens; + + public V1BatchRecord() { + } + + public V1BatchRecord fields(Object fields) { + this.fields = fields; + return this; + } + + /** + * Field and value key pairs. For example, `{'field_1':'value_1', 'field_2':'value_2'}`. Only valid when `method` is `POST` or `PUT`. + * @return fields + */ + @javax.annotation.Nullable + public Object getFields() { + return fields; + } + + public void setFields(Object fields) { + this.fields = fields; + } + + + public V1BatchRecord tableName(String tableName) { + this.tableName = tableName; + return this; + } + + /** + * Name of the table to perform the operation on. + * @return tableName + */ + @javax.annotation.Nullable + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + + public V1BatchRecord method(BatchRecordMethod method) { + this.method = method; + return this; + } + + /** + * Get method + * @return method + */ + @javax.annotation.Nullable + public BatchRecordMethod getMethod() { + return method; + } + + public void setMethod(BatchRecordMethod method) { + this.method = method; + } + + + public V1BatchRecord batchID(String batchID) { + this.batchID = batchID; + return this; + } + + /** + * ID to group operations by. Operations in the same group are executed sequentially. + * @return batchID + */ + @javax.annotation.Nullable + public String getBatchID() { + return batchID; + } + + public void setBatchID(String batchID) { + this.batchID = batchID; + } + + + public V1BatchRecord redaction(RedactionEnumREDACTION redaction) { + this.redaction = redaction; + return this; + } + + /** + * Get redaction + * @return redaction + */ + @javax.annotation.Nullable + public RedactionEnumREDACTION getRedaction() { + return redaction; + } + + public void setRedaction(RedactionEnumREDACTION redaction) { + this.redaction = redaction; + } + + + public V1BatchRecord tokenization(Boolean tokenization) { + this.tokenization = tokenization; + return this; + } + + /** + * If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. + * @return tokenization + */ + @javax.annotation.Nullable + public Boolean getTokenization() { + return tokenization; + } + + public void setTokenization(Boolean tokenization) { + this.tokenization = tokenization; + } + + + public V1BatchRecord ID(String ID) { + this.ID = ID; + return this; + } + + /** + * `skyflow_id` for the record. Only valid when `method` is `GET`, `DELETE`, or `PUT`. + * @return ID + */ + @javax.annotation.Nullable + public String getID() { + return ID; + } + + public void setID(String ID) { + this.ID = ID; + } + + + public V1BatchRecord downloadURL(Boolean downloadURL) { + this.downloadURL = downloadURL; + return this; + } + + /** + * If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. + * @return downloadURL + */ + @javax.annotation.Nullable + public Boolean getDownloadURL() { + return downloadURL; + } + + public void setDownloadURL(Boolean downloadURL) { + this.downloadURL = downloadURL; + } + + + public V1BatchRecord upsert(String upsert) { + this.upsert = upsert; + return this; + } + + /** + * Column that stores primary keys for upsert operations. The column must be marked as unique in the vault schema. Only valid when `method` is `POST`. + * @return upsert + */ + @javax.annotation.Nullable + public String getUpsert() { + return upsert; + } + + public void setUpsert(String upsert) { + this.upsert = upsert; + } + + + public V1BatchRecord tokens(Object tokens) { + this.tokens = tokens; + return this; + } + + /** + * Fields and tokens for the record. For example, `{'field_1':'token_1', 'field_2':'token_2'}`. + * @return tokens + */ + @javax.annotation.Nullable + public Object getTokens() { + return tokens; + } + + public void setTokens(Object tokens) { + this.tokens = tokens; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1BatchRecord v1BatchRecord = (V1BatchRecord) o; + return Objects.equals(this.fields, v1BatchRecord.fields) && + Objects.equals(this.tableName, v1BatchRecord.tableName) && + Objects.equals(this.method, v1BatchRecord.method) && + Objects.equals(this.batchID, v1BatchRecord.batchID) && + Objects.equals(this.redaction, v1BatchRecord.redaction) && + Objects.equals(this.tokenization, v1BatchRecord.tokenization) && + Objects.equals(this.ID, v1BatchRecord.ID) && + Objects.equals(this.downloadURL, v1BatchRecord.downloadURL) && + Objects.equals(this.upsert, v1BatchRecord.upsert) && + Objects.equals(this.tokens, v1BatchRecord.tokens); + } + + @Override + public int hashCode() { + return Objects.hash(fields, tableName, method, batchID, redaction, tokenization, ID, downloadURL, upsert, tokens); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1BatchRecord {\n"); + sb.append(" fields: ").append(toIndentedString(fields)).append("\n"); + sb.append(" tableName: ").append(toIndentedString(tableName)).append("\n"); + sb.append(" method: ").append(toIndentedString(method)).append("\n"); + sb.append(" batchID: ").append(toIndentedString(batchID)).append("\n"); + sb.append(" redaction: ").append(toIndentedString(redaction)).append("\n"); + sb.append(" tokenization: ").append(toIndentedString(tokenization)).append("\n"); + sb.append(" ID: ").append(toIndentedString(ID)).append("\n"); + sb.append(" downloadURL: ").append(toIndentedString(downloadURL)).append("\n"); + sb.append(" upsert: ").append(toIndentedString(upsert)).append("\n"); + sb.append(" tokens: ").append(toIndentedString(tokens)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("fields"); + openapiFields.add("tableName"); + openapiFields.add("method"); + openapiFields.add("batchID"); + openapiFields.add("redaction"); + openapiFields.add("tokenization"); + openapiFields.add("ID"); + openapiFields.add("downloadURL"); + openapiFields.add("upsert"); + openapiFields.add("tokens"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1BatchRecord + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1BatchRecord.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1BatchRecord is not found in the empty JSON string", V1BatchRecord.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1BatchRecord.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1BatchRecord` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("tableName") != null && !jsonObj.get("tableName").isJsonNull()) && !jsonObj.get("tableName").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `tableName` to be a primitive type in the JSON string but got `%s`", jsonObj.get("tableName").toString())); + } + // validate the optional field `method` + if (jsonObj.get("method") != null && !jsonObj.get("method").isJsonNull()) { + BatchRecordMethod.validateJsonElement(jsonObj.get("method")); + } + if ((jsonObj.get("batchID") != null && !jsonObj.get("batchID").isJsonNull()) && !jsonObj.get("batchID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `batchID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("batchID").toString())); + } + // validate the optional field `redaction` + if (jsonObj.get("redaction") != null && !jsonObj.get("redaction").isJsonNull()) { + RedactionEnumREDACTION.validateJsonElement(jsonObj.get("redaction")); + } + if ((jsonObj.get("ID") != null && !jsonObj.get("ID").isJsonNull()) && !jsonObj.get("ID").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `ID` to be a primitive type in the JSON string but got `%s`", jsonObj.get("ID").toString())); + } + if ((jsonObj.get("upsert") != null && !jsonObj.get("upsert").isJsonNull()) && !jsonObj.get("upsert").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `upsert` to be a primitive type in the JSON string but got `%s`", jsonObj.get("upsert").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1BatchRecord.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1BatchRecord' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1BatchRecord.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1BatchRecord value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1BatchRecord read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1BatchRecord given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1BatchRecord + * @throws IOException if the JSON string is invalid with respect to V1BatchRecord + */ + public static V1BatchRecord fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1BatchRecord.class); + } + + /** + * Convert an instance of V1BatchRecord to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BulkDeleteRecordResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1BulkDeleteRecordResponse.java new file mode 100644 index 00000000..6a89ed40 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1BulkDeleteRecordResponse.java @@ -0,0 +1,216 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1BulkDeleteRecordResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1BulkDeleteRecordResponse { + public static final String SERIALIZED_NAME_RECORD_I_D_RESPONSE = "RecordIDResponse"; + @SerializedName(SERIALIZED_NAME_RECORD_I_D_RESPONSE) + private List recordIDResponse = new ArrayList<>(); + + public V1BulkDeleteRecordResponse() { + } + + public V1BulkDeleteRecordResponse recordIDResponse(List recordIDResponse) { + this.recordIDResponse = recordIDResponse; + return this; + } + + public V1BulkDeleteRecordResponse addRecordIDResponseItem(String recordIDResponseItem) { + if (this.recordIDResponse == null) { + this.recordIDResponse = new ArrayList<>(); + } + this.recordIDResponse.add(recordIDResponseItem); + return this; + } + + /** + * IDs for the deleted records, or `*` if all records were deleted. + * @return recordIDResponse + */ + @javax.annotation.Nullable + public List getRecordIDResponse() { + return recordIDResponse; + } + + public void setRecordIDResponse(List recordIDResponse) { + this.recordIDResponse = recordIDResponse; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1BulkDeleteRecordResponse v1BulkDeleteRecordResponse = (V1BulkDeleteRecordResponse) o; + return Objects.equals(this.recordIDResponse, v1BulkDeleteRecordResponse.recordIDResponse); + } + + @Override + public int hashCode() { + return Objects.hash(recordIDResponse); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1BulkDeleteRecordResponse {\n"); + sb.append(" recordIDResponse: ").append(toIndentedString(recordIDResponse)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("RecordIDResponse"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1BulkDeleteRecordResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1BulkDeleteRecordResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1BulkDeleteRecordResponse is not found in the empty JSON string", V1BulkDeleteRecordResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1BulkDeleteRecordResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1BulkDeleteRecordResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + // ensure the optional json data is an array if present + if (jsonObj.get("RecordIDResponse") != null && !jsonObj.get("RecordIDResponse").isJsonNull() && !jsonObj.get("RecordIDResponse").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `RecordIDResponse` to be an array in the JSON string but got `%s`", jsonObj.get("RecordIDResponse").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1BulkDeleteRecordResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1BulkDeleteRecordResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1BulkDeleteRecordResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1BulkDeleteRecordResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1BulkDeleteRecordResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1BulkDeleteRecordResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1BulkDeleteRecordResponse + * @throws IOException if the JSON string is invalid with respect to V1BulkDeleteRecordResponse + */ + public static V1BulkDeleteRecordResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1BulkDeleteRecordResponse.class); + } + + /** + * Convert an instance of V1BulkDeleteRecordResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BulkGetRecordResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1BulkGetRecordResponse.java new file mode 100644 index 00000000..2a935fe9 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1BulkGetRecordResponse.java @@ -0,0 +1,227 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1FieldRecords; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1BulkGetRecordResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1BulkGetRecordResponse { + public static final String SERIALIZED_NAME_RECORDS = "records"; + @SerializedName(SERIALIZED_NAME_RECORDS) + private List records = new ArrayList<>(); + + public V1BulkGetRecordResponse() { + } + + public V1BulkGetRecordResponse records(List records) { + this.records = records; + return this; + } + + public V1BulkGetRecordResponse addRecordsItem(V1FieldRecords recordsItem) { + if (this.records == null) { + this.records = new ArrayList<>(); + } + this.records.add(recordsItem); + return this; + } + + /** + * The specified records. + * @return records + */ + @javax.annotation.Nullable + public List getRecords() { + return records; + } + + public void setRecords(List records) { + this.records = records; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1BulkGetRecordResponse v1BulkGetRecordResponse = (V1BulkGetRecordResponse) o; + return Objects.equals(this.records, v1BulkGetRecordResponse.records); + } + + @Override + public int hashCode() { + return Objects.hash(records); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1BulkGetRecordResponse {\n"); + sb.append(" records: ").append(toIndentedString(records)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("records"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1BulkGetRecordResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1BulkGetRecordResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1BulkGetRecordResponse is not found in the empty JSON string", V1BulkGetRecordResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1BulkGetRecordResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1BulkGetRecordResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (jsonObj.get("records") != null && !jsonObj.get("records").isJsonNull()) { + JsonArray jsonArrayrecords = jsonObj.getAsJsonArray("records"); + if (jsonArrayrecords != null) { + // ensure the json data is an array + if (!jsonObj.get("records").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `records` to be an array in the JSON string but got `%s`", jsonObj.get("records").toString())); + } + + // validate the optional field `records` (array) + for (int i = 0; i < jsonArrayrecords.size(); i++) { + V1FieldRecords.validateJsonElement(jsonArrayrecords.get(i)); + }; + } + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1BulkGetRecordResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1BulkGetRecordResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1BulkGetRecordResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1BulkGetRecordResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1BulkGetRecordResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1BulkGetRecordResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1BulkGetRecordResponse + * @throws IOException if the JSON string is invalid with respect to V1BulkGetRecordResponse + */ + public static V1BulkGetRecordResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1BulkGetRecordResponse.class); + } + + /** + * Convert an instance of V1BulkGetRecordResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1Card.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1Card.java new file mode 100644 index 00000000..5c8fb3cc --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1Card.java @@ -0,0 +1,437 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * Card metadata of the requested BIN. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1Card { + public static final String SERIALIZED_NAME_B_I_N = "BIN"; + @SerializedName(SERIALIZED_NAME_B_I_N) + private String BIN; + + public static final String SERIALIZED_NAME_ISSUER_NAME = "issuer_name"; + @SerializedName(SERIALIZED_NAME_ISSUER_NAME) + private String issuerName; + + public static final String SERIALIZED_NAME_COUNTRY_CODE = "country_code"; + @SerializedName(SERIALIZED_NAME_COUNTRY_CODE) + private String countryCode; + + public static final String SERIALIZED_NAME_CURRENCY = "currency"; + @SerializedName(SERIALIZED_NAME_CURRENCY) + private String currency; + + public static final String SERIALIZED_NAME_CARD_TYPE = "card_type"; + @SerializedName(SERIALIZED_NAME_CARD_TYPE) + private String cardType; + + public static final String SERIALIZED_NAME_CARD_CATEGORY = "card_category"; + @SerializedName(SERIALIZED_NAME_CARD_CATEGORY) + private String cardCategory; + + public static final String SERIALIZED_NAME_CARD_SCHEME = "card_scheme"; + @SerializedName(SERIALIZED_NAME_CARD_SCHEME) + private String cardScheme; + + public static final String SERIALIZED_NAME_CARD_LAST_FOUR_DIGITS = "card_last_four_digits"; + @SerializedName(SERIALIZED_NAME_CARD_LAST_FOUR_DIGITS) + private String cardLastFourDigits; + + public static final String SERIALIZED_NAME_CARD_EXPIRY = "card_expiry"; + @SerializedName(SERIALIZED_NAME_CARD_EXPIRY) + private String cardExpiry; + + public V1Card() { + } + + public V1Card BIN(String BIN) { + this.BIN = BIN; + return this; + } + + /** + * BIN of the card. + * @return BIN + */ + @javax.annotation.Nullable + public String getBIN() { + return BIN; + } + + public void setBIN(String BIN) { + this.BIN = BIN; + } + + + public V1Card issuerName(String issuerName) { + this.issuerName = issuerName; + return this; + } + + /** + * Name of the card issuer bank. + * @return issuerName + */ + @javax.annotation.Nullable + public String getIssuerName() { + return issuerName; + } + + public void setIssuerName(String issuerName) { + this.issuerName = issuerName; + } + + + public V1Card countryCode(String countryCode) { + this.countryCode = countryCode; + return this; + } + + /** + * Country code of the card. + * @return countryCode + */ + @javax.annotation.Nullable + public String getCountryCode() { + return countryCode; + } + + public void setCountryCode(String countryCode) { + this.countryCode = countryCode; + } + + + public V1Card currency(String currency) { + this.currency = currency; + return this; + } + + /** + * Currency of the card. + * @return currency + */ + @javax.annotation.Nullable + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + + public V1Card cardType(String cardType) { + this.cardType = cardType; + return this; + } + + /** + * Type of the card. + * @return cardType + */ + @javax.annotation.Nullable + public String getCardType() { + return cardType; + } + + public void setCardType(String cardType) { + this.cardType = cardType; + } + + + public V1Card cardCategory(String cardCategory) { + this.cardCategory = cardCategory; + return this; + } + + /** + * Category of the card. + * @return cardCategory + */ + @javax.annotation.Nullable + public String getCardCategory() { + return cardCategory; + } + + public void setCardCategory(String cardCategory) { + this.cardCategory = cardCategory; + } + + + public V1Card cardScheme(String cardScheme) { + this.cardScheme = cardScheme; + return this; + } + + /** + * Scheme of the card. + * @return cardScheme + */ + @javax.annotation.Nullable + public String getCardScheme() { + return cardScheme; + } + + public void setCardScheme(String cardScheme) { + this.cardScheme = cardScheme; + } + + + public V1Card cardLastFourDigits(String cardLastFourDigits) { + this.cardLastFourDigits = cardLastFourDigits; + return this; + } + + /** + * Last four digits of the card number. + * @return cardLastFourDigits + */ + @javax.annotation.Nullable + public String getCardLastFourDigits() { + return cardLastFourDigits; + } + + public void setCardLastFourDigits(String cardLastFourDigits) { + this.cardLastFourDigits = cardLastFourDigits; + } + + + public V1Card cardExpiry(String cardExpiry) { + this.cardExpiry = cardExpiry; + return this; + } + + /** + * Expiry date of the card. + * @return cardExpiry + */ + @javax.annotation.Nullable + public String getCardExpiry() { + return cardExpiry; + } + + public void setCardExpiry(String cardExpiry) { + this.cardExpiry = cardExpiry; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1Card v1Card = (V1Card) o; + return Objects.equals(this.BIN, v1Card.BIN) && + Objects.equals(this.issuerName, v1Card.issuerName) && + Objects.equals(this.countryCode, v1Card.countryCode) && + Objects.equals(this.currency, v1Card.currency) && + Objects.equals(this.cardType, v1Card.cardType) && + Objects.equals(this.cardCategory, v1Card.cardCategory) && + Objects.equals(this.cardScheme, v1Card.cardScheme) && + Objects.equals(this.cardLastFourDigits, v1Card.cardLastFourDigits) && + Objects.equals(this.cardExpiry, v1Card.cardExpiry); + } + + @Override + public int hashCode() { + return Objects.hash(BIN, issuerName, countryCode, currency, cardType, cardCategory, cardScheme, cardLastFourDigits, cardExpiry); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1Card {\n"); + sb.append(" BIN: ").append(toIndentedString(BIN)).append("\n"); + sb.append(" issuerName: ").append(toIndentedString(issuerName)).append("\n"); + sb.append(" countryCode: ").append(toIndentedString(countryCode)).append("\n"); + sb.append(" currency: ").append(toIndentedString(currency)).append("\n"); + sb.append(" cardType: ").append(toIndentedString(cardType)).append("\n"); + sb.append(" cardCategory: ").append(toIndentedString(cardCategory)).append("\n"); + sb.append(" cardScheme: ").append(toIndentedString(cardScheme)).append("\n"); + sb.append(" cardLastFourDigits: ").append(toIndentedString(cardLastFourDigits)).append("\n"); + sb.append(" cardExpiry: ").append(toIndentedString(cardExpiry)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("BIN"); + openapiFields.add("issuer_name"); + openapiFields.add("country_code"); + openapiFields.add("currency"); + openapiFields.add("card_type"); + openapiFields.add("card_category"); + openapiFields.add("card_scheme"); + openapiFields.add("card_last_four_digits"); + openapiFields.add("card_expiry"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1Card + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1Card.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1Card is not found in the empty JSON string", V1Card.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1Card.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1Card` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("BIN") != null && !jsonObj.get("BIN").isJsonNull()) && !jsonObj.get("BIN").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `BIN` to be a primitive type in the JSON string but got `%s`", jsonObj.get("BIN").toString())); + } + if ((jsonObj.get("issuer_name") != null && !jsonObj.get("issuer_name").isJsonNull()) && !jsonObj.get("issuer_name").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `issuer_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("issuer_name").toString())); + } + if ((jsonObj.get("country_code") != null && !jsonObj.get("country_code").isJsonNull()) && !jsonObj.get("country_code").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `country_code` to be a primitive type in the JSON string but got `%s`", jsonObj.get("country_code").toString())); + } + if ((jsonObj.get("currency") != null && !jsonObj.get("currency").isJsonNull()) && !jsonObj.get("currency").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `currency` to be a primitive type in the JSON string but got `%s`", jsonObj.get("currency").toString())); + } + if ((jsonObj.get("card_type") != null && !jsonObj.get("card_type").isJsonNull()) && !jsonObj.get("card_type").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `card_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("card_type").toString())); + } + if ((jsonObj.get("card_category") != null && !jsonObj.get("card_category").isJsonNull()) && !jsonObj.get("card_category").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `card_category` to be a primitive type in the JSON string but got `%s`", jsonObj.get("card_category").toString())); + } + if ((jsonObj.get("card_scheme") != null && !jsonObj.get("card_scheme").isJsonNull()) && !jsonObj.get("card_scheme").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `card_scheme` to be a primitive type in the JSON string but got `%s`", jsonObj.get("card_scheme").toString())); + } + if ((jsonObj.get("card_last_four_digits") != null && !jsonObj.get("card_last_four_digits").isJsonNull()) && !jsonObj.get("card_last_four_digits").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `card_last_four_digits` to be a primitive type in the JSON string but got `%s`", jsonObj.get("card_last_four_digits").toString())); + } + if ((jsonObj.get("card_expiry") != null && !jsonObj.get("card_expiry").isJsonNull()) && !jsonObj.get("card_expiry").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `card_expiry` to be a primitive type in the JSON string but got `%s`", jsonObj.get("card_expiry").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1Card.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1Card' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1Card.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1Card value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1Card read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1Card given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1Card + * @throws IOException if the JSON string is invalid with respect to V1Card + */ + public static V1Card fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1Card.class); + } + + /** + * Convert an instance of V1Card to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteFileResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteFileResponse.java new file mode 100644 index 00000000..9a3c2cb4 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteFileResponse.java @@ -0,0 +1,231 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1DeleteFileResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1DeleteFileResponse { + public static final String SERIALIZED_NAME_SKYFLOW_ID = "skyflow_id"; + @SerializedName(SERIALIZED_NAME_SKYFLOW_ID) + private String skyflowId; + + public static final String SERIALIZED_NAME_DELETED = "deleted"; + @SerializedName(SERIALIZED_NAME_DELETED) + private Boolean deleted; + + public V1DeleteFileResponse() { + } + + public V1DeleteFileResponse skyflowId(String skyflowId) { + this.skyflowId = skyflowId; + return this; + } + + /** + * ID of the record. + * @return skyflowId + */ + @javax.annotation.Nullable + public String getSkyflowId() { + return skyflowId; + } + + public void setSkyflowId(String skyflowId) { + this.skyflowId = skyflowId; + } + + + public V1DeleteFileResponse deleted(Boolean deleted) { + this.deleted = deleted; + return this; + } + + /** + * If `true`, the file was deleted. + * @return deleted + */ + @javax.annotation.Nullable + public Boolean getDeleted() { + return deleted; + } + + public void setDeleted(Boolean deleted) { + this.deleted = deleted; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1DeleteFileResponse v1DeleteFileResponse = (V1DeleteFileResponse) o; + return Objects.equals(this.skyflowId, v1DeleteFileResponse.skyflowId) && + Objects.equals(this.deleted, v1DeleteFileResponse.deleted); + } + + @Override + public int hashCode() { + return Objects.hash(skyflowId, deleted); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1DeleteFileResponse {\n"); + sb.append(" skyflowId: ").append(toIndentedString(skyflowId)).append("\n"); + sb.append(" deleted: ").append(toIndentedString(deleted)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("skyflow_id"); + openapiFields.add("deleted"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1DeleteFileResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1DeleteFileResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1DeleteFileResponse is not found in the empty JSON string", V1DeleteFileResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1DeleteFileResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1DeleteFileResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("skyflow_id") != null && !jsonObj.get("skyflow_id").isJsonNull()) && !jsonObj.get("skyflow_id").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `skyflow_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("skyflow_id").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1DeleteFileResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1DeleteFileResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1DeleteFileResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1DeleteFileResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1DeleteFileResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1DeleteFileResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1DeleteFileResponse + * @throws IOException if the JSON string is invalid with respect to V1DeleteFileResponse + */ + public static V1DeleteFileResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1DeleteFileResponse.class); + } + + /** + * Convert an instance of V1DeleteFileResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteRecordResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteRecordResponse.java new file mode 100644 index 00000000..8ebf5c35 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteRecordResponse.java @@ -0,0 +1,231 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1DeleteRecordResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1DeleteRecordResponse { + public static final String SERIALIZED_NAME_SKYFLOW_ID = "skyflow_id"; + @SerializedName(SERIALIZED_NAME_SKYFLOW_ID) + private String skyflowId; + + public static final String SERIALIZED_NAME_DELETED = "deleted"; + @SerializedName(SERIALIZED_NAME_DELETED) + private Boolean deleted; + + public V1DeleteRecordResponse() { + } + + public V1DeleteRecordResponse skyflowId(String skyflowId) { + this.skyflowId = skyflowId; + return this; + } + + /** + * ID of the deleted record. + * @return skyflowId + */ + @javax.annotation.Nullable + public String getSkyflowId() { + return skyflowId; + } + + public void setSkyflowId(String skyflowId) { + this.skyflowId = skyflowId; + } + + + public V1DeleteRecordResponse deleted(Boolean deleted) { + this.deleted = deleted; + return this; + } + + /** + * If `true`, the record was deleted. + * @return deleted + */ + @javax.annotation.Nullable + public Boolean getDeleted() { + return deleted; + } + + public void setDeleted(Boolean deleted) { + this.deleted = deleted; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1DeleteRecordResponse v1DeleteRecordResponse = (V1DeleteRecordResponse) o; + return Objects.equals(this.skyflowId, v1DeleteRecordResponse.skyflowId) && + Objects.equals(this.deleted, v1DeleteRecordResponse.deleted); + } + + @Override + public int hashCode() { + return Objects.hash(skyflowId, deleted); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1DeleteRecordResponse {\n"); + sb.append(" skyflowId: ").append(toIndentedString(skyflowId)).append("\n"); + sb.append(" deleted: ").append(toIndentedString(deleted)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("skyflow_id"); + openapiFields.add("deleted"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1DeleteRecordResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1DeleteRecordResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1DeleteRecordResponse is not found in the empty JSON string", V1DeleteRecordResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1DeleteRecordResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1DeleteRecordResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("skyflow_id") != null && !jsonObj.get("skyflow_id").isJsonNull()) && !jsonObj.get("skyflow_id").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `skyflow_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("skyflow_id").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1DeleteRecordResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1DeleteRecordResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1DeleteRecordResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1DeleteRecordResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1DeleteRecordResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1DeleteRecordResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1DeleteRecordResponse + * @throws IOException if the JSON string is invalid with respect to V1DeleteRecordResponse + */ + public static V1DeleteRecordResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1DeleteRecordResponse.class); + } + + /** + * Convert an instance of V1DeleteRecordResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizePayload.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizePayload.java new file mode 100644 index 00000000..fdc5c52e --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizePayload.java @@ -0,0 +1,279 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1DetokenizeRecordRequest; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1DetokenizePayload + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1DetokenizePayload { + public static final String SERIALIZED_NAME_DETOKENIZATION_PARAMETERS = "detokenizationParameters"; + @SerializedName(SERIALIZED_NAME_DETOKENIZATION_PARAMETERS) + private List detokenizationParameters = new ArrayList<>(); + + public static final String SERIALIZED_NAME_DOWNLOAD_U_R_L = "downloadURL"; + @SerializedName(SERIALIZED_NAME_DOWNLOAD_U_R_L) + private Boolean downloadURL; + + public static final String SERIALIZED_NAME_CONTINUE_ON_ERROR = "continueOnError"; + @SerializedName(SERIALIZED_NAME_CONTINUE_ON_ERROR) + private Boolean continueOnError = false; + + public V1DetokenizePayload() { + } + + public V1DetokenizePayload detokenizationParameters(List detokenizationParameters) { + this.detokenizationParameters = detokenizationParameters; + return this; + } + + public V1DetokenizePayload addDetokenizationParametersItem(V1DetokenizeRecordRequest detokenizationParametersItem) { + if (this.detokenizationParameters == null) { + this.detokenizationParameters = new ArrayList<>(); + } + this.detokenizationParameters.add(detokenizationParametersItem); + return this; + } + + /** + * Detokenization details. + * @return detokenizationParameters + */ + @javax.annotation.Nullable + public List getDetokenizationParameters() { + return detokenizationParameters; + } + + public void setDetokenizationParameters(List detokenizationParameters) { + this.detokenizationParameters = detokenizationParameters; + } + + + public V1DetokenizePayload downloadURL(Boolean downloadURL) { + this.downloadURL = downloadURL; + return this; + } + + /** + * If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. + * @return downloadURL + */ + @javax.annotation.Nullable + public Boolean getDownloadURL() { + return downloadURL; + } + + public void setDownloadURL(Boolean downloadURL) { + this.downloadURL = downloadURL; + } + + + public V1DetokenizePayload continueOnError(Boolean continueOnError) { + this.continueOnError = continueOnError; + return this; + } + + /** + * If `true`, the detokenization request continues even if an error occurs. + * @return continueOnError + */ + @javax.annotation.Nullable + public Boolean getContinueOnError() { + return continueOnError; + } + + public void setContinueOnError(Boolean continueOnError) { + this.continueOnError = continueOnError; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1DetokenizePayload v1DetokenizePayload = (V1DetokenizePayload) o; + return Objects.equals(this.detokenizationParameters, v1DetokenizePayload.detokenizationParameters) && + Objects.equals(this.downloadURL, v1DetokenizePayload.downloadURL) && + Objects.equals(this.continueOnError, v1DetokenizePayload.continueOnError); + } + + @Override + public int hashCode() { + return Objects.hash(detokenizationParameters, downloadURL, continueOnError); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1DetokenizePayload {\n"); + sb.append(" detokenizationParameters: ").append(toIndentedString(detokenizationParameters)).append("\n"); + sb.append(" downloadURL: ").append(toIndentedString(downloadURL)).append("\n"); + sb.append(" continueOnError: ").append(toIndentedString(continueOnError)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("detokenizationParameters"); + openapiFields.add("downloadURL"); + openapiFields.add("continueOnError"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1DetokenizePayload + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1DetokenizePayload.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1DetokenizePayload is not found in the empty JSON string", V1DetokenizePayload.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1DetokenizePayload.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1DetokenizePayload` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (jsonObj.get("detokenizationParameters") != null && !jsonObj.get("detokenizationParameters").isJsonNull()) { + JsonArray jsonArraydetokenizationParameters = jsonObj.getAsJsonArray("detokenizationParameters"); + if (jsonArraydetokenizationParameters != null) { + // ensure the json data is an array + if (!jsonObj.get("detokenizationParameters").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `detokenizationParameters` to be an array in the JSON string but got `%s`", jsonObj.get("detokenizationParameters").toString())); + } + + // validate the optional field `detokenizationParameters` (array) + for (int i = 0; i < jsonArraydetokenizationParameters.size(); i++) { + V1DetokenizeRecordRequest.validateJsonElement(jsonArraydetokenizationParameters.get(i)); + }; + } + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1DetokenizePayload.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1DetokenizePayload' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1DetokenizePayload.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1DetokenizePayload value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1DetokenizePayload read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1DetokenizePayload given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1DetokenizePayload + * @throws IOException if the JSON string is invalid with respect to V1DetokenizePayload + */ + public static V1DetokenizePayload fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1DetokenizePayload.class); + } + + /** + * Convert an instance of V1DetokenizePayload to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordRequest.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordRequest.java new file mode 100644 index 00000000..391fa2fc --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordRequest.java @@ -0,0 +1,236 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.RedactionEnumREDACTION; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1DetokenizeRecordRequest + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1DetokenizeRecordRequest { + public static final String SERIALIZED_NAME_TOKEN = "token"; + @SerializedName(SERIALIZED_NAME_TOKEN) + private String token; + + public static final String SERIALIZED_NAME_REDACTION = "redaction"; + @SerializedName(SERIALIZED_NAME_REDACTION) + private RedactionEnumREDACTION redaction = RedactionEnumREDACTION.DEFAULT; + + public V1DetokenizeRecordRequest() { + } + + public V1DetokenizeRecordRequest token(String token) { + this.token = token; + return this; + } + + /** + * Token that identifies the record to detokenize. + * @return token + */ + @javax.annotation.Nullable + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + + public V1DetokenizeRecordRequest redaction(RedactionEnumREDACTION redaction) { + this.redaction = redaction; + return this; + } + + /** + * Get redaction + * @return redaction + */ + @javax.annotation.Nullable + public RedactionEnumREDACTION getRedaction() { + return redaction; + } + + public void setRedaction(RedactionEnumREDACTION redaction) { + this.redaction = redaction; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1DetokenizeRecordRequest v1DetokenizeRecordRequest = (V1DetokenizeRecordRequest) o; + return Objects.equals(this.token, v1DetokenizeRecordRequest.token) && + Objects.equals(this.redaction, v1DetokenizeRecordRequest.redaction); + } + + @Override + public int hashCode() { + return Objects.hash(token, redaction); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1DetokenizeRecordRequest {\n"); + sb.append(" token: ").append(toIndentedString(token)).append("\n"); + sb.append(" redaction: ").append(toIndentedString(redaction)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("token"); + openapiFields.add("redaction"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1DetokenizeRecordRequest + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1DetokenizeRecordRequest.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1DetokenizeRecordRequest is not found in the empty JSON string", V1DetokenizeRecordRequest.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1DetokenizeRecordRequest.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1DetokenizeRecordRequest` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("token") != null && !jsonObj.get("token").isJsonNull()) && !jsonObj.get("token").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `token` to be a primitive type in the JSON string but got `%s`", jsonObj.get("token").toString())); + } + // validate the optional field `redaction` + if (jsonObj.get("redaction") != null && !jsonObj.get("redaction").isJsonNull()) { + RedactionEnumREDACTION.validateJsonElement(jsonObj.get("redaction")); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1DetokenizeRecordRequest.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1DetokenizeRecordRequest' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1DetokenizeRecordRequest.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1DetokenizeRecordRequest value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1DetokenizeRecordRequest read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1DetokenizeRecordRequest given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1DetokenizeRecordRequest + * @throws IOException if the JSON string is invalid with respect to V1DetokenizeRecordRequest + */ + public static V1DetokenizeRecordRequest fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1DetokenizeRecordRequest.class); + } + + /** + * Convert an instance of V1DetokenizeRecordRequest to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordResponse.java new file mode 100644 index 00000000..5c223793 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordResponse.java @@ -0,0 +1,294 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.DetokenizeRecordResponseValueType; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1DetokenizeRecordResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1DetokenizeRecordResponse { + public static final String SERIALIZED_NAME_TOKEN = "token"; + @SerializedName(SERIALIZED_NAME_TOKEN) + private String token; + + public static final String SERIALIZED_NAME_VALUE_TYPE = "valueType"; + @SerializedName(SERIALIZED_NAME_VALUE_TYPE) + private DetokenizeRecordResponseValueType valueType = DetokenizeRecordResponseValueType.NONE; + + public static final String SERIALIZED_NAME_VALUE = "value"; + @SerializedName(SERIALIZED_NAME_VALUE) + private String value; + + public static final String SERIALIZED_NAME_ERROR = "error"; + @SerializedName(SERIALIZED_NAME_ERROR) + private String error; + + public V1DetokenizeRecordResponse() { + } + + public V1DetokenizeRecordResponse token(String token) { + this.token = token; + return this; + } + + /** + * Token of the record. + * @return token + */ + @javax.annotation.Nullable + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + + public V1DetokenizeRecordResponse valueType(DetokenizeRecordResponseValueType valueType) { + this.valueType = valueType; + return this; + } + + /** + * Get valueType + * @return valueType + */ + @javax.annotation.Nullable + public DetokenizeRecordResponseValueType getValueType() { + return valueType; + } + + public void setValueType(DetokenizeRecordResponseValueType valueType) { + this.valueType = valueType; + } + + + public V1DetokenizeRecordResponse value(String value) { + this.value = value; + return this; + } + + /** + * Data corresponding to the token. + * @return value + */ + @javax.annotation.Nullable + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + + public V1DetokenizeRecordResponse error(String error) { + this.error = error; + return this; + } + + /** + * Error if token isn't found. + * @return error + */ + @javax.annotation.Nullable + public String getError() { + return error; + } + + public void setError(String error) { + this.error = error; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1DetokenizeRecordResponse v1DetokenizeRecordResponse = (V1DetokenizeRecordResponse) o; + return Objects.equals(this.token, v1DetokenizeRecordResponse.token) && + Objects.equals(this.valueType, v1DetokenizeRecordResponse.valueType) && + Objects.equals(this.value, v1DetokenizeRecordResponse.value) && + Objects.equals(this.error, v1DetokenizeRecordResponse.error); + } + + @Override + public int hashCode() { + return Objects.hash(token, valueType, value, error); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1DetokenizeRecordResponse {\n"); + sb.append(" token: ").append(toIndentedString(token)).append("\n"); + sb.append(" valueType: ").append(toIndentedString(valueType)).append("\n"); + sb.append(" value: ").append(toIndentedString(value)).append("\n"); + sb.append(" error: ").append(toIndentedString(error)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("token"); + openapiFields.add("valueType"); + openapiFields.add("value"); + openapiFields.add("error"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1DetokenizeRecordResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1DetokenizeRecordResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1DetokenizeRecordResponse is not found in the empty JSON string", V1DetokenizeRecordResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1DetokenizeRecordResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1DetokenizeRecordResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("token") != null && !jsonObj.get("token").isJsonNull()) && !jsonObj.get("token").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `token` to be a primitive type in the JSON string but got `%s`", jsonObj.get("token").toString())); + } + // validate the optional field `valueType` + if (jsonObj.get("valueType") != null && !jsonObj.get("valueType").isJsonNull()) { + DetokenizeRecordResponseValueType.validateJsonElement(jsonObj.get("valueType")); + } + if ((jsonObj.get("value") != null && !jsonObj.get("value").isJsonNull()) && !jsonObj.get("value").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `value` to be a primitive type in the JSON string but got `%s`", jsonObj.get("value").toString())); + } + if ((jsonObj.get("error") != null && !jsonObj.get("error").isJsonNull()) && !jsonObj.get("error").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `error` to be a primitive type in the JSON string but got `%s`", jsonObj.get("error").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1DetokenizeRecordResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1DetokenizeRecordResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1DetokenizeRecordResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1DetokenizeRecordResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1DetokenizeRecordResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1DetokenizeRecordResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1DetokenizeRecordResponse + * @throws IOException if the JSON string is invalid with respect to V1DetokenizeRecordResponse + */ + public static V1DetokenizeRecordResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1DetokenizeRecordResponse.class); + } + + /** + * Convert an instance of V1DetokenizeRecordResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeResponse.java new file mode 100644 index 00000000..ed996183 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeResponse.java @@ -0,0 +1,227 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1DetokenizeRecordResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1DetokenizeResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1DetokenizeResponse { + public static final String SERIALIZED_NAME_RECORDS = "records"; + @SerializedName(SERIALIZED_NAME_RECORDS) + private List records = new ArrayList<>(); + + public V1DetokenizeResponse() { + } + + public V1DetokenizeResponse records(List records) { + this.records = records; + return this; + } + + public V1DetokenizeResponse addRecordsItem(V1DetokenizeRecordResponse recordsItem) { + if (this.records == null) { + this.records = new ArrayList<>(); + } + this.records.add(recordsItem); + return this; + } + + /** + * Records corresponding to the specified tokens. + * @return records + */ + @javax.annotation.Nullable + public List getRecords() { + return records; + } + + public void setRecords(List records) { + this.records = records; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1DetokenizeResponse v1DetokenizeResponse = (V1DetokenizeResponse) o; + return Objects.equals(this.records, v1DetokenizeResponse.records); + } + + @Override + public int hashCode() { + return Objects.hash(records); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1DetokenizeResponse {\n"); + sb.append(" records: ").append(toIndentedString(records)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("records"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1DetokenizeResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1DetokenizeResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1DetokenizeResponse is not found in the empty JSON string", V1DetokenizeResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1DetokenizeResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1DetokenizeResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (jsonObj.get("records") != null && !jsonObj.get("records").isJsonNull()) { + JsonArray jsonArrayrecords = jsonObj.getAsJsonArray("records"); + if (jsonArrayrecords != null) { + // ensure the json data is an array + if (!jsonObj.get("records").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `records` to be an array in the JSON string but got `%s`", jsonObj.get("records").toString())); + } + + // validate the optional field `records` (array) + for (int i = 0; i < jsonArrayrecords.size(); i++) { + V1DetokenizeRecordResponse.validateJsonElement(jsonArrayrecords.get(i)); + }; + } + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1DetokenizeResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1DetokenizeResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1DetokenizeResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1DetokenizeResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1DetokenizeResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1DetokenizeResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1DetokenizeResponse + * @throws IOException if the JSON string is invalid with respect to V1DetokenizeResponse + */ + public static V1DetokenizeResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1DetokenizeResponse.class); + } + + /** + * Convert an instance of V1DetokenizeResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1FieldRecords.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1FieldRecords.java new file mode 100644 index 00000000..9efada66 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1FieldRecords.java @@ -0,0 +1,228 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * Record values and tokens. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1FieldRecords { + public static final String SERIALIZED_NAME_FIELDS = "fields"; + @SerializedName(SERIALIZED_NAME_FIELDS) + private Object fields; + + public static final String SERIALIZED_NAME_TOKENS = "tokens"; + @SerializedName(SERIALIZED_NAME_TOKENS) + private Object tokens; + + public V1FieldRecords() { + } + + public V1FieldRecords fields(Object fields) { + this.fields = fields; + return this; + } + + /** + * Fields and values for the record. For example, `{'field_1':'value_1', 'field_2':'value_2'}`. + * @return fields + */ + @javax.annotation.Nullable + public Object getFields() { + return fields; + } + + public void setFields(Object fields) { + this.fields = fields; + } + + + public V1FieldRecords tokens(Object tokens) { + this.tokens = tokens; + return this; + } + + /** + * Fields and tokens for the record. For example, `{'field_1':'token_1', 'field_2':'token_2'}`. + * @return tokens + */ + @javax.annotation.Nullable + public Object getTokens() { + return tokens; + } + + public void setTokens(Object tokens) { + this.tokens = tokens; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1FieldRecords v1FieldRecords = (V1FieldRecords) o; + return Objects.equals(this.fields, v1FieldRecords.fields) && + Objects.equals(this.tokens, v1FieldRecords.tokens); + } + + @Override + public int hashCode() { + return Objects.hash(fields, tokens); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1FieldRecords {\n"); + sb.append(" fields: ").append(toIndentedString(fields)).append("\n"); + sb.append(" tokens: ").append(toIndentedString(tokens)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("fields"); + openapiFields.add("tokens"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1FieldRecords + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1FieldRecords.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1FieldRecords is not found in the empty JSON string", V1FieldRecords.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1FieldRecords.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1FieldRecords` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1FieldRecords.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1FieldRecords' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1FieldRecords.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1FieldRecords value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1FieldRecords read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1FieldRecords given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1FieldRecords + * @throws IOException if the JSON string is invalid with respect to V1FieldRecords + */ + public static V1FieldRecords fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1FieldRecords.class); + } + + /** + * Convert an instance of V1FieldRecords to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1FileAVScanStatus.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1FileAVScanStatus.java new file mode 100644 index 00000000..af3f490f --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1FileAVScanStatus.java @@ -0,0 +1,92 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.annotations.SerializedName; + +import java.io.IOException; +import com.google.gson.TypeAdapter; +import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Anti-virus scan status of the file. + */ +@JsonAdapter(V1FileAVScanStatus.Adapter.class) +public enum V1FileAVScanStatus { + + NONE("SCAN_NONE"), + + CLEAN("SCAN_CLEAN"), + + INFECTED("SCAN_INFECTED"), + + DELETED("SCAN_DELETED"), + + ERROR("SCAN_ERROR"), + + PENDING("SCAN_PENDING"), + + UNSCANNABLE("SCAN_UNSCANNABLE"), + + FILE_NOT_FOUND("SCAN_FILE_NOT_FOUND"), + + INVALID("SCAN_INVALID"); + + private String value; + + V1FileAVScanStatus(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static V1FileAVScanStatus fromValue(String value) { + for (V1FileAVScanStatus b : V1FileAVScanStatus.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + public static class Adapter extends TypeAdapter { + @Override + public void write(final JsonWriter jsonWriter, final V1FileAVScanStatus enumeration) throws IOException { + jsonWriter.value(enumeration.getValue()); + } + + @Override + public V1FileAVScanStatus read(final JsonReader jsonReader) throws IOException { + String value = jsonReader.nextString(); + return V1FileAVScanStatus.fromValue(value); + } + } + + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + String value = jsonElement.getAsString(); + V1FileAVScanStatus.fromValue(value); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenRequest.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenRequest.java new file mode 100644 index 00000000..c2d6bf1d --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenRequest.java @@ -0,0 +1,359 @@ +/* + * Skyflow Management API + * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1GetAuthTokenRequest + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-10-03T10:28:16.037563+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1GetAuthTokenRequest { + public static final String SERIALIZED_NAME_GRANT_TYPE = "grant_type"; + @SerializedName(SERIALIZED_NAME_GRANT_TYPE) + private String grantType; + + public static final String SERIALIZED_NAME_ASSERTION = "assertion"; + @SerializedName(SERIALIZED_NAME_ASSERTION) + private String assertion; + + public static final String SERIALIZED_NAME_SUBJECT_TOKEN = "subject_token"; + @SerializedName(SERIALIZED_NAME_SUBJECT_TOKEN) + private String subjectToken; + + public static final String SERIALIZED_NAME_SUBJECT_TOKEN_TYPE = "subject_token_type"; + @SerializedName(SERIALIZED_NAME_SUBJECT_TOKEN_TYPE) + private String subjectTokenType; + + public static final String SERIALIZED_NAME_REQUESTED_TOKEN_USE = "requested_token_use"; + @SerializedName(SERIALIZED_NAME_REQUESTED_TOKEN_USE) + private String requestedTokenUse; + + public static final String SERIALIZED_NAME_SCOPE = "scope"; + @SerializedName(SERIALIZED_NAME_SCOPE) + private String scope; + + public V1GetAuthTokenRequest() { + } + + public V1GetAuthTokenRequest grantType(String grantType) { + this.grantType = grantType; + return this; + } + + /** + * Grant type of the request. Set this to `urn:ietf:params:oauth:grant-type:jwt-bearer`. + * @return grantType + */ + @javax.annotation.Nonnull + public String getGrantType() { + return grantType; + } + + public void setGrantType(String grantType) { + this.grantType = grantType; + } + + + public V1GetAuthTokenRequest assertion(String assertion) { + this.assertion = assertion; + return this; + } + + /** + * User-signed JWT token that contains the following fields: <br/> <ul><li><code>iss</code>: Issuer of the JWT.</li><li><code>key</code>: Unique identifier for the key.</li><li><code>aud</code>: Recipient the JWT is intended for.</li><li><code>exp</code>: Time the JWT expires.</li><li><code>sub</code>: Subject of the JWT.</li><li><code>ctx</code>: (Optional) Value for <a href='/context-aware-overview/'>Context-aware authorization</a>.</li></ul> + * @return assertion + */ + @javax.annotation.Nonnull + public String getAssertion() { + return assertion; + } + + public void setAssertion(String assertion) { + this.assertion = assertion; + } + + + public V1GetAuthTokenRequest subjectToken(String subjectToken) { + this.subjectToken = subjectToken; + return this; + } + + /** + * Subject token. + * @return subjectToken + */ + @javax.annotation.Nullable + public String getSubjectToken() { + return subjectToken; + } + + public void setSubjectToken(String subjectToken) { + this.subjectToken = subjectToken; + } + + + public V1GetAuthTokenRequest subjectTokenType(String subjectTokenType) { + this.subjectTokenType = subjectTokenType; + return this; + } + + /** + * Subject token type. + * @return subjectTokenType + */ + @javax.annotation.Nullable + public String getSubjectTokenType() { + return subjectTokenType; + } + + public void setSubjectTokenType(String subjectTokenType) { + this.subjectTokenType = subjectTokenType; + } + + + public V1GetAuthTokenRequest requestedTokenUse(String requestedTokenUse) { + this.requestedTokenUse = requestedTokenUse; + return this; + } + + /** + * Token use type. Either `delegation` or `impersonation`. + * @return requestedTokenUse + */ + @javax.annotation.Nullable + public String getRequestedTokenUse() { + return requestedTokenUse; + } + + public void setRequestedTokenUse(String requestedTokenUse) { + this.requestedTokenUse = requestedTokenUse; + } + + + public V1GetAuthTokenRequest scope(String scope) { + this.scope = scope; + return this; + } + + /** + * Subset of available <a href='#Roles'>roles</a> to associate with the requested token. Uses the format \"role:\\<roleID1\\> role:\\<roleID2\\>\". + * @return scope + */ + @javax.annotation.Nullable + public String getScope() { + return scope; + } + + public void setScope(String scope) { + this.scope = scope; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1GetAuthTokenRequest v1GetAuthTokenRequest = (V1GetAuthTokenRequest) o; + return Objects.equals(this.grantType, v1GetAuthTokenRequest.grantType) && + Objects.equals(this.assertion, v1GetAuthTokenRequest.assertion) && + Objects.equals(this.subjectToken, v1GetAuthTokenRequest.subjectToken) && + Objects.equals(this.subjectTokenType, v1GetAuthTokenRequest.subjectTokenType) && + Objects.equals(this.requestedTokenUse, v1GetAuthTokenRequest.requestedTokenUse) && + Objects.equals(this.scope, v1GetAuthTokenRequest.scope); + } + + @Override + public int hashCode() { + return Objects.hash(grantType, assertion, subjectToken, subjectTokenType, requestedTokenUse, scope); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1GetAuthTokenRequest {\n"); + sb.append(" grantType: ").append(toIndentedString(grantType)).append("\n"); + sb.append(" assertion: ").append(toIndentedString(assertion)).append("\n"); + sb.append(" subjectToken: ").append(toIndentedString(subjectToken)).append("\n"); + sb.append(" subjectTokenType: ").append(toIndentedString(subjectTokenType)).append("\n"); + sb.append(" requestedTokenUse: ").append(toIndentedString(requestedTokenUse)).append("\n"); + sb.append(" scope: ").append(toIndentedString(scope)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("grant_type"); + openapiFields.add("assertion"); + openapiFields.add("subject_token"); + openapiFields.add("subject_token_type"); + openapiFields.add("requested_token_use"); + openapiFields.add("scope"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + openapiRequiredFields.add("grant_type"); + openapiRequiredFields.add("assertion"); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1GetAuthTokenRequest + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1GetAuthTokenRequest.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1GetAuthTokenRequest is not found in the empty JSON string", V1GetAuthTokenRequest.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1GetAuthTokenRequest.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1GetAuthTokenRequest` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + + // check to make sure all required properties/fields are present in the JSON string + for (String requiredField : V1GetAuthTokenRequest.openapiRequiredFields) { + if (jsonElement.getAsJsonObject().get(requiredField) == null) { + throw new IllegalArgumentException(String.format("The required field `%s` is not found in the JSON string: %s", requiredField, jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (!jsonObj.get("grant_type").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `grant_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("grant_type").toString())); + } + if (!jsonObj.get("assertion").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `assertion` to be a primitive type in the JSON string but got `%s`", jsonObj.get("assertion").toString())); + } + if ((jsonObj.get("subject_token") != null && !jsonObj.get("subject_token").isJsonNull()) && !jsonObj.get("subject_token").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `subject_token` to be a primitive type in the JSON string but got `%s`", jsonObj.get("subject_token").toString())); + } + if ((jsonObj.get("subject_token_type") != null && !jsonObj.get("subject_token_type").isJsonNull()) && !jsonObj.get("subject_token_type").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `subject_token_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("subject_token_type").toString())); + } + if ((jsonObj.get("requested_token_use") != null && !jsonObj.get("requested_token_use").isJsonNull()) && !jsonObj.get("requested_token_use").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `requested_token_use` to be a primitive type in the JSON string but got `%s`", jsonObj.get("requested_token_use").toString())); + } + if ((jsonObj.get("scope") != null && !jsonObj.get("scope").isJsonNull()) && !jsonObj.get("scope").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `scope` to be a primitive type in the JSON string but got `%s`", jsonObj.get("scope").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1GetAuthTokenRequest.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1GetAuthTokenRequest' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1GetAuthTokenRequest.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1GetAuthTokenRequest value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1GetAuthTokenRequest read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1GetAuthTokenRequest given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1GetAuthTokenRequest + * @throws IOException if the JSON string is invalid with respect to V1GetAuthTokenRequest + */ + public static V1GetAuthTokenRequest fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1GetAuthTokenRequest.class); + } + + /** + * Convert an instance of V1GetAuthTokenRequest to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenResponse.java new file mode 100644 index 00000000..d6c0f61f --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenResponse.java @@ -0,0 +1,234 @@ +/* + * Skyflow Management API + * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1GetAuthTokenResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-10-03T10:28:16.037563+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1GetAuthTokenResponse { + public static final String SERIALIZED_NAME_ACCESS_TOKEN = "accessToken"; + @SerializedName(SERIALIZED_NAME_ACCESS_TOKEN) + private String accessToken; + + public static final String SERIALIZED_NAME_TOKEN_TYPE = "tokenType"; + @SerializedName(SERIALIZED_NAME_TOKEN_TYPE) + private String tokenType; + + public V1GetAuthTokenResponse() { + } + + public V1GetAuthTokenResponse accessToken(String accessToken) { + this.accessToken = accessToken; + return this; + } + + /** + * AccessToken. + * @return accessToken + */ + @javax.annotation.Nullable + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + + public V1GetAuthTokenResponse tokenType(String tokenType) { + this.tokenType = tokenType; + return this; + } + + /** + * TokenType : Bearer. + * @return tokenType + */ + @javax.annotation.Nullable + public String getTokenType() { + return tokenType; + } + + public void setTokenType(String tokenType) { + this.tokenType = tokenType; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1GetAuthTokenResponse v1GetAuthTokenResponse = (V1GetAuthTokenResponse) o; + return Objects.equals(this.accessToken, v1GetAuthTokenResponse.accessToken) && + Objects.equals(this.tokenType, v1GetAuthTokenResponse.tokenType); + } + + @Override + public int hashCode() { + return Objects.hash(accessToken, tokenType); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1GetAuthTokenResponse {\n"); + sb.append(" accessToken: ").append(toIndentedString(accessToken)).append("\n"); + sb.append(" tokenType: ").append(toIndentedString(tokenType)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("accessToken"); + openapiFields.add("tokenType"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1GetAuthTokenResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1GetAuthTokenResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1GetAuthTokenResponse is not found in the empty JSON string", V1GetAuthTokenResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1GetAuthTokenResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1GetAuthTokenResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("accessToken") != null && !jsonObj.get("accessToken").isJsonNull()) && !jsonObj.get("accessToken").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `accessToken` to be a primitive type in the JSON string but got `%s`", jsonObj.get("accessToken").toString())); + } + if ((jsonObj.get("tokenType") != null && !jsonObj.get("tokenType").isJsonNull()) && !jsonObj.get("tokenType").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `tokenType` to be a primitive type in the JSON string but got `%s`", jsonObj.get("tokenType").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1GetAuthTokenResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1GetAuthTokenResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1GetAuthTokenResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1GetAuthTokenResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1GetAuthTokenResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1GetAuthTokenResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1GetAuthTokenResponse + * @throws IOException if the JSON string is invalid with respect to V1GetAuthTokenResponse + */ + public static V1GetAuthTokenResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1GetAuthTokenResponse.class); + } + + /** + * Convert an instance of V1GetAuthTokenResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1GetFileScanStatusResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1GetFileScanStatusResponse.java new file mode 100644 index 00000000..4bce5d74 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1GetFileScanStatusResponse.java @@ -0,0 +1,207 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1FileAVScanStatus; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1GetFileScanStatusResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1GetFileScanStatusResponse { + public static final String SERIALIZED_NAME_AV_SCAN_STATUS = "av_scan_status"; + @SerializedName(SERIALIZED_NAME_AV_SCAN_STATUS) + private V1FileAVScanStatus avScanStatus = V1FileAVScanStatus.NONE; + + public V1GetFileScanStatusResponse() { + } + + public V1GetFileScanStatusResponse avScanStatus(V1FileAVScanStatus avScanStatus) { + this.avScanStatus = avScanStatus; + return this; + } + + /** + * Get avScanStatus + * @return avScanStatus + */ + @javax.annotation.Nullable + public V1FileAVScanStatus getAvScanStatus() { + return avScanStatus; + } + + public void setAvScanStatus(V1FileAVScanStatus avScanStatus) { + this.avScanStatus = avScanStatus; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1GetFileScanStatusResponse v1GetFileScanStatusResponse = (V1GetFileScanStatusResponse) o; + return Objects.equals(this.avScanStatus, v1GetFileScanStatusResponse.avScanStatus); + } + + @Override + public int hashCode() { + return Objects.hash(avScanStatus); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1GetFileScanStatusResponse {\n"); + sb.append(" avScanStatus: ").append(toIndentedString(avScanStatus)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("av_scan_status"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1GetFileScanStatusResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1GetFileScanStatusResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1GetFileScanStatusResponse is not found in the empty JSON string", V1GetFileScanStatusResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1GetFileScanStatusResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1GetFileScanStatusResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + // validate the optional field `av_scan_status` + if (jsonObj.get("av_scan_status") != null && !jsonObj.get("av_scan_status").isJsonNull()) { + V1FileAVScanStatus.validateJsonElement(jsonObj.get("av_scan_status")); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1GetFileScanStatusResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1GetFileScanStatusResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1GetFileScanStatusResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1GetFileScanStatusResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1GetFileScanStatusResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1GetFileScanStatusResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1GetFileScanStatusResponse + * @throws IOException if the JSON string is invalid with respect to V1GetFileScanStatusResponse + */ + public static V1GetFileScanStatusResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1GetFileScanStatusResponse.class); + } + + /** + * Convert an instance of V1GetFileScanStatusResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1GetQueryResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1GetQueryResponse.java new file mode 100644 index 00000000..2ff57e57 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1GetQueryResponse.java @@ -0,0 +1,227 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1FieldRecords; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1GetQueryResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1GetQueryResponse { + public static final String SERIALIZED_NAME_RECORDS = "records"; + @SerializedName(SERIALIZED_NAME_RECORDS) + private List records = new ArrayList<>(); + + public V1GetQueryResponse() { + } + + public V1GetQueryResponse records(List records) { + this.records = records; + return this; + } + + public V1GetQueryResponse addRecordsItem(V1FieldRecords recordsItem) { + if (this.records == null) { + this.records = new ArrayList<>(); + } + this.records.add(recordsItem); + return this; + } + + /** + * Records returned by the query. + * @return records + */ + @javax.annotation.Nullable + public List getRecords() { + return records; + } + + public void setRecords(List records) { + this.records = records; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1GetQueryResponse v1GetQueryResponse = (V1GetQueryResponse) o; + return Objects.equals(this.records, v1GetQueryResponse.records); + } + + @Override + public int hashCode() { + return Objects.hash(records); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1GetQueryResponse {\n"); + sb.append(" records: ").append(toIndentedString(records)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("records"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1GetQueryResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1GetQueryResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1GetQueryResponse is not found in the empty JSON string", V1GetQueryResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1GetQueryResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1GetQueryResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (jsonObj.get("records") != null && !jsonObj.get("records").isJsonNull()) { + JsonArray jsonArrayrecords = jsonObj.getAsJsonArray("records"); + if (jsonArrayrecords != null) { + // ensure the json data is an array + if (!jsonObj.get("records").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `records` to be an array in the JSON string but got `%s`", jsonObj.get("records").toString())); + } + + // validate the optional field `records` (array) + for (int i = 0; i < jsonArrayrecords.size(); i++) { + V1FieldRecords.validateJsonElement(jsonArrayrecords.get(i)); + }; + } + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1GetQueryResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1GetQueryResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1GetQueryResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1GetQueryResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1GetQueryResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1GetQueryResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1GetQueryResponse + * @throws IOException if the JSON string is invalid with respect to V1GetQueryResponse + */ + public static V1GetQueryResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1GetQueryResponse.class); + } + + /** + * Convert an instance of V1GetQueryResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1InsertRecordResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1InsertRecordResponse.java new file mode 100644 index 00000000..f4f432b3 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1InsertRecordResponse.java @@ -0,0 +1,227 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1RecordMetaProperties; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1InsertRecordResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1InsertRecordResponse { + public static final String SERIALIZED_NAME_RECORDS = "records"; + @SerializedName(SERIALIZED_NAME_RECORDS) + private List records = new ArrayList<>(); + + public V1InsertRecordResponse() { + } + + public V1InsertRecordResponse records(List records) { + this.records = records; + return this; + } + + public V1InsertRecordResponse addRecordsItem(V1RecordMetaProperties recordsItem) { + if (this.records == null) { + this.records = new ArrayList<>(); + } + this.records.add(recordsItem); + return this; + } + + /** + * Identifiers for the inserted records. + * @return records + */ + @javax.annotation.Nullable + public List getRecords() { + return records; + } + + public void setRecords(List records) { + this.records = records; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1InsertRecordResponse v1InsertRecordResponse = (V1InsertRecordResponse) o; + return Objects.equals(this.records, v1InsertRecordResponse.records); + } + + @Override + public int hashCode() { + return Objects.hash(records); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1InsertRecordResponse {\n"); + sb.append(" records: ").append(toIndentedString(records)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("records"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1InsertRecordResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1InsertRecordResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1InsertRecordResponse is not found in the empty JSON string", V1InsertRecordResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1InsertRecordResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1InsertRecordResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (jsonObj.get("records") != null && !jsonObj.get("records").isJsonNull()) { + JsonArray jsonArrayrecords = jsonObj.getAsJsonArray("records"); + if (jsonArrayrecords != null) { + // ensure the json data is an array + if (!jsonObj.get("records").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `records` to be an array in the JSON string but got `%s`", jsonObj.get("records").toString())); + } + + // validate the optional field `records` (array) + for (int i = 0; i < jsonArrayrecords.size(); i++) { + V1RecordMetaProperties.validateJsonElement(jsonArrayrecords.get(i)); + }; + } + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1InsertRecordResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1InsertRecordResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1InsertRecordResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1InsertRecordResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1InsertRecordResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1InsertRecordResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1InsertRecordResponse + * @throws IOException if the JSON string is invalid with respect to V1InsertRecordResponse + */ + public static V1InsertRecordResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1InsertRecordResponse.class); + } + + /** + * Convert an instance of V1InsertRecordResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1MemberType.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1MemberType.java new file mode 100644 index 00000000..5cb1ce8b --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1MemberType.java @@ -0,0 +1,80 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.annotations.SerializedName; + +import java.io.IOException; +import com.google.gson.TypeAdapter; +import com.google.gson.JsonElement; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +/** + * Type of the member. + */ +@JsonAdapter(V1MemberType.Adapter.class) +public enum V1MemberType { + + NONE("NONE"), + + USER("USER"), + + SERVICE_ACCOUNT("SERVICE_ACCOUNT"); + + private String value; + + V1MemberType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static V1MemberType fromValue(String value) { + for (V1MemberType b : V1MemberType.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + public static class Adapter extends TypeAdapter { + @Override + public void write(final JsonWriter jsonWriter, final V1MemberType enumeration) throws IOException { + jsonWriter.value(enumeration.getValue()); + } + + @Override + public V1MemberType read(final JsonReader jsonReader) throws IOException { + String value = jsonReader.nextString(); + return V1MemberType.fromValue(value); + } + } + + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + String value = jsonElement.getAsString(); + V1MemberType.fromValue(value); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1RecordMetaProperties.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1RecordMetaProperties.java new file mode 100644 index 00000000..e0aaf47e --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1RecordMetaProperties.java @@ -0,0 +1,231 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1RecordMetaProperties + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1RecordMetaProperties { + public static final String SERIALIZED_NAME_SKYFLOW_ID = "skyflow_id"; + @SerializedName(SERIALIZED_NAME_SKYFLOW_ID) + private String skyflowId; + + public static final String SERIALIZED_NAME_TOKENS = "tokens"; + @SerializedName(SERIALIZED_NAME_TOKENS) + private Object tokens; + + public V1RecordMetaProperties() { + } + + public V1RecordMetaProperties skyflowId(String skyflowId) { + this.skyflowId = skyflowId; + return this; + } + + /** + * ID of the inserted record. + * @return skyflowId + */ + @javax.annotation.Nullable + public String getSkyflowId() { + return skyflowId; + } + + public void setSkyflowId(String skyflowId) { + this.skyflowId = skyflowId; + } + + + public V1RecordMetaProperties tokens(Object tokens) { + this.tokens = tokens; + return this; + } + + /** + * Tokens for the record. + * @return tokens + */ + @javax.annotation.Nullable + public Object getTokens() { + return tokens; + } + + public void setTokens(Object tokens) { + this.tokens = tokens; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1RecordMetaProperties v1RecordMetaProperties = (V1RecordMetaProperties) o; + return Objects.equals(this.skyflowId, v1RecordMetaProperties.skyflowId) && + Objects.equals(this.tokens, v1RecordMetaProperties.tokens); + } + + @Override + public int hashCode() { + return Objects.hash(skyflowId, tokens); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1RecordMetaProperties {\n"); + sb.append(" skyflowId: ").append(toIndentedString(skyflowId)).append("\n"); + sb.append(" tokens: ").append(toIndentedString(tokens)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("skyflow_id"); + openapiFields.add("tokens"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1RecordMetaProperties + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1RecordMetaProperties.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1RecordMetaProperties is not found in the empty JSON string", V1RecordMetaProperties.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1RecordMetaProperties.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1RecordMetaProperties` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("skyflow_id") != null && !jsonObj.get("skyflow_id").isJsonNull()) && !jsonObj.get("skyflow_id").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `skyflow_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("skyflow_id").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1RecordMetaProperties.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1RecordMetaProperties' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1RecordMetaProperties.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1RecordMetaProperties value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1RecordMetaProperties read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1RecordMetaProperties given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1RecordMetaProperties + * @throws IOException if the JSON string is invalid with respect to V1RecordMetaProperties + */ + public static V1RecordMetaProperties fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1RecordMetaProperties.class); + } + + /** + * Convert an instance of V1RecordMetaProperties to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizePayload.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizePayload.java new file mode 100644 index 00000000..74936451 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizePayload.java @@ -0,0 +1,227 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1TokenizeRecordRequest; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1TokenizePayload + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1TokenizePayload { + public static final String SERIALIZED_NAME_TOKENIZATION_PARAMETERS = "tokenizationParameters"; + @SerializedName(SERIALIZED_NAME_TOKENIZATION_PARAMETERS) + private List tokenizationParameters = new ArrayList<>(); + + public V1TokenizePayload() { + } + + public V1TokenizePayload tokenizationParameters(List tokenizationParameters) { + this.tokenizationParameters = tokenizationParameters; + return this; + } + + public V1TokenizePayload addTokenizationParametersItem(V1TokenizeRecordRequest tokenizationParametersItem) { + if (this.tokenizationParameters == null) { + this.tokenizationParameters = new ArrayList<>(); + } + this.tokenizationParameters.add(tokenizationParametersItem); + return this; + } + + /** + * Tokenization details. + * @return tokenizationParameters + */ + @javax.annotation.Nullable + public List getTokenizationParameters() { + return tokenizationParameters; + } + + public void setTokenizationParameters(List tokenizationParameters) { + this.tokenizationParameters = tokenizationParameters; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1TokenizePayload v1TokenizePayload = (V1TokenizePayload) o; + return Objects.equals(this.tokenizationParameters, v1TokenizePayload.tokenizationParameters); + } + + @Override + public int hashCode() { + return Objects.hash(tokenizationParameters); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1TokenizePayload {\n"); + sb.append(" tokenizationParameters: ").append(toIndentedString(tokenizationParameters)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("tokenizationParameters"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1TokenizePayload + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1TokenizePayload.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1TokenizePayload is not found in the empty JSON string", V1TokenizePayload.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1TokenizePayload.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1TokenizePayload` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (jsonObj.get("tokenizationParameters") != null && !jsonObj.get("tokenizationParameters").isJsonNull()) { + JsonArray jsonArraytokenizationParameters = jsonObj.getAsJsonArray("tokenizationParameters"); + if (jsonArraytokenizationParameters != null) { + // ensure the json data is an array + if (!jsonObj.get("tokenizationParameters").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `tokenizationParameters` to be an array in the JSON string but got `%s`", jsonObj.get("tokenizationParameters").toString())); + } + + // validate the optional field `tokenizationParameters` (array) + for (int i = 0; i < jsonArraytokenizationParameters.size(); i++) { + V1TokenizeRecordRequest.validateJsonElement(jsonArraytokenizationParameters.get(i)); + }; + } + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1TokenizePayload.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1TokenizePayload' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1TokenizePayload.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1TokenizePayload value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1TokenizePayload read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1TokenizePayload given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1TokenizePayload + * @throws IOException if the JSON string is invalid with respect to V1TokenizePayload + */ + public static V1TokenizePayload fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1TokenizePayload.class); + } + + /** + * Convert an instance of V1TokenizePayload to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordRequest.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordRequest.java new file mode 100644 index 00000000..1de790c5 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordRequest.java @@ -0,0 +1,234 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1TokenizeRecordRequest + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1TokenizeRecordRequest { + public static final String SERIALIZED_NAME_VALUE = "value"; + @SerializedName(SERIALIZED_NAME_VALUE) + private String value; + + public static final String SERIALIZED_NAME_COLUMN_GROUP = "columnGroup"; + @SerializedName(SERIALIZED_NAME_COLUMN_GROUP) + private String columnGroup; + + public V1TokenizeRecordRequest() { + } + + public V1TokenizeRecordRequest value(String value) { + this.value = value; + return this; + } + + /** + * Existing value to return a token for. + * @return value + */ + @javax.annotation.Nullable + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + + public V1TokenizeRecordRequest columnGroup(String columnGroup) { + this.columnGroup = columnGroup; + return this; + } + + /** + * Name of the column group that the value belongs to. + * @return columnGroup + */ + @javax.annotation.Nullable + public String getColumnGroup() { + return columnGroup; + } + + public void setColumnGroup(String columnGroup) { + this.columnGroup = columnGroup; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1TokenizeRecordRequest v1TokenizeRecordRequest = (V1TokenizeRecordRequest) o; + return Objects.equals(this.value, v1TokenizeRecordRequest.value) && + Objects.equals(this.columnGroup, v1TokenizeRecordRequest.columnGroup); + } + + @Override + public int hashCode() { + return Objects.hash(value, columnGroup); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1TokenizeRecordRequest {\n"); + sb.append(" value: ").append(toIndentedString(value)).append("\n"); + sb.append(" columnGroup: ").append(toIndentedString(columnGroup)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("value"); + openapiFields.add("columnGroup"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1TokenizeRecordRequest + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1TokenizeRecordRequest.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1TokenizeRecordRequest is not found in the empty JSON string", V1TokenizeRecordRequest.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1TokenizeRecordRequest.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1TokenizeRecordRequest` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("value") != null && !jsonObj.get("value").isJsonNull()) && !jsonObj.get("value").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `value` to be a primitive type in the JSON string but got `%s`", jsonObj.get("value").toString())); + } + if ((jsonObj.get("columnGroup") != null && !jsonObj.get("columnGroup").isJsonNull()) && !jsonObj.get("columnGroup").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `columnGroup` to be a primitive type in the JSON string but got `%s`", jsonObj.get("columnGroup").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1TokenizeRecordRequest.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1TokenizeRecordRequest' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1TokenizeRecordRequest.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1TokenizeRecordRequest value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1TokenizeRecordRequest read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1TokenizeRecordRequest given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1TokenizeRecordRequest + * @throws IOException if the JSON string is invalid with respect to V1TokenizeRecordRequest + */ + public static V1TokenizeRecordRequest fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1TokenizeRecordRequest.class); + } + + /** + * Convert an instance of V1TokenizeRecordRequest to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordResponse.java new file mode 100644 index 00000000..290d7403 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordResponse.java @@ -0,0 +1,205 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1TokenizeRecordResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1TokenizeRecordResponse { + public static final String SERIALIZED_NAME_TOKEN = "token"; + @SerializedName(SERIALIZED_NAME_TOKEN) + private String token; + + public V1TokenizeRecordResponse() { + } + + public V1TokenizeRecordResponse token(String token) { + this.token = token; + return this; + } + + /** + * Token corresponding to a value. + * @return token + */ + @javax.annotation.Nullable + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1TokenizeRecordResponse v1TokenizeRecordResponse = (V1TokenizeRecordResponse) o; + return Objects.equals(this.token, v1TokenizeRecordResponse.token); + } + + @Override + public int hashCode() { + return Objects.hash(token); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1TokenizeRecordResponse {\n"); + sb.append(" token: ").append(toIndentedString(token)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("token"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1TokenizeRecordResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1TokenizeRecordResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1TokenizeRecordResponse is not found in the empty JSON string", V1TokenizeRecordResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1TokenizeRecordResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1TokenizeRecordResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("token") != null && !jsonObj.get("token").isJsonNull()) && !jsonObj.get("token").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `token` to be a primitive type in the JSON string but got `%s`", jsonObj.get("token").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1TokenizeRecordResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1TokenizeRecordResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1TokenizeRecordResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1TokenizeRecordResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1TokenizeRecordResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1TokenizeRecordResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1TokenizeRecordResponse + * @throws IOException if the JSON string is invalid with respect to V1TokenizeRecordResponse + */ + public static V1TokenizeRecordResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1TokenizeRecordResponse.class); + } + + /** + * Convert an instance of V1TokenizeRecordResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeResponse.java new file mode 100644 index 00000000..3885c9a5 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeResponse.java @@ -0,0 +1,227 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1TokenizeRecordResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1TokenizeResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1TokenizeResponse { + public static final String SERIALIZED_NAME_RECORDS = "records"; + @SerializedName(SERIALIZED_NAME_RECORDS) + private List records = new ArrayList<>(); + + public V1TokenizeResponse() { + } + + public V1TokenizeResponse records(List records) { + this.records = records; + return this; + } + + public V1TokenizeResponse addRecordsItem(V1TokenizeRecordResponse recordsItem) { + if (this.records == null) { + this.records = new ArrayList<>(); + } + this.records.add(recordsItem); + return this; + } + + /** + * Tokens corresponding to the specified values. + * @return records + */ + @javax.annotation.Nullable + public List getRecords() { + return records; + } + + public void setRecords(List records) { + this.records = records; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1TokenizeResponse v1TokenizeResponse = (V1TokenizeResponse) o; + return Objects.equals(this.records, v1TokenizeResponse.records); + } + + @Override + public int hashCode() { + return Objects.hash(records); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1TokenizeResponse {\n"); + sb.append(" records: ").append(toIndentedString(records)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("records"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1TokenizeResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1TokenizeResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1TokenizeResponse is not found in the empty JSON string", V1TokenizeResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1TokenizeResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1TokenizeResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if (jsonObj.get("records") != null && !jsonObj.get("records").isJsonNull()) { + JsonArray jsonArrayrecords = jsonObj.getAsJsonArray("records"); + if (jsonArrayrecords != null) { + // ensure the json data is an array + if (!jsonObj.get("records").isJsonArray()) { + throw new IllegalArgumentException(String.format("Expected the field `records` to be an array in the JSON string but got `%s`", jsonObj.get("records").toString())); + } + + // validate the optional field `records` (array) + for (int i = 0; i < jsonArrayrecords.size(); i++) { + V1TokenizeRecordResponse.validateJsonElement(jsonArrayrecords.get(i)); + }; + } + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1TokenizeResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1TokenizeResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1TokenizeResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1TokenizeResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1TokenizeResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1TokenizeResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1TokenizeResponse + * @throws IOException if the JSON string is invalid with respect to V1TokenizeResponse + */ + public static V1TokenizeResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1TokenizeResponse.class); + } + + /** + * Convert an instance of V1TokenizeResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1UpdateRecordResponse.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1UpdateRecordResponse.java new file mode 100644 index 00000000..b731dd12 --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1UpdateRecordResponse.java @@ -0,0 +1,231 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * V1UpdateRecordResponse + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1UpdateRecordResponse { + public static final String SERIALIZED_NAME_SKYFLOW_ID = "skyflow_id"; + @SerializedName(SERIALIZED_NAME_SKYFLOW_ID) + private String skyflowId; + + public static final String SERIALIZED_NAME_TOKENS = "tokens"; + @SerializedName(SERIALIZED_NAME_TOKENS) + private Object tokens; + + public V1UpdateRecordResponse() { + } + + public V1UpdateRecordResponse skyflowId(String skyflowId) { + this.skyflowId = skyflowId; + return this; + } + + /** + * ID of the updated record. + * @return skyflowId + */ + @javax.annotation.Nullable + public String getSkyflowId() { + return skyflowId; + } + + public void setSkyflowId(String skyflowId) { + this.skyflowId = skyflowId; + } + + + public V1UpdateRecordResponse tokens(Object tokens) { + this.tokens = tokens; + return this; + } + + /** + * Tokens for the record. + * @return tokens + */ + @javax.annotation.Nullable + public Object getTokens() { + return tokens; + } + + public void setTokens(Object tokens) { + this.tokens = tokens; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1UpdateRecordResponse v1UpdateRecordResponse = (V1UpdateRecordResponse) o; + return Objects.equals(this.skyflowId, v1UpdateRecordResponse.skyflowId) && + Objects.equals(this.tokens, v1UpdateRecordResponse.tokens); + } + + @Override + public int hashCode() { + return Objects.hash(skyflowId, tokens); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1UpdateRecordResponse {\n"); + sb.append(" skyflowId: ").append(toIndentedString(skyflowId)).append("\n"); + sb.append(" tokens: ").append(toIndentedString(tokens)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("skyflow_id"); + openapiFields.add("tokens"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1UpdateRecordResponse + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1UpdateRecordResponse.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1UpdateRecordResponse is not found in the empty JSON string", V1UpdateRecordResponse.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1UpdateRecordResponse.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1UpdateRecordResponse` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("skyflow_id") != null && !jsonObj.get("skyflow_id").isJsonNull()) && !jsonObj.get("skyflow_id").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `skyflow_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("skyflow_id").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1UpdateRecordResponse.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1UpdateRecordResponse' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1UpdateRecordResponse.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1UpdateRecordResponse value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1UpdateRecordResponse read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1UpdateRecordResponse given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1UpdateRecordResponse + * @throws IOException if the JSON string is invalid with respect to V1UpdateRecordResponse + */ + public static V1UpdateRecordResponse fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1UpdateRecordResponse.class); + } + + /** + * Convert an instance of V1UpdateRecordResponse to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1VaultFieldMapping.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1VaultFieldMapping.java new file mode 100644 index 00000000..582a53fd --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1VaultFieldMapping.java @@ -0,0 +1,263 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * Mapping of the fields in the vault to the fields to use for the lookup. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1VaultFieldMapping { + public static final String SERIALIZED_NAME_CARD_NUMBER = "card_number"; + @SerializedName(SERIALIZED_NAME_CARD_NUMBER) + private String cardNumber; + + public static final String SERIALIZED_NAME_CARD_LAST_FOUR_DIGITS = "card_last_four_digits"; + @SerializedName(SERIALIZED_NAME_CARD_LAST_FOUR_DIGITS) + private String cardLastFourDigits; + + public static final String SERIALIZED_NAME_CARD_EXPIRY = "card_expiry"; + @SerializedName(SERIALIZED_NAME_CARD_EXPIRY) + private String cardExpiry; + + public V1VaultFieldMapping() { + } + + public V1VaultFieldMapping cardNumber(String cardNumber) { + this.cardNumber = cardNumber; + return this; + } + + /** + * Name of the column that stores the card number. + * @return cardNumber + */ + @javax.annotation.Nullable + public String getCardNumber() { + return cardNumber; + } + + public void setCardNumber(String cardNumber) { + this.cardNumber = cardNumber; + } + + + public V1VaultFieldMapping cardLastFourDigits(String cardLastFourDigits) { + this.cardLastFourDigits = cardLastFourDigits; + return this; + } + + /** + * Name of the column that stores the card number suffix. + * @return cardLastFourDigits + */ + @javax.annotation.Nullable + public String getCardLastFourDigits() { + return cardLastFourDigits; + } + + public void setCardLastFourDigits(String cardLastFourDigits) { + this.cardLastFourDigits = cardLastFourDigits; + } + + + public V1VaultFieldMapping cardExpiry(String cardExpiry) { + this.cardExpiry = cardExpiry; + return this; + } + + /** + * Name of the column that stores the expiry date. + * @return cardExpiry + */ + @javax.annotation.Nullable + public String getCardExpiry() { + return cardExpiry; + } + + public void setCardExpiry(String cardExpiry) { + this.cardExpiry = cardExpiry; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1VaultFieldMapping v1VaultFieldMapping = (V1VaultFieldMapping) o; + return Objects.equals(this.cardNumber, v1VaultFieldMapping.cardNumber) && + Objects.equals(this.cardLastFourDigits, v1VaultFieldMapping.cardLastFourDigits) && + Objects.equals(this.cardExpiry, v1VaultFieldMapping.cardExpiry); + } + + @Override + public int hashCode() { + return Objects.hash(cardNumber, cardLastFourDigits, cardExpiry); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1VaultFieldMapping {\n"); + sb.append(" cardNumber: ").append(toIndentedString(cardNumber)).append("\n"); + sb.append(" cardLastFourDigits: ").append(toIndentedString(cardLastFourDigits)).append("\n"); + sb.append(" cardExpiry: ").append(toIndentedString(cardExpiry)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("card_number"); + openapiFields.add("card_last_four_digits"); + openapiFields.add("card_expiry"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1VaultFieldMapping + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1VaultFieldMapping.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1VaultFieldMapping is not found in the empty JSON string", V1VaultFieldMapping.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1VaultFieldMapping.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1VaultFieldMapping` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("card_number") != null && !jsonObj.get("card_number").isJsonNull()) && !jsonObj.get("card_number").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `card_number` to be a primitive type in the JSON string but got `%s`", jsonObj.get("card_number").toString())); + } + if ((jsonObj.get("card_last_four_digits") != null && !jsonObj.get("card_last_four_digits").isJsonNull()) && !jsonObj.get("card_last_four_digits").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `card_last_four_digits` to be a primitive type in the JSON string but got `%s`", jsonObj.get("card_last_four_digits").toString())); + } + if ((jsonObj.get("card_expiry") != null && !jsonObj.get("card_expiry").isJsonNull()) && !jsonObj.get("card_expiry").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `card_expiry` to be a primitive type in the JSON string but got `%s`", jsonObj.get("card_expiry").toString())); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1VaultFieldMapping.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1VaultFieldMapping' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1VaultFieldMapping.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1VaultFieldMapping value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1VaultFieldMapping read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1VaultFieldMapping given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1VaultFieldMapping + * @throws IOException if the JSON string is invalid with respect to V1VaultFieldMapping + */ + public static V1VaultFieldMapping fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1VaultFieldMapping.class); + } + + /** + * Convert an instance of V1VaultFieldMapping to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1VaultSchemaConfig.java b/v2/src/main/java/com/skyflow/generated/rest/models/V1VaultSchemaConfig.java new file mode 100644 index 00000000..58ac97ef --- /dev/null +++ b/v2/src/main/java/com/skyflow/generated/rest/models/V1VaultSchemaConfig.java @@ -0,0 +1,265 @@ +/* + * Skyflow Data API + * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault's URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
+ * + * The version of the OpenAPI document: v1 + * Contact: support@skyflow.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.skyflow.generated.rest.models; + +import java.util.Objects; +import com.google.gson.TypeAdapter; +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import com.skyflow.generated.rest.models.V1VaultFieldMapping; +import java.io.IOException; +import java.util.Arrays; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.skyflow.generated.rest.JSON; + +/** + * Details of the vault that stores additional card details. + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-09-25T11:34:22.684345+05:30[Asia/Kolkata]", comments = "Generator version: 7.8.0") +public class V1VaultSchemaConfig { + public static final String SERIALIZED_NAME_ID = "id"; + @SerializedName(SERIALIZED_NAME_ID) + private String id; + + public static final String SERIALIZED_NAME_TABLE_NAME = "table_name"; + @SerializedName(SERIALIZED_NAME_TABLE_NAME) + private String tableName; + + public static final String SERIALIZED_NAME_MAPPING = "mapping"; + @SerializedName(SERIALIZED_NAME_MAPPING) + private V1VaultFieldMapping mapping; + + public V1VaultSchemaConfig() { + } + + public V1VaultSchemaConfig id(String id) { + this.id = id; + return this; + } + + /** + * ID of the vault that stores card details. + * @return id + */ + @javax.annotation.Nullable + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + + public V1VaultSchemaConfig tableName(String tableName) { + this.tableName = tableName; + return this; + } + + /** + * Name of the table that stores card details. + * @return tableName + */ + @javax.annotation.Nullable + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + + public V1VaultSchemaConfig mapping(V1VaultFieldMapping mapping) { + this.mapping = mapping; + return this; + } + + /** + * Get mapping + * @return mapping + */ + @javax.annotation.Nullable + public V1VaultFieldMapping getMapping() { + return mapping; + } + + public void setMapping(V1VaultFieldMapping mapping) { + this.mapping = mapping; + } + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1VaultSchemaConfig v1VaultSchemaConfig = (V1VaultSchemaConfig) o; + return Objects.equals(this.id, v1VaultSchemaConfig.id) && + Objects.equals(this.tableName, v1VaultSchemaConfig.tableName) && + Objects.equals(this.mapping, v1VaultSchemaConfig.mapping); + } + + @Override + public int hashCode() { + return Objects.hash(id, tableName, mapping); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1VaultSchemaConfig {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" tableName: ").append(toIndentedString(tableName)).append("\n"); + sb.append(" mapping: ").append(toIndentedString(mapping)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + + public static HashSet openapiFields; + public static HashSet openapiRequiredFields; + + static { + // a set of all properties/fields (JSON key names) + openapiFields = new HashSet(); + openapiFields.add("id"); + openapiFields.add("table_name"); + openapiFields.add("mapping"); + + // a set of required properties/fields (JSON key names) + openapiRequiredFields = new HashSet(); + } + + /** + * Validates the JSON Element and throws an exception if issues found + * + * @param jsonElement JSON Element + * @throws IOException if the JSON Element is invalid with respect to V1VaultSchemaConfig + */ + public static void validateJsonElement(JsonElement jsonElement) throws IOException { + if (jsonElement == null) { + if (!V1VaultSchemaConfig.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null + throw new IllegalArgumentException(String.format("The required field(s) %s in V1VaultSchemaConfig is not found in the empty JSON string", V1VaultSchemaConfig.openapiRequiredFields.toString())); + } + } + + Set> entries = jsonElement.getAsJsonObject().entrySet(); + // check to see if the JSON string contains additional fields + for (Map.Entry entry : entries) { + if (!V1VaultSchemaConfig.openapiFields.contains(entry.getKey())) { + throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `V1VaultSchemaConfig` properties. JSON: %s", entry.getKey(), jsonElement.toString())); + } + } + JsonObject jsonObj = jsonElement.getAsJsonObject(); + if ((jsonObj.get("id") != null && !jsonObj.get("id").isJsonNull()) && !jsonObj.get("id").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("id").toString())); + } + if ((jsonObj.get("table_name") != null && !jsonObj.get("table_name").isJsonNull()) && !jsonObj.get("table_name").isJsonPrimitive()) { + throw new IllegalArgumentException(String.format("Expected the field `table_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("table_name").toString())); + } + // validate the optional field `mapping` + if (jsonObj.get("mapping") != null && !jsonObj.get("mapping").isJsonNull()) { + V1VaultFieldMapping.validateJsonElement(jsonObj.get("mapping")); + } + } + + public static class CustomTypeAdapterFactory implements TypeAdapterFactory { + @SuppressWarnings("unchecked") + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (!V1VaultSchemaConfig.class.isAssignableFrom(type.getRawType())) { + return null; // this class only serializes 'V1VaultSchemaConfig' and its subtypes + } + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + final TypeAdapter thisAdapter + = gson.getDelegateAdapter(this, TypeToken.get(V1VaultSchemaConfig.class)); + + return (TypeAdapter) new TypeAdapter() { + @Override + public void write(JsonWriter out, V1VaultSchemaConfig value) throws IOException { + JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject(); + elementAdapter.write(out, obj); + } + + @Override + public V1VaultSchemaConfig read(JsonReader in) throws IOException { + JsonElement jsonElement = elementAdapter.read(in); + validateJsonElement(jsonElement); + return thisAdapter.fromJsonTree(jsonElement); + } + + }.nullSafe(); + } + } + + /** + * Create an instance of V1VaultSchemaConfig given an JSON string + * + * @param jsonString JSON string + * @return An instance of V1VaultSchemaConfig + * @throws IOException if the JSON string is invalid with respect to V1VaultSchemaConfig + */ + public static V1VaultSchemaConfig fromJson(String jsonString) throws IOException { + return JSON.getGson().fromJson(jsonString, V1VaultSchemaConfig.class); + } + + /** + * Convert an instance of V1VaultSchemaConfig to an JSON string + * + * @return JSON string + */ + public String toJson() { + return JSON.getGson().toJson(this); + } +} + From 54cf3694d1d7fe26fb51226fcb93d8cd50b8779d Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Tue, 8 Oct 2024 10:51:47 +0530 Subject: [PATCH 14/68] SK-1664 Public interfaces for vault APIs - SK-1703 Implemented public interfaces for detokenize --- v2/src/main/java/com/skyflow/VaultClient.java | 15 ++++ .../java/com/skyflow/utils/Constants.java | 2 +- v2/src/main/java/com/skyflow/utils/Utils.java | 15 +--- .../utils/validations/Validations.java | 28 +++++++- .../vault/controller/VaultController.java | 13 ++-- .../tokens/DetokenizeRecordResponse.java | 54 +++++++++++++++ .../vault/tokens/DetokenizeRequest.java | 14 ---- .../vault/tokens/DetokenizeResponse.java | 69 ++++++++----------- 8 files changed, 136 insertions(+), 74 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index 75eda5af..87d64091 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -5,7 +5,10 @@ import com.skyflow.generated.rest.ApiClient; import com.skyflow.generated.rest.api.RecordsApi; import com.skyflow.generated.rest.api.TokensApi; +import com.skyflow.generated.rest.models.V1DetokenizePayload; +import com.skyflow.generated.rest.models.V1DetokenizeRecordRequest; import com.skyflow.utils.Utils; +import com.skyflow.vault.tokens.DetokenizeRequest; import io.github.cdimascio.dotenv.Dotenv; public class VaultClient { @@ -57,6 +60,18 @@ protected void updateVaultConfig() { prioritiseCredentials(); } + protected V1DetokenizePayload getDetokenizePayload(DetokenizeRequest request) { + V1DetokenizePayload payload = new V1DetokenizePayload(); + payload.setContinueOnError(request.getContinueOnError()); + for (String token : request.getTokens()) { + V1DetokenizeRecordRequest recordRequest = new V1DetokenizeRecordRequest(); + recordRequest.setToken(token); + recordRequest.setRedaction(request.getRedactionType().getRedaction()); + payload.addDetokenizationParametersItem(recordRequest); + } + return payload; + } + private void updateVaultURL() { String vaultURL = Utils.getVaultURL(this.vaultConfig.getClusterId(), this.vaultConfig.getEnv()); this.apiClient.setBasePath(vaultURL); diff --git a/v2/src/main/java/com/skyflow/utils/Constants.java b/v2/src/main/java/com/skyflow/utils/Constants.java index 8aacabe2..563b5ca5 100644 --- a/v2/src/main/java/com/skyflow/utils/Constants.java +++ b/v2/src/main/java/com/skyflow/utils/Constants.java @@ -1,6 +1,6 @@ package com.skyflow.utils; -public class Constants { +public final class Constants { public static final String SECURE_PROTOCOL = "https://"; public static final String DEV_DOMAIN = ".vault.skyflowapis.dev"; public static final String STAGE_DOMAIN = ".vault.skyflowapis.tech"; diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/v2/src/main/java/com/skyflow/utils/Utils.java index c3ddf355..740e78e1 100644 --- a/v2/src/main/java/com/skyflow/utils/Utils.java +++ b/v2/src/main/java/com/skyflow/utils/Utils.java @@ -15,7 +15,7 @@ import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; -public class Utils { +public final class Utils { public static String getVaultURL(String clusterId, ENV env) { StringBuilder sb = new StringBuilder(Constants.SECURE_PROTOCOL); sb.append(clusterId); @@ -80,18 +80,7 @@ public static String getBaseURL(String url) throws MalformedURLException { URL parsedUrl = new URL(url); String protocol = parsedUrl.getProtocol(); String host = parsedUrl.getHost(); - return new StringBuilder(protocol).append("://").append(host).toString(); - } - - public static void verifyCredentials(Credentials credentials) throws SkyflowException { - int nonNullMembers = 0; - if (credentials.getPath() != null) nonNullMembers++; - if (credentials.getCredentialsString() != null) nonNullMembers++; - if (credentials.getToken() != null) nonNullMembers++; - - if (nonNullMembers != 1) { - throw new SkyflowException("only one of tokens, path, and credentialsString is allowed"); - } + return String.format("%s://%s", protocol, host); } private static PrivateKey parsePkcs8PrivateKey(byte[] pkcs8Bytes) throws SkyflowException { diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 600aeb10..1d2468a7 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -1,10 +1,34 @@ package com.skyflow.utils.validations; +import com.skyflow.config.ConnectionConfig; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.tokens.DetokenizeRequest; + // Add config and request validations public class Validations { - public static void vaultValidations() { + + public static void validateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { + + } + + public static void validateConnectionConfig(ConnectionConfig connectionConfig) throws SkyflowException { + } - public static void insertValidation() { + public static void validateCredentials(Credentials credentials) throws SkyflowException { + int nonNullMembers = 0; + if (credentials.getPath() != null) nonNullMembers++; + if (credentials.getCredentialsString() != null) nonNullMembers++; + if (credentials.getToken() != null) nonNullMembers++; + + if (nonNullMembers != 1) { + throw new SkyflowException("only one of tokens, path, and credentialsString is allowed"); + } + } + + public static void validateDetokenizeRequest(DetokenizeRequest detokenizeRequest) throws SkyflowException { + } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index 704ab54b..538d2863 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -4,11 +4,13 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.ApiException; import com.skyflow.generated.rest.auth.HttpBearerAuth; import com.skyflow.generated.rest.models.V1DetokenizePayload; import com.skyflow.generated.rest.models.V1DetokenizeResponse; import com.skyflow.serviceaccount.util.Token; import com.skyflow.utils.Utils; +import com.skyflow.utils.validations.Validations; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.InsertResponse; import com.skyflow.vault.tokens.DetokenizeRequest; @@ -32,14 +34,15 @@ public InsertResponse insert(InsertRequest insertRequest) { return null; } - public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) { + public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) throws SkyflowException { V1DetokenizeResponse result = null; try { + Validations.validateDetokenizeRequest(detokenizeRequest); setBearerToken(); - V1DetokenizePayload payload = detokenizeRequest.getDetokenizePayload(); + V1DetokenizePayload payload = super.getDetokenizePayload(detokenizeRequest); result = super.getTokensApi().recordServiceDetokenize(super.getVaultConfig().getVaultId(), payload); - } catch (Exception e) { - e.printStackTrace(); + } catch (ApiException e) { + throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } return new DetokenizeResponse(result); } @@ -90,7 +93,7 @@ public DetectController detect() { } private void setBearerToken() throws SkyflowException { - Utils.verifyCredentials(super.getFinalCredentials()); + Validations.validateCredentials(super.getFinalCredentials()); if (token == null || Token.isExpired(token)) { token = Utils.generateBearerToken(super.getFinalCredentials()); } diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java new file mode 100644 index 00000000..a2cbce51 --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java @@ -0,0 +1,54 @@ +package com.skyflow.vault.tokens; + +public class DetokenizeRecordResponse { + private String token; + private String value; + private String type; + private String error; + + public String getError() { + return error; + } + + void setError(String error) { + this.error = error; + } + + public String getToken() { + return token; + } + + void setToken(String token) { + this.token = token; + } + + public String getValue() { + return value; + } + + void setValue(String value) { + this.value = value; + } + + public String getType() { + return type; + } + + void setType(String type) { + this.type = type; + } + + @Override + public String toString() { + StringBuilder response = new StringBuilder("{"); + response.append("\n\t").append("\"token\": \"").append(token).append("\","); + if (error == null) { + response.append("\n\t").append("\"value\": \"").append(value).append("\","); + response.append("\n\t").append("\"type\": \"").append(type).append("\","); + } else { + response.append("\n\t").append("\"error\": \"").append(error).append("\","); + } + response.append("\n}"); + return response.toString(); + } +} \ No newline at end of file diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java index d01cf76f..24dd4e2d 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java @@ -1,8 +1,6 @@ package com.skyflow.vault.tokens; import com.skyflow.enums.RedactionType; -import com.skyflow.generated.rest.models.V1DetokenizePayload; -import com.skyflow.generated.rest.models.V1DetokenizeRecordRequest; import java.util.ArrayList; @@ -29,18 +27,6 @@ public Boolean getContinueOnError() { return this.builder.continueOnError; } - public V1DetokenizePayload getDetokenizePayload() { - V1DetokenizePayload payload = new V1DetokenizePayload(); - payload.setContinueOnError(this.getContinueOnError()); - for (String token : this.getTokens()) { - V1DetokenizeRecordRequest recordRequest = new V1DetokenizeRecordRequest(); - recordRequest.setToken(token); - recordRequest.setRedaction(this.getRedactionType().getRedaction()); - payload.addDetokenizationParametersItem(recordRequest); - } - return payload; - } - public static final class DetokenizeRequestBuilder { private ArrayList tokens; private RedactionType redactionType; diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java index 3ec5eeee..82dd417b 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java @@ -8,65 +8,56 @@ public class DetokenizeResponse { private final V1DetokenizeResponse generatedResponse; - private final ArrayList records; + private final ArrayList detokenizedFields; + private final ArrayList errorRecords; public DetokenizeResponse(V1DetokenizeResponse response) { this.generatedResponse = response; - this.records = new ArrayList<>(); + this.detokenizedFields = new ArrayList<>(); + this.errorRecords = new ArrayList<>(); this.createResponse(); } - public ArrayList getRecords() { - return records; + public ArrayList getDetokenizedFields() { + return detokenizedFields; + } + + public ArrayList getErrors() { + return errorRecords; } private void createResponse() { List records = this.generatedResponse.getRecords(); + if (records != null) { + createSuccessResponse(records); + } + } + + private void createSuccessResponse(List records) { for (V1DetokenizeRecordResponse record : records) { DetokenizeRecordResponse recordResponse = new DetokenizeRecordResponse(); - recordResponse.setValue(record.getValue()); - recordResponse.setType(record.getValueType().getValue()); - this.records.add(recordResponse); + recordResponse.setToken(record.getToken()); + if (record.getError() != null) { + recordResponse.setError(record.getError()); + this.errorRecords.add(recordResponse); + } else { + recordResponse.setValue(record.getValue()); + recordResponse.setType(record.getValueType().getValue()); + this.detokenizedFields.add(recordResponse); + } } } @Override public String toString() { - return "DetokenizeResponse {" + - "\n\t" + toIndentedString(records) + - "\n}"; + StringBuilder response = new StringBuilder("{"); + response.append("\n\t").append("\"detokenizedFields\": ").append(toIndentedString(detokenizedFields)).append("\""); + response.append("\n\t").append("\"errors\": \"").append(toIndentedString(errorRecords)).append("\""); + response.append("\n}"); + return response.toString(); } private String toIndentedString(Object o) { return o.toString().replace("\n", "\n\t"); } - - public class DetokenizeRecordResponse { - private String value; - private String type; - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - @Override - public String toString() { - return "DetokenizeRecordResponse {" + - "\n\t" + "value: '" + value + "'," + - "\n\t" + "type: '" + type + "'," + - "\n}"; - } - } } From c5117740f17143cef02476bd0ef5397bf69e8095 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Tue, 8 Oct 2024 20:25:07 +0530 Subject: [PATCH 15/68] SK-1701 Implemented public interfaces for insert vault API --- v2/src/main/java/com/skyflow/VaultClient.java | 27 ++++++ v2/src/main/java/com/skyflow/enums/Byot.java | 24 +++++ .../com/skyflow/errors/SkyflowException.java | 91 ++++++++++++++++++- .../utils/validations/Validations.java | 5 + .../vault/controller/VaultController.java | 16 +++- .../com/skyflow/vault/data/InsertRequest.java | 30 ++++-- .../skyflow/vault/data/InsertResponse.java | 89 +++++++++++++++++- .../vault/tokens/DetokenizeResponse.java | 4 +- 8 files changed, 268 insertions(+), 18 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/enums/Byot.java diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index 87d64091..d6b2018e 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -5,12 +5,19 @@ import com.skyflow.generated.rest.ApiClient; import com.skyflow.generated.rest.api.RecordsApi; import com.skyflow.generated.rest.api.TokensApi; +import com.skyflow.generated.rest.models.RecordServiceInsertRecordBody; import com.skyflow.generated.rest.models.V1DetokenizePayload; import com.skyflow.generated.rest.models.V1DetokenizeRecordRequest; +import com.skyflow.generated.rest.models.V1FieldRecords; import com.skyflow.utils.Utils; +import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.tokens.DetokenizeRequest; import io.github.cdimascio.dotenv.Dotenv; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + public class VaultClient { private final RecordsApi recordsApi; private final TokensApi tokensApi; @@ -72,6 +79,26 @@ protected V1DetokenizePayload getDetokenizePayload(DetokenizeRequest request) { return payload; } + protected RecordServiceInsertRecordBody getInsertRequestBody(InsertRequest request) { + RecordServiceInsertRecordBody insertRecordBody = new RecordServiceInsertRecordBody(); + insertRecordBody.setTokenization(request.getReturnTokens()); + insertRecordBody.setHomogeneous(request.getHomogeneous()); + insertRecordBody.setUpsert(request.getUpsert()); + insertRecordBody.setByot(request.getTokenStrict().getBYOT()); + + List> values = request.getValues(); + List> tokens = request.getTokens(); + List records = new ArrayList<>(); + for (int index = 0; index < values.size(); index++) { + V1FieldRecords record = new V1FieldRecords(); + record.setFields(values.get(index)); + record.setTokens(tokens.get(index)); + records.add(record); + } + insertRecordBody.setRecords(records); + return insertRecordBody; + } + private void updateVaultURL() { String vaultURL = Utils.getVaultURL(this.vaultConfig.getClusterId(), this.vaultConfig.getEnv()); this.apiClient.setBasePath(vaultURL); diff --git a/v2/src/main/java/com/skyflow/enums/Byot.java b/v2/src/main/java/com/skyflow/enums/Byot.java new file mode 100644 index 00000000..9fe7d989 --- /dev/null +++ b/v2/src/main/java/com/skyflow/enums/Byot.java @@ -0,0 +1,24 @@ +package com.skyflow.enums; + +import com.skyflow.generated.rest.models.V1BYOT; + +public enum Byot { + DISABLE(V1BYOT.DISABLE), + ENABLE(V1BYOT.ENABLE), + ENABLE_STRICT(V1BYOT.ENABLE_STRICT); + + private final V1BYOT byot; + + Byot(V1BYOT byot) { + this.byot = byot; + } + + public V1BYOT getBYOT() { + return byot; + } + + @Override + public String toString() { + return String.valueOf(byot); + } +} diff --git a/v2/src/main/java/com/skyflow/errors/SkyflowException.java b/v2/src/main/java/com/skyflow/errors/SkyflowException.java index 7cf96536..52b4d8ef 100644 --- a/v2/src/main/java/com/skyflow/errors/SkyflowException.java +++ b/v2/src/main/java/com/skyflow/errors/SkyflowException.java @@ -1,11 +1,98 @@ package com.skyflow.errors; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import java.util.List; +import java.util.Map; + public class SkyflowException extends Exception { - // members + private String requestId; + private int code; + private String message; + private JSONArray details; + private JSONObject responseBody; + + public SkyflowException() { + } public SkyflowException(String message) { super(message); + this.message = message; + } + + public SkyflowException(Throwable cause) { + super(cause); + } + + public SkyflowException(String message, Throwable cause) { + super(message, cause); + } + + public SkyflowException(int code, String message) { + super(message); + this.code = code; + } + + public SkyflowException(int code, Throwable cause, Map> responseHeaders, String responseBody) { + this(cause); + this.code = code; + setRequestId(responseHeaders); + setResponseBody(responseBody); + } + + private void setResponseBody(String responseBody) { + try { + if (responseBody != null) { + JSONParser parser = new JSONParser(); + this.responseBody = (JSONObject) parser.parse(responseBody); + setMessage(); + setDetails(); + } + } catch (ParseException e) { + throw new RuntimeException(e); + } } - // getters and setters + public String getRequestId() { + return requestId; + } + + private void setRequestId(Map> responseHeaders) { + if (responseHeaders != null) { + List ids = responseHeaders.get("x-request-id"); + this.requestId = ids.get(0); + } + } + + private void setMessage() { + this.message = (String) (((JSONObject) responseBody.get("error")).get("message")); + } + + private void setDetails() { + this.details = (JSONArray) (((JSONObject) responseBody.get("error")).get("details")); + } + + public int getCode() { + return code; + } + + @Override + public String getMessage() { + return message; + } + + @Override + public String toString() { + return String.format( + "%n requestId: %s%n code: %s%n message: %s%n details: %s", + this.requestId, this.code, this.message, this.details + ); + } + + public JSONArray getDetails() { + return details; + } } diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 1d2468a7..7f17798c 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -4,6 +4,7 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.tokens.DetokenizeRequest; // Add config and request validations @@ -31,4 +32,8 @@ public static void validateCredentials(Credentials credentials) throws SkyflowEx public static void validateDetokenizeRequest(DetokenizeRequest detokenizeRequest) throws SkyflowException { } + + public static void validateInsertRequest(InsertRequest insertRequest) throws SkyflowException { + + } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index 538d2863..80f25082 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -6,8 +6,10 @@ import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.ApiException; import com.skyflow.generated.rest.auth.HttpBearerAuth; +import com.skyflow.generated.rest.models.RecordServiceInsertRecordBody; import com.skyflow.generated.rest.models.V1DetokenizePayload; import com.skyflow.generated.rest.models.V1DetokenizeResponse; +import com.skyflow.generated.rest.models.V1InsertRecordResponse; import com.skyflow.serviceaccount.util.Token; import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; @@ -30,8 +32,18 @@ public VaultController(VaultConfig vaultConfig, Credentials credentials) { this.detectController = null; } - public InsertResponse insert(InsertRequest insertRequest) { - return null; + public InsertResponse insert(InsertRequest insertRequest) throws SkyflowException { + V1InsertRecordResponse result = null; + try { + Validations.validateInsertRequest(insertRequest); + setBearerToken(); + RecordServiceInsertRecordBody insertBody = super.getInsertRequestBody(insertRequest); + result = super.getRecordsApi().recordServiceInsertRecord( + super.getVaultConfig().getVaultId(), insertRequest.getTable(), insertBody); + } catch (ApiException e) { + throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); + } + return new InsertResponse(result); } public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) throws SkyflowException { diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java index 3cc4bbff..fd95d23e 100644 --- a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java @@ -7,7 +7,8 @@ public class InsertRequest { private final String table; - private final ArrayList> data; + private final ArrayList> values; + private final ArrayList> tokens; private final Boolean returnTokens; private final String upsert; private final Boolean homogeneous; @@ -16,7 +17,8 @@ public class InsertRequest { private InsertRequest(InsertRequestBuilder builder) { this.table = builder.table; - this.data = builder.data; + this.values = builder.values; + this.tokens = builder.tokens; this.returnTokens = builder.returnTokens; this.upsert = builder.upsert; this.homogeneous = builder.homogeneous; @@ -32,8 +34,12 @@ public String getTable() { return table; } - public ArrayList> getData() { - return this.data; + public ArrayList> getValues() { + return this.values; + } + + public ArrayList> getTokens() { + return this.tokens; } public Boolean getReturnTokens() { @@ -58,20 +64,26 @@ public Byot getTokenStrict() { public static final class InsertRequestBuilder { private String table; - private ArrayList> data; - private Boolean returnTokens; + private ArrayList> values; + private ArrayList> tokens; + private Boolean returnTokens = true; private String upsert; private Boolean homogeneous; private Boolean tokenMode; - private Byot tokenStrict; + private Byot tokenStrict = Byot.DISABLE; public InsertRequestBuilder table(String table) { this.table = table; return this; } - public InsertRequestBuilder data(ArrayList> data) { - this.data = data; + public InsertRequestBuilder values(ArrayList> values) { + this.values = values; + return this; + } + + public InsertRequestBuilder tokens(ArrayList> tokens) { + this.tokens = tokens; return this; } diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java index 444418dd..6f9ef81b 100644 --- a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java @@ -1,10 +1,93 @@ package com.skyflow.vault.data; +import com.google.gson.internal.LinkedTreeMap; +import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.models.V1InsertRecordResponse; +import com.skyflow.generated.rest.models.V1RecordMetaProperties; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + public class InsertResponse { - // members + private final V1InsertRecordResponse generatedResponse; + private final ArrayList> insertedFields; + private final ArrayList> errorFields; - public InsertResponse() { + public InsertResponse(V1InsertRecordResponse response) throws SkyflowException { + this.generatedResponse = response; + this.insertedFields = new ArrayList<>(); + this.errorFields = new ArrayList<>(); + this.createResponse(); } - // getters ans setters + public ArrayList> getInsertedFields() { + return insertedFields; + } + + public ArrayList> getErrorFields() { + return errorFields; + } + + private void createResponse() throws SkyflowException { + List records = this.generatedResponse.getRecords(); + if (records != null && !records.isEmpty()) { + createSuccessResponse(records); + } + } + + private void createSuccessResponse(List records) throws SkyflowException { + try { + for (V1RecordMetaProperties record : records) { + HashMap insertRecord = new HashMap<>(); + + String skyflowId = record.getSkyflowId(); + insertRecord.put("skyflowId", skyflowId); + + /* + Getting unchecked cast warning, however, this type is inferred + from an exception trying to cast into another type. Therefore, + this type cast will not fail. + */ + LinkedTreeMap tokensMap = (LinkedTreeMap) record.getTokens(); + if (tokensMap != null) { + for (String key : tokensMap.keySet()) { + insertRecord.put(key, tokensMap.get(key)); + } + } + insertedFields.add(insertRecord); + } + } catch (Exception e) { + throw new SkyflowException(e); + } + } + + @Override + public String toString() { + StringBuilder response = new StringBuilder("{"); + response.append("\n\t\"insertedFields\": ").append(formatRecords(insertedFields)); + response.append("\n\t\"errors\": ").append(formatRecords(errorFields)); + response.append("\n}"); + return response.toString(); + } + + private String formatRecords(ArrayList> records) { + StringBuilder sb = new StringBuilder("["); + for (int index = 0; index < records.size(); index++) { + HashMap map = records.get(index); + sb.append("{"); + for (String key : map.keySet()) { + sb.append("\n\t\"").append(key).append("\": \"").append(map.get(key)).append("\","); + } + sb.append("\n}"); + if (index != records.size() - 1) { + sb.append(", "); + } + } + return toIndentedString(sb.append("]")); + } + + private String toIndentedString(Object o) { + return o.toString().replace("\n", "\n\t"); + } } diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java index 82dd417b..445b7aeb 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java @@ -51,8 +51,8 @@ private void createSuccessResponse(List records) { @Override public String toString() { StringBuilder response = new StringBuilder("{"); - response.append("\n\t").append("\"detokenizedFields\": ").append(toIndentedString(detokenizedFields)).append("\""); - response.append("\n\t").append("\"errors\": \"").append(toIndentedString(errorRecords)).append("\""); + response.append("\n\t").append("\"detokenizedFields\": ").append(toIndentedString(detokenizedFields)); + response.append("\n\t").append("\"errors\": \"").append(toIndentedString(errorRecords)); response.append("\n}"); return response.toString(); } From 96ab82c20b0a5cc21fc48c5b8811bb02fb9f3270 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 9 Oct 2024 17:13:51 +0530 Subject: [PATCH 16/68] SK-1703 Worked on feedback for Detokenize public interfaces --- .../vault/controller/VaultController.java | 29 ++++++++++++--- .../tokens/DetokenizeRecordResponse.java | 33 +++++++---------- .../vault/tokens/DetokenizeResponse.java | 35 ++----------------- 3 files changed, 40 insertions(+), 57 deletions(-) diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index 80f25082..26bb2691 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -6,18 +6,19 @@ import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.ApiException; import com.skyflow.generated.rest.auth.HttpBearerAuth; -import com.skyflow.generated.rest.models.RecordServiceInsertRecordBody; -import com.skyflow.generated.rest.models.V1DetokenizePayload; -import com.skyflow.generated.rest.models.V1DetokenizeResponse; -import com.skyflow.generated.rest.models.V1InsertRecordResponse; +import com.skyflow.generated.rest.models.*; import com.skyflow.serviceaccount.util.Token; import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.InsertResponse; +import com.skyflow.vault.tokens.DetokenizeRecordResponse; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.DetokenizeResponse; +import java.util.ArrayList; +import java.util.List; + public final class VaultController extends VaultClient { private DetectController detectController; private AuditController auditController; @@ -48,15 +49,33 @@ public InsertResponse insert(InsertRequest insertRequest) throws SkyflowExceptio public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) throws SkyflowException { V1DetokenizeResponse result = null; + ArrayList detokenizedFields = new ArrayList<>(); + ArrayList errorRecords = new ArrayList<>(); try { Validations.validateDetokenizeRequest(detokenizeRequest); setBearerToken(); V1DetokenizePayload payload = super.getDetokenizePayload(detokenizeRequest); result = super.getTokensApi().recordServiceDetokenize(super.getVaultConfig().getVaultId(), payload); + List records = result.getRecords(); + if (records != null) { + for (V1DetokenizeRecordResponse record : records) { + DetokenizeRecordResponse recordResponse = new DetokenizeRecordResponse(record); + if (record.getError() != null) { + errorRecords.add(recordResponse); + } else { + detokenizedFields.add(recordResponse); + } + } + } } catch (ApiException e) { throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } - return new DetokenizeResponse(result); + + if (!errorRecords.isEmpty()){ + // handle partial case, throw error and send data in error + // or simply log as a partial success and return proper response + } + return new DetokenizeResponse(detokenizedFields, errorRecords); } public Object get(Object getRequest) { diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java index a2cbce51..2fb1d42f 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java @@ -1,43 +1,36 @@ package com.skyflow.vault.tokens; +import com.skyflow.generated.rest.models.V1DetokenizeRecordResponse; + public class DetokenizeRecordResponse { - private String token; - private String value; - private String type; - private String error; + private final String token; + private final String value; + private final String type; + private final String error; - public String getError() { - return error; + public DetokenizeRecordResponse(V1DetokenizeRecordResponse record) { + this.token = record.getToken(); + this.value = record.getValue(); + this.type = record.getValueType().getValue(); + this.error = record.getError(); } - void setError(String error) { - this.error = error; + public String getError() { + return error; } public String getToken() { return token; } - void setToken(String token) { - this.token = token; - } - public String getValue() { return value; } - void setValue(String value) { - this.value = value; - } - public String getType() { return type; } - void setType(String type) { - this.type = type; - } - @Override public String toString() { StringBuilder response = new StringBuilder("{"); diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java index 445b7aeb..beb51700 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java @@ -1,21 +1,14 @@ package com.skyflow.vault.tokens; -import com.skyflow.generated.rest.models.V1DetokenizeRecordResponse; -import com.skyflow.generated.rest.models.V1DetokenizeResponse; - import java.util.ArrayList; -import java.util.List; public class DetokenizeResponse { - private final V1DetokenizeResponse generatedResponse; private final ArrayList detokenizedFields; private final ArrayList errorRecords; - public DetokenizeResponse(V1DetokenizeResponse response) { - this.generatedResponse = response; - this.detokenizedFields = new ArrayList<>(); - this.errorRecords = new ArrayList<>(); - this.createResponse(); + public DetokenizeResponse(ArrayList detokenizedFields, ArrayList errorRecords) { + this.detokenizedFields = detokenizedFields; + this.errorRecords = errorRecords; } public ArrayList getDetokenizedFields() { @@ -26,28 +19,6 @@ public ArrayList getErrors() { return errorRecords; } - private void createResponse() { - List records = this.generatedResponse.getRecords(); - if (records != null) { - createSuccessResponse(records); - } - } - - private void createSuccessResponse(List records) { - for (V1DetokenizeRecordResponse record : records) { - DetokenizeRecordResponse recordResponse = new DetokenizeRecordResponse(); - recordResponse.setToken(record.getToken()); - if (record.getError() != null) { - recordResponse.setError(record.getError()); - this.errorRecords.add(recordResponse); - } else { - recordResponse.setValue(record.getValue()); - recordResponse.setType(record.getValueType().getValue()); - this.detokenizedFields.add(recordResponse); - } - } - } - @Override public String toString() { StringBuilder response = new StringBuilder("{"); From 864159ee5cffa8601fa3d265e5fd3f414092c053 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 9 Oct 2024 18:06:02 +0530 Subject: [PATCH 17/68] SK-1701 Worked on feedback for Insert public interfaces --- v2/src/main/java/com/skyflow/VaultClient.java | 13 ++- .../vault/controller/VaultController.java | 32 +++++++- .../skyflow/vault/data/InsertResponse.java | 79 ++++++++++--------- 3 files changed, 84 insertions(+), 40 deletions(-) diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index d6b2018e..76271b2c 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -3,6 +3,7 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.api.QueryApi; import com.skyflow.generated.rest.api.RecordsApi; import com.skyflow.generated.rest.api.TokensApi; import com.skyflow.generated.rest.models.RecordServiceInsertRecordBody; @@ -21,6 +22,7 @@ public class VaultClient { private final RecordsApi recordsApi; private final TokensApi tokensApi; + private final QueryApi queryApi; private final ApiClient apiClient; private final VaultConfig vaultConfig; private Credentials commonCredentials; @@ -31,8 +33,9 @@ protected VaultClient(VaultConfig vaultConfig, Credentials credentials) { this.vaultConfig = vaultConfig; this.commonCredentials = credentials; this.apiClient = new ApiClient(); - this.tokensApi = new TokensApi(this.apiClient); this.recordsApi = new RecordsApi(this.apiClient); + this.tokensApi = new TokensApi(this.apiClient); + this.queryApi = new QueryApi(this.apiClient); updateVaultURL(); prioritiseCredentials(); } @@ -49,6 +52,10 @@ protected TokensApi getTokensApi() { return tokensApi; } + protected QueryApi getQueryApi() { + return queryApi; + } + protected ApiClient getApiClient() { return apiClient; } @@ -92,7 +99,9 @@ protected RecordServiceInsertRecordBody getInsertRequestBody(InsertRequest reque for (int index = 0; index < values.size(); index++) { V1FieldRecords record = new V1FieldRecords(); record.setFields(values.get(index)); - record.setTokens(tokens.get(index)); + if (tokens != null) { + record.setTokens(tokens.get(index)); + } records.add(record); } insertRecordBody.setRecords(records); diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index 26bb2691..b494c6d2 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -1,5 +1,6 @@ package com.skyflow.vault.controller; +import com.google.gson.internal.LinkedTreeMap; import com.skyflow.VaultClient; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; @@ -17,6 +18,7 @@ import com.skyflow.vault.tokens.DetokenizeResponse; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; public final class VaultController extends VaultClient { @@ -32,19 +34,47 @@ public VaultController(VaultConfig vaultConfig, Credentials credentials) { this.binLookupController = null; this.detectController = null; } + + private static synchronized HashMap getFormattedInsertRecord(V1RecordMetaProperties record) { + HashMap insertRecord = new HashMap<>(); + String skyflowId = record.getSkyflowId(); + insertRecord.put("skyflowId", skyflowId); + + /* + Getting unchecked cast warning, however, this type is inferred + from an exception trying to cast into another type. Therefore, + this type cast will not fail. + */ + LinkedTreeMap tokensMap = (LinkedTreeMap) record.getTokens(); + if (tokensMap != null) { + for (String key : tokensMap.keySet()) { + insertRecord.put(key, tokensMap.get(key)); + } + } + return insertRecord; + } public InsertResponse insert(InsertRequest insertRequest) throws SkyflowException { V1InsertRecordResponse result = null; + ArrayList> insertedFields = new ArrayList<>(); + ArrayList> errorFields = new ArrayList<>(); try { Validations.validateInsertRequest(insertRequest); setBearerToken(); RecordServiceInsertRecordBody insertBody = super.getInsertRequestBody(insertRequest); result = super.getRecordsApi().recordServiceInsertRecord( super.getVaultConfig().getVaultId(), insertRequest.getTable(), insertBody); + List records = result.getRecords(); + if (records != null) { + for (V1RecordMetaProperties record : records) { + HashMap insertRecord = getFormattedInsertRecord(record); + insertedFields.add(insertRecord); + } + } } catch (ApiException e) { throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } - return new InsertResponse(result); + return new InsertResponse(insertedFields, errorFields); } public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) throws SkyflowException { diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java index 6f9ef81b..908ca8a1 100644 --- a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java @@ -10,17 +10,22 @@ import java.util.List; public class InsertResponse { - private final V1InsertRecordResponse generatedResponse; +// private final V1InsertRecordResponse generatedResponse; private final ArrayList> insertedFields; private final ArrayList> errorFields; - public InsertResponse(V1InsertRecordResponse response) throws SkyflowException { - this.generatedResponse = response; - this.insertedFields = new ArrayList<>(); - this.errorFields = new ArrayList<>(); - this.createResponse(); + public InsertResponse(ArrayList> insertedFields, ArrayList> errorFields) { + this.insertedFields = insertedFields; + this.errorFields = errorFields; } +// public InsertResponse(V1InsertRecordResponse response) throws SkyflowException { +// this.generatedResponse = response; +// this.insertedFields = new ArrayList<>(); +// this.errorFields = new ArrayList<>(); +// this.createResponse(); +// } + public ArrayList> getInsertedFields() { return insertedFields; } @@ -29,38 +34,38 @@ public ArrayList> getErrorFields() { return errorFields; } - private void createResponse() throws SkyflowException { - List records = this.generatedResponse.getRecords(); - if (records != null && !records.isEmpty()) { - createSuccessResponse(records); - } - } - - private void createSuccessResponse(List records) throws SkyflowException { - try { - for (V1RecordMetaProperties record : records) { - HashMap insertRecord = new HashMap<>(); +// private void createResponse() throws SkyflowException { +// List records = this.generatedResponse.getRecords(); +// if (records != null && !records.isEmpty()) { +// createSuccessResponse(records); +// } +// } - String skyflowId = record.getSkyflowId(); - insertRecord.put("skyflowId", skyflowId); - - /* - Getting unchecked cast warning, however, this type is inferred - from an exception trying to cast into another type. Therefore, - this type cast will not fail. - */ - LinkedTreeMap tokensMap = (LinkedTreeMap) record.getTokens(); - if (tokensMap != null) { - for (String key : tokensMap.keySet()) { - insertRecord.put(key, tokensMap.get(key)); - } - } - insertedFields.add(insertRecord); - } - } catch (Exception e) { - throw new SkyflowException(e); - } - } +// private void createSuccessResponse(List records) throws SkyflowException { +// try { +// for (V1RecordMetaProperties record : records) { +// HashMap insertRecord = new HashMap<>(); +// +// String skyflowId = record.getSkyflowId(); +// insertRecord.put("skyflowId", skyflowId); +// +// /* +// Getting unchecked cast warning, however, this type is inferred +// from an exception trying to cast into another type. Therefore, +// this type cast will not fail. +// */ +// LinkedTreeMap tokensMap = (LinkedTreeMap) record.getTokens(); +// if (tokensMap != null) { +// for (String key : tokensMap.keySet()) { +// insertRecord.put(key, tokensMap.get(key)); +// } +// } +// insertedFields.add(insertRecord); +// } +// } catch (Exception e) { +// throw new SkyflowException(e); +// } +// } @Override public String toString() { From 4aabe84b0e6f56934e87a8d6127c7e34143960da Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 9 Oct 2024 20:45:45 +0530 Subject: [PATCH 18/68] SK-1702 Implement public interfaces for Get vault API --- .../java/com/skyflow/utils/Constants.java | 1 + .../utils/validations/Validations.java | 4 + .../vault/controller/VaultController.java | 63 ++++++- .../com/skyflow/vault/data/GetRequest.java | 156 ++++++++++++++++++ .../com/skyflow/vault/data/GetResponse.java | 51 ++++++ 5 files changed, 271 insertions(+), 4 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/vault/data/GetRequest.java create mode 100644 v2/src/main/java/com/skyflow/vault/data/GetResponse.java diff --git a/v2/src/main/java/com/skyflow/utils/Constants.java b/v2/src/main/java/com/skyflow/utils/Constants.java index 563b5ca5..a88dc63b 100644 --- a/v2/src/main/java/com/skyflow/utils/Constants.java +++ b/v2/src/main/java/com/skyflow/utils/Constants.java @@ -10,4 +10,5 @@ public final class Constants { public static final String PKCS8_PRIVATE_FOOTER = "-----END PRIVATE KEY-----"; public static final String GRANT_TYPE = "urn:ietf:params:oauth:grant-type:jwt-bearer"; public static final String SIGNED_DATA_TOKEN_PREFIX = "signed_token_"; + public static final String ORDER_ASCENDING = "ASCENDING"; } diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 7f17798c..02833790 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -4,6 +4,7 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.data.GetRequest; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.tokens.DetokenizeRequest; @@ -36,4 +37,7 @@ public static void validateDetokenizeRequest(DetokenizeRequest detokenizeRequest public static void validateInsertRequest(InsertRequest insertRequest) throws SkyflowException { } + + public static void validateGetRequest(GetRequest getRequest) throws SkyflowException { + } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index b494c6d2..1b212bf9 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -4,6 +4,7 @@ import com.skyflow.VaultClient; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; +import com.skyflow.enums.RedactionType; import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.ApiException; import com.skyflow.generated.rest.auth.HttpBearerAuth; @@ -11,6 +12,8 @@ import com.skyflow.serviceaccount.util.Token; import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; +import com.skyflow.vault.data.GetRequest; +import com.skyflow.vault.data.GetResponse; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.InsertResponse; import com.skyflow.vault.tokens.DetokenizeRecordResponse; @@ -34,7 +37,7 @@ public VaultController(VaultConfig vaultConfig, Credentials credentials) { this.binLookupController = null; this.detectController = null; } - + private static synchronized HashMap getFormattedInsertRecord(V1RecordMetaProperties record) { HashMap insertRecord = new HashMap<>(); String skyflowId = record.getSkyflowId(); @@ -54,6 +57,28 @@ private static synchronized HashMap getFormattedInsertRecord(V1R return insertRecord; } + private static synchronized HashMap getFormattedGetRecord(V1FieldRecords record) { + HashMap getRecord = new HashMap<>(); + + /* + Getting unchecked cast warning, however, this type is inferred + from an exception trying to cast into another type. Therefore, + this type cast will not fail. + */ + LinkedTreeMap map = null; + if (record.getTokens() != null) { + map = (LinkedTreeMap) record.getTokens(); + } else { + map = (LinkedTreeMap) record.getFields(); + } + if (map != null) { + for (String key : map.keySet()) { + getRecord.put(key, map.get(key)); + } + } + return getRecord; + } + public InsertResponse insert(InsertRequest insertRequest) throws SkyflowException { V1InsertRecordResponse result = null; ArrayList> insertedFields = new ArrayList<>(); @@ -101,15 +126,45 @@ public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) throws throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } - if (!errorRecords.isEmpty()){ + if (!errorRecords.isEmpty()) { // handle partial case, throw error and send data in error // or simply log as a partial success and return proper response } return new DetokenizeResponse(detokenizedFields, errorRecords); } - public Object get(Object getRequest) { - return null; + public GetResponse get(GetRequest getRequest) throws SkyflowException { + V1BulkGetRecordResponse result = null; + ArrayList> data = new ArrayList<>(); + ArrayList> errors = new ArrayList<>(); + try { + Validations.validateGetRequest(getRequest); + setBearerToken(); + RedactionType redactionType = getRequest.getRedactionType(); + result = super.getRecordsApi().recordServiceBulkGetRecord( + super.getVaultConfig().getVaultId(), + getRequest.getTable(), + getRequest.getIds(), + redactionType != null ? redactionType.toString() : null, + getRequest.getTokenization(), + getRequest.getFields(), + getRequest.getOffset(), + getRequest.getLimit(), + getRequest.getDownloadURL(), + getRequest.getColumnName(), + getRequest.getColumnValues(), + getRequest.getOrderBy() + ); + List records = result.getRecords(); + if (records != null) { + for (V1FieldRecords record : records) { + data.add(getFormattedGetRecord(record)); + } + } + } catch (ApiException e) { + throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); + } + return new GetResponse(data, errors); } public Object update(Object updateRequest) { diff --git a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java new file mode 100644 index 00000000..c7666d40 --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java @@ -0,0 +1,156 @@ +package com.skyflow.vault.data; + +import com.skyflow.enums.RedactionType; +import com.skyflow.utils.Constants; + +import java.util.ArrayList; +import java.util.List; + +public class GetRequest { + private final String table; + private final ArrayList ids; + private final RedactionType redactionType; + private final Boolean tokenization; + private final List fields; + private final String offset; + private final String limit; + private final Boolean downloadURL; + private final String columnName; + private final ArrayList columnValues; + private final String orderBy; + + private GetRequest(GetRequestBuilder builder) { + this.table = builder.table; + this.ids = builder.ids; + this.redactionType = builder.redactionType; + this.tokenization = builder.tokenization; + this.fields = builder.fields; + this.offset = builder.offset; + this.limit = builder.limit; + this.downloadURL = builder.downloadURL; + this.columnName = builder.columnName; + this.columnValues = builder.columnValues; + this.orderBy = builder.orderBy; + } + + public static GetRequestBuilder builder() { + return new GetRequestBuilder(); + } + + public String getTable() { + return table; + } + + public ArrayList getIds() { + return ids; + } + + public RedactionType getRedactionType() { + return redactionType; + } + + public Boolean getTokenization() { + return tokenization; + } + + public List getFields() { + return fields; + } + + public String getOffset() { + return offset; + } + + public String getLimit() { + return limit; + } + + public Boolean getDownloadURL() { + return downloadURL; + } + + public String getColumnName() { + return columnName; + } + + public ArrayList getColumnValues() { + return columnValues; + } + + public String getOrderBy() { + return orderBy; + } + + public static class GetRequestBuilder { + private String table; + private ArrayList ids; + private RedactionType redactionType = RedactionType.PLAIN_TEXT; + private Boolean tokenization = false; + private List fields; + private String offset = null; + private String limit = null; + private Boolean downloadURL = true; + private String columnName; + private ArrayList columnValues; + private String orderBy = Constants.ORDER_ASCENDING; + + public GetRequestBuilder table(String table) { + this.table = table; + return this; + } + + public GetRequestBuilder ids(ArrayList ids) { + this.ids = ids; + return this; + } + + public GetRequestBuilder redactionType(RedactionType redactionType) { + this.redactionType = redactionType; + return this; + } + + public GetRequestBuilder tokenization(Boolean tokenization) { + this.tokenization = tokenization; + return this; + } + + public GetRequestBuilder fields(List fields) { + this.fields = fields; + return this; + } + + public GetRequestBuilder offset(String offset) { + this.offset = offset; + return this; + } + + public GetRequestBuilder limit(String limit) { + this.limit = limit; + return this; + } + + public GetRequestBuilder downloadURL(Boolean downloadURL) { + this.downloadURL = downloadURL; + return this; + } + + public GetRequestBuilder columnName(String columnName) { + this.columnName = columnName; + return this; + } + + public GetRequestBuilder columnValues(ArrayList columnValues) { + this.columnValues = columnValues; + return this; + } + + public GetRequestBuilder orderBy(String orderBy) { + this.orderBy = orderBy; + return this; + } + + public GetRequest build() { + return new GetRequest(this); + } + } +} diff --git a/v2/src/main/java/com/skyflow/vault/data/GetResponse.java b/v2/src/main/java/com/skyflow/vault/data/GetResponse.java new file mode 100644 index 00000000..14ad518c --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/data/GetResponse.java @@ -0,0 +1,51 @@ +package com.skyflow.vault.data; + +import java.util.ArrayList; +import java.util.HashMap; + +public class GetResponse { + private final ArrayList> data; + private final ArrayList> errors; + + public GetResponse(ArrayList> data, ArrayList> errors) { + this.data = data; + this.errors = errors; + } + + public ArrayList> getData() { + return data; + } + + public ArrayList> getErrors() { + return errors; + } + + @Override + public String toString() { + StringBuilder response = new StringBuilder("{"); + response.append("\n\t\"data\": ").append(formatRecords(data)); + response.append("\n\t\"errors\": ").append(formatRecords(errors)); + response.append("\n}"); + return response.toString(); + } + + private String formatRecords(ArrayList> records) { + StringBuilder sb = new StringBuilder("["); + for (int index = 0; index < records.size(); index++) { + HashMap map = records.get(index); + sb.append("{"); + for (String key : map.keySet()) { + sb.append("\n\t\"").append(key).append("\": \"").append(map.get(key)).append("\","); + } + sb.append("\n}"); + if (index != records.size() - 1) { + sb.append(", "); + } + } + return toIndentedString(sb.append("]")); + } + + private String toIndentedString(Object o) { + return o.toString().replace("\n", "\n\t"); + } +} From 3246b376fdb7d31ce3578693db8c14a12091e5ee Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Thu, 10 Oct 2024 19:47:33 +0530 Subject: [PATCH 19/68] SK-1678 Replaced use of JSONObject with Gson JsonObject SK-1703 Abstracted constructor for Detokenize Request Builder --- .../serviceaccount/util/BearerToken.java | 39 +++++++++---------- .../vault/tokens/DetokenizeRequest.java | 3 +- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java b/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java index 6d15fef1..39c7733d 100644 --- a/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java @@ -1,5 +1,8 @@ package com.skyflow.serviceaccount.util; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.ApiClient; import com.skyflow.generated.rest.ApiException; @@ -10,13 +13,10 @@ import com.skyflow.utils.Utils; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileReader; -import java.io.IOException; import java.net.MalformedURLException; import java.security.PrivateKey; import java.util.ArrayList; @@ -45,19 +45,18 @@ public static BearerTokenBuilder builder() { } private static V1GetAuthTokenResponse generateBearerTokenFromCredentials( - File credentialsPath, String context, ArrayList roles + File credentialsFile, String context, ArrayList roles ) throws SkyflowException { - JSONParser parser = new JSONParser(); try { - if (credentialsPath == null || !credentialsPath.isFile()) { - throw new SkyflowException("credentials string cannot bt empty"); + if (credentialsFile == null || !credentialsFile.isFile()) { + throw new SkyflowException("credentials file is not a valid file."); } - Object obj = parser.parse(new FileReader(String.valueOf(credentialsPath))); - JSONObject serviceAccountCredentials = (JSONObject) obj; + FileReader reader = new FileReader(String.valueOf(credentialsFile)); + JsonObject serviceAccountCredentials = JsonParser.parseReader(reader).getAsJsonObject(); return getBearerTokenFromCredentials(serviceAccountCredentials, context, roles); - } catch (ParseException e) { + } catch (JsonSyntaxException e) { throw new SkyflowException("credentials string is not in valid json string format"); - } catch (IOException e) { + } catch (FileNotFoundException e) { throw new RuntimeException(e); } } @@ -65,39 +64,37 @@ private static V1GetAuthTokenResponse generateBearerTokenFromCredentials( private static V1GetAuthTokenResponse generateBearerTokenFromCredentialString( String credentials, String context, ArrayList roles ) throws SkyflowException { - JSONParser parser = new JSONParser(); try { if (credentials == null || credentials.isEmpty()) { throw new SkyflowException("credentials string cannot bt empty"); } - Object obj = parser.parse(credentials); - JSONObject serviceAccountCredentials = (JSONObject) obj; + JsonObject serviceAccountCredentials = JsonParser.parseString(credentials).getAsJsonObject(); return getBearerTokenFromCredentials(serviceAccountCredentials, context, roles); - } catch (ParseException e) { + } catch (JsonSyntaxException e) { throw new SkyflowException("credentials string is not in valid json string format"); } } private static V1GetAuthTokenResponse getBearerTokenFromCredentials( - JSONObject credentials, String context, ArrayList roles + JsonObject credentials, String context, ArrayList roles ) throws SkyflowException { try { - String privateKey = (String) credentials.get("privateKey"); + String privateKey = credentials.get("privateKey").getAsString(); if (privateKey == null) { throw new SkyflowException("privateKey not found"); } - String clientID = (String) credentials.get("clientID"); + String clientID = credentials.get("clientID").getAsString(); if (clientID == null) { throw new SkyflowException("clientID not found"); } - String keyID = (String) credentials.get("keyID"); + String keyID = credentials.get("keyID").getAsString(); if (keyID == null) { throw new SkyflowException("keyID not found"); } - String tokenURI = (String) credentials.get("tokenURI"); + String tokenURI = credentials.get("tokenURI").getAsString(); if (tokenURI == null) { throw new SkyflowException("tokenURI not found"); } diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java index 24dd4e2d..5dac7b3a 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java @@ -32,8 +32,7 @@ public static final class DetokenizeRequestBuilder { private RedactionType redactionType; private Boolean continueOnError; - public DetokenizeRequestBuilder() { - this.tokens = new ArrayList<>(); + private DetokenizeRequestBuilder() { this.redactionType = RedactionType.PLAIN_TEXT; this.continueOnError = true; } From 382877b1cc132b784c86f6a26f2592524e085509 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Thu, 10 Oct 2024 21:33:16 +0530 Subject: [PATCH 20/68] SK-1664 Implement vault API public interfaces - SK-1701 Modified insert public interfaces - SK-1702 Modified get public interfaces - SK-1704 Implemented update public interfaces --- v2/src/main/java/com/skyflow/Skyflow.java | 4 +- v2/src/main/java/com/skyflow/VaultClient.java | 25 +++-- .../java/com/skyflow/config/VaultConfig.java | 10 +- .../com/skyflow/enums/{ENV.java => Env.java} | 2 +- .../com/skyflow/errors/SkyflowException.java | 23 +++-- v2/src/main/java/com/skyflow/utils/Utils.java | 4 +- .../utils/validations/Validations.java | 4 + .../vault/controller/VaultController.java | 72 ++++++++++---- .../com/skyflow/vault/data/GetRequest.java | 19 ++-- .../com/skyflow/vault/data/GetResponse.java | 14 +-- .../com/skyflow/vault/data/InsertRequest.java | 25 +++-- .../skyflow/vault/data/InsertResponse.java | 16 +-- .../com/skyflow/vault/data/UpdateRequest.java | 99 +++++++++++++++++++ .../skyflow/vault/data/UpdateResponse.java | 44 +++++++++ 14 files changed, 283 insertions(+), 78 deletions(-) rename v2/src/main/java/com/skyflow/enums/{ENV.java => Env.java} (80%) create mode 100644 v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java create mode 100644 v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index 7a0e45aa..6c08644e 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -3,7 +3,7 @@ import com.skyflow.config.ConnectionConfig; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; -import com.skyflow.enums.ENV; +import com.skyflow.enums.Env; import com.skyflow.enums.LogLevel; import com.skyflow.errors.SkyflowException; import com.skyflow.vault.controller.ConnectionController; @@ -199,7 +199,7 @@ private VaultConfig findAndUpdateVaultConfig(VaultConfig vaultConfig) { if (previousConfig == null) { // display error log, throw error, or both } else { - ENV env = vaultConfig.getEnv() != null ? vaultConfig.getEnv() : previousConfig.getEnv(); + Env env = vaultConfig.getEnv() != null ? vaultConfig.getEnv() : previousConfig.getEnv(); String clusterId = vaultConfig.getClusterId() != null ? vaultConfig.getClusterId() : previousConfig.getClusterId(); Credentials credentials = vaultConfig.getCredentials() != null ? vaultConfig.getCredentials() : previousConfig.getCredentials(); previousConfig.setEnv(env); diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index 76271b2c..7114b6c9 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -6,12 +6,10 @@ import com.skyflow.generated.rest.api.QueryApi; import com.skyflow.generated.rest.api.RecordsApi; import com.skyflow.generated.rest.api.TokensApi; -import com.skyflow.generated.rest.models.RecordServiceInsertRecordBody; -import com.skyflow.generated.rest.models.V1DetokenizePayload; -import com.skyflow.generated.rest.models.V1DetokenizeRecordRequest; -import com.skyflow.generated.rest.models.V1FieldRecords; +import com.skyflow.generated.rest.models.*; import com.skyflow.utils.Utils; import com.skyflow.vault.data.InsertRequest; +import com.skyflow.vault.data.UpdateRequest; import com.skyflow.vault.tokens.DetokenizeRequest; import io.github.cdimascio.dotenv.Dotenv; @@ -93,8 +91,8 @@ protected RecordServiceInsertRecordBody getInsertRequestBody(InsertRequest reque insertRecordBody.setUpsert(request.getUpsert()); insertRecordBody.setByot(request.getTokenStrict().getBYOT()); - List> values = request.getValues(); - List> tokens = request.getTokens(); + List> values = request.getValues(); + List> tokens = request.getTokens(); List records = new ArrayList<>(); for (int index = 0; index < values.size(); index++) { V1FieldRecords record = new V1FieldRecords(); @@ -108,6 +106,21 @@ protected RecordServiceInsertRecordBody getInsertRequestBody(InsertRequest reque return insertRecordBody; } + protected RecordServiceUpdateRecordBody getUpdateRequestBody(UpdateRequest request) { + RecordServiceUpdateRecordBody updateRequestBody = new RecordServiceUpdateRecordBody(); + updateRequestBody.byot(request.getByot().getBYOT()); + updateRequestBody.setTokenization(request.getReturnTokens()); + HashMap values = request.getValues(); + HashMap tokens = request.getTokens(); + V1FieldRecords record = new V1FieldRecords(); + record.setFields(values); + if (tokens != null) { + record.setTokens(tokens); + } + updateRequestBody.setRecord(record); + return updateRequestBody; + } + private void updateVaultURL() { String vaultURL = Utils.getVaultURL(this.vaultConfig.getClusterId(), this.vaultConfig.getEnv()); this.apiClient.setBasePath(vaultURL); diff --git a/v2/src/main/java/com/skyflow/config/VaultConfig.java b/v2/src/main/java/com/skyflow/config/VaultConfig.java index 49bfa5e2..624d7d9a 100644 --- a/v2/src/main/java/com/skyflow/config/VaultConfig.java +++ b/v2/src/main/java/com/skyflow/config/VaultConfig.java @@ -1,18 +1,18 @@ package com.skyflow.config; -import com.skyflow.enums.ENV; +import com.skyflow.enums.Env; import com.skyflow.utils.Utils; public class VaultConfig { private String vaultId; private String clusterId; - private ENV env; + private Env env; private Credentials credentials; public VaultConfig() { this.vaultId = null; this.clusterId = null; - this.env = ENV.PROD; + this.env = Env.PROD; this.credentials = null; } @@ -32,11 +32,11 @@ public void setClusterId(String clusterId) { this.clusterId = clusterId; } - public ENV getEnv() { + public Env getEnv() { return env; } - public void setEnv(ENV env) { + public void setEnv(Env env) { this.env = env; } diff --git a/v2/src/main/java/com/skyflow/enums/ENV.java b/v2/src/main/java/com/skyflow/enums/Env.java similarity index 80% rename from v2/src/main/java/com/skyflow/enums/ENV.java rename to v2/src/main/java/com/skyflow/enums/Env.java index 17c3e985..3d1466e9 100644 --- a/v2/src/main/java/com/skyflow/enums/ENV.java +++ b/v2/src/main/java/com/skyflow/enums/Env.java @@ -1,6 +1,6 @@ package com.skyflow.enums; -public enum ENV { +public enum Env { DEV, STAGE, SANDBOX, diff --git a/v2/src/main/java/com/skyflow/errors/SkyflowException.java b/v2/src/main/java/com/skyflow/errors/SkyflowException.java index 52b4d8ef..20f70fb8 100644 --- a/v2/src/main/java/com/skyflow/errors/SkyflowException.java +++ b/v2/src/main/java/com/skyflow/errors/SkyflowException.java @@ -1,9 +1,9 @@ package com.skyflow.errors; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; import java.util.List; import java.util.Map; @@ -12,8 +12,8 @@ public class SkyflowException extends Exception { private String requestId; private int code; private String message; - private JSONArray details; - private JSONObject responseBody; + private JsonArray details; + private JsonObject responseBody; public SkyflowException() { } @@ -46,12 +46,11 @@ public SkyflowException(int code, Throwable cause, Map> res private void setResponseBody(String responseBody) { try { if (responseBody != null) { - JSONParser parser = new JSONParser(); - this.responseBody = (JSONObject) parser.parse(responseBody); + this.responseBody = JsonParser.parseString(responseBody).getAsJsonObject(); setMessage(); setDetails(); } - } catch (ParseException e) { + } catch (JsonSyntaxException e) { throw new RuntimeException(e); } } @@ -68,11 +67,11 @@ private void setRequestId(Map> responseHeaders) { } private void setMessage() { - this.message = (String) (((JSONObject) responseBody.get("error")).get("message")); + this.message = ((JsonObject) responseBody.get("error")).get("message").getAsString(); } private void setDetails() { - this.details = (JSONArray) (((JSONObject) responseBody.get("error")).get("details")); + this.details = ((JsonObject) responseBody.get("error")).get("details").getAsJsonArray(); } public int getCode() { @@ -92,7 +91,7 @@ public String toString() { ); } - public JSONArray getDetails() { + public JsonArray getDetails() { return details; } } diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/v2/src/main/java/com/skyflow/utils/Utils.java index 740e78e1..51115bb0 100644 --- a/v2/src/main/java/com/skyflow/utils/Utils.java +++ b/v2/src/main/java/com/skyflow/utils/Utils.java @@ -1,7 +1,7 @@ package com.skyflow.utils; import com.skyflow.config.Credentials; -import com.skyflow.enums.ENV; +import com.skyflow.enums.Env; import com.skyflow.errors.SkyflowException; import com.skyflow.serviceaccount.util.BearerToken; import org.apache.commons.codec.binary.Base64; @@ -16,7 +16,7 @@ import java.security.spec.PKCS8EncodedKeySpec; public final class Utils { - public static String getVaultURL(String clusterId, ENV env) { + public static String getVaultURL(String clusterId, Env env) { StringBuilder sb = new StringBuilder(Constants.SECURE_PROTOCOL); sb.append(clusterId); switch (env) { diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 02833790..665e4ec5 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -6,6 +6,7 @@ import com.skyflow.errors.SkyflowException; import com.skyflow.vault.data.GetRequest; import com.skyflow.vault.data.InsertRequest; +import com.skyflow.vault.data.UpdateRequest; import com.skyflow.vault.tokens.DetokenizeRequest; // Add config and request validations @@ -40,4 +41,7 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky public static void validateGetRequest(GetRequest getRequest) throws SkyflowException { } + + public static void validateUpdateRequest(UpdateRequest updateRequest) throws SkyflowException { + } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index 1b212bf9..bb1711ef 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -12,10 +12,7 @@ import com.skyflow.serviceaccount.util.Token; import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; -import com.skyflow.vault.data.GetRequest; -import com.skyflow.vault.data.GetResponse; -import com.skyflow.vault.data.InsertRequest; -import com.skyflow.vault.data.InsertResponse; +import com.skyflow.vault.data.*; import com.skyflow.vault.tokens.DetokenizeRecordResponse; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.DetokenizeResponse; @@ -38,8 +35,8 @@ public VaultController(VaultConfig vaultConfig, Credentials credentials) { this.detectController = null; } - private static synchronized HashMap getFormattedInsertRecord(V1RecordMetaProperties record) { - HashMap insertRecord = new HashMap<>(); + private static synchronized HashMap getFormattedInsertRecord(V1RecordMetaProperties record) { + HashMap insertRecord = new HashMap<>(); String skyflowId = record.getSkyflowId(); insertRecord.put("skyflowId", skyflowId); @@ -48,7 +45,7 @@ private static synchronized HashMap getFormattedInsertRecord(V1R from an exception trying to cast into another type. Therefore, this type cast will not fail. */ - LinkedTreeMap tokensMap = (LinkedTreeMap) record.getTokens(); + LinkedTreeMap tokensMap = (LinkedTreeMap) record.getTokens(); if (tokensMap != null) { for (String key : tokensMap.keySet()) { insertRecord.put(key, tokensMap.get(key)); @@ -57,19 +54,19 @@ private static synchronized HashMap getFormattedInsertRecord(V1R return insertRecord; } - private static synchronized HashMap getFormattedGetRecord(V1FieldRecords record) { - HashMap getRecord = new HashMap<>(); + private static synchronized HashMap getFormattedGetRecord(V1FieldRecords record) { + HashMap getRecord = new HashMap<>(); /* Getting unchecked cast warning, however, this type is inferred from an exception trying to cast into another type. Therefore, this type cast will not fail. */ - LinkedTreeMap map = null; + LinkedTreeMap map; if (record.getTokens() != null) { - map = (LinkedTreeMap) record.getTokens(); + map = (LinkedTreeMap) record.getTokens(); } else { - map = (LinkedTreeMap) record.getFields(); + map = (LinkedTreeMap) record.getFields(); } if (map != null) { for (String key : map.keySet()) { @@ -79,10 +76,29 @@ private static synchronized HashMap getFormattedGetRecord(V1Fiel return getRecord; } + private static HashMap getFormattedUpdateRecord(V1UpdateRecordResponse record) { + HashMap updateTokens = new HashMap<>(); + /* + Getting unchecked cast warning, however, this type is inferred + from an exception trying to cast into another type. Therefore, + this type cast will not fail. + */ + LinkedTreeMap map = null; + if (record.getTokens() != null) { + map = (LinkedTreeMap) record.getTokens(); + } + if (map != null) { + for (String key : map.keySet()) { + updateTokens.put(key, map.get(key)); + } + } + return updateTokens; + } + public InsertResponse insert(InsertRequest insertRequest) throws SkyflowException { V1InsertRecordResponse result = null; - ArrayList> insertedFields = new ArrayList<>(); - ArrayList> errorFields = new ArrayList<>(); + ArrayList> insertedFields = new ArrayList<>(); + ArrayList> errorFields = new ArrayList<>(); try { Validations.validateInsertRequest(insertRequest); setBearerToken(); @@ -92,7 +108,7 @@ public InsertResponse insert(InsertRequest insertRequest) throws SkyflowExceptio List records = result.getRecords(); if (records != null) { for (V1RecordMetaProperties record : records) { - HashMap insertRecord = getFormattedInsertRecord(record); + HashMap insertRecord = getFormattedInsertRecord(record); insertedFields.add(insertRecord); } } @@ -135,8 +151,8 @@ public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) throws public GetResponse get(GetRequest getRequest) throws SkyflowException { V1BulkGetRecordResponse result = null; - ArrayList> data = new ArrayList<>(); - ArrayList> errors = new ArrayList<>(); + ArrayList> data = new ArrayList<>(); + ArrayList> errors = new ArrayList<>(); try { Validations.validateGetRequest(getRequest); setBearerToken(); @@ -167,8 +183,26 @@ public GetResponse get(GetRequest getRequest) throws SkyflowException { return new GetResponse(data, errors); } - public Object update(Object updateRequest) { - return null; + public UpdateResponse update(UpdateRequest updateRequest) throws SkyflowException { + V1UpdateRecordResponse result; + String skyflowId; + HashMap tokensMap; + try { + Validations.validateUpdateRequest(updateRequest); + setBearerToken(); + RecordServiceUpdateRecordBody updateBody = super.getUpdateRequestBody(updateRequest); + result = super.getRecordsApi().recordServiceUpdateRecord( + super.getVaultConfig().getVaultId(), + updateRequest.getTable(), + updateRequest.getId(), + updateBody + ); + skyflowId = result.getSkyflowId(); + tokensMap = getFormattedUpdateRecord(result); + } catch (ApiException e) { + throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); + } + return new UpdateResponse(skyflowId, tokensMap); } public Object delete(Object deleteRequest) { diff --git a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java index c7666d40..862bfa03 100644 --- a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java @@ -84,15 +84,22 @@ public String getOrderBy() { public static class GetRequestBuilder { private String table; private ArrayList ids; - private RedactionType redactionType = RedactionType.PLAIN_TEXT; - private Boolean tokenization = false; + private RedactionType redactionType; + private Boolean tokenization; private List fields; - private String offset = null; - private String limit = null; - private Boolean downloadURL = true; + private String offset; + private String limit; + private Boolean downloadURL; private String columnName; private ArrayList columnValues; - private String orderBy = Constants.ORDER_ASCENDING; + private String orderBy; + + private GetRequestBuilder() { + this.redactionType = RedactionType.PLAIN_TEXT; + this.tokenization = false; + this.downloadURL = true; + this.orderBy = Constants.ORDER_ASCENDING; + } public GetRequestBuilder table(String table) { this.table = table; diff --git a/v2/src/main/java/com/skyflow/vault/data/GetResponse.java b/v2/src/main/java/com/skyflow/vault/data/GetResponse.java index 14ad518c..2d2a4b1d 100644 --- a/v2/src/main/java/com/skyflow/vault/data/GetResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/GetResponse.java @@ -4,19 +4,19 @@ import java.util.HashMap; public class GetResponse { - private final ArrayList> data; - private final ArrayList> errors; + private final ArrayList> data; + private final ArrayList> errors; - public GetResponse(ArrayList> data, ArrayList> errors) { + public GetResponse(ArrayList> data, ArrayList> errors) { this.data = data; this.errors = errors; } - public ArrayList> getData() { + public ArrayList> getData() { return data; } - public ArrayList> getErrors() { + public ArrayList> getErrors() { return errors; } @@ -29,10 +29,10 @@ public String toString() { return response.toString(); } - private String formatRecords(ArrayList> records) { + private String formatRecords(ArrayList> records) { StringBuilder sb = new StringBuilder("["); for (int index = 0; index < records.size(); index++) { - HashMap map = records.get(index); + HashMap map = records.get(index); sb.append("{"); for (String key : map.keySet()) { sb.append("\n\t\"").append(key).append("\": \"").append(map.get(key)).append("\","); diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java index fd95d23e..d7df9157 100644 --- a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java @@ -7,8 +7,8 @@ public class InsertRequest { private final String table; - private final ArrayList> values; - private final ArrayList> tokens; + private final ArrayList> values; + private final ArrayList> tokens; private final Boolean returnTokens; private final String upsert; private final Boolean homogeneous; @@ -34,11 +34,11 @@ public String getTable() { return table; } - public ArrayList> getValues() { + public ArrayList> getValues() { return this.values; } - public ArrayList> getTokens() { + public ArrayList> getTokens() { return this.tokens; } @@ -64,25 +64,30 @@ public Byot getTokenStrict() { public static final class InsertRequestBuilder { private String table; - private ArrayList> values; - private ArrayList> tokens; - private Boolean returnTokens = true; + private ArrayList> values; + private ArrayList> tokens; + private Boolean returnTokens; private String upsert; private Boolean homogeneous; private Boolean tokenMode; - private Byot tokenStrict = Byot.DISABLE; + private Byot tokenStrict; + + private InsertRequestBuilder() { + this.returnTokens = true; + this.tokenStrict = Byot.DISABLE; + } public InsertRequestBuilder table(String table) { this.table = table; return this; } - public InsertRequestBuilder values(ArrayList> values) { + public InsertRequestBuilder values(ArrayList> values) { this.values = values; return this; } - public InsertRequestBuilder tokens(ArrayList> tokens) { + public InsertRequestBuilder tokens(ArrayList> tokens) { this.tokens = tokens; return this; } diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java index 908ca8a1..f569e409 100644 --- a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java @@ -11,10 +11,10 @@ public class InsertResponse { // private final V1InsertRecordResponse generatedResponse; - private final ArrayList> insertedFields; - private final ArrayList> errorFields; + private final ArrayList> insertedFields; + private final ArrayList> errorFields; - public InsertResponse(ArrayList> insertedFields, ArrayList> errorFields) { + public InsertResponse(ArrayList> insertedFields, ArrayList> errorFields) { this.insertedFields = insertedFields; this.errorFields = errorFields; } @@ -26,11 +26,11 @@ public InsertResponse(ArrayList> insertedFields, ArrayLi // this.createResponse(); // } - public ArrayList> getInsertedFields() { + public ArrayList> getInsertedFields() { return insertedFields; } - public ArrayList> getErrorFields() { + public ArrayList> getErrorFields() { return errorFields; } @@ -44,7 +44,7 @@ public ArrayList> getErrorFields() { // private void createSuccessResponse(List records) throws SkyflowException { // try { // for (V1RecordMetaProperties record : records) { -// HashMap insertRecord = new HashMap<>(); +// HashMap insertRecord = new HashMap<>(); // // String skyflowId = record.getSkyflowId(); // insertRecord.put("skyflowId", skyflowId); @@ -76,10 +76,10 @@ public String toString() { return response.toString(); } - private String formatRecords(ArrayList> records) { + private String formatRecords(ArrayList> records) { StringBuilder sb = new StringBuilder("["); for (int index = 0; index < records.size(); index++) { - HashMap map = records.get(index); + HashMap map = records.get(index); sb.append("{"); for (String key : map.keySet()) { sb.append("\n\t\"").append(key).append("\": \"").append(map.get(key)).append("\","); diff --git a/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java b/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java new file mode 100644 index 00000000..55d64209 --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java @@ -0,0 +1,99 @@ +package com.skyflow.vault.data; + +import com.skyflow.enums.Byot; + +import java.util.HashMap; + +public class UpdateRequest { + private final String table; + private final String id; + private final Boolean returnTokens; + private final HashMap values; + private final HashMap tokens; + private final Byot tokenStrict; + + private UpdateRequest(UpdateRequestBuilder builder) { + this.table = builder.table; + this.id = builder.id; + this.returnTokens = builder.returnTokens; + this.values = builder.values; + this.tokens = builder.tokens; + this.tokenStrict = builder.tokenStrict; + } + + public static UpdateRequestBuilder builder() { + return new UpdateRequestBuilder(); + } + + public String getTable() { + return table; + } + + public String getId() { + return id; + } + + public Boolean getReturnTokens() { + return returnTokens; + } + + public HashMap getValues() { + return values; + } + + public HashMap getTokens() { + return tokens; + } + + public Byot getByot() { + return tokenStrict; + } + + public static class UpdateRequestBuilder { + private String table; + private String id; + private Boolean returnTokens; + private HashMap values; + private HashMap tokens; + private Byot tokenStrict; + + private UpdateRequestBuilder() { + this.returnTokens = true; + this.tokenStrict = Byot.DISABLE; + } + + public UpdateRequestBuilder table(String table) { + this.table = table; + return this; + } + + public UpdateRequestBuilder id(String id) { + this.id = id; + return this; + } + + public UpdateRequestBuilder returnTokens(Boolean returnTokens) { + this.returnTokens = returnTokens; + return this; + } + + public UpdateRequestBuilder values(HashMap values) { + this.values = values; + return this; + } + + public UpdateRequestBuilder tokens(HashMap tokens) { + this.tokens = tokens; + return this; + } + + public UpdateRequestBuilder tokenStrict(Byot tokenStrict) { + this.tokenStrict = tokenStrict; + return this; + } + + public UpdateRequest build() { + return new UpdateRequest(this); + } + } +} diff --git a/v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java b/v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java new file mode 100644 index 00000000..05ae30bd --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java @@ -0,0 +1,44 @@ +package com.skyflow.vault.data; + +import java.util.HashMap; + +public class UpdateResponse { + private String skyflowId; + private HashMap tokens; + + public UpdateResponse(String skyflowId, HashMap tokens) { + this.skyflowId = skyflowId; + this.tokens = tokens; + } + + public String getSkyflowId() { + return skyflowId; + } + + public HashMap getTokens() { + return tokens; + } + + @Override + public String toString() { + StringBuilder response = new StringBuilder("{"); + response.append("\n\t\"skyflowId\": ").append(skyflowId); + response.append("\n\t\"tokens\": ").append(formatRecords(tokens)); + response.append("\n}"); + return response.toString(); + } + + private String formatRecords(HashMap tokens) { + StringBuilder sb = new StringBuilder(); + sb.append("{"); + for (String key : tokens.keySet()) { + sb.append("\n\t\"").append(key).append("\": \"").append(tokens.get(key)).append("\","); + } + sb.append("\n}"); + return toIndentedString(sb); + } + + private String toIndentedString(Object o) { + return o.toString().replace("\n", "\n\t"); + } +} From 0ad69e425b1980b72d93a31d643287cf0ad56244 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 11 Oct 2024 16:44:43 +0530 Subject: [PATCH 21/68] SK-1707 Implement Delete API public interfaces --- .../utils/validations/Validations.java | 4 ++ .../vault/controller/VaultController.java | 20 ++++++-- .../com/skyflow/vault/data/DeleteRequest.java | 47 +++++++++++++++++++ .../skyflow/vault/data/DeleteResponse.java | 34 ++++++++++++++ 4 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java create mode 100644 v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 665e4ec5..5eb88b69 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -4,6 +4,7 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.data.DeleteRequest; import com.skyflow.vault.data.GetRequest; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.UpdateRequest; @@ -44,4 +45,7 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep public static void validateUpdateRequest(UpdateRequest updateRequest) throws SkyflowException { } + + public static void validateDeleteRequest(DeleteRequest deleteRequest) throws SkyflowException { + } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index bb1711ef..7d4168a3 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -76,7 +76,7 @@ private static synchronized HashMap getFormattedGetRecord(V1Fiel return getRecord; } - private static HashMap getFormattedUpdateRecord(V1UpdateRecordResponse record) { + private static synchronized HashMap getFormattedUpdateRecord(V1UpdateRecordResponse record) { HashMap updateTokens = new HashMap<>(); /* Getting unchecked cast warning, however, this type is inferred @@ -205,8 +205,22 @@ public UpdateResponse update(UpdateRequest updateRequest) throws SkyflowExceptio return new UpdateResponse(skyflowId, tokensMap); } - public Object delete(Object deleteRequest) { - return null; + public DeleteResponse delete(DeleteRequest deleteRequest) throws SkyflowException { + V1BulkDeleteRecordResponse result; + try { + Validations.validateDeleteRequest(deleteRequest); + setBearerToken(); + RecordServiceBulkDeleteRecordBody deleteBody = new RecordServiceBulkDeleteRecordBody(); + for (String id : deleteRequest.getIds()) { + deleteBody.addSkyflowIdsItem(id); + } + result = super.getRecordsApi().recordServiceBulkDeleteRecord( + super.getVaultConfig().getVaultId(), deleteRequest.getTable(), deleteBody); + System.out.println(result); + } catch (ApiException e) { + throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); + } + return new DeleteResponse((ArrayList) result.getRecordIDResponse()); } public Object uploadFile(Object uploadFileRequest) { diff --git a/v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java b/v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java new file mode 100644 index 00000000..0bd11df8 --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java @@ -0,0 +1,47 @@ +package com.skyflow.vault.data; + +import java.util.ArrayList; + +public class DeleteRequest { + private final String table; + private final ArrayList ids; + + private DeleteRequest(DeleteRequestBuilder builder) { + this.table = builder.table; + this.ids = builder.ids; + } + + public static DeleteRequestBuilder builder() { + return new DeleteRequestBuilder(); + } + + public String getTable() { + return table; + } + + public ArrayList getIds() { + return ids; + } + + public static class DeleteRequestBuilder { + private String table; + private ArrayList ids; + + private DeleteRequestBuilder() { + } + + public DeleteRequestBuilder table(String table) { + this.table = table; + return this; + } + + public DeleteRequestBuilder ids(ArrayList ids) { + this.ids = ids; + return this; + } + + public DeleteRequest build() { + return new DeleteRequest(this); + } + } +} diff --git a/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java b/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java new file mode 100644 index 00000000..975b6510 --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java @@ -0,0 +1,34 @@ +package com.skyflow.vault.data; + +import java.util.ArrayList; + +public class DeleteResponse { + private ArrayList deletedIds; + + public DeleteResponse(ArrayList deletedIds) { + this.deletedIds = deletedIds; + } + + public ArrayList getDeletedIds() { + return deletedIds; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("{"); + sb.append("\n\t\"deletedIds\": ").append(formatIds()); + return sb.append("\n}").toString(); + } + + private String formatIds() { + StringBuilder sb = new StringBuilder("["); + for (String id : deletedIds) { + sb.append("\n\t\"").append(id).append("\""); + } + return toIndentedString(sb.append("]")); + } + + private String toIndentedString(Object o) { + return o.toString().replace("\n", "\n\t"); + } +} From df0a13f262cd1b758390e060c47e6150940b1bed Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 11 Oct 2024 20:25:50 +0530 Subject: [PATCH 22/68] SK-1705 Implement Query API public interfaces --- .../utils/validations/Validations.java | 8 ++-- .../vault/controller/VaultController.java | 39 ++++++++++++++-- .../skyflow/vault/data/DeleteResponse.java | 6 +-- .../com/skyflow/vault/data/QueryRequest.java | 33 +++++++++++++ .../com/skyflow/vault/data/QueryResponse.java | 46 +++++++++++++++++++ 5 files changed, 122 insertions(+), 10 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/vault/data/QueryRequest.java create mode 100644 v2/src/main/java/com/skyflow/vault/data/QueryResponse.java diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 5eb88b69..b8d36fd8 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -4,10 +4,7 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.errors.SkyflowException; -import com.skyflow.vault.data.DeleteRequest; -import com.skyflow.vault.data.GetRequest; -import com.skyflow.vault.data.InsertRequest; -import com.skyflow.vault.data.UpdateRequest; +import com.skyflow.vault.data.*; import com.skyflow.vault.tokens.DetokenizeRequest; // Add config and request validations @@ -48,4 +45,7 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky public static void validateDeleteRequest(DeleteRequest deleteRequest) throws SkyflowException { } + + public static void validateQueryRequest(QueryRequest queryRequest) throws SkyflowException { + } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index 7d4168a3..aafc04fa 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -95,6 +95,25 @@ private static synchronized HashMap getFormattedUpdateRecord(V1U return updateTokens; } + private static synchronized HashMap getFormattedQueryRecord(V1FieldRecords record) { + HashMap queryRecord = new HashMap<>(); + /* + Getting unchecked cast warning, however, this type is inferred + from an exception trying to cast into another type. Therefore, + this type cast will not fail. + */ + LinkedTreeMap map = null; + if (record.getFields() != null) { + map = (LinkedTreeMap) record.getFields(); + } + if (map != null) { + for (String key : map.keySet()) { + queryRecord.put(key, map.get(key)); + } + } + return queryRecord; + } + public InsertResponse insert(InsertRequest insertRequest) throws SkyflowException { V1InsertRecordResponse result = null; ArrayList> insertedFields = new ArrayList<>(); @@ -216,7 +235,6 @@ public DeleteResponse delete(DeleteRequest deleteRequest) throws SkyflowExceptio } result = super.getRecordsApi().recordServiceBulkDeleteRecord( super.getVaultConfig().getVaultId(), deleteRequest.getTable(), deleteBody); - System.out.println(result); } catch (ApiException e) { throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } @@ -227,8 +245,23 @@ public Object uploadFile(Object uploadFileRequest) { return null; } - public Object query(Object queryRequest) { - return null; + public QueryResponse query(QueryRequest queryRequest) throws SkyflowException { + V1GetQueryResponse result; + ArrayList> fields = new ArrayList<>(); + try { + Validations.validateQueryRequest(queryRequest); + setBearerToken(); + result = super.getQueryApi().queryServiceExecuteQuery( + super.getVaultConfig().getVaultId(), new QueryServiceExecuteQueryBody().query(queryRequest.getQuery())); + if (result.getRecords() != null) { + for (V1FieldRecords record : result.getRecords()) { + fields.add(getFormattedQueryRecord(record)); + } + } + } catch (ApiException e) { + throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); + } + return new QueryResponse(fields); } public Object tokenize(Object tokenizeRequest) { diff --git a/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java b/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java index 975b6510..0024c68a 100644 --- a/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java @@ -15,9 +15,9 @@ public ArrayList getDeletedIds() { @Override public String toString() { - StringBuilder sb = new StringBuilder("{"); - sb.append("\n\t\"deletedIds\": ").append(formatIds()); - return sb.append("\n}").toString(); + StringBuilder response = new StringBuilder("{"); + response.append("\n\t\"deletedIds\": ").append(formatIds()); + return response.append("\n}").toString(); } private String formatIds() { diff --git a/v2/src/main/java/com/skyflow/vault/data/QueryRequest.java b/v2/src/main/java/com/skyflow/vault/data/QueryRequest.java new file mode 100644 index 00000000..58c0c54d --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/data/QueryRequest.java @@ -0,0 +1,33 @@ +package com.skyflow.vault.data; + +public class QueryRequest { + private final String query; + + private QueryRequest(QueryRequestBuilder builder) { + this.query = builder.query; + } + + public static QueryRequestBuilder builder() { + return new QueryRequestBuilder(); + } + + public String getQuery() { + return query; + } + + public static class QueryRequestBuilder { + private String query; + + private QueryRequestBuilder() { + } + + public QueryRequestBuilder query(String query) { + this.query = query; + return this; + } + + public QueryRequest build() { + return new QueryRequest(this); + } + } +} diff --git a/v2/src/main/java/com/skyflow/vault/data/QueryResponse.java b/v2/src/main/java/com/skyflow/vault/data/QueryResponse.java new file mode 100644 index 00000000..72d1e316 --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/data/QueryResponse.java @@ -0,0 +1,46 @@ +package com.skyflow.vault.data; + +import java.util.ArrayList; +import java.util.HashMap; + +public class QueryResponse { + private ArrayList> fields; + private ArrayList> tokenizedData; + + public QueryResponse(ArrayList> fields) { + this.fields = fields; + } + + public ArrayList> getFields() { + return fields; + } + + @Override + public String toString() { + StringBuilder response = new StringBuilder("{"); + response.append("\n\t\"fields\": ").append(formatFields()); + return response.append("\n}").toString(); + } + + private String formatFields() { + StringBuilder sb = new StringBuilder("["); + for (int index = 0; index < fields.size(); index++) { + HashMap map = fields.get(index); + sb.append("{"); + for (String key : map.keySet()) { + sb.append("\n\t\"").append(key).append("\": \"").append(map.get(key)).append("\","); + } + sb.append("\n\t\"tokenizedData\": ").append(tokenizedData); + sb.append("\n}"); + if (index != fields.size() - 1) { + sb.append(", "); + } + } + return toIndentedString(sb.append("]")); + } + + private String toIndentedString(Object o) { + return o.toString().replace("\n", "\n\t"); + } + +} From de7eddc93792d5cc18ec93398ac1d96d411b8c13 Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Tue, 15 Oct 2024 14:06:10 +0530 Subject: [PATCH 23/68] SK-1664 implement tokenize api public interface --- v2/src/main/java/com/skyflow/VaultClient.java | 13 +++++ .../java/com/skyflow/utils/ColumnValue.java | 52 +++++++++++++++++++ .../utils/validations/Validations.java | 5 ++ .../vault/controller/VaultController.java | 27 +++++++++- .../skyflow/vault/tokens/TokenizeRequest.java | 39 ++++++++++++++ .../vault/tokens/TokenizeResponse.java | 13 +++++ 6 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/utils/ColumnValue.java create mode 100644 v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java create mode 100644 v2/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index 7114b6c9..bff4a879 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -7,10 +7,12 @@ import com.skyflow.generated.rest.api.RecordsApi; import com.skyflow.generated.rest.api.TokensApi; import com.skyflow.generated.rest.models.*; +import com.skyflow.utils.ColumnValue; import com.skyflow.utils.Utils; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.UpdateRequest; import com.skyflow.vault.tokens.DetokenizeRequest; +import com.skyflow.vault.tokens.TokenizeRequest; import io.github.cdimascio.dotenv.Dotenv; import java.util.ArrayList; @@ -121,6 +123,17 @@ protected RecordServiceUpdateRecordBody getUpdateRequestBody(UpdateRequest reque return updateRequestBody; } + protected V1TokenizePayload getTokenizePayload(TokenizeRequest request) { + V1TokenizePayload payload = new V1TokenizePayload(); + for(ColumnValue columnValue: request.getColumnValues()) { + V1TokenizeRecordRequest recordRequest = new V1TokenizeRecordRequest(); + recordRequest.setValue(columnValue.getValue()); + recordRequest.setColumnGroup(columnValue.getColumnGroup()); + payload.addTokenizationParametersItem(recordRequest); + } + return payload; + } + private void updateVaultURL() { String vaultURL = Utils.getVaultURL(this.vaultConfig.getClusterId(), this.vaultConfig.getEnv()); this.apiClient.setBasePath(vaultURL); diff --git a/v2/src/main/java/com/skyflow/utils/ColumnValue.java b/v2/src/main/java/com/skyflow/utils/ColumnValue.java new file mode 100644 index 00000000..a7f416c9 --- /dev/null +++ b/v2/src/main/java/com/skyflow/utils/ColumnValue.java @@ -0,0 +1,52 @@ +package com.skyflow.utils; + +import com.skyflow.enums.RedactionType; +import com.skyflow.vault.tokens.DetokenizeRequest; + +import java.util.ArrayList; + +public class ColumnValue { + + private final ColumnValueBuilder builder; + + private ColumnValue(ColumnValueBuilder builder) { + this.builder = builder; + } + + public static ColumnValueBuilder builder() { + return new ColumnValueBuilder(); + } + + public String getValue() { + return this.builder.value; + } + + public String getColumnGroup() { + return this.builder.columnGroup; + } + + public static final class ColumnValueBuilder { + private String value; + private String columnGroup; + + public ColumnValueBuilder() { + this.value = ""; + this.columnGroup = ""; + } + + public ColumnValueBuilder value(String value) { + this.value = value; + return this; + } + + public ColumnValueBuilder columnGroup(String columnGroup) { + this.columnGroup = columnGroup; + return this; + } + + public ColumnValue build() { + return new ColumnValue(this); + } + } + +} diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index b8d36fd8..556e36f2 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -6,6 +6,7 @@ import com.skyflow.errors.SkyflowException; import com.skyflow.vault.data.*; import com.skyflow.vault.tokens.DetokenizeRequest; +import com.skyflow.vault.tokens.TokenizeRequest; // Add config and request validations public class Validations { @@ -48,4 +49,8 @@ public static void validateDeleteRequest(DeleteRequest deleteRequest) throws Sky public static void validateQueryRequest(QueryRequest queryRequest) throws SkyflowException { } + + public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) throws SkyflowException { + + } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index aafc04fa..f99939be 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -16,6 +16,11 @@ import com.skyflow.vault.tokens.DetokenizeRecordResponse; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.DetokenizeResponse; +import com.skyflow.vault.tokens.TokenizeRequest; +import com.skyflow.vault.tokens.TokenizeResponse; + +import java.util.ArrayList; +import java.util.List; import java.util.ArrayList; import java.util.HashMap; @@ -264,8 +269,26 @@ public QueryResponse query(QueryRequest queryRequest) throws SkyflowException { return new QueryResponse(fields); } - public Object tokenize(Object tokenizeRequest) { - return null; + public TokenizeResponse tokenize(TokenizeRequest tokenizeRequest) throws SkyflowException { + V1TokenizeResponse result = null; + List list = new ArrayList<>(); + try { + Validations.validateTokenizeRequest(tokenizeRequest); + setBearerToken(); + V1TokenizePayload payload = super.getTokenizePayload(tokenizeRequest); + result = super.getTokensApi().recordServiceTokenize(super.getVaultConfig().getVaultId(), payload); + if(result!=null && result.getRecords().size()>0) { + + for(V1TokenizeRecordResponse response : result.getRecords()) { + if(response.getToken()!=null) { + list.add(response.getToken()); + } + } + } + } catch (ApiException e) { + throw new SkyflowException(e.getResponseBody()); + } + return new TokenizeResponse(list); } public BinLookupController lookUpBin() { diff --git a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java new file mode 100644 index 00000000..7bfd8de0 --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java @@ -0,0 +1,39 @@ +package com.skyflow.vault.tokens; + +import com.skyflow.utils.ColumnValue; + +import java.util.ArrayList; +import java.util.List; + +public class TokenizeRequest { + private final TokenizeRequestBuilder builder; + + private TokenizeRequest(TokenizeRequest.TokenizeRequestBuilder builder) { + this.builder = builder; + } + + public static TokenizeRequestBuilder builder() { + return new TokenizeRequestBuilder(); + } + + public List getColumnValues() { + return this.builder.columnValues; + } + + public static final class TokenizeRequestBuilder { + private List columnValues; + + public TokenizeRequestBuilder() { + this.columnValues = new ArrayList<>(); + } + + public TokenizeRequestBuilder columnValues(List columnValues) { + this.columnValues = columnValues; + return this; + } + + public TokenizeRequest build() { + return new TokenizeRequest(this); + } + } +} diff --git a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java new file mode 100644 index 00000000..8f62631b --- /dev/null +++ b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java @@ -0,0 +1,13 @@ +package com.skyflow.vault.tokens; + +import java.util.List; + +public class TokenizeResponse { + + private List tokens; + + public TokenizeResponse(List tokens) { + this.tokens = tokens; + } + +} From d441a2872ade357b096e67bd866a909e04d97192 Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Tue, 15 Oct 2024 14:15:53 +0530 Subject: [PATCH 24/68] SK-1666 implement invoke connection public interface --- .../java/com/skyflow/ConnectionClient.java | 65 +++++++ v2/src/main/java/com/skyflow/Skyflow.java | 4 + .../com/skyflow/config/ConnectionConfig.java | 9 + .../java/com/skyflow/utils/HttpUtility.java | 180 ++++++++++++++++++ v2/src/main/java/com/skyflow/utils/Utils.java | 39 ++++ .../connection/InvokeConnectionRequest.java | 91 ++++++++- .../connection/InvokeConnectionResponse.java | 14 +- .../controller/ConnectionController.java | 79 +++++++- 8 files changed, 470 insertions(+), 11 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/ConnectionClient.java create mode 100644 v2/src/main/java/com/skyflow/utils/HttpUtility.java diff --git a/v2/src/main/java/com/skyflow/ConnectionClient.java b/v2/src/main/java/com/skyflow/ConnectionClient.java new file mode 100644 index 00000000..a42d3aa6 --- /dev/null +++ b/v2/src/main/java/com/skyflow/ConnectionClient.java @@ -0,0 +1,65 @@ +package com.skyflow; + +import com.skyflow.config.ConnectionConfig; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.api.RecordsApi; +import com.skyflow.generated.rest.api.TokensApi; +import io.github.cdimascio.dotenv.Dotenv; + +public class ConnectionClient { + + private final ConnectionConfig connectionConfig; + private Credentials commonCredentials; + private Credentials finalCredentials; + private final ApiClient apiClient; + + + protected ConnectionClient(ConnectionConfig connectionConfig, Credentials credentials) { + super(); + this.connectionConfig = connectionConfig; + this.commonCredentials = credentials; + this.apiClient = new ApiClient(); + prioritiseCredentials(); + } + + protected Credentials getFinalCredentials() { + return finalCredentials; + } + + protected ConnectionConfig getConnectionConfig() { + return connectionConfig; + } + + protected void setCommonCredentials(Credentials commonCredentials) { + this.commonCredentials = commonCredentials; + prioritiseCredentials(); + } + + protected ApiClient getApiClient() { + return apiClient; + } + + private void prioritiseCredentials() { + try { + if (this.connectionConfig.getCredentials() != null) { + this.finalCredentials = this.connectionConfig.getCredentials(); + } else if (this.commonCredentials != null) { + this.finalCredentials = this.commonCredentials; + } else { + Dotenv dotenv = Dotenv.load(); + String sysCredentials = dotenv.get("SKYFLOW_CREDENTIALS"); + if (sysCredentials == null) { + // throw error for not passing any credentials + } else { + this.finalCredentials = new Credentials(); + this.finalCredentials.setCredentialsString(sysCredentials); + } + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + +} diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index 6c08644e..c8bae6cc 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -100,6 +100,7 @@ public static final class SkyflowClientBuilder { private final LinkedHashMap connectionsMap; private final LinkedHashMap vaultClientsMap; private final LinkedHashMap vaultConfigMap; + private final LinkedHashMap connectionConfigMap; private Credentials skyflowCredentials; private LogLevel logLevel; @@ -107,6 +108,7 @@ public SkyflowClientBuilder() { this.vaultClientsMap = new LinkedHashMap<>(); this.vaultConfigMap = new LinkedHashMap<>(); this.connectionsMap = new LinkedHashMap<>(); + this.connectionConfigMap = new LinkedHashMap<>(); this.skyflowCredentials = null; this.logLevel = LogLevel.ERROR; } @@ -147,6 +149,7 @@ public SkyflowClientBuilder addConnectionConfig(ConnectionConfig connectionConfi if (this.connectionsMap.containsKey(connectionConfig.getConnectionId())) { // display error log, throw error, or both } else { + this.connectionConfigMap.put(connectionConfig.getConnectionId(), connectionConfig); ConnectionController controller = new ConnectionController(connectionConfig, this.skyflowCredentials); this.connectionsMap.put(connectionConfig.getConnectionId(), controller); } @@ -166,6 +169,7 @@ public SkyflowClientBuilder updateConnectionConfig(ConnectionConfig connectionCo public SkyflowClientBuilder removeConnectionConfig(String connectionId) { if (this.connectionsMap.containsKey(connectionId)) { this.connectionsMap.remove(connectionId); + this.connectionConfigMap.remove(connectionId); } else { // display error log, throw error, or both } diff --git a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java index 0c2c4320..3d431565 100644 --- a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java +++ b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java @@ -26,4 +26,13 @@ public void setConnectionUrl(String connectionUrl) { public void setCredentials(Credentials credentials) { this.credentials = credentials; } + + public String getConnectionUrl() { + return connectionUrl; + } + + public Credentials getCredentials() { + return credentials; + } + } diff --git a/v2/src/main/java/com/skyflow/utils/HttpUtility.java b/v2/src/main/java/com/skyflow/utils/HttpUtility.java new file mode 100644 index 00000000..93cbdd31 --- /dev/null +++ b/v2/src/main/java/com/skyflow/utils/HttpUtility.java @@ -0,0 +1,180 @@ +package com.skyflow.utils; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.skyflow.errors.SkyflowException; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +public final class HttpUtility { + + private static String requestID; + + public static String getRequestID() { + return requestID; + } + + private static final String LINE_FEED = "\r\n"; + + public static String sendRequest(String method, URL url, JsonObject params, Map headers) throws IOException, SkyflowException { + + HttpURLConnection connection = null; + BufferedReader in = null; + StringBuffer response = null; + String boundary = String.valueOf(System.currentTimeMillis()); + + try { + connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod(method); + connection.setRequestProperty("content-type", "application/json"); + connection.setRequestProperty("Accept", "*/*"); + + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) + connection.setRequestProperty(entry.getKey(), entry.getValue()); + + // append dynamic boundary if content-type is multipart/form-data + if (headers.containsKey("content-type")) { + if (headers.get("content-type") == "multipart/form-data") { + connection.setRequestProperty("content-type", "multipart/form-data; boundary=" + boundary); + } + } + } + if (params != null && params.size() > 0) { + connection.setDoOutput(true); + try (DataOutputStream wr = new DataOutputStream(connection.getOutputStream())) { + byte[] input = null; + String requestContentType = connection.getRequestProperty("content-type"); + + if (requestContentType.contains("application/x-www-form-urlencoded")) { + input = formatJsonToFormEncodedString(params).getBytes(StandardCharsets.UTF_8); + } else if (requestContentType.contains("multipart/form-data")) { + input = formatJsonToMultiPartFormDataString(params, boundary).getBytes(StandardCharsets.UTF_8); + }else { + input = params.toString().getBytes(StandardCharsets.UTF_8); + } + + wr.write(input, 0, input.length); + wr.flush(); + } + } + + int status = connection.getResponseCode(); + String requestID = connection.getHeaderField("x-request-id"); + HttpUtility.requestID = requestID; + + Reader streamReader; + if (status > 299) { + if (connection.getErrorStream() != null) + streamReader = new InputStreamReader(connection.getErrorStream()); + else { + String description = appendRequestId("replace with description", requestID); + throw new SkyflowException(description); + } + } else { + streamReader = new InputStreamReader(connection.getInputStream()); + } + + response = new StringBuffer(); + in = new BufferedReader(streamReader); + String inputLine; + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + + if (status > 299) { + String errorMsg = appendRequestIdToErrorObj(status, response.toString(), requestID); + throw new SkyflowException(errorMsg); + } + } finally { + if (in != null) { + in.close(); + } + if (connection != null) { + connection.disconnect(); + } + } + return response.toString(); + + } + + public static String formatJsonToFormEncodedString(JsonObject requestBody) { + StringBuilder formEncodeString = new StringBuilder(); + HashMap jsonMap = convertJsonToMap(requestBody, ""); + + for (Map.Entry currentEntry : jsonMap.entrySet()) + formEncodeString.append(makeFormEncodeKeyValuePair(currentEntry.getKey(), currentEntry.getValue())); + + return formEncodeString.substring(0, formEncodeString.length() - 1); + } + + public static String formatJsonToMultiPartFormDataString(JsonObject requestBody, String boundary) { + StringBuilder formEncodeString = new StringBuilder(); + HashMap jsonMap = convertJsonToMap(requestBody, ""); + + for (Map.Entry currentEntry : jsonMap.entrySet()) + formEncodeString.append(makeFormDataKeyValuePair(currentEntry.getKey(), currentEntry.getValue(), boundary)); + + formEncodeString.append(LINE_FEED); + formEncodeString.append("--").append(boundary).append("--").append(LINE_FEED); + + return formEncodeString.toString(); + } + + private static HashMap convertJsonToMap(JsonObject json, String rootKey) { + HashMap currentMap = new HashMap<>(); + for (Object key : json.keySet()) { + Object currentValue = json.get((String) key); + String currentKey = rootKey.length() != 0 ? rootKey + '[' + key.toString() + ']' : rootKey + key.toString(); + if (currentValue instanceof JsonObject) { + currentMap.putAll(convertJsonToMap((JsonObject) currentValue, currentKey)); + } else { + currentMap.put(currentKey, currentValue.toString()); + } + } + return currentMap; + } + + private static String makeFormDataKeyValuePair(String key, String value, String boundary) { + StringBuilder formDataTextField = new StringBuilder(); + formDataTextField.append("--").append(boundary).append(LINE_FEED); + formDataTextField.append("Content-Disposition: form-data; name=\"").append(key).append("\"").append(LINE_FEED); + formDataTextField.append(LINE_FEED); + formDataTextField.append(value).append(LINE_FEED); + + return formDataTextField.toString(); + } + + public static String appendRequestId(String message, String requestId) { + if (requestId != null && !requestId.isEmpty()) { + message = message + " - requestId: " + requestId; + } + return message; + } + + public static String appendRequestIdToErrorObj(int status, String error, String requestId) throws SkyflowException { + if (requestId != null && !requestId.isEmpty()) { + JsonObject errorObject = (JsonObject) new JsonParser().parse(error); + JsonObject tempError = (JsonObject) errorObject.get("error"); + if (tempError != null) { + String message = String.valueOf(tempError.get("message")); + message = message + " - requestId: " + requestId; + + tempError.addProperty("message", message); + errorObject.add("error", tempError); + } + error = errorObject.toString(); + } + return error; + } + + private static String makeFormEncodeKeyValuePair(String key, String value) { + return key + "=" + value + "&"; + } + +} diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/v2/src/main/java/com/skyflow/utils/Utils.java index 51115bb0..0937083f 100644 --- a/v2/src/main/java/com/skyflow/utils/Utils.java +++ b/v2/src/main/java/com/skyflow/utils/Utils.java @@ -1,9 +1,11 @@ package com.skyflow.utils; +import com.skyflow.config.ConnectionConfig; import com.skyflow.config.Credentials; import com.skyflow.enums.Env; import com.skyflow.errors.SkyflowException; import com.skyflow.serviceaccount.util.BearerToken; +import com.skyflow.vault.connection.InvokeConnectionRequest; import org.apache.commons.codec.binary.Base64; import java.io.File; @@ -14,6 +16,8 @@ import java.security.PrivateKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; +import java.util.HashMap; +import java.util.Map; public final class Utils { public static String getVaultURL(String clusterId, Env env) { @@ -97,4 +101,39 @@ private static PrivateKey parsePkcs8PrivateKey(byte[] pkcs8Bytes) throws Skyflow } return privateKey; } + + public static String constructConnectionURL(ConnectionConfig config, InvokeConnectionRequest invokeConnectionRequest) { + StringBuilder filledURL = new StringBuilder((String) config.getConnectionUrl()); + + if (invokeConnectionRequest.getPathParams() != null && !invokeConnectionRequest.getPathParams().isEmpty()) { + for (Map.Entry entry : invokeConnectionRequest.getPathParams().entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + filledURL = new StringBuilder(filledURL.toString().replace(String.format("{%s}", key), value)); + } + } + + if(invokeConnectionRequest.getQueryParams() != null && !invokeConnectionRequest.getQueryParams().isEmpty()) { + filledURL.append("?"); + for (Map.Entry entry : invokeConnectionRequest.getQueryParams().entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + filledURL.append(key).append("=").append(value).append("&"); + } + filledURL = new StringBuilder(filledURL.substring(0, filledURL.length() - 1)); + } + + return filledURL.toString(); + } + + public static Map constructConnectionHeadersMap(Map requestHeaders) { + Map headersMap = new HashMap<>(); + for (Map.Entry entry : requestHeaders.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + headersMap.put(key.toLowerCase(), value); + } + return headersMap; + } + } diff --git a/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java b/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java index 886e2166..a74b9adb 100644 --- a/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java +++ b/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java @@ -1,10 +1,95 @@ package com.skyflow.vault.connection; +import com.google.gson.JsonObject; +import com.skyflow.enums.RedactionType; +import com.skyflow.vault.tokens.DetokenizeRequest; +import com.skyflow.vault.tokens.TokenizeRequest; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + public class InvokeConnectionRequest { - // members - public InvokeConnectionRequest() { + private final InvokeConnectionRequestBuilder builder; + + private InvokeConnectionRequest(InvokeConnectionRequestBuilder builder) { + this.builder = builder; + } + + public static InvokeConnectionRequestBuilder builder() { + return new InvokeConnectionRequestBuilder(); + } + + public InvokeConnectionRequest getConnectionRequest() { + return new InvokeConnectionRequest(builder); + } + + public String getMethodName() { + return builder.methodName; + } + + public Map getPathParams() { + return builder.pathParams; + } + + public Map getQueryParams() { + return builder.queryParams; + } + + public Map getRequestHeaders() { + return builder.requestHeaders; + } + + public Object getRequestBody() { + return builder.requestBody; + } + + public static final class InvokeConnectionRequestBuilder{ + + private String methodName; + private Map pathParams; + private Map queryParams; + private Map requestHeaders; + private Object requestBody; + + public InvokeConnectionRequestBuilder() { + this.methodName = ""; + this.pathParams = new HashMap<>(); + this.queryParams = new HashMap<>(); + this.requestHeaders = new HashMap<>(); + this.requestBody = new Object(); + } + + public InvokeConnectionRequestBuilder methodName(String methodName) { + this.methodName = methodName; + return this; + } + + public InvokeConnectionRequestBuilder pathParams(Map pathParams) { + this.pathParams = pathParams; + return this; + } + + public InvokeConnectionRequestBuilder queryParams(Map queryParams) { + this.queryParams = queryParams; + return this; + } + + public InvokeConnectionRequestBuilder requestHeaders(Map requestHeaders) { + this.requestHeaders = requestHeaders; + return this; + } + + public InvokeConnectionRequestBuilder requestBody(Object requestBody) { + this.requestBody = requestBody; + return this; + } + + public InvokeConnectionRequest build() { + return new InvokeConnectionRequest(this); + } + } - // getters ans setters } diff --git a/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java b/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java index 4876cffd..d6c8fa17 100644 --- a/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java +++ b/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java @@ -1,10 +1,18 @@ package com.skyflow.vault.connection; +import com.google.gson.JsonObject; + public class InvokeConnectionResponse { - // members + private JsonObject response; - public InvokeConnectionResponse() { + public InvokeConnectionResponse(JsonObject response) { + this.response = response; } - // getters ans setters + @Override + public String toString() { + return "InvokeConnectionResponse{" + + "response=" + response + + '}'; + } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java index 3061ca3c..74e91d29 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java @@ -1,15 +1,35 @@ package com.skyflow.vault.controller; +import com.google.gson.Gson; +import com.google.gson.JsonParser; +import com.skyflow.ConnectionClient; import com.skyflow.config.ConnectionConfig; import com.skyflow.config.Credentials; +import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.auth.HttpBearerAuth; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.utils.HttpUtility; +import com.skyflow.utils.Utils; +import com.skyflow.utils.validations.Validations; import com.skyflow.vault.connection.InvokeConnectionRequest; import com.skyflow.vault.connection.InvokeConnectionResponse; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; -public class ConnectionController { +import java.net.URL; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class ConnectionController extends ConnectionClient { private ConnectionConfig connectionConfig; private Credentials commonCredentials; + private String token; + public ConnectionController(ConnectionConfig connectionConfig, Credentials credentials) { + super(connectionConfig, credentials); this.connectionConfig = connectionConfig; this.commonCredentials = credentials; } @@ -26,9 +46,58 @@ public void setConnectionConfig(ConnectionConfig connectionConfig) { this.connectionConfig = connectionConfig; } - // check in python interfaces - public InvokeConnectionResponse invoke(InvokeConnectionRequest invokeConnectionRequest) { - // invoke the connection - return null; + public InvokeConnectionResponse invoke(InvokeConnectionRequest invokeConnectionRequest) throws SkyflowException, IOException { + + InvokeConnectionResponse connectionResponse; + setBearerToken(); + String filledURL = Utils.constructConnectionURL(connectionConfig, invokeConnectionRequest); + Map headers = new HashMap<>(); + + if (invokeConnectionRequest.getRequestHeaders().containsKey("requestHeader")) { + headers = Utils.constructConnectionHeadersMap(invokeConnectionRequest.getRequestHeaders()); + } + if (!headers.containsKey("x-skyflow-authorization")) { + headers.put("x-skyflow-authorization", token); + } + + String requestMethod = invokeConnectionRequest.getMethodName(); + JsonObject requestBody = null; + Object requestBodyObject = invokeConnectionRequest.getRequestBody(); + + if(requestBodyObject!=null) { + try { + requestBody = (JsonObject) convertObjectToJson(requestBodyObject); + System.out.println("Converted requestBody to JsonObject: " + requestBody.toString()); + } catch (Exception e) { + System.out.println("Error while converting requestBody to JsonObject: " + e.getMessage()); + } + } + + String response = HttpUtility.sendRequest(requestMethod, new URL(filledURL), requestBody, headers); +// connectionResponse = (JsonObject) new JsonParser().parse(response); + connectionResponse = new InvokeConnectionResponse((JsonObject) new JsonParser().parse(response)); + return connectionResponse; + } + + private void setBearerToken() throws SkyflowException { + Validations.validateCredentials(super.getFinalCredentials()); + if (token == null || Token.isExpired(token)) { + token = Utils.generateBearerToken(super.getFinalCredentials()); + } + HttpBearerAuth Bearer = (HttpBearerAuth) super.getApiClient().getAuthentication("Bearer"); + Bearer.setBearerToken(token); + } + + private JsonObject convertObjectToJson(Object object) { + Gson gson = new Gson(); + JsonElement jsonElement = gson.toJsonTree(object); + + if (jsonElement.isJsonObject()) { + return jsonElement.getAsJsonObject(); + } else { + JsonObject wrapper = new JsonObject(); + wrapper.add("value", jsonElement); + return wrapper; + } } } From 5496e94d02fe36172dcf94455450dd046d7e3cb3 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 16 Oct 2024 18:15:58 +0530 Subject: [PATCH 25/68] SK-1701 Add continueOnError in insert vault API public interface --- v2/src/main/java/com/skyflow/VaultClient.java | 32 ++++++- .../vault/controller/VaultController.java | 83 ++++++++++++++----- .../com/skyflow/vault/data/InsertRequest.java | 23 ++++- .../com/skyflow/vault/data/UpdateRequest.java | 2 +- 4 files changed, 110 insertions(+), 30 deletions(-) diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index bff4a879..f465c2a4 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -86,7 +86,7 @@ protected V1DetokenizePayload getDetokenizePayload(DetokenizeRequest request) { return payload; } - protected RecordServiceInsertRecordBody getInsertRequestBody(InsertRequest request) { + protected RecordServiceInsertRecordBody getBulkInsertRequestBody(InsertRequest request) { RecordServiceInsertRecordBody insertRecordBody = new RecordServiceInsertRecordBody(); insertRecordBody.setTokenization(request.getReturnTokens()); insertRecordBody.setHomogeneous(request.getHomogeneous()); @@ -108,9 +108,35 @@ protected RecordServiceInsertRecordBody getInsertRequestBody(InsertRequest reque return insertRecordBody; } + protected RecordServiceBatchOperationBody getBatchInsertRequestBody(InsertRequest request) { + RecordServiceBatchOperationBody insertRequestBody = new RecordServiceBatchOperationBody(); + insertRequestBody.setContinueOnError(true); + insertRequestBody.setByot(request.getTokenStrict().getBYOT()); + + ArrayList> values = request.getValues(); + ArrayList> tokens = request.getTokens(); + List records = new ArrayList<>(); + + for (int index = 0; index < values.size(); index++) { + V1BatchRecord record = new V1BatchRecord(); + record.setMethod(BatchRecordMethod.POST); + record.setTableName(request.getTable()); + record.setUpsert(request.getUpsert()); + record.setTokenization(request.getReturnTokens()); + record.setFields(values.get(index)); + if (tokens != null) { + record.setTokens(tokens.get(index)); + } + records.add(record); + } + + insertRequestBody.setRecords(records); + return insertRequestBody; + } + protected RecordServiceUpdateRecordBody getUpdateRequestBody(UpdateRequest request) { RecordServiceUpdateRecordBody updateRequestBody = new RecordServiceUpdateRecordBody(); - updateRequestBody.byot(request.getByot().getBYOT()); + updateRequestBody.byot(request.getTokenStrict().getBYOT()); updateRequestBody.setTokenization(request.getReturnTokens()); HashMap values = request.getValues(); HashMap tokens = request.getTokens(); @@ -125,7 +151,7 @@ protected RecordServiceUpdateRecordBody getUpdateRequestBody(UpdateRequest reque protected V1TokenizePayload getTokenizePayload(TokenizeRequest request) { V1TokenizePayload payload = new V1TokenizePayload(); - for(ColumnValue columnValue: request.getColumnValues()) { + for (ColumnValue columnValue : request.getColumnValues()) { V1TokenizeRecordRequest recordRequest = new V1TokenizeRecordRequest(); recordRequest.setValue(columnValue.getValue()); recordRequest.setColumnGroup(columnValue.getColumnGroup()); diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index f99939be..69428bad 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -1,5 +1,6 @@ package com.skyflow.vault.controller; +import com.google.gson.*; import com.google.gson.internal.LinkedTreeMap; import com.skyflow.VaultClient; import com.skyflow.config.Credentials; @@ -13,18 +14,12 @@ import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; import com.skyflow.vault.data.*; -import com.skyflow.vault.tokens.DetokenizeRecordResponse; -import com.skyflow.vault.tokens.DetokenizeRequest; -import com.skyflow.vault.tokens.DetokenizeResponse; -import com.skyflow.vault.tokens.TokenizeRequest; -import com.skyflow.vault.tokens.TokenizeResponse; - -import java.util.ArrayList; -import java.util.List; +import com.skyflow.vault.tokens.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; public final class VaultController extends VaultClient { private DetectController detectController; @@ -40,7 +35,34 @@ public VaultController(VaultConfig vaultConfig, Credentials credentials) { this.detectController = null; } - private static synchronized HashMap getFormattedInsertRecord(V1RecordMetaProperties record) { + private static synchronized HashMap getFormattedBatchInsertRecord(Object record, int requestIndex) { + HashMap insertRecord = new HashMap<>(); + Gson gson = new Gson(); + String jsonString = gson.toJson(record); + JsonObject bodyObject = JsonParser.parseString(jsonString).getAsJsonObject().get("Body").getAsJsonObject(); + JsonArray records = bodyObject.getAsJsonArray("records"); + JsonPrimitive error = bodyObject.getAsJsonPrimitive("error"); + + if (records != null) { + for (JsonElement recordElement : records) { + JsonObject recordObject = recordElement.getAsJsonObject(); + insertRecord.put("skyflow_id", recordObject.get("skyflow_id").getAsString()); + + Map tokensMap = recordObject.get("tokens").getAsJsonObject().asMap(); + for (String key : tokensMap.keySet()) { + insertRecord.put(key, tokensMap.get(key)); + } + } + } + + if (error != null) { + insertRecord.put("error", error.getAsString()); + } + insertRecord.put("request_index", requestIndex); + return insertRecord; + } + + private static synchronized HashMap getFormattedBulkInsertRecord(V1RecordMetaProperties record) { HashMap insertRecord = new HashMap<>(); String skyflowId = record.getSkyflowId(); insertRecord.put("skyflowId", skyflowId); @@ -120,20 +142,37 @@ private static synchronized HashMap getFormattedQueryRecord(V1Fi } public InsertResponse insert(InsertRequest insertRequest) throws SkyflowException { - V1InsertRecordResponse result = null; + V1InsertRecordResponse bulkInsertResult = null; + V1BatchOperationResponse batchInsertResult = null; ArrayList> insertedFields = new ArrayList<>(); ArrayList> errorFields = new ArrayList<>(); + Boolean continueOnError = insertRequest.getContinueOnError(); try { Validations.validateInsertRequest(insertRequest); setBearerToken(); - RecordServiceInsertRecordBody insertBody = super.getInsertRequestBody(insertRequest); - result = super.getRecordsApi().recordServiceInsertRecord( - super.getVaultConfig().getVaultId(), insertRequest.getTable(), insertBody); - List records = result.getRecords(); - if (records != null) { - for (V1RecordMetaProperties record : records) { - HashMap insertRecord = getFormattedInsertRecord(record); - insertedFields.add(insertRecord); + if (continueOnError) { + RecordServiceBatchOperationBody insertBody = super.getBatchInsertRequestBody(insertRequest); + batchInsertResult = super.getRecordsApi().recordServiceBatchOperation(super.getVaultConfig().getVaultId(), insertBody); + List records = batchInsertResult.getResponses(); + for (int index = 0; index < records.size(); index++) { + Object record = records.get(index); + HashMap insertRecord = getFormattedBatchInsertRecord(record, index); + if (insertRecord.containsKey("skyflow_id")) { + insertedFields.add(insertRecord); + } else { + errorFields.add(insertRecord); + } + } + } else { + RecordServiceInsertRecordBody insertBody = super.getBulkInsertRequestBody(insertRequest); + bulkInsertResult = super.getRecordsApi().recordServiceInsertRecord( + super.getVaultConfig().getVaultId(), insertRequest.getTable(), insertBody); + List records = bulkInsertResult.getRecords(); + if (records != null) { + for (V1RecordMetaProperties record : records) { + HashMap insertRecord = getFormattedBulkInsertRecord(record); + insertedFields.add(insertRecord); + } } } } catch (ApiException e) { @@ -277,15 +316,15 @@ public TokenizeResponse tokenize(TokenizeRequest tokenizeRequest) throws Skyflow setBearerToken(); V1TokenizePayload payload = super.getTokenizePayload(tokenizeRequest); result = super.getTokensApi().recordServiceTokenize(super.getVaultConfig().getVaultId(), payload); - if(result!=null && result.getRecords().size()>0) { + if (result != null && result.getRecords().size() > 0) { - for(V1TokenizeRecordResponse response : result.getRecords()) { - if(response.getToken()!=null) { + for (V1TokenizeRecordResponse response : result.getRecords()) { + if (response.getToken() != null) { list.add(response.getToken()); } } } - } catch (ApiException e) { + } catch (ApiException e) { throw new SkyflowException(e.getResponseBody()); } return new TokenizeResponse(list); diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java index d7df9157..8cdc22bc 100644 --- a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java @@ -13,6 +13,7 @@ public class InsertRequest { private final String upsert; private final Boolean homogeneous; private final Boolean tokenMode; + private final Boolean continueOnError; private final Byot tokenStrict; private InsertRequest(InsertRequestBuilder builder) { @@ -23,6 +24,7 @@ private InsertRequest(InsertRequestBuilder builder) { this.upsert = builder.upsert; this.homogeneous = builder.homogeneous; this.tokenMode = builder.tokenMode; + this.continueOnError = builder.continueOnError; this.tokenStrict = builder.tokenStrict; } @@ -58,6 +60,10 @@ public Boolean getTokenMode() { return tokenMode; } + public Boolean getContinueOnError() { + return continueOnError; + } + public Byot getTokenStrict() { return tokenStrict; } @@ -70,10 +76,14 @@ public static final class InsertRequestBuilder { private String upsert; private Boolean homogeneous; private Boolean tokenMode; + private Boolean continueOnError; private Byot tokenStrict; private InsertRequestBuilder() { this.returnTokens = true; + this.homogeneous = true; + this.tokenMode = true; + this.continueOnError = false; this.tokenStrict = Byot.DISABLE; } @@ -93,7 +103,7 @@ public InsertRequestBuilder tokens(ArrayList> tokens) { } public InsertRequestBuilder returnTokens(Boolean returnTokens) { - this.returnTokens = returnTokens; + this.returnTokens = returnTokens == null || returnTokens; return this; } @@ -103,17 +113,22 @@ public InsertRequestBuilder upsert(String upsert) { } public InsertRequestBuilder homogeneous(Boolean homogeneous) { - this.homogeneous = homogeneous; + this.homogeneous = homogeneous == null || homogeneous; return this; } public InsertRequestBuilder tokenMode(Boolean tokenMode) { - this.tokenMode = tokenMode; + this.tokenMode = tokenMode == null || tokenMode; + return this; + } + + public InsertRequestBuilder continueOnError(Boolean continueOnError) { + this.continueOnError = continueOnError != null && continueOnError; return this; } public InsertRequestBuilder tokenStrict(Byot tokenStrict) { - this.tokenStrict = tokenStrict; + this.tokenStrict = tokenStrict == null ? Byot.DISABLE : tokenStrict; return this; } diff --git a/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java b/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java index 55d64209..7bda90dd 100644 --- a/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java @@ -45,7 +45,7 @@ public HashMap getTokens() { return tokens; } - public Byot getByot() { + public Byot getTokenStrict() { return tokenStrict; } From 19aa8ce494a1a73b5c128ca0b98c778d5bb1ed14 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 16 Oct 2024 19:28:44 +0530 Subject: [PATCH 26/68] SK-1681 Add validations --- .../com/skyflow/config/ConnectionConfig.java | 4 + .../utils/validations/Validations.java | 173 +++++++++++++++++- .../com/skyflow/vault/data/GetRequest.java | 8 +- 3 files changed, 175 insertions(+), 10 deletions(-) diff --git a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java index 0c2c4320..f0821de7 100644 --- a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java +++ b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java @@ -19,6 +19,10 @@ public void setConnectionId(String connectionId) { this.connectionId = connectionId; } + public String getConnectionUrl() { + return connectionUrl; + } + public void setConnectionUrl(String connectionUrl) { this.connectionUrl = connectionUrl; } diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 556e36f2..f24a8e82 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -3,20 +3,36 @@ import com.skyflow.config.ConnectionConfig; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Byot; +import com.skyflow.enums.RedactionType; import com.skyflow.errors.SkyflowException; import com.skyflow.vault.data.*; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.TokenizeRequest; -// Add config and request validations +import java.util.ArrayList; +import java.util.HashMap; + public class Validations { public static void validateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { - + String vaultId = vaultConfig.getVaultId(); + String clusterId = vaultConfig.getClusterId(); + if (vaultId == null || vaultId.trim().isEmpty()) { + throw new SkyflowException(); + } else if (clusterId == null || clusterId.trim().isEmpty()) { + throw new SkyflowException(); + } } public static void validateConnectionConfig(ConnectionConfig connectionConfig) throws SkyflowException { - + String connectionId = connectionConfig.getConnectionId(); + String connectionUrl = connectionConfig.getConnectionUrl(); + if (connectionId == null || connectionId.trim().isEmpty()) { + throw new SkyflowException(); + } else if (connectionUrl == null || connectionUrl.trim().isEmpty()) { + throw new SkyflowException(); + } } public static void validateCredentials(Credentials credentials) throws SkyflowException { @@ -26,15 +42,77 @@ public static void validateCredentials(Credentials credentials) throws SkyflowEx if (credentials.getToken() != null) nonNullMembers++; if (nonNullMembers != 1) { - throw new SkyflowException("only one of tokens, path, and credentialsString is allowed"); + throw new SkyflowException(); } } public static void validateDetokenizeRequest(DetokenizeRequest detokenizeRequest) throws SkyflowException { - + ArrayList tokens = detokenizeRequest.getTokens(); + RedactionType redactionType = detokenizeRequest.getRedactionType(); + Boolean continueOnError = detokenizeRequest.getContinueOnError(); + if (tokens == null || tokens.isEmpty()) { + throw new SkyflowException(); + } else if (continueOnError == null) { + throw new SkyflowException(); + } else if (redactionType == null) { + throw new SkyflowException(); + } else { + for (String token : tokens) { + if (token == null || token.trim().isEmpty()) { + throw new SkyflowException(); + } + } + } } public static void validateInsertRequest(InsertRequest insertRequest) throws SkyflowException { + String table = insertRequest.getTable(); + ArrayList> values = insertRequest.getValues(); + ArrayList> tokens = insertRequest.getTokens(); + Boolean returnTokens = insertRequest.getReturnTokens(); + String upsert = insertRequest.getUpsert(); + Boolean homogeneous = insertRequest.getHomogeneous(); + Boolean tokenMode = insertRequest.getTokenMode(); + Byot tokenStrict = insertRequest.getTokenStrict(); + + if (table == null || table.trim().isEmpty()) { + throw new SkyflowException(); + } else if (values == null || values.isEmpty()) { + throw new SkyflowException(); + } else if (upsert != null && upsert.trim().isEmpty()) { + throw new SkyflowException(); + } else if (homogeneous != null && homogeneous) { + throw new SkyflowException(); + } + + for (HashMap valuesMap : values) { + for (String key : valuesMap.keySet()) { + if (key == null || key.trim().isEmpty()) { + throw new SkyflowException(); + } else { + Object value = valuesMap.get(key); + if (value == null || value.toString().trim().isEmpty()) { + throw new SkyflowException(); + } + } + } + } + + switch (tokenStrict) { + case DISABLE: + if (tokens != null) { + throw new SkyflowException(); + } + case ENABLE: + if (tokens == null) { + throw new SkyflowException(); + } + case ENABLE_STRICT: + if (tokens.size() != values.size()) { + throw new SkyflowException(); + } + } + validateTokensForInsertRequest(tokens, values); } @@ -42,15 +120,98 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep } public static void validateUpdateRequest(UpdateRequest updateRequest) throws SkyflowException { + String table = updateRequest.getTable(); + String skyflowId = updateRequest.getId(); + Boolean returnTokens = updateRequest.getReturnTokens(); + HashMap values = updateRequest.getValues(); + HashMap tokens = updateRequest.getTokens(); + + if (table == null || table.trim().isEmpty()) { + throw new SkyflowException(); + } else if (skyflowId == null || skyflowId.trim().isEmpty()) { + throw new SkyflowException(); + } else if (returnTokens == null) { + throw new SkyflowException(); + } else if (values == null || values.isEmpty()) { + throw new SkyflowException(); + } else if (tokens == null || tokens.isEmpty()) { + throw new SkyflowException(); + } + + for (String key : values.keySet()) { + if (key == null || key.trim().isEmpty()) { + throw new SkyflowException(); + } else { + Object value = values.get(key); + if (value == null || value.toString().trim().isEmpty()) { + throw new SkyflowException(); + } + } + } + + for (String key : tokens.keySet()) { + if (key == null || key.trim().isEmpty()) { + throw new SkyflowException(); + } else { + Object value = tokens.get(key); + if (value == null || value.toString().trim().isEmpty()) { + throw new SkyflowException(); + } + } + } } public static void validateDeleteRequest(DeleteRequest deleteRequest) throws SkyflowException { + String table = deleteRequest.getTable(); + ArrayList ids = deleteRequest.getIds(); + if (table == null || table.trim().isEmpty()) { + throw new SkyflowException(); + } else if (ids == null || ids.isEmpty()) { + throw new SkyflowException(); + } else { + for (String id : ids) { + if (id.trim().isEmpty()) { + throw new SkyflowException(); + } + } + } } public static void validateQueryRequest(QueryRequest queryRequest) throws SkyflowException { + String query = queryRequest.getQuery(); + if (query == null || query.trim().isEmpty()) { + throw new SkyflowException(); + } } - + public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) throws SkyflowException { } + + private static void validateTokensForInsertRequest( + ArrayList> tokens, + ArrayList> values + ) throws SkyflowException { + if (tokens.isEmpty()) { + throw new SkyflowException(); + } + + for (int index = 0; index < tokens.size(); index++) { + HashMap tokensMap = tokens.get(index); + HashMap valuesMap = values.get(index); + + for (String key : tokensMap.keySet()) { + if (key == null || key.trim().isEmpty()) { + throw new SkyflowException(); + } else if (!valuesMap.containsKey(key)) { + throw new SkyflowException(); + } else { + Object value = tokensMap.get(key); + if (value == null || value.toString().trim().isEmpty()) { + throw new SkyflowException(); + } + } + } + } + } } diff --git a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java index 862bfa03..38a62f50 100644 --- a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java @@ -112,12 +112,12 @@ public GetRequestBuilder ids(ArrayList ids) { } public GetRequestBuilder redactionType(RedactionType redactionType) { - this.redactionType = redactionType; + this.redactionType = redactionType == null ? RedactionType.PLAIN_TEXT : redactionType; return this; } public GetRequestBuilder tokenization(Boolean tokenization) { - this.tokenization = tokenization; + this.tokenization = tokenization != null && tokenization; return this; } @@ -137,7 +137,7 @@ public GetRequestBuilder limit(String limit) { } public GetRequestBuilder downloadURL(Boolean downloadURL) { - this.downloadURL = downloadURL; + this.downloadURL = downloadURL == null || downloadURL; return this; } @@ -152,7 +152,7 @@ public GetRequestBuilder columnValues(ArrayList columnValues) { } public GetRequestBuilder orderBy(String orderBy) { - this.orderBy = orderBy; + this.orderBy = orderBy == null ? Constants.ORDER_ASCENDING : orderBy; return this; } From 9e0442070552843079c3c4009cfb61c27d46a2be Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Thu, 17 Oct 2024 16:16:03 +0530 Subject: [PATCH 27/68] SK-1681 add validations for tokenize request --- .../skyflow/utils/validations/Validations.java | 17 ++++++++++++++++- .../skyflow/vault/tokens/TokenizeRequest.java | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index f24a8e82..24d2e701 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -6,12 +6,14 @@ import com.skyflow.enums.Byot; import com.skyflow.enums.RedactionType; import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.ColumnValue; import com.skyflow.vault.data.*; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.TokenizeRequest; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; public class Validations { @@ -184,8 +186,21 @@ public static void validateQueryRequest(QueryRequest queryRequest) throws Skyflo } } - public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) throws SkyflowException { + public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) throws SkyflowException { + List columnValues = tokenizeRequest.getColumnValues(); + if(columnValues == null || columnValues.isEmpty()) { + throw new SkyflowException(); + } else { + for(ColumnValue value : columnValues) { + if (value.getValue() == null || value.getValue().isEmpty() ) { + throw new SkyflowException(); + } + else if(value.getColumnGroup() == null || value.getColumnGroup().isEmpty()) { + throw new SkyflowException(); + } + } + } } private static void validateTokensForInsertRequest( diff --git a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java index 7bfd8de0..92918814 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java @@ -27,7 +27,7 @@ public TokenizeRequestBuilder() { this.columnValues = new ArrayList<>(); } - public TokenizeRequestBuilder columnValues(List columnValues) { + public TokenizeRequestBuilder values(List columnValues) { this.columnValues = columnValues; return this; } From c4ad6c5ca8571ddfab5b07b6b37f56628a2f76b4 Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Fri, 18 Oct 2024 15:04:56 +0530 Subject: [PATCH 28/68] SK-1666 validations for invoke connection request --- .../java/com/skyflow/enums/RequestMethod.java | 22 ++++++++ v2/src/main/java/com/skyflow/utils/Utils.java | 2 +- .../utils/validations/Validations.java | 36 +++++++++++++ .../controller/ConnectionController.java | 50 ++++++++++--------- .../skyflow/vault/tokens/TokenizeRequest.java | 2 +- 5 files changed, 87 insertions(+), 25 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/enums/RequestMethod.java diff --git a/v2/src/main/java/com/skyflow/enums/RequestMethod.java b/v2/src/main/java/com/skyflow/enums/RequestMethod.java new file mode 100644 index 00000000..ffa3d949 --- /dev/null +++ b/v2/src/main/java/com/skyflow/enums/RequestMethod.java @@ -0,0 +1,22 @@ +package com.skyflow.enums; + +public enum RequestMethod { + GET("GET"), + POST("POST"), + PUT("PUT"), + PATCH("PATCH"), + DELETE("DELETE"), + ; + + private final String requestMethod; + + + RequestMethod(String requestMethod) { + this.requestMethod = requestMethod; + } + + @Override + public String toString() { + return requestMethod; + } +} diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/v2/src/main/java/com/skyflow/utils/Utils.java index 0937083f..048f3c38 100644 --- a/v2/src/main/java/com/skyflow/utils/Utils.java +++ b/v2/src/main/java/com/skyflow/utils/Utils.java @@ -103,7 +103,7 @@ private static PrivateKey parsePkcs8PrivateKey(byte[] pkcs8Bytes) throws Skyflow } public static String constructConnectionURL(ConnectionConfig config, InvokeConnectionRequest invokeConnectionRequest) { - StringBuilder filledURL = new StringBuilder((String) config.getConnectionUrl()); + StringBuilder filledURL = new StringBuilder(config.getConnectionUrl()); if (invokeConnectionRequest.getPathParams() != null && !invokeConnectionRequest.getPathParams().isEmpty()) { for (Map.Entry entry : invokeConnectionRequest.getPathParams().entrySet()) { diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 556e36f2..696deb27 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -3,11 +3,16 @@ import com.skyflow.config.ConnectionConfig; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; +import com.skyflow.enums.RequestMethod; +import com.skyflow.errors.ErrorCode; import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.connection.InvokeConnectionRequest; import com.skyflow.vault.data.*; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.TokenizeRequest; +import java.net.URL; + // Add config and request validations public class Validations { @@ -19,6 +24,37 @@ public static void validateConnectionConfig(ConnectionConfig connectionConfig) t } + public static void validateInvokeConnectionRequest(InvokeConnectionRequest invokeConnectionRequest) throws SkyflowException { + if (invokeConnectionRequest.getRequestHeaders().containsKey("connectionURL")) { + String connectionURL = invokeConnectionRequest.getRequestHeaders().get("connectionURL"); + if (isInvalidURL(connectionURL)) { + throw new SkyflowException(); + } + } else { + throw new SkyflowException(); + } + + if (invokeConnectionRequest.getMethodName()!=null) { + try { + RequestMethod requestMethod = RequestMethod.valueOf(invokeConnectionRequest.getMethodName()); + } catch (Exception e) { + throw new SkyflowException(); + } + } else { + throw new SkyflowException(); + } + } + + private static boolean isInvalidURL(String configURL) { + try { + URL url = new URL(configURL); + if (!url.getProtocol().equals("https")) throw new Exception(); + } catch (Exception e) { + return true; + } + return false; + } + public static void validateCredentials(Credentials credentials) throws SkyflowException { int nonNullMembers = 0; if (credentials.getPath() != null) nonNullMembers++; diff --git a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java index 74e91d29..d2e08977 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java @@ -19,6 +19,7 @@ import java.net.URL; import java.io.IOException; +import java.text.ParseException; import java.util.HashMap; import java.util.Map; @@ -49,33 +50,36 @@ public void setConnectionConfig(ConnectionConfig connectionConfig) { public InvokeConnectionResponse invoke(InvokeConnectionRequest invokeConnectionRequest) throws SkyflowException, IOException { InvokeConnectionResponse connectionResponse; - setBearerToken(); - String filledURL = Utils.constructConnectionURL(connectionConfig, invokeConnectionRequest); - Map headers = new HashMap<>(); - - if (invokeConnectionRequest.getRequestHeaders().containsKey("requestHeader")) { - headers = Utils.constructConnectionHeadersMap(invokeConnectionRequest.getRequestHeaders()); - } - if (!headers.containsKey("x-skyflow-authorization")) { - headers.put("x-skyflow-authorization", token); - } + try { + Validations.validateInvokeConnectionRequest(invokeConnectionRequest); + setBearerToken(); + String filledURL = Utils.constructConnectionURL(connectionConfig, invokeConnectionRequest); + Map headers = new HashMap<>(); + + if (invokeConnectionRequest.getRequestHeaders().containsKey("requestHeader")) { + headers = Utils.constructConnectionHeadersMap(invokeConnectionRequest.getRequestHeaders()); + } + if (!headers.containsKey("x-skyflow-authorization")) { + headers.put("x-skyflow-authorization", token); + } - String requestMethod = invokeConnectionRequest.getMethodName(); - JsonObject requestBody = null; - Object requestBodyObject = invokeConnectionRequest.getRequestBody(); + String requestMethod = invokeConnectionRequest.getMethodName(); + JsonObject requestBody = null; + Object requestBodyObject = invokeConnectionRequest.getRequestBody(); - if(requestBodyObject!=null) { - try { - requestBody = (JsonObject) convertObjectToJson(requestBodyObject); - System.out.println("Converted requestBody to JsonObject: " + requestBody.toString()); - } catch (Exception e) { - System.out.println("Error while converting requestBody to JsonObject: " + e.getMessage()); + if(requestBodyObject!=null) { + try { + requestBody = convertObjectToJson(requestBodyObject); + } catch (Exception e) { + throw new SkyflowException(); + } } - } - String response = HttpUtility.sendRequest(requestMethod, new URL(filledURL), requestBody, headers); -// connectionResponse = (JsonObject) new JsonParser().parse(response); - connectionResponse = new InvokeConnectionResponse((JsonObject) new JsonParser().parse(response)); + String response = HttpUtility.sendRequest(requestMethod, new URL(filledURL), requestBody, headers); + connectionResponse = new InvokeConnectionResponse((JsonObject) new JsonParser().parse(response)); + } catch (IOException e) { + throw new SkyflowException(); + } return connectionResponse; } diff --git a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java index 7bfd8de0..f0540933 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java @@ -23,7 +23,7 @@ public List getColumnValues() { public static final class TokenizeRequestBuilder { private List columnValues; - public TokenizeRequestBuilder() { + private TokenizeRequestBuilder() { this.columnValues = new ArrayList<>(); } From b56f6efa1bd393390a4ebc7938ead791ab0f0843 Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Fri, 18 Oct 2024 15:14:29 +0530 Subject: [PATCH 29/68] SK-1664 move ColumnValue class to tokens package --- v2/src/main/java/com/skyflow/VaultClient.java | 2 +- .../skyflow/{utils => vault/tokens}/ColumnValue.java | 11 ++--------- .../com/skyflow/vault/tokens/TokenizeRequest.java | 6 ++---- 3 files changed, 5 insertions(+), 14 deletions(-) rename v2/src/main/java/com/skyflow/{utils => vault/tokens}/ColumnValue.java (78%) diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index f465c2a4..52be5807 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -7,7 +7,7 @@ import com.skyflow.generated.rest.api.RecordsApi; import com.skyflow.generated.rest.api.TokensApi; import com.skyflow.generated.rest.models.*; -import com.skyflow.utils.ColumnValue; +import com.skyflow.vault.tokens.ColumnValue; import com.skyflow.utils.Utils; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.UpdateRequest; diff --git a/v2/src/main/java/com/skyflow/utils/ColumnValue.java b/v2/src/main/java/com/skyflow/vault/tokens/ColumnValue.java similarity index 78% rename from v2/src/main/java/com/skyflow/utils/ColumnValue.java rename to v2/src/main/java/com/skyflow/vault/tokens/ColumnValue.java index a7f416c9..3fa08b2e 100644 --- a/v2/src/main/java/com/skyflow/utils/ColumnValue.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/ColumnValue.java @@ -1,9 +1,4 @@ -package com.skyflow.utils; - -import com.skyflow.enums.RedactionType; -import com.skyflow.vault.tokens.DetokenizeRequest; - -import java.util.ArrayList; +package com.skyflow.vault.tokens; public class ColumnValue { @@ -29,9 +24,7 @@ public static final class ColumnValueBuilder { private String value; private String columnGroup; - public ColumnValueBuilder() { - this.value = ""; - this.columnGroup = ""; + private ColumnValueBuilder() { } public ColumnValueBuilder value(String value) { diff --git a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java index 7bfd8de0..f7570714 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java @@ -1,7 +1,5 @@ package com.skyflow.vault.tokens; -import com.skyflow.utils.ColumnValue; - import java.util.ArrayList; import java.util.List; @@ -23,11 +21,11 @@ public List getColumnValues() { public static final class TokenizeRequestBuilder { private List columnValues; - public TokenizeRequestBuilder() { + private TokenizeRequestBuilder() { this.columnValues = new ArrayList<>(); } - public TokenizeRequestBuilder columnValues(List columnValues) { + public TokenizeRequestBuilder values(List columnValues) { this.columnValues = columnValues; return this; } From b08a5353dd456e9532b1d78c8ddeb355d62b8bf0 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 18 Oct 2024 21:08:29 +0530 Subject: [PATCH 30/68] SK-1664 Implement vault API interfaces - Change builder pattern implementation for vault API interfaces --- .../com/skyflow/vault/data/DeleteRequest.java | 12 ++--- .../com/skyflow/vault/data/GetRequest.java | 48 ++++++------------- .../com/skyflow/vault/data/InsertRequest.java | 45 ++++++----------- .../com/skyflow/vault/data/QueryRequest.java | 8 ++-- .../com/skyflow/vault/data/UpdateRequest.java | 28 ++++------- 5 files changed, 46 insertions(+), 95 deletions(-) diff --git a/v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java b/v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java index 0bd11df8..d61c996f 100644 --- a/v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java @@ -3,12 +3,10 @@ import java.util.ArrayList; public class DeleteRequest { - private final String table; - private final ArrayList ids; + private final DeleteRequestBuilder builder; private DeleteRequest(DeleteRequestBuilder builder) { - this.table = builder.table; - this.ids = builder.ids; + this.builder = builder; } public static DeleteRequestBuilder builder() { @@ -16,14 +14,14 @@ public static DeleteRequestBuilder builder() { } public String getTable() { - return table; + return this.builder.table; } public ArrayList getIds() { - return ids; + return this.builder.ids; } - public static class DeleteRequestBuilder { + public static final class DeleteRequestBuilder { private String table; private ArrayList ids; diff --git a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java index 862bfa03..28c0e567 100644 --- a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java @@ -7,30 +7,10 @@ import java.util.List; public class GetRequest { - private final String table; - private final ArrayList ids; - private final RedactionType redactionType; - private final Boolean tokenization; - private final List fields; - private final String offset; - private final String limit; - private final Boolean downloadURL; - private final String columnName; - private final ArrayList columnValues; - private final String orderBy; + private final GetRequestBuilder builder; private GetRequest(GetRequestBuilder builder) { - this.table = builder.table; - this.ids = builder.ids; - this.redactionType = builder.redactionType; - this.tokenization = builder.tokenization; - this.fields = builder.fields; - this.offset = builder.offset; - this.limit = builder.limit; - this.downloadURL = builder.downloadURL; - this.columnName = builder.columnName; - this.columnValues = builder.columnValues; - this.orderBy = builder.orderBy; + this.builder = builder; } public static GetRequestBuilder builder() { @@ -38,50 +18,50 @@ public static GetRequestBuilder builder() { } public String getTable() { - return table; + return this.builder.table; } public ArrayList getIds() { - return ids; + return this.builder.ids; } public RedactionType getRedactionType() { - return redactionType; + return this.builder.redactionType; } public Boolean getTokenization() { - return tokenization; + return this.builder.tokenization; } public List getFields() { - return fields; + return this.builder.fields; } public String getOffset() { - return offset; + return this.builder.offset; } public String getLimit() { - return limit; + return this.builder.limit; } public Boolean getDownloadURL() { - return downloadURL; + return this.builder.downloadURL; } public String getColumnName() { - return columnName; + return this.builder.columnName; } public ArrayList getColumnValues() { - return columnValues; + return this.builder.columnValues; } public String getOrderBy() { - return orderBy; + return this.builder.orderBy; } - public static class GetRequestBuilder { + public static final class GetRequestBuilder { private String table; private ArrayList ids; private RedactionType redactionType; diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java index 8cdc22bc..b2a49f1b 100644 --- a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java @@ -6,26 +6,10 @@ import java.util.HashMap; public class InsertRequest { - private final String table; - private final ArrayList> values; - private final ArrayList> tokens; - private final Boolean returnTokens; - private final String upsert; - private final Boolean homogeneous; - private final Boolean tokenMode; - private final Boolean continueOnError; - private final Byot tokenStrict; + private final InsertRequestBuilder builder; private InsertRequest(InsertRequestBuilder builder) { - this.table = builder.table; - this.values = builder.values; - this.tokens = builder.tokens; - this.returnTokens = builder.returnTokens; - this.upsert = builder.upsert; - this.homogeneous = builder.homogeneous; - this.tokenMode = builder.tokenMode; - this.continueOnError = builder.continueOnError; - this.tokenStrict = builder.tokenStrict; + this.builder = builder; } public static InsertRequestBuilder builder() { @@ -33,39 +17,39 @@ public static InsertRequestBuilder builder() { } public String getTable() { - return table; + return this.builder.table; } public ArrayList> getValues() { - return this.values; + return this.builder.values; } public ArrayList> getTokens() { - return this.tokens; + return this.builder.tokens; } public Boolean getReturnTokens() { - return returnTokens; + return this.builder.returnTokens; } public String getUpsert() { - return upsert; + return this.builder.upsert; } public Boolean getHomogeneous() { - return homogeneous; + return this.builder.homogeneous; } public Boolean getTokenMode() { - return tokenMode; + return this.builder.tokenMode; } public Boolean getContinueOnError() { - return continueOnError; + return this.builder.continueOnError; } public Byot getTokenStrict() { - return tokenStrict; + return this.builder.tokenStrict; } public static final class InsertRequestBuilder { @@ -81,8 +65,7 @@ public static final class InsertRequestBuilder { private InsertRequestBuilder() { this.returnTokens = true; - this.homogeneous = true; - this.tokenMode = true; + this.tokenMode = false; this.continueOnError = false; this.tokenStrict = Byot.DISABLE; } @@ -113,12 +96,12 @@ public InsertRequestBuilder upsert(String upsert) { } public InsertRequestBuilder homogeneous(Boolean homogeneous) { - this.homogeneous = homogeneous == null || homogeneous; + this.homogeneous = homogeneous; return this; } public InsertRequestBuilder tokenMode(Boolean tokenMode) { - this.tokenMode = tokenMode == null || tokenMode; + this.tokenMode = tokenMode != null && tokenMode; return this; } diff --git a/v2/src/main/java/com/skyflow/vault/data/QueryRequest.java b/v2/src/main/java/com/skyflow/vault/data/QueryRequest.java index 58c0c54d..2aaa200d 100644 --- a/v2/src/main/java/com/skyflow/vault/data/QueryRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/QueryRequest.java @@ -1,10 +1,10 @@ package com.skyflow.vault.data; public class QueryRequest { - private final String query; + private final QueryRequestBuilder builder; private QueryRequest(QueryRequestBuilder builder) { - this.query = builder.query; + this.builder = builder; } public static QueryRequestBuilder builder() { @@ -12,10 +12,10 @@ public static QueryRequestBuilder builder() { } public String getQuery() { - return query; + return this.builder.query; } - public static class QueryRequestBuilder { + public static final class QueryRequestBuilder { private String query; private QueryRequestBuilder() { diff --git a/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java b/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java index 7bda90dd..76c1c4b5 100644 --- a/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java @@ -5,20 +5,10 @@ import java.util.HashMap; public class UpdateRequest { - private final String table; - private final String id; - private final Boolean returnTokens; - private final HashMap values; - private final HashMap tokens; - private final Byot tokenStrict; + private final UpdateRequestBuilder builder; private UpdateRequest(UpdateRequestBuilder builder) { - this.table = builder.table; - this.id = builder.id; - this.returnTokens = builder.returnTokens; - this.values = builder.values; - this.tokens = builder.tokens; - this.tokenStrict = builder.tokenStrict; + this.builder = builder; } public static UpdateRequestBuilder builder() { @@ -26,30 +16,30 @@ public static UpdateRequestBuilder builder() { } public String getTable() { - return table; + return this.builder.table; } public String getId() { - return id; + return this.builder.id; } public Boolean getReturnTokens() { - return returnTokens; + return this.builder.returnTokens; } public HashMap getValues() { - return values; + return this.builder.values; } public HashMap getTokens() { - return tokens; + return this.builder.tokens; } public Byot getTokenStrict() { - return tokenStrict; + return this.builder.tokenStrict; } - public static class UpdateRequestBuilder { + public static final class UpdateRequestBuilder { private String table; private String id; private Boolean returnTokens; From c6c282c0a942d61316f21d0bd7d7122a1572a2b1 Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Tue, 22 Oct 2024 12:14:30 +0530 Subject: [PATCH 31/68] SK-1682 add error codes, messages and logs --- .../java/com/skyflow/errors/ErrorCode.java | 115 ++++++++++++++++++ .../main/java/com/skyflow/logs/ErrorLogs.java | 49 ++++++++ 2 files changed, 164 insertions(+) create mode 100644 v2/src/main/java/com/skyflow/errors/ErrorCode.java create mode 100644 v2/src/main/java/com/skyflow/logs/ErrorLogs.java diff --git a/v2/src/main/java/com/skyflow/errors/ErrorCode.java b/v2/src/main/java/com/skyflow/errors/ErrorCode.java new file mode 100644 index 00000000..73a3bec2 --- /dev/null +++ b/v2/src/main/java/com/skyflow/errors/ErrorCode.java @@ -0,0 +1,115 @@ +/* + Copyright (c) 2022 Skyflow, Inc. +*/ +package com.skyflow.errors; + +public enum ErrorCode { + + InvalidCredentialFilePath(400, "{Language} SDK v{semver} Initialization failed. Invalid credentials. Specify the file path as a string."), + EmptyCredentialFilePath(400, "{Language} SDK v{semver} Initialization failed. Invalid credentials. Specify a valid file path."), + InvalidRolesKeyType(4000, "{Language} SDK v{semver} Initialization failed. Invalid roles. Specify roles as an array."), + InvalidRoleType(400, "{Language} SDK v{semver} Initialization failed. Invalid role. Specify the role as a string."), + EmptyRoles(400, "{Language} SDK v{semver} Initialization failed. Invalid roles. Specify at least one role."), + EmptyRoleInRoles(400, "{Language} SDK v{semver} Initialization failed. Invalid role. Specify a valid role."), + InvalidContext(400, "{Language} SDK v{semver} Initialization failed. Invalid context provided. Specify context as type Context."), + EmptyContext(400, "{Language} SDK v{semver} Initialization failed. Invalid context. Specify a valid context."), + InvalidCredentialsString(400, "{Language} SDK v{semver} Initialization failed. Invalid credentials. Specify credentials as a string."), + EmptyCredentialsString(400, "{Language} SDK v{semver} Initialization failed. Invalid credentials. Specify valid credentials."), + EmptyVaultId(400, "{Language} SDK v{semver} Initialization failed. Invalid vault ID. Specify a valid vault ID."), + InvalidVaultId(400, "{Language} SDK v{semver} Initialization failed. Invalid vault ID. Specify a valid vault ID as a string."), + InvalidClusterId(400, "{Language} SDK v{semver} Initialization failed. Invalid cluster ID. Specify cluster ID as a string."), + EmptyClusterId(400, "{Language} SDK v{semver} Initialization failed. Invalid cluster ID. Specify a valid cluster ID."), + InvalidConnectionId(400, "{Language} SDK v{semver} Initialization failed. Invalid connection ID. Specify connection ID as a string."), + EmptyConnectionId(400, "{Language} SDK v{semver} Initialization failed. Invalid connection ID. Specify a valid connection ID."), + InvalidConnectionUrl(400, "{Language} SDK v{semver} Initialization failed. Invalid connection URL. Specify connection URL as a string."), + EmptyConnectionUrl(400, "{Language} SDK v{semver} Initialization failed. Invalid connection URL. Specify a valid connection URL."), + TokenProviderError(400, "{Language} SDK v{semver} Initialization failed. Invalid token provider. Specify the token provider as a function."), + TokenProviderInvalidToken(400, "{Language} SDK v{semver} Initialization failed. Invalid token. Verify the output of the token provider."), + FileNotFound(400, "{Language} SDK v{semver} Initialization failed. Credential file not found at %s1. Verify the file path."), + FileInvalidJson(400, "{Language} SDK v{semver} Initialization failed. File at %s1 is not in valid JSON format. Verify the file contents."), + InvalidCredentials(400, "{Language} SDK v{semver} Initialization failed. Invalid credentials provided. Specify valid credentials."), + InvalidUrl(400, "{Language} SDK v{semver} Initialization failed. Vault URL %s1 is invalid. Specify a valid vault URL."), + MissingPrivateKey(400, "{Language} SDK v{semver} Initialization failed. Unable to read private key in credentials. Verify your private key."), + MissingClientId(400, "{Language} SDK v{semver} Initialization failed. Unable to read client ID in credentials. Verify your client ID."), + MissingKeyId(400, "{Language} SDK v{semver} Initialization failed. Unable to read key ID in credentials. Verify your key ID."), + MissingTokenUri(400, "{Language} SDK v{semver} Initialization failed. Unable to read token URI in credentials. Verify your token URI."), + JwtInvalidFormat(400, "{Language} SDK v{semver} Initialization failed. Invalid private key format. Verify your credentials."), + MissingAccessToken(400, "{Language} SDK v{semver} Validation error. Access token not present in the response from bearer token generation. Verify your credentials."), + MissingTokenType(400, "{Language} SDK v{semver} Validation error. Token type not present in the response from bearer token generation. Verify your credentials."), + JwtDecodeError(400, "{Language} SDK v{semver} Validation error. Invalid access token. Verify your credentials."), + VaultIdNotInConfigList(400, "{Language} SDK v{semver} Validation error. VaultId is missing from the config. Specify the vaultIds from configs."), + ConnectionIdNotInConfigList(400, "{Language} SDK v{semver} Validation error. ConnectionId is missing from the config. Specify the connectionIds from configs."), + EmptyCredentials(400, "{Language} SDK v{semver} Validation error. Invalid credentials. Specify a valid credentials."), + EmptyDataTokens(400, "{Language} SDK v{semver} Validation error. Invalid data tokens. Specify valid data tokens."), + DataTokenKeyType(400, "{Language} SDK v{semver} Validation error. Invalid data tokens. Specify data token as an string array."), + TimeToLeaveKeyType(400, "{Language} SDK v{semver} Validation error. Invalid time to live. Specify time to live parameter as an string."), + + //delete interface + InvalidIdTypeDelete(400, "{Language} SDK v{semver} Validation error. Invalid 'id' in 'records' array at index %s1 in records array. Specify 'id' as a string."), + EmptyRecordsInDelete(400, "{Language} SDK v{semver} Validation error. 'records' array can't be empty. Specify one or more records."), + EmptyIDInDelete(400, "{Language} SDK v{semver} Validation error. 'id' can't be empty in the 'records' array. Specify an ID."), + EmptyTableInDelete(400, "{Language} SDK v{semver} Validation error. 'table' can't be empty in the 'records' array. Specify a table."), + + //get interface + InvalidIdsType(400, "{Language} SDK v{semver} Validation error. 'ids' has a value of type %s1. Specify 'ids' as list."), + InvalidIdType(400, "{Language} SDK v{semver} Validation error. 'id' has a value of type %s1. Specify 'id' as string."), + InvalidRedactionType(400, "{Language} SDK v{semver} Validation error. Redaction key has value of type %s1, expected Skyflow.Redaction."), + InvalidColumnName(400, "{Language} SDK v{semver} Validation error. Column name has value of type %s1, expected a string."), + InvalidColumnValue(400, "{Language} SDK v{semver} Validation error. Column values has value of type %s1, expected a list."), + + //connection + InvalidPathParams(400, "{Language} SDK v{semver} Validation error. Path parameters aren't valid. Specify valid path parameters."), + EmptyPathParams(400, "{Language} SDK v{semver} Validation error. Path parameters are empty. Specify valid path parameters."), + InvalidRequestBody(400, "{Language} SDK v{semver} Validation error. Invalid request body. Specify the request body as an object."), + EmptyRequestBody(400, "{Language} SDK v{semver} Validation error. Request body can't be empty. Specify a valid request body."), + + //insert + RecordsKeyError(400, "{Language} SDK v{semver} Validation error. 'records' key is missing from the payload. Specify a 'records' key."), + FieldsKeyError(400, "{Language} SDK v{semver} Validation error. 'fields' key is missing from the payload. Specify a 'fields' key."), + TableKeyError(400, "{Language} SDK v{semver} Validation error. 'table' key is missing from the payload. Specify a 'table' key."), + TokenKeyError(400, "{Language} SDK v{semver} Validation error. 'token' key is missing from the payload. Specify a 'token' key."), + IdsKeyError(400, "{Language} SDK v{semver} Validation error. 'ids' key is missing from the payload. Specify an 'ids' key."), + RedactionKeyError(400, "{Language} SDK v{semver} Validation error. 'redaction' key is missing from the payload. Specify a 'redaction' key."), + UniqueColumnOrIdsKeyError(400, "{Language} SDK v{semver} Validation error. ids or columnName key is missing from the payload. Specify the ids or unique 'columnName' in payload."), + UpdateFieldKeyError(400, "{Language} SDK v{semver} Validation error. Fields are empty in an update payload. Specify at least one field."), + InvalidRecordsType(400, "{Language} SDK v{semver} Validation error. The 'records' key has a value of type %s1. Specify 'records' as a list."), + InvalidFieldsType(400, "{Language} SDK v{semver} Validation error. The 'fields' key has a value of type %s1. Specify 'fields' as a dictionary."), + InvalidTokensType(400, "{Language} SDK v{semver} Validation error. The 'tokens' key has a value of type %s1. Specify 'tokens' as a dictionary."), + EmptyTokensInInsert(400, "{Language} SDK v{semver} Validation error. The 'tokens' field is empty. Specify tokens for one or more fields."), + MismatchOfFieldsAndTokens(400, "{Language} SDK v{semver} Validation error. 'fields' and 'tokens' have different columns names. Verify that 'fields' and 'tokens' columns match."), + InvalidTableType(400, "{Language} SDK v{semver} Validation error. The 'table' key has a value of type %s1. Specify 'table' as a string."), + RedactionWithTokensNotSupported(400, "{Language} SDK v{semver} Validation error. 'redaction' can't be used when tokens are specified. Remove 'redaction' from payload if tokens are specified."), + TokensGetColumnNotSupported(400, "{Language} SDK v{semver} Validation error. Column name and/or column values can't be used when tokens are specified. Remove unique column values or tokens from the payload."), + BothIdsAndColumnDetailsSpecified(400, "{Language} SDK v{semver} Validation error. Both Skyflow IDs and column details can't be specified. Either specify Skyflow IDs or unique column details."), + PartialSuccess(400, "{Language} SDK v{semver} Validation error. Check 'SkyflowError.data' for details."), + InvalidUpsertOptionsType(400, "{Language} SDK v{semver} Validation error. 'upsert' key cannot be empty in options. At least one object of table and column is required."), + InvalidUpsertTableType(400, "{Language} SDK v{semver} Validation error. The 'table' key in the 'upsert' object has avalue of type %s1. Specify 'table' as a string."), + InvalidUpsertColumnType(400, "{Language} SDK v{semver} Validation error. The 'column' key in the 'upsert' object has a value of type %s1. Specify 'column' as a string."), + EmptyUpsertOptionTable(400, "{Language} SDK v{semver} Validation error. The 'table' key in the 'upsert' object can't be an empty string. Specify a 'table' value."), + EmptyUpsertOptionColumn(400, "{Language} SDK v{semver} Validation error. The 'column' key in the 'upsert' object can't be an empty string. Specify a 'column' value."), + BatchInsertPartialSuccess(400, "{Language} SDK v{semver} Insert operation completed with partial success."), + BatchInsertFailure(400, "{Language} SDK v{semver} Insert operation failed."), + InvalidByotType(400, "{Language} SDK v{semver} Validation error. The 'byot' key has a value of type %s1. Specify 'byot' as Skyflow.BYOT."), + NoTokensInInsert(400, "{Language} SDK v{semver} Validation error. Tokens weren't specified for records while 'byot' was %s1. Specify tokens."), + TokensPassedForByotDisable(400, "{Language} SDK v{semver} Validation error. 'byot' wasn't specified. Set 'byot' to 'ENABLE' to insert tokens."), + InsufficientTokensPassedForByotEnableStrict(400, "{Language} SDK v{semver} Validation error. 'byot' is set to 'ENABLE_STRICT', but some fields are missing tokens. Specify tokens for all fields."); + + + + private final int code; + private final String message; + + ErrorCode(int code, String message) { + this.code = code; + this.message = message; + } + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + +} diff --git a/v2/src/main/java/com/skyflow/logs/ErrorLogs.java b/v2/src/main/java/com/skyflow/logs/ErrorLogs.java new file mode 100644 index 00000000..b776f314 --- /dev/null +++ b/v2/src/main/java/com/skyflow/logs/ErrorLogs.java @@ -0,0 +1,49 @@ +package com.skyflow.logs; + +public enum ErrorLogs { + ClientConnetion(""), + VaultIdIsRequired("Interface: init - Invalid client credentials. vaultID is required."), + EmptyVaultIdInInit("Interface: init - Invalid client credentials. vaultID cannot be empty."), + VaultUrlIsRequired("Interface: init - Invalid client credentials. vaultURL is required."), + EmptyVaultUrlInInit("Interface: init - Invalid client credentials. vaultURL cannot be empty."), + InvalidVaultUrlInInit("Interface: init - Invalid client credentials. Expecting https://XYZ for vaultURL"), + GetBearerTokenIsRequired("Interface: init - Invalid client credentials. getBearerToken is required."), + BearerTokenRejected(""), + InvalidEncodeUriInGet("Interface: get method - Invalid encodeURI type in get."), + InvalidBearerToken("Bearer token is invalid or expired."), + InvalidVaultId("Vault Id is invalid or cannot be found."), + EmptyVaultId("VaultID is empty"), + InvalidCredentials("Invalid client credentials."), + InvalidContainerType("Invalid container type."), + InvalidCollectValue("Invalid value"), + InvalidCollectValueWithLabel("Invalid %s1"), + RecordsKeyNotFound("records object key value not found."), + EmptyRecords("records object is empty."), + RecordsKeyError("Key “records” is missing or payload is incorrectly formatted."), + MissingRecords(""), + InvalidRecords("Invalid Records"), + EmptyRecordIds(""), + EmptyRecordColumnvalues("Record column values cannot be empty."), + InvalidRecordIdType("Invalid Type of Records Id."), + InvalidRecordColumnValueType(""), + InvalidRecordLabel("Invalid Record Label Type."), + InvalidRecordAltText("Invalid Record altText Type."), + FetchRecordsRejected(""), + InsertRecordsRejected(""), + GetBySkyflowIdRejected(""), + SendInvokeConnectionRejected("Invoke connection request rejected."), + UpdateRequestRejected("Update request is rejected."), + InvalidTableName("Table Name passed doesn’t exist in the vault with id."), + EmptyTableName("Table Name is empty."), + EmptyTableAndFields("table or fields parameter cannot be passed as empty at index %s1 in records array."); + + private final String log; + + ErrorLogs(String log) { + this.log = log; + } + + public final String getLog() { + return log; + } +} From 27f7443d9e4f6bf427adc7e57b60e99cb2ec92f6 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 23 Oct 2024 18:42:10 +0530 Subject: [PATCH 32/68] SK-1681 Add validations --- v2/src/main/java/com/skyflow/Skyflow.java | 27 +-- .../main/java/com/skyflow/enums/LogLevel.java | 6 +- .../utils/validations/Validations.java | 165 +++++++++++++++--- .../vault/controller/VaultController.java | 2 +- .../com/skyflow/vault/data/GetRequest.java | 18 +- .../vault/tokens/DetokenizeRequest.java | 2 +- 6 files changed, 166 insertions(+), 54 deletions(-) diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index 6c08644e..6fe84ad9 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -6,6 +6,8 @@ import com.skyflow.enums.Env; import com.skyflow.enums.LogLevel; import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.LogUtil; +import com.skyflow.utils.validations.Validations; import com.skyflow.vault.controller.ConnectionController; import com.skyflow.vault.controller.VaultController; @@ -28,7 +30,6 @@ public Skyflow addVaultConfig(VaultConfig vaultConfig) throws SkyflowException { } public VaultConfig getVaultConfig(String vaultId) { - // get vault config with vault id return this.builder.vaultConfigMap.get(vaultId); } @@ -48,7 +49,6 @@ public Skyflow addConnectionConfig(ConnectionConfig connectionConfig) { } public ConnectionConfig getConnectionConfig(String connectionId) { - // get connection config with connection id return this.builder.connectionsMap.get(connectionId).getConnectionConfig(); } @@ -62,7 +62,7 @@ public Skyflow removeConnectionConfig(String connectionId) { return this; } - public Skyflow updateSkyflowCredentials(Credentials credentials) { + public Skyflow updateSkyflowCredentials(Credentials credentials) throws SkyflowException { this.builder.addSkyflowCredentials(credentials); return this; } @@ -76,7 +76,6 @@ public LogLevel getLogLevel() { return this.builder.logLevel; } - // in case no id is passed, return first vault controller public VaultController vault() { String vaultId = (String) this.builder.vaultClientsMap.keySet().toArray()[0]; return this.vault(vaultId); @@ -86,7 +85,7 @@ public VaultController vault(String vaultId) { return this.builder.vaultClientsMap.get(vaultId); } - // in case no id is passed, return first connection controller + // In case no id is passed, return first connection controller public ConnectionController connection() { String connectionId = (String) this.builder.connectionsMap.keySet().toArray()[0]; return this.connection(connectionId); @@ -112,9 +111,10 @@ public SkyflowClientBuilder() { } public SkyflowClientBuilder addVaultConfig(VaultConfig vaultConfig) throws SkyflowException { - // check if vaultConfig already exists + Validations.validateVaultConfig(vaultConfig); if (this.vaultClientsMap.containsKey(vaultConfig.getVaultId())) { // display error log, throw error, or both + throw new SkyflowException(); } else { this.vaultConfigMap.put(vaultConfig.getVaultId(), vaultConfig); this.vaultClientsMap.put(vaultConfig.getVaultId(), new VaultController(vaultConfig, this.skyflowCredentials)); @@ -128,6 +128,7 @@ public SkyflowClientBuilder updateVaultConfig(VaultConfig vaultConfig) throws Sk this.vaultClientsMap.get(updatedConfig.getVaultId()).updateVaultConfig(); } else { // display error log, throw error, or both + throw new SkyflowException(); } return this; } @@ -138,6 +139,7 @@ public SkyflowClientBuilder removeVaultConfig(String vaultId) throws SkyflowExce this.vaultConfigMap.remove(vaultId); } else { // display error log, throw error, or both + throw new SkyflowException(); } return this; } @@ -172,32 +174,33 @@ public SkyflowClientBuilder removeConnectionConfig(String connectionId) { return this; } - public SkyflowClientBuilder addSkyflowCredentials(Credentials credentials) { - // set credentials and update in vault controllers + public SkyflowClientBuilder addSkyflowCredentials(Credentials credentials) throws SkyflowException { + Validations.validateCredentials(credentials); this.skyflowCredentials = credentials; for (VaultController vault : this.vaultClientsMap.values()) { vault.setCommonCredentials(this.skyflowCredentials); } - for (ConnectionController controller : this.connectionsMap.values()) { - controller.setCommonCredentials(this.skyflowCredentials); + for (ConnectionController connection : this.connectionsMap.values()) { + connection.setCommonCredentials(this.skyflowCredentials); } return this; } public SkyflowClientBuilder setLogLevel(LogLevel logLevel) { this.logLevel = logLevel; + LogUtil.setupLogger(logLevel); return this; } public Skyflow build() { - // return built skyflow client instance return new Skyflow(this); } - private VaultConfig findAndUpdateVaultConfig(VaultConfig vaultConfig) { + private VaultConfig findAndUpdateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { VaultConfig previousConfig = this.vaultConfigMap.get(vaultConfig.getVaultId()); if (previousConfig == null) { // display error log, throw error, or both + throw new SkyflowException(); } else { Env env = vaultConfig.getEnv() != null ? vaultConfig.getEnv() : previousConfig.getEnv(); String clusterId = vaultConfig.getClusterId() != null ? vaultConfig.getClusterId() : previousConfig.getClusterId(); diff --git a/v2/src/main/java/com/skyflow/enums/LogLevel.java b/v2/src/main/java/com/skyflow/enums/LogLevel.java index 7b86db3a..a605b520 100644 --- a/v2/src/main/java/com/skyflow/enums/LogLevel.java +++ b/v2/src/main/java/com/skyflow/enums/LogLevel.java @@ -1,9 +1,9 @@ package com.skyflow.enums; public enum LogLevel { + OFF, ERROR, - WARNING, + WARN, INFO, - DEBUG, - OFF + DEBUG } diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 24d2e701..586631f9 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -4,6 +4,7 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.enums.Byot; +import com.skyflow.enums.Env; import com.skyflow.enums.RedactionType; import com.skyflow.errors.SkyflowException; import com.skyflow.utils.ColumnValue; @@ -11,6 +12,8 @@ import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.TokenizeRequest; +import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -20,10 +23,23 @@ public class Validations { public static void validateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { String vaultId = vaultConfig.getVaultId(); String clusterId = vaultConfig.getClusterId(); + Env env = vaultConfig.getEnv(); + Credentials credentials = vaultConfig.getCredentials(); if (vaultId == null || vaultId.trim().isEmpty()) { + if (vaultId == null) { + // error log for required + } else { + // error log for empty + } throw new SkyflowException(); } else if (clusterId == null || clusterId.trim().isEmpty()) { + // error log throw new SkyflowException(); + } else if (env == null) { + // error log + throw new SkyflowException(); + } else if (credentials != null) { + validateCredentials(credentials); } } @@ -35,6 +51,12 @@ public static void validateConnectionConfig(ConnectionConfig connectionConfig) t } else if (connectionUrl == null || connectionUrl.trim().isEmpty()) { throw new SkyflowException(); } + + try { + URL url = new URL(connectionUrl); + } catch (MalformedURLException e) { + throw new SkyflowException(); + } } public static void validateCredentials(Credentials credentials) throws SkyflowException { @@ -59,7 +81,8 @@ public static void validateDetokenizeRequest(DetokenizeRequest detokenizeRequest } else if (redactionType == null) { throw new SkyflowException(); } else { - for (String token : tokens) { + for (int index = 0; index < tokens.size(); index++) { + String token = tokens.get(index); if (token == null || token.trim().isEmpty()) { throw new SkyflowException(); } @@ -71,20 +94,25 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky String table = insertRequest.getTable(); ArrayList> values = insertRequest.getValues(); ArrayList> tokens = insertRequest.getTokens(); - Boolean returnTokens = insertRequest.getReturnTokens(); String upsert = insertRequest.getUpsert(); Boolean homogeneous = insertRequest.getHomogeneous(); - Boolean tokenMode = insertRequest.getTokenMode(); Byot tokenStrict = insertRequest.getTokenStrict(); if (table == null || table.trim().isEmpty()) { + if (table == null) { + // error log for required + } else { + // error log for empty + } throw new SkyflowException(); } else if (values == null || values.isEmpty()) { throw new SkyflowException(); - } else if (upsert != null && upsert.trim().isEmpty()) { - throw new SkyflowException(); - } else if (homogeneous != null && homogeneous) { - throw new SkyflowException(); + } else if (upsert != null) { + if (upsert.trim().isEmpty()) { + throw new SkyflowException(); + } else if (homogeneous != null && homogeneous) { + throw new SkyflowException(); + } } for (HashMap valuesMap : values) { @@ -105,20 +133,102 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky if (tokens != null) { throw new SkyflowException(); } + break; case ENABLE: if (tokens == null) { throw new SkyflowException(); } + validateTokensForInsertRequest(tokens, values); + break; case ENABLE_STRICT: - if (tokens.size() != values.size()) { + if (tokens == null) { + throw new SkyflowException(); + } else if (tokens.size() != values.size()) { throw new SkyflowException(); } + validateTokensForInsertRequest(tokens, values); + break; } - validateTokensForInsertRequest(tokens, values); - } public static void validateGetRequest(GetRequest getRequest) throws SkyflowException { + String table = getRequest.getTable(); + ArrayList ids = getRequest.getIds(); + RedactionType redactionType = getRequest.getRedactionType(); + Boolean tokenization = getRequest.getReturnTokens(); + List fields = getRequest.getFields(); + String offset = getRequest.getOffset(); + String limit = getRequest.getLimit(); + Boolean downloadURL = getRequest.getDownloadURL(); + String columnName = getRequest.getColumnName(); + ArrayList columnValues = getRequest.getColumnValues(); + String orderBy = getRequest.getOrderBy(); + + if (table == null || table.trim().isEmpty()) { + throw new SkyflowException(); + } else if (ids != null) { + if (ids.isEmpty()) { + throw new SkyflowException(); + } else { + for (int index = 0; index < ids.size(); index++) { + String id = ids.get(index); + if (id == null || id.trim().isEmpty()) { + throw new SkyflowException(); + } + } + } + } else if (fields != null) { + if (fields.isEmpty()) { + throw new SkyflowException(); + } else { + for (int index = 0; index < fields.size(); index++) { + String field = fields.get(index); + if (field == null || field.trim().isEmpty()) { + throw new SkyflowException(); + } + } + } + } else if (redactionType == null && (tokenization == null || !tokenization)) { + // missing redaction + throw new SkyflowException(); + } else if (tokenization != null && tokenization) { + if (redactionType != null) { + // redaction and tokenization does not work together + throw new SkyflowException(); + } else if (columnName != null || columnValues != null) { + // tokenization does not work with column name/values + throw new SkyflowException(); + } + } else if (offset != null && offset.isEmpty()) { + throw new SkyflowException(); + } else if (limit != null && limit.isEmpty()) { + throw new SkyflowException(); + } + + if (ids == null && columnName == null && columnValues == null) { + // either skyflow ids or column name/values must be passed + throw new SkyflowException(); + } else if (ids != null && (columnName != null || columnValues != null)) { + // skyflow ids and column name/values can not be passed together + throw new SkyflowException(); + } else if (columnName == null && columnValues != null) { + // column name and values must both be passed + throw new SkyflowException(); + } else if (columnName != null && columnValues == null) { + // column name and values must both be passed + throw new SkyflowException(); + } else if (columnName != null) { + if (columnValues.isEmpty()) { + throw new SkyflowException(); + } else { + for (int index = 0; index < columnValues.size(); index++) { + String columnValue = columnValues.get(index); + if (columnValue == null || columnValue.trim().isEmpty()) { + throw new SkyflowException(); + } + } + } + } } public static void validateUpdateRequest(UpdateRequest updateRequest) throws SkyflowException { @@ -136,26 +246,28 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky throw new SkyflowException(); } else if (values == null || values.isEmpty()) { throw new SkyflowException(); - } else if (tokens == null || tokens.isEmpty()) { - throw new SkyflowException(); - } - - for (String key : values.keySet()) { - if (key == null || key.trim().isEmpty()) { + } else if (tokens != null) { + if (tokens.isEmpty()) { throw new SkyflowException(); } else { - Object value = values.get(key); - if (value == null || value.toString().trim().isEmpty()) { - throw new SkyflowException(); + for (String key : tokens.keySet()) { + if (key == null || key.trim().isEmpty()) { + throw new SkyflowException(); + } else { + Object value = tokens.get(key); + if (value == null || value.toString().trim().isEmpty()) { + throw new SkyflowException(); + } + } } } } - for (String key : tokens.keySet()) { + for (String key : values.keySet()) { if (key == null || key.trim().isEmpty()) { throw new SkyflowException(); } else { - Object value = tokens.get(key); + Object value = values.get(key); if (value == null || value.toString().trim().isEmpty()) { throw new SkyflowException(); } @@ -186,17 +298,16 @@ public static void validateQueryRequest(QueryRequest queryRequest) throws Skyflo } } - public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) throws SkyflowException { + public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) throws SkyflowException { List columnValues = tokenizeRequest.getColumnValues(); - if(columnValues == null || columnValues.isEmpty()) { + if (columnValues == null || columnValues.isEmpty()) { throw new SkyflowException(); } else { - for(ColumnValue value : columnValues) { - if (value.getValue() == null || value.getValue().isEmpty() ) { + for (ColumnValue value : columnValues) { + if (value.getValue() == null || value.getValue().isEmpty()) { throw new SkyflowException(); - } - else if(value.getColumnGroup() == null || value.getColumnGroup().isEmpty()) { + } else if (value.getColumnGroup() == null || value.getColumnGroup().isEmpty()) { throw new SkyflowException(); } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index 69428bad..69abdcee 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -225,7 +225,7 @@ public GetResponse get(GetRequest getRequest) throws SkyflowException { getRequest.getTable(), getRequest.getIds(), redactionType != null ? redactionType.toString() : null, - getRequest.getTokenization(), + getRequest.getReturnTokens(), getRequest.getFields(), getRequest.getOffset(), getRequest.getLimit(), diff --git a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java index 38a62f50..96a976ce 100644 --- a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java @@ -10,7 +10,7 @@ public class GetRequest { private final String table; private final ArrayList ids; private final RedactionType redactionType; - private final Boolean tokenization; + private final Boolean returnTokens; private final List fields; private final String offset; private final String limit; @@ -23,7 +23,7 @@ private GetRequest(GetRequestBuilder builder) { this.table = builder.table; this.ids = builder.ids; this.redactionType = builder.redactionType; - this.tokenization = builder.tokenization; + this.returnTokens = builder.returnTokens; this.fields = builder.fields; this.offset = builder.offset; this.limit = builder.limit; @@ -49,8 +49,8 @@ public RedactionType getRedactionType() { return redactionType; } - public Boolean getTokenization() { - return tokenization; + public Boolean getReturnTokens() { + return returnTokens; } public List getFields() { @@ -85,7 +85,7 @@ public static class GetRequestBuilder { private String table; private ArrayList ids; private RedactionType redactionType; - private Boolean tokenization; + private Boolean returnTokens; private List fields; private String offset; private String limit; @@ -95,8 +95,6 @@ public static class GetRequestBuilder { private String orderBy; private GetRequestBuilder() { - this.redactionType = RedactionType.PLAIN_TEXT; - this.tokenization = false; this.downloadURL = true; this.orderBy = Constants.ORDER_ASCENDING; } @@ -112,12 +110,12 @@ public GetRequestBuilder ids(ArrayList ids) { } public GetRequestBuilder redactionType(RedactionType redactionType) { - this.redactionType = redactionType == null ? RedactionType.PLAIN_TEXT : redactionType; + this.redactionType = redactionType; return this; } - public GetRequestBuilder tokenization(Boolean tokenization) { - this.tokenization = tokenization != null && tokenization; + public GetRequestBuilder returnTokens(Boolean returnTokens) { + this.returnTokens = returnTokens; return this; } diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java index 5dac7b3a..8c80c932 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java @@ -43,7 +43,7 @@ public DetokenizeRequestBuilder tokens(ArrayList tokens) { } public DetokenizeRequestBuilder redactionType(RedactionType redactionType) { - this.redactionType = redactionType; + this.redactionType = redactionType == null ? RedactionType.PLAIN_TEXT : redactionType; return this; } From e8352ac8d5332d05bc71872a54c84eb2f11fcc3f Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 23 Oct 2024 21:14:14 +0530 Subject: [PATCH 33/68] SK-1678 Add support for using Api Key SK-1681 Add validations for Api Key --- .../java/com/skyflow/config/Credentials.java | 9 ++++ .../serviceaccount/util/BearerToken.java | 35 ++++++------ .../serviceaccount/util/SignedDataTokens.java | 54 +++++++++---------- .../java/com/skyflow/utils/Constants.java | 1 + v2/src/main/java/com/skyflow/utils/Utils.java | 4 +- .../utils/validations/Validations.java | 32 +++++++++-- 6 files changed, 87 insertions(+), 48 deletions(-) diff --git a/v2/src/main/java/com/skyflow/config/Credentials.java b/v2/src/main/java/com/skyflow/config/Credentials.java index 75130b90..8618ebb9 100644 --- a/v2/src/main/java/com/skyflow/config/Credentials.java +++ b/v2/src/main/java/com/skyflow/config/Credentials.java @@ -8,6 +8,7 @@ public class Credentials { private String context; private String credentialsString; private String token; + private String apiKey; public Credentials() { this.path = null; @@ -55,4 +56,12 @@ public String getToken() { public void setToken(String token) { this.token = token; } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } } diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java b/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java index 39c7733d..0b396dc5 100644 --- a/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java @@ -1,5 +1,6 @@ package com.skyflow.serviceaccount.util; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; @@ -49,13 +50,13 @@ private static V1GetAuthTokenResponse generateBearerTokenFromCredentials( ) throws SkyflowException { try { if (credentialsFile == null || !credentialsFile.isFile()) { - throw new SkyflowException("credentials file is not a valid file."); + throw new SkyflowException(); } FileReader reader = new FileReader(String.valueOf(credentialsFile)); JsonObject serviceAccountCredentials = JsonParser.parseReader(reader).getAsJsonObject(); return getBearerTokenFromCredentials(serviceAccountCredentials, context, roles); } catch (JsonSyntaxException e) { - throw new SkyflowException("credentials string is not in valid json string format"); + throw new SkyflowException(); } catch (FileNotFoundException e) { throw new RuntimeException(e); } @@ -66,12 +67,12 @@ private static V1GetAuthTokenResponse generateBearerTokenFromCredentialString( ) throws SkyflowException { try { if (credentials == null || credentials.isEmpty()) { - throw new SkyflowException("credentials string cannot bt empty"); + throw new SkyflowException(); } JsonObject serviceAccountCredentials = JsonParser.parseString(credentials).getAsJsonObject(); return getBearerTokenFromCredentials(serviceAccountCredentials, context, roles); } catch (JsonSyntaxException e) { - throw new SkyflowException("credentials string is not in valid json string format"); + throw new SkyflowException(); } } @@ -79,30 +80,32 @@ private static V1GetAuthTokenResponse getBearerTokenFromCredentials( JsonObject credentials, String context, ArrayList roles ) throws SkyflowException { try { - String privateKey = credentials.get("privateKey").getAsString(); + JsonElement privateKey = credentials.get("privateKey"); if (privateKey == null) { - throw new SkyflowException("privateKey not found"); + throw new SkyflowException(); } - String clientID = credentials.get("clientID").getAsString(); + JsonElement clientID = credentials.get("clientID"); if (clientID == null) { - throw new SkyflowException("clientID not found"); + throw new SkyflowException(); } - String keyID = credentials.get("keyID").getAsString(); + JsonElement keyID = credentials.get("keyID"); if (keyID == null) { - throw new SkyflowException("keyID not found"); + throw new SkyflowException(); } - String tokenURI = credentials.get("tokenURI").getAsString(); + JsonElement tokenURI = credentials.get("tokenURI"); if (tokenURI == null) { - throw new SkyflowException("tokenURI not found"); + throw new SkyflowException(); } - PrivateKey pvtKey = Utils.getPrivateKeyFromPem(privateKey); - String signedUserJWT = getSignedToken(clientID, keyID, tokenURI, pvtKey, context); + PrivateKey pvtKey = Utils.getPrivateKeyFromPem(privateKey.getAsString()); + String signedUserJWT = getSignedToken( + clientID.getAsString(), keyID.getAsString(), tokenURI.getAsString(), pvtKey, context + ); - String basePath = Utils.getBaseURL(tokenURI); + String basePath = Utils.getBaseURL(tokenURI.getAsString()); apiClient.setBasePath(basePath); V1GetAuthTokenRequest body = new V1GetAuthTokenRequest(); @@ -115,7 +118,7 @@ private static V1GetAuthTokenResponse getBearerTokenFromCredentials( } return authenticationApi.authenticationServiceGetAuthToken(body); } catch (MalformedURLException e) { - throw new SkyflowException("Invalid value for tokenURI in credentials"); + throw new SkyflowException(); } catch (ApiException e) { throw new RuntimeException(e); } diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java index 482398b7..d5fe52bf 100644 --- a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java @@ -1,12 +1,13 @@ package com.skyflow.serviceaccount.util; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; import com.skyflow.errors.SkyflowException; import com.skyflow.utils.Utils; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; import java.io.File; import java.io.FileReader; @@ -39,22 +40,21 @@ public static SignedDataTokensBuilder builder() { } private static List generateSignedTokens( - File credentialsPath, ArrayList dataTokens, Integer timeToLive, String context + File credentialsFile, ArrayList dataTokens, Integer timeToLive, String context ) throws SkyflowException { // print info log - JSONParser parser = new JSONParser(); List responseToken; try { - if (credentialsPath == null || !credentialsPath.isFile()) { + if (credentialsFile == null || !credentialsFile.isFile()) { // print error log - throw new SkyflowException("credentials string cannot be empty"); + throw new SkyflowException(); } - Object obj = parser.parse(new FileReader(String.valueOf(credentialsPath))); - JSONObject serviceAccountCredentials = (JSONObject) obj; + FileReader reader = new FileReader(String.valueOf(credentialsFile)); + JsonObject serviceAccountCredentials = JsonParser.parseReader(reader).getAsJsonObject(); responseToken = getSignedTokenFromCredentialsFile(serviceAccountCredentials, dataTokens, timeToLive, context); - } catch (ParseException e) { + } catch (JsonSyntaxException e) { // print error log - throw new SkyflowException("credentials string is not in valid json string format"); + throw new SkyflowException(); } catch (IOException e) { throw new RuntimeException(e); } @@ -66,48 +66,46 @@ private static List generateSignedTokensFromCredentials String credentials, ArrayList dataTokens, Integer timeToLive, String context ) throws SkyflowException { // print info log - JSONParser parser = new JSONParser(); List responseToken; // print info log try { if (credentials == null || credentials.isEmpty()) { // print error log - throw new SkyflowException("credentials string cannot by empty"); + throw new SkyflowException(); } - Object obj = parser.parse(credentials); - JSONObject serviceAccountCredentials = (JSONObject) obj; + JsonObject serviceAccountCredentials = JsonParser.parseString(credentials).getAsJsonObject(); responseToken = getSignedTokenFromCredentialsFile(serviceAccountCredentials, dataTokens, timeToLive, context); - } catch (ParseException e) { + } catch (JsonSyntaxException e) { // print error log - throw new SkyflowException("credentials string is not in valid json string format"); + throw new SkyflowException(); } return responseToken; } private static List getSignedTokenFromCredentialsFile( - JSONObject credentials, ArrayList dataTokens, Integer timeToLive, String context + JsonObject credentials, ArrayList dataTokens, Integer timeToLive, String context ) throws SkyflowException { List signedDataTokens = null; try { - String privateKey = (String) credentials.get("privateKey"); + JsonElement privateKey = credentials.get("privateKey"); if (privateKey == null) { - throw new SkyflowException("privateKey not found"); + throw new SkyflowException(); } - String clientID = (String) credentials.get("clientID"); + JsonElement clientID = credentials.get("clientID"); if (clientID == null) { - // print error log - throw new SkyflowException("invalid clientID"); + throw new SkyflowException(); } - String keyID = (String) credentials.get("keyID"); + + JsonElement keyID = credentials.get("keyID"); if (keyID == null) { - // print error log - throw new SkyflowException("invalid KeyID"); + throw new SkyflowException(); } - PrivateKey pvtKey = Utils.getPrivateKeyFromPem(privateKey); - signedDataTokens = getSignedToken(clientID, keyID, pvtKey, dataTokens, timeToLive, context); + PrivateKey pvtKey = Utils.getPrivateKeyFromPem(privateKey.getAsString()); + signedDataTokens = getSignedToken( + clientID.getAsString(), keyID.getAsString(), pvtKey, dataTokens, timeToLive, context); } catch (RuntimeException e) { // throw error } diff --git a/v2/src/main/java/com/skyflow/utils/Constants.java b/v2/src/main/java/com/skyflow/utils/Constants.java index a88dc63b..e80e9b29 100644 --- a/v2/src/main/java/com/skyflow/utils/Constants.java +++ b/v2/src/main/java/com/skyflow/utils/Constants.java @@ -11,4 +11,5 @@ public final class Constants { public static final String GRANT_TYPE = "urn:ietf:params:oauth:grant-type:jwt-bearer"; public static final String SIGNED_DATA_TOKEN_PREFIX = "signed_token_"; public static final String ORDER_ASCENDING = "ASCENDING"; + public static final String API_KEY_REGEX = "^sky-[a-zA-Z0-9]{5}-[a-fA-F0-9]{32}$"; } diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/v2/src/main/java/com/skyflow/utils/Utils.java index 51115bb0..7fbf0272 100644 --- a/v2/src/main/java/com/skyflow/utils/Utils.java +++ b/v2/src/main/java/com/skyflow/utils/Utils.java @@ -52,8 +52,10 @@ public static String generateBearerToken(Credentials credentials) throws Skyflow .setCtx(credentials.getContext()) .build() .getBearerToken(); - } else { + } else if (credentials.getToken() != null) { return credentials.getToken(); + } else { + return credentials.getApiKey(); } } diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 586631f9..e7b4dc1a 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -8,6 +8,7 @@ import com.skyflow.enums.RedactionType; import com.skyflow.errors.SkyflowException; import com.skyflow.utils.ColumnValue; +import com.skyflow.utils.Constants; import com.skyflow.vault.data.*; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.TokenizeRequest; @@ -17,6 +18,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class Validations { @@ -61,12 +64,35 @@ public static void validateConnectionConfig(ConnectionConfig connectionConfig) t public static void validateCredentials(Credentials credentials) throws SkyflowException { int nonNullMembers = 0; - if (credentials.getPath() != null) nonNullMembers++; - if (credentials.getCredentialsString() != null) nonNullMembers++; - if (credentials.getToken() != null) nonNullMembers++; + String path = credentials.getPath(); + String credentialsString = credentials.getCredentialsString(); + String token = credentials.getToken(); + String apiKey = credentials.getApiKey(); + + if (path != null) nonNullMembers++; + if (credentialsString != null) nonNullMembers++; + if (token != null) nonNullMembers++; + if (apiKey != null) nonNullMembers++; if (nonNullMembers != 1) { throw new SkyflowException(); + } else if (path != null && path.trim().isEmpty()) { + throw new SkyflowException(); + } else if (credentialsString != null && credentialsString.trim().isEmpty()) { + throw new SkyflowException(); + } else if (token != null && token.trim().isEmpty()) { + throw new SkyflowException(); + } else if (apiKey != null) { + if (apiKey.trim().isEmpty()) { + throw new SkyflowException(); + } else { + Pattern pattern = Pattern.compile(Constants.API_KEY_REGEX); + Matcher matcher = pattern.matcher(apiKey); + if (!matcher.matches()) { + // invalid api key + throw new SkyflowException(); + } + } } } From 78a202d6b2088b323b4d3d46e17c88824ebe86a7 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Mon, 28 Oct 2024 17:22:43 +0530 Subject: [PATCH 34/68] SK-1680 Implement logging SK-1723 Add error messages and codes --- v2/src/main/java/com/skyflow/Skyflow.java | 36 +- v2/src/main/java/com/skyflow/VaultClient.java | 49 +- .../java/com/skyflow/config/Credentials.java | 1 - .../java/com/skyflow/config/VaultConfig.java | 2 +- .../java/com/skyflow/enums/InterfaceName.java | 23 + .../java/com/skyflow/errors/ErrorCode.java | 107 +--- .../java/com/skyflow/errors/ErrorMessage.java | 131 +++++ .../com/skyflow/errors/SkyflowException.java | 13 +- .../main/java/com/skyflow/logs/ErrorLogs.java | 126 ++-- .../main/java/com/skyflow/logs/InfoLogs.java | 85 +++ .../serviceaccount/util/BearerToken.java | 61 +- .../serviceaccount/util/SignedDataTokens.java | 63 +- .../skyflow/serviceaccount/util/Token.java | 32 +- .../java/com/skyflow/utils/Constants.java | 4 + .../main/java/com/skyflow/utils/Messages.java | 17 - v2/src/main/java/com/skyflow/utils/Utils.java | 24 +- .../com/skyflow/utils/logger/LogUtil.java | 100 ++++ .../utils/validations/Validations.java | 540 +++++++++++++----- .../vault/controller/VaultController.java | 58 +- .../com/skyflow/vault/data/GetRequest.java | 2 +- .../skyflow/vault/data/InsertResponse.java | 47 -- .../com/skyflow/vault/data/UpdateRequest.java | 4 +- .../vault/tokens/DetokenizeRequest.java | 2 +- 23 files changed, 1091 insertions(+), 436 deletions(-) create mode 100644 v2/src/main/java/com/skyflow/enums/InterfaceName.java create mode 100644 v2/src/main/java/com/skyflow/errors/ErrorMessage.java create mode 100644 v2/src/main/java/com/skyflow/logs/InfoLogs.java delete mode 100644 v2/src/main/java/com/skyflow/utils/Messages.java create mode 100644 v2/src/main/java/com/skyflow/utils/logger/LogUtil.java diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index 6fe84ad9..abc1eea2 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -5,8 +5,13 @@ import com.skyflow.config.VaultConfig; import com.skyflow.enums.Env; import com.skyflow.enums.LogLevel; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; -import com.skyflow.utils.LogUtil; +import com.skyflow.logs.ErrorLogs; +import com.skyflow.logs.InfoLogs; +import com.skyflow.utils.Utils; +import com.skyflow.utils.logger.LogUtil; import com.skyflow.utils.validations.Validations; import com.skyflow.vault.controller.ConnectionController; import com.skyflow.vault.controller.VaultController; @@ -18,6 +23,7 @@ public final class Skyflow { private Skyflow(SkyflowClientBuilder builder) { this.builder = builder; + LogUtil.printInfoLog(InfoLogs.CLIENT_INITIALIZED.getLog()); } public static SkyflowClientBuilder builder() { @@ -111,13 +117,18 @@ public SkyflowClientBuilder() { } public SkyflowClientBuilder addVaultConfig(VaultConfig vaultConfig) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.VALIDATING_VAULT_CONFIG.getLog()); Validations.validateVaultConfig(vaultConfig); if (this.vaultClientsMap.containsKey(vaultConfig.getVaultId())) { - // display error log, throw error, or both - throw new SkyflowException(); + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.VAULT_CONFIG_EXISTS.getLog(), vaultConfig.getVaultId() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.VaultIdAlreadyInConfigList.getMessage()); } else { this.vaultConfigMap.put(vaultConfig.getVaultId(), vaultConfig); this.vaultClientsMap.put(vaultConfig.getVaultId(), new VaultController(vaultConfig, this.skyflowCredentials)); + LogUtil.printInfoLog(InfoLogs.VAULT_CONTROLLER_INITIALIZED.getLog()); } return this; } @@ -127,8 +138,10 @@ public SkyflowClientBuilder updateVaultConfig(VaultConfig vaultConfig) throws Sk VaultConfig updatedConfig = findAndUpdateVaultConfig(vaultConfig); this.vaultClientsMap.get(updatedConfig.getVaultId()).updateVaultConfig(); } else { - // display error log, throw error, or both - throw new SkyflowException(); + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST.getLog(), vaultConfig.getVaultId() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.VaultIdNotInConfigList.getMessage()); } return this; } @@ -138,8 +151,8 @@ public SkyflowClientBuilder removeVaultConfig(String vaultId) throws SkyflowExce this.vaultClientsMap.remove(vaultId); this.vaultConfigMap.remove(vaultId); } else { - // display error log, throw error, or both - throw new SkyflowException(); + LogUtil.printErrorLog(Utils.parameterizedString(ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST.getLog(), vaultId)); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.VaultIdNotInConfigList.getMessage()); } return this; } @@ -187,8 +200,11 @@ public SkyflowClientBuilder addSkyflowCredentials(Credentials credentials) throw } public SkyflowClientBuilder setLogLevel(LogLevel logLevel) { - this.logLevel = logLevel; + this.logLevel = logLevel == null ? LogLevel.ERROR : logLevel; LogUtil.setupLogger(logLevel); + LogUtil.printInfoLog(Utils.parameterizedString( + InfoLogs.CURRENT_LOG_LEVEL.getLog(), String.valueOf(logLevel) + )); return this; } @@ -199,7 +215,9 @@ public Skyflow build() { private VaultConfig findAndUpdateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { VaultConfig previousConfig = this.vaultConfigMap.get(vaultConfig.getVaultId()); if (previousConfig == null) { - // display error log, throw error, or both + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST.getLog(), vaultConfig.getVaultId() + )); throw new SkyflowException(); } else { Env env = vaultConfig.getEnv() != null ? vaultConfig.getEnv() : previousConfig.getEnv(); diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index 52be5807..1c2e81ea 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -2,15 +2,24 @@ 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; import com.skyflow.generated.rest.ApiClient; import com.skyflow.generated.rest.api.QueryApi; import com.skyflow.generated.rest.api.RecordsApi; import com.skyflow.generated.rest.api.TokensApi; +import com.skyflow.generated.rest.auth.HttpBearerAuth; import com.skyflow.generated.rest.models.*; -import com.skyflow.vault.tokens.ColumnValue; +import com.skyflow.logs.InfoLogs; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.utils.Constants; import com.skyflow.utils.Utils; +import com.skyflow.utils.logger.LogUtil; +import com.skyflow.utils.validations.Validations; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.UpdateRequest; +import com.skyflow.vault.tokens.ColumnValue; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.TokenizeRequest; import io.github.cdimascio.dotenv.Dotenv; @@ -27,6 +36,8 @@ public class VaultClient { private final VaultConfig vaultConfig; private Credentials commonCredentials; private Credentials finalCredentials; + private String token; + private String apiKey; protected VaultClient(VaultConfig vaultConfig, Credentials credentials) { super(); @@ -64,6 +75,10 @@ protected VaultConfig getVaultConfig() { return vaultConfig; } + protected String getToken() { + return token; + } + protected void setCommonCredentials(Credentials commonCredentials) { this.commonCredentials = commonCredentials; prioritiseCredentials(); @@ -160,6 +175,31 @@ protected V1TokenizePayload getTokenizePayload(TokenizeRequest request) { return payload; } + protected void setBearerToken() throws SkyflowException { + Validations.validateCredentials(this.finalCredentials); + if (this.finalCredentials.getApiKey() != null) { + setApiKey(); + return; + } else if (token == null || Token.isExpired(token)) { + LogUtil.printInfoLog(InfoLogs.BEARER_TOKEN_EXPIRED.getLog()); + token = Utils.generateBearerToken(this.finalCredentials); + } else { + LogUtil.printInfoLog(InfoLogs.REUSE_BEARER_TOKEN.getLog()); + } + HttpBearerAuth Bearer = (HttpBearerAuth) this.apiClient.getAuthentication("Bearer"); + Bearer.setBearerToken(token); + } + + private void setApiKey() { + if (apiKey == null) { + apiKey = this.finalCredentials.getApiKey(); + } else { + LogUtil.printInfoLog(InfoLogs.REUSE_API_KEY.getLog()); + } + HttpBearerAuth Bearer = (HttpBearerAuth) this.apiClient.getAuthentication("Bearer"); + Bearer.setBearerToken(apiKey); + } + private void updateVaultURL() { String vaultURL = Utils.getVaultURL(this.vaultConfig.getClusterId(), this.vaultConfig.getEnv()); this.apiClient.setBasePath(vaultURL); @@ -173,14 +213,17 @@ private void prioritiseCredentials() { this.finalCredentials = this.commonCredentials; } else { Dotenv dotenv = Dotenv.load(); - String sysCredentials = dotenv.get("SKYFLOW_CREDENTIALS"); + String sysCredentials = dotenv.get(Constants.ENV_CREDENTIALS_KEY_NAME); if (sysCredentials == null) { - // throw error for not passing any credentials + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.EmptyCredentials.getMessage()); } else { this.finalCredentials = new Credentials(); this.finalCredentials.setCredentialsString(sysCredentials); } } + token = null; + apiKey = null; } catch (Exception e) { throw new RuntimeException(e); } diff --git a/v2/src/main/java/com/skyflow/config/Credentials.java b/v2/src/main/java/com/skyflow/config/Credentials.java index 8618ebb9..f1865dc7 100644 --- a/v2/src/main/java/com/skyflow/config/Credentials.java +++ b/v2/src/main/java/com/skyflow/config/Credentials.java @@ -12,7 +12,6 @@ public class Credentials { public Credentials() { this.path = null; - this.roles = new ArrayList<>(); this.context = null; this.credentialsString = null; } diff --git a/v2/src/main/java/com/skyflow/config/VaultConfig.java b/v2/src/main/java/com/skyflow/config/VaultConfig.java index 624d7d9a..2e757c7b 100644 --- a/v2/src/main/java/com/skyflow/config/VaultConfig.java +++ b/v2/src/main/java/com/skyflow/config/VaultConfig.java @@ -37,7 +37,7 @@ public Env getEnv() { } public void setEnv(Env env) { - this.env = env; + this.env = env == null ? Env.PROD : env; } public Credentials getCredentials() { diff --git a/v2/src/main/java/com/skyflow/enums/InterfaceName.java b/v2/src/main/java/com/skyflow/enums/InterfaceName.java new file mode 100644 index 00000000..643bf9da --- /dev/null +++ b/v2/src/main/java/com/skyflow/enums/InterfaceName.java @@ -0,0 +1,23 @@ +package com.skyflow.enums; + +public enum InterfaceName { + INSERT("insert"), + DETOKENIZE("detokenize"), + GET("get"), + UPDATE("update"), + DELETE("delete"), + QUERY("query"), + TOKENIZE("tokenize"), + FILE_UPLOAD("file upload"), + INVOKE_CONNECTION("invoke connection"); + + private final String interfaceName; + + InterfaceName(String interfaceName) { + this.interfaceName = interfaceName; + } + + public String getName() { + return interfaceName; + } +} diff --git a/v2/src/main/java/com/skyflow/errors/ErrorCode.java b/v2/src/main/java/com/skyflow/errors/ErrorCode.java index 73a3bec2..943913c6 100644 --- a/v2/src/main/java/com/skyflow/errors/ErrorCode.java +++ b/v2/src/main/java/com/skyflow/errors/ErrorCode.java @@ -1,115 +1,18 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ package com.skyflow.errors; public enum ErrorCode { - - InvalidCredentialFilePath(400, "{Language} SDK v{semver} Initialization failed. Invalid credentials. Specify the file path as a string."), - EmptyCredentialFilePath(400, "{Language} SDK v{semver} Initialization failed. Invalid credentials. Specify a valid file path."), - InvalidRolesKeyType(4000, "{Language} SDK v{semver} Initialization failed. Invalid roles. Specify roles as an array."), - InvalidRoleType(400, "{Language} SDK v{semver} Initialization failed. Invalid role. Specify the role as a string."), - EmptyRoles(400, "{Language} SDK v{semver} Initialization failed. Invalid roles. Specify at least one role."), - EmptyRoleInRoles(400, "{Language} SDK v{semver} Initialization failed. Invalid role. Specify a valid role."), - InvalidContext(400, "{Language} SDK v{semver} Initialization failed. Invalid context provided. Specify context as type Context."), - EmptyContext(400, "{Language} SDK v{semver} Initialization failed. Invalid context. Specify a valid context."), - InvalidCredentialsString(400, "{Language} SDK v{semver} Initialization failed. Invalid credentials. Specify credentials as a string."), - EmptyCredentialsString(400, "{Language} SDK v{semver} Initialization failed. Invalid credentials. Specify valid credentials."), - EmptyVaultId(400, "{Language} SDK v{semver} Initialization failed. Invalid vault ID. Specify a valid vault ID."), - InvalidVaultId(400, "{Language} SDK v{semver} Initialization failed. Invalid vault ID. Specify a valid vault ID as a string."), - InvalidClusterId(400, "{Language} SDK v{semver} Initialization failed. Invalid cluster ID. Specify cluster ID as a string."), - EmptyClusterId(400, "{Language} SDK v{semver} Initialization failed. Invalid cluster ID. Specify a valid cluster ID."), - InvalidConnectionId(400, "{Language} SDK v{semver} Initialization failed. Invalid connection ID. Specify connection ID as a string."), - EmptyConnectionId(400, "{Language} SDK v{semver} Initialization failed. Invalid connection ID. Specify a valid connection ID."), - InvalidConnectionUrl(400, "{Language} SDK v{semver} Initialization failed. Invalid connection URL. Specify connection URL as a string."), - EmptyConnectionUrl(400, "{Language} SDK v{semver} Initialization failed. Invalid connection URL. Specify a valid connection URL."), - TokenProviderError(400, "{Language} SDK v{semver} Initialization failed. Invalid token provider. Specify the token provider as a function."), - TokenProviderInvalidToken(400, "{Language} SDK v{semver} Initialization failed. Invalid token. Verify the output of the token provider."), - FileNotFound(400, "{Language} SDK v{semver} Initialization failed. Credential file not found at %s1. Verify the file path."), - FileInvalidJson(400, "{Language} SDK v{semver} Initialization failed. File at %s1 is not in valid JSON format. Verify the file contents."), - InvalidCredentials(400, "{Language} SDK v{semver} Initialization failed. Invalid credentials provided. Specify valid credentials."), - InvalidUrl(400, "{Language} SDK v{semver} Initialization failed. Vault URL %s1 is invalid. Specify a valid vault URL."), - MissingPrivateKey(400, "{Language} SDK v{semver} Initialization failed. Unable to read private key in credentials. Verify your private key."), - MissingClientId(400, "{Language} SDK v{semver} Initialization failed. Unable to read client ID in credentials. Verify your client ID."), - MissingKeyId(400, "{Language} SDK v{semver} Initialization failed. Unable to read key ID in credentials. Verify your key ID."), - MissingTokenUri(400, "{Language} SDK v{semver} Initialization failed. Unable to read token URI in credentials. Verify your token URI."), - JwtInvalidFormat(400, "{Language} SDK v{semver} Initialization failed. Invalid private key format. Verify your credentials."), - MissingAccessToken(400, "{Language} SDK v{semver} Validation error. Access token not present in the response from bearer token generation. Verify your credentials."), - MissingTokenType(400, "{Language} SDK v{semver} Validation error. Token type not present in the response from bearer token generation. Verify your credentials."), - JwtDecodeError(400, "{Language} SDK v{semver} Validation error. Invalid access token. Verify your credentials."), - VaultIdNotInConfigList(400, "{Language} SDK v{semver} Validation error. VaultId is missing from the config. Specify the vaultIds from configs."), - ConnectionIdNotInConfigList(400, "{Language} SDK v{semver} Validation error. ConnectionId is missing from the config. Specify the connectionIds from configs."), - EmptyCredentials(400, "{Language} SDK v{semver} Validation error. Invalid credentials. Specify a valid credentials."), - EmptyDataTokens(400, "{Language} SDK v{semver} Validation error. Invalid data tokens. Specify valid data tokens."), - DataTokenKeyType(400, "{Language} SDK v{semver} Validation error. Invalid data tokens. Specify data token as an string array."), - TimeToLeaveKeyType(400, "{Language} SDK v{semver} Validation error. Invalid time to live. Specify time to live parameter as an string."), - - //delete interface - InvalidIdTypeDelete(400, "{Language} SDK v{semver} Validation error. Invalid 'id' in 'records' array at index %s1 in records array. Specify 'id' as a string."), - EmptyRecordsInDelete(400, "{Language} SDK v{semver} Validation error. 'records' array can't be empty. Specify one or more records."), - EmptyIDInDelete(400, "{Language} SDK v{semver} Validation error. 'id' can't be empty in the 'records' array. Specify an ID."), - EmptyTableInDelete(400, "{Language} SDK v{semver} Validation error. 'table' can't be empty in the 'records' array. Specify a table."), - - //get interface - InvalidIdsType(400, "{Language} SDK v{semver} Validation error. 'ids' has a value of type %s1. Specify 'ids' as list."), - InvalidIdType(400, "{Language} SDK v{semver} Validation error. 'id' has a value of type %s1. Specify 'id' as string."), - InvalidRedactionType(400, "{Language} SDK v{semver} Validation error. Redaction key has value of type %s1, expected Skyflow.Redaction."), - InvalidColumnName(400, "{Language} SDK v{semver} Validation error. Column name has value of type %s1, expected a string."), - InvalidColumnValue(400, "{Language} SDK v{semver} Validation error. Column values has value of type %s1, expected a list."), - - //connection - InvalidPathParams(400, "{Language} SDK v{semver} Validation error. Path parameters aren't valid. Specify valid path parameters."), - EmptyPathParams(400, "{Language} SDK v{semver} Validation error. Path parameters are empty. Specify valid path parameters."), - InvalidRequestBody(400, "{Language} SDK v{semver} Validation error. Invalid request body. Specify the request body as an object."), - EmptyRequestBody(400, "{Language} SDK v{semver} Validation error. Request body can't be empty. Specify a valid request body."), - - //insert - RecordsKeyError(400, "{Language} SDK v{semver} Validation error. 'records' key is missing from the payload. Specify a 'records' key."), - FieldsKeyError(400, "{Language} SDK v{semver} Validation error. 'fields' key is missing from the payload. Specify a 'fields' key."), - TableKeyError(400, "{Language} SDK v{semver} Validation error. 'table' key is missing from the payload. Specify a 'table' key."), - TokenKeyError(400, "{Language} SDK v{semver} Validation error. 'token' key is missing from the payload. Specify a 'token' key."), - IdsKeyError(400, "{Language} SDK v{semver} Validation error. 'ids' key is missing from the payload. Specify an 'ids' key."), - RedactionKeyError(400, "{Language} SDK v{semver} Validation error. 'redaction' key is missing from the payload. Specify a 'redaction' key."), - UniqueColumnOrIdsKeyError(400, "{Language} SDK v{semver} Validation error. ids or columnName key is missing from the payload. Specify the ids or unique 'columnName' in payload."), - UpdateFieldKeyError(400, "{Language} SDK v{semver} Validation error. Fields are empty in an update payload. Specify at least one field."), - InvalidRecordsType(400, "{Language} SDK v{semver} Validation error. The 'records' key has a value of type %s1. Specify 'records' as a list."), - InvalidFieldsType(400, "{Language} SDK v{semver} Validation error. The 'fields' key has a value of type %s1. Specify 'fields' as a dictionary."), - InvalidTokensType(400, "{Language} SDK v{semver} Validation error. The 'tokens' key has a value of type %s1. Specify 'tokens' as a dictionary."), - EmptyTokensInInsert(400, "{Language} SDK v{semver} Validation error. The 'tokens' field is empty. Specify tokens for one or more fields."), - MismatchOfFieldsAndTokens(400, "{Language} SDK v{semver} Validation error. 'fields' and 'tokens' have different columns names. Verify that 'fields' and 'tokens' columns match."), - InvalidTableType(400, "{Language} SDK v{semver} Validation error. The 'table' key has a value of type %s1. Specify 'table' as a string."), - RedactionWithTokensNotSupported(400, "{Language} SDK v{semver} Validation error. 'redaction' can't be used when tokens are specified. Remove 'redaction' from payload if tokens are specified."), - TokensGetColumnNotSupported(400, "{Language} SDK v{semver} Validation error. Column name and/or column values can't be used when tokens are specified. Remove unique column values or tokens from the payload."), - BothIdsAndColumnDetailsSpecified(400, "{Language} SDK v{semver} Validation error. Both Skyflow IDs and column details can't be specified. Either specify Skyflow IDs or unique column details."), - PartialSuccess(400, "{Language} SDK v{semver} Validation error. Check 'SkyflowError.data' for details."), - InvalidUpsertOptionsType(400, "{Language} SDK v{semver} Validation error. 'upsert' key cannot be empty in options. At least one object of table and column is required."), - InvalidUpsertTableType(400, "{Language} SDK v{semver} Validation error. The 'table' key in the 'upsert' object has avalue of type %s1. Specify 'table' as a string."), - InvalidUpsertColumnType(400, "{Language} SDK v{semver} Validation error. The 'column' key in the 'upsert' object has a value of type %s1. Specify 'column' as a string."), - EmptyUpsertOptionTable(400, "{Language} SDK v{semver} Validation error. The 'table' key in the 'upsert' object can't be an empty string. Specify a 'table' value."), - EmptyUpsertOptionColumn(400, "{Language} SDK v{semver} Validation error. The 'column' key in the 'upsert' object can't be an empty string. Specify a 'column' value."), - BatchInsertPartialSuccess(400, "{Language} SDK v{semver} Insert operation completed with partial success."), - BatchInsertFailure(400, "{Language} SDK v{semver} Insert operation failed."), - InvalidByotType(400, "{Language} SDK v{semver} Validation error. The 'byot' key has a value of type %s1. Specify 'byot' as Skyflow.BYOT."), - NoTokensInInsert(400, "{Language} SDK v{semver} Validation error. Tokens weren't specified for records while 'byot' was %s1. Specify tokens."), - TokensPassedForByotDisable(400, "{Language} SDK v{semver} Validation error. 'byot' wasn't specified. Set 'byot' to 'ENABLE' to insert tokens."), - InsufficientTokensPassedForByotEnableStrict(400, "{Language} SDK v{semver} Validation error. 'byot' is set to 'ENABLE_STRICT', but some fields are missing tokens. Specify tokens for all fields."); - - + INVALID_INPUT(400), + INVALID_INDEX(404), + SERVER_ERROR(500), + PARTIAL_SUCCESS(500); private final int code; - private final String message; - ErrorCode(int code, String message) { + ErrorCode(int code) { this.code = code; - this.message = message; } public int getCode() { return code; } - - public String getMessage() { - return message; - } - } diff --git a/v2/src/main/java/com/skyflow/errors/ErrorMessage.java b/v2/src/main/java/com/skyflow/errors/ErrorMessage.java new file mode 100644 index 00000000..5d9905a3 --- /dev/null +++ b/v2/src/main/java/com/skyflow/errors/ErrorMessage.java @@ -0,0 +1,131 @@ +package com.skyflow.errors; + +import com.skyflow.utils.Constants; +import com.skyflow.utils.Utils; + +public enum ErrorMessage { + // client initialization + VaultIdAlreadyInConfigList("%s1 Validation error. VaultId is present in an existing config. Specify a new vaultId in config."), + VaultIdNotInConfigList("%s1 Validation error. VaultId is missing from the config. Specify the vaultIds from configs."), + ConnectionIdAlreadyInConfigList("%s1 Validation error. ConnectionId is present in an existing config. Specify a connectionId in config."), + ConnectionIdNotInConfigList("%s1 Validation error. ConnectionId is missing from the config. Specify the connectionIds from configs."), + EmptyCredentials("%s1 Validation error. Invalid credentials. Specify a valid credentials."), + + // vault config + InvalidVaultId("%s1 Initialization failed. Invalid vault ID. Specify a valid vault ID."), + EmptyVaultId("%s1 Initialization failed. Invalid vault ID. Vault ID must not be empty."), + InvalidClusterId("%s1 Initialization failed. Invalid cluster ID. Specify cluster ID."), + EmptyClusterId("%s1 Initialization failed. Invalid cluster ID. Specify a valid cluster ID."), + + // connection config + InvalidConnectionId("%s1 Initialization failed. Invalid connection ID. Specify a valid connection ID."), + EmptyConnectionId("%s1 Initialization failed. Invalid connection ID. Connection ID must not be empty."), + EmptyConnectionUrl("%s1 Initialization failed. Invalid connection URL. Connection URL must not be empty."), + InvalidConnectionUrl("%s1 Initialization failed. Invalid connection URL. Specify a valid connection URL."), + InvalidConnectionUrlFormat("%s1 Initialization failed. Connection URL is not a valid URL. Specify a valid connection URL."), + + // credentials + MultipleTokenGenerationMeansPassed("%s1 Initialization failed. Invalid credentials. Specify only one from 'path', 'credentialsString', 'token' or 'apiKey'."), + NoTokenGenerationMeansPassed("%s1 Initialization failed. Invalid credentials. Specify any one from 'path', 'credentialsString', 'token' or 'apiKey'."), + EmptyCredentialFilePath("%s1 Initialization failed. Invalid credentials. Credentials file path must not be empty."), + EmptyCredentialsString("%s1 Initialization failed. Invalid credentials. Credentials string must not be empty."), + EmptyToken("%s1 Initialization failed. Invalid credentials. Token mut not be empty."), + EmptyApikey("%s1 Initialization failed. Invalid credentials. Api key must not be empty."), + InvalidApikey("%s1 Initialization failed. Invalid credentials. Specify valid api key."), + EmptyRoles("%s1 Initialization failed. Invalid roles. Specify at least one role."), + EmptyRoleInRoles("%s1 Initialization failed. Invalid role. Specify a valid role."), + EmptyContext("%s1 Initialization failed. Invalid context. Specify a valid context."), + + // bearer token generation + FileNotFound("%s1 Initialization failed. Credential file not found at %s2. Verify the file path."), + FileInvalidJson("%s1 Initialization failed. File at %s2 is not in valid JSON format. Verify the file contents."), + CredentialsStringInvalidJson("%s1 Initialization failed. Credentials string is not in valid JSON format. Verify the credentials string contents."), + InvalidCredentials("%s1 Initialization failed. Invalid credentials provided. Specify valid credentials."), + MissingPrivateKey("%s1 Initialization failed. Unable to read private key in credentials. Verify your private key."), + MissingClientId("%s1 Initialization failed. Unable to read client ID in credentials. Verify your client ID."), + MissingKeyId("%s1 Initialization failed. Unable to read key ID in credentials. Verify your key ID."), + MissingTokenUri("%s1 Initialization failed. Unable to read token URI in credentials. Verify your token URI."), + InvalidTokenUri("%s1 Initialization failed. Token URI in not a valid URL in credentials. Verify your token URI."), + JwtInvalidFormat("%s1 Initialization failed. Invalid private key format. Verify your credentials."), + InvalidAlgorithm("%s1 Initialization failed. Invalid algorithm to parse private key. Specify valid algorithm."), + InvalidKeySpec("%s1 Initialization failed. Unable to parse RSA private key. Verify your credentials."), + JwtDecodeError("%s1 Validation error. Invalid access token. Verify your credentials."), + MissingAccessToken("%s1 Validation error. Access token not present in the response from bearer token generation. Verify your credentials."), + MissingTokenType("%s1 Validation error. Token type not present in the response from bearer token generation. Verify your credentials."), + + // insert + TableKeyError("%s1 Validation error. 'table' key is missing from the payload. Specify a 'table' key."), + EmptyTable("%s1 Validation error. 'table' can't be empty. Specify a table."), + ValuesKeyError("%s1 Validation error. 'values' key is missing from the payload. Specify a 'values' key."), + EmptyValues("%s1 Validation error. 'values' can't be empty. Specify values."), + EmptyKeyInValues("%s1 Validation error. Invalid key in values. Specify a valid key."), + EmptyValueInValues("%s1 Validation error. Invalid value in values. Specify a valid value."), + TokensKeyError("%s1 Validation error. 'tokens' key is missing from the payload. Specify a 'tokens' key."), + EmptyTokens("%s1 Validation error. The 'tokens' field is empty. Specify tokens for one or more fields."), + EmptyKeyInTokens("%s1 Validation error. Invalid key tokens. Specify a valid key."), + EmptyValueInTokens("%s1 Validation error. Invalid value in tokens. Specify a valid value."), + EmptyUpsert("%s1 Validation error. 'upsert' key can't be empty. Specify an upsert column."), + HomogenousNotSupportedWithUpsert("%s1 Validation error. 'homogenous' is not supported with 'upsert'. Specify either 'homogenous' or 'upsert'."), + TokensPassedForByotDisable("%s1 Validation error. 'tokenStrict' wasn't specified. Set 'tokenStrict' to 'ENABLE' to insert tokens."), + NoTokensWithByot("%s1 Validation error. Tokens weren't specified for records while 'tokenStrict' was %s2. Specify tokens."), + MismatchOfFieldsAndTokens("%s1 Validation error. 'fields' and 'tokens' have different columns names. Verify that 'fields' and 'tokens' columns match."), + InsufficientTokensPassedForByotEnableStrict("%s1 Validation error. 'tokenStrict' is set to 'ENABLE_STRICT', but some fields are missing tokens. Specify tokens for all fields."), + BatchInsertPartialSuccess("%s1 Insert operation completed with partial success."), + BatchInsertFailure("%s1 Insert operation failed."), + + // detokenize + InvalidDataTokens("%s1 Validation error. Invalid data tokens. Specify valid data tokens."), + EmptyDataTokens("%s1 Validation error. Invalid data tokens. Specify at least one data token."), + EmptyTokenInDataTokens("%s1 Validation error. Invalid data tokens. Specify a valid data token."), + + // get interface + IdsKeyError("%s1 Validation error. 'ids' key is missing from the payload. Specify an 'ids' key."), + EmptyIds("%s1 Validation error. 'ids' can't be empty. Specify at least one id."), + EmptyIdInIds("%s1 Validation error. Invalid id in 'ids'. Specify a valid id."), + EmptyFields("%s1 Validation error. Fields are empty in get payload. Specify at least one field."), + EmptyFieldInFields("%s1 Validation error. Invalid field in 'fields'. Specify a valid field."), + RedactionKeyError("%s1 Validation error. 'redaction' key is missing from the payload. Specify a 'redaction' key."), + RedactionWithTokensNotSupported("%s1 Validation error. 'redaction' can't be used when 'returnTokens' is specified. Remove 'redaction' from payload if 'returnTokens' is specified."), + TokensGetColumnNotSupported("%s1 Validation error. Column name and/or column values can't be used when 'returnTokens' is specified. Remove unique column values or 'returnTokens' from the payload."), + EmptyOffset("%s1 Validation error. 'offset' can't be empty. Specify an offset."), + EmptyLimit("%s1 Validation error. 'limit' can't be empty. Specify a limit."), + UniqueColumnOrIdsKeyError("%s1 Validation error. 'ids' or 'columnName' key is missing from the payload. Specify the ids or unique 'columnName' in payload."), + BothIdsAndColumnDetailsSpecified("%s1 Validation error. Both Skyflow IDs and column details can't be specified. Either specify Skyflow IDs or unique column details."), + ColumnNameKeyError("%s1 Validation error. 'columnName' isn't specified whereas 'columnValues' are specified. Either add 'columnName' or remove 'columnValues'."), + EmptyColumnName("%s1 Validation error. 'columnName' can't be empty. Specify a column name."), + ColumnValuesKeyErrorGet("%s1 Validation error. 'columnValues' aren't specified whereas 'columnName' is specified. Either add 'columnValues' or remove 'columnName'."), + EmptyColumnValues("%s1 Validation error. 'columnValues' can't be empty. Specify at least one column value"), + EmptyValueInColumnValues("%s1 Validation error. Invalid value in column values. Specify a valid column value."), + + TokenKeyError("%s1 Validation error. 'token' key is missing from the payload. Specify a 'token' key."), + PartialSuccess("%s1 Validation error. Check 'SkyflowError.data' for details."), + + // update + SkyflowIdKeyError("%s1 Validation error. 'id' key is missing from the payload. Specify an 'id' key."), + EmptySkyflowId("%s1 Validation error. 'id' can't be empty. Specify an id."), + + // query + QueryKeyError("%s1 Validation error. 'query' key is missing from the payload. Specify a 'query' key."), + EmptyQuery("%s1 Validation error. 'query' can't be empty. Specify a query"), + + // tokenize + ColumnValuesKeyErrorTokenize("%s1 Validation error. 'columnValues' key is missing from the payload. Specify a 'columnValues' key."), + EmptyColumnGroupInColumnValue("%s1 Validation error. Invalid column group in column value. Specify a valid column group."), + + //connection + InvalidPathParams("%s1 Validation error. Path parameters aren't valid. Specify valid path parameters."), + EmptyPathParams("%s1 Validation error. Path parameters are empty. Specify valid path parameters."), + InvalidRequestBody("%s1 Validation error. Invalid request body. Specify the request body as an object."), + EmptyRequestBody("%s1 Validation error. Request body can't be empty. Specify a valid request body."), + + ; + private final String message; + + ErrorMessage(String message) { + this.message = Utils.parameterizedString(message, Constants.SDK_PREFIX); + } + + public String getMessage() { + return message; + } +} diff --git a/v2/src/main/java/com/skyflow/errors/SkyflowException.java b/v2/src/main/java/com/skyflow/errors/SkyflowException.java index 20f70fb8..1d0c81ff 100644 --- a/v2/src/main/java/com/skyflow/errors/SkyflowException.java +++ b/v2/src/main/java/com/skyflow/errors/SkyflowException.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Map; +import java.util.Objects; public class SkyflowException extends Exception { private String requestId; @@ -34,13 +35,19 @@ public SkyflowException(String message, Throwable cause) { public SkyflowException(int code, String message) { super(message); this.code = code; + this.message = message; } public SkyflowException(int code, Throwable cause, Map> responseHeaders, String responseBody) { this(cause); this.code = code; + String contentType = responseHeaders.get("content-type").get(0); setRequestId(responseHeaders); - setResponseBody(responseBody); + if (Objects.equals(contentType, "application/json")) { + setResponseBody(responseBody); + } else if (Objects.equals(contentType, "text/plain")) { + this.message = responseBody; + } } private void setResponseBody(String responseBody) { @@ -86,8 +93,8 @@ public String getMessage() { @Override public String toString() { return String.format( - "%n requestId: %s%n code: %s%n message: %s%n details: %s", - this.requestId, this.code, this.message, this.details + "%n requestId: %s%n code: %s%n message: %s", + this.requestId, this.code, this.message ); } diff --git a/v2/src/main/java/com/skyflow/logs/ErrorLogs.java b/v2/src/main/java/com/skyflow/logs/ErrorLogs.java index b776f314..fa1f945d 100644 --- a/v2/src/main/java/com/skyflow/logs/ErrorLogs.java +++ b/v2/src/main/java/com/skyflow/logs/ErrorLogs.java @@ -1,41 +1,97 @@ package com.skyflow.logs; public enum ErrorLogs { - ClientConnetion(""), - VaultIdIsRequired("Interface: init - Invalid client credentials. vaultID is required."), - EmptyVaultIdInInit("Interface: init - Invalid client credentials. vaultID cannot be empty."), - VaultUrlIsRequired("Interface: init - Invalid client credentials. vaultURL is required."), - EmptyVaultUrlInInit("Interface: init - Invalid client credentials. vaultURL cannot be empty."), - InvalidVaultUrlInInit("Interface: init - Invalid client credentials. Expecting https://XYZ for vaultURL"), - GetBearerTokenIsRequired("Interface: init - Invalid client credentials. getBearerToken is required."), - BearerTokenRejected(""), - InvalidEncodeUriInGet("Interface: get method - Invalid encodeURI type in get."), - InvalidBearerToken("Bearer token is invalid or expired."), - InvalidVaultId("Vault Id is invalid or cannot be found."), - EmptyVaultId("VaultID is empty"), - InvalidCredentials("Invalid client credentials."), - InvalidContainerType("Invalid container type."), - InvalidCollectValue("Invalid value"), - InvalidCollectValueWithLabel("Invalid %s1"), - RecordsKeyNotFound("records object key value not found."), - EmptyRecords("records object is empty."), - RecordsKeyError("Key “records” is missing or payload is incorrectly formatted."), - MissingRecords(""), - InvalidRecords("Invalid Records"), - EmptyRecordIds(""), - EmptyRecordColumnvalues("Record column values cannot be empty."), - InvalidRecordIdType("Invalid Type of Records Id."), - InvalidRecordColumnValueType(""), - InvalidRecordLabel("Invalid Record Label Type."), - InvalidRecordAltText("Invalid Record altText Type."), - FetchRecordsRejected(""), - InsertRecordsRejected(""), - GetBySkyflowIdRejected(""), - SendInvokeConnectionRejected("Invoke connection request rejected."), - UpdateRequestRejected("Update request is rejected."), - InvalidTableName("Table Name passed doesn’t exist in the vault with id."), - EmptyTableName("Table Name is empty."), - EmptyTableAndFields("table or fields parameter cannot be passed as empty at index %s1 in records array."); + // Client initialization + VAULT_CONFIG_EXISTS("Vault config with vault ID %s1 already exists."), + VAULT_CONFIG_DOES_NOT_EXIST("Vault config with vault ID %s1 doesn't exist."), + VAULT_ID_IS_REQUIRED("Invalid vault config. Vault ID is required."), + 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."), + 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."), + EMPTY_CONNECTION_ID("Invalid connection config. Connection ID can not be empty."), + CONNECTION_URL_IS_REQUIRED("Invalid connection config. Connection URL is required."), + EMPTY_CONNECTION_URL("Invalid connection config. Connection URL can not be empty."), + INVALID_CONNECTION_URL("Invalid connection config. Connection URL is not a valid URL."), + MULTIPLE_TOKEN_GENERATION_MEANS_PASSED("Invalid credentials. Only one of 'path', 'credentialsString', 'token' or 'apiKey' is allowed."), + NO_TOKEN_GENERATION_MEANS_PASSED("Invalid credentials. Any one of 'path', 'credentialsString', 'token' or 'apiKey' is required."), + EMPTY_CREDENTIALS_PATH("Invalid credentials. Credentials path can not be empty."), + EMPTY_CREDENTIALS_STRING("Invalid credentials. Credentials string can not be empty."), + EMPTY_TOKEN_VALUE("Invalid credentials. Token can not be empty."), + EMPTY_API_KEY_VALUE("Invalid credentials. Api key can not be empty."), + INVALID_API_KEY("Invalid credentials. Api key is invalid."), + EMPTY_ROLES("Invalid credentials. Roles can not be empty."), + EMPTY_OR_NULL_ROLE_IN_ROLES("Invalid credentials. Role can not be null or empty in roles at index %s1."), + EMPTY_OR_NULL_CONTEXT("Invalid credentials. Context can not be empty."), + + // Bearer token generation + INVALID_BEARER_TOKEN("Bearer token is invalid or expired."), + INVALID_CREDENTIALS_FILE("Credentials file is either null or an invalid file."), + INVALID_CREDENTIALS_STRING("Credentials string is either null or empty."), + INVALID_CREDENTIALS_FILE_FORMAT("Credentials file is not in a valid JSON format."), + CREDENTIALS_FILE_NOT_FOUND("Credentials file not found at specified path."), + INVALID_CREDENTIALS_STRING_FORMAT("Credentials string is not in a valid JSON string format."), + PRIVATE_KEY_IS_REQUIRED("Private key is required."), + CLIENT_ID_IS_REQUIRED("Client ID is required."), + KEY_ID_IS_REQUIRED("Key ID is required."), + TOKEN_URI_IS_REQUIRED("Token URI is required."), + INVALID_TOKEN_URI("Invalid value for token URI in credentials."), + JWT_INVALID_FORMAT("Private key is not in a valid format."), + INVALID_ALGORITHM("Algorithm for parsing private key is invalid or does not exist."), + INVALID_KEY_SPEC("Unable to parse RSA private key."), + BEARER_TOKEN_REJECTED("Bearer token request resulted in failure."), + SIGNED_DATA_TOKENS_REJECTED("Signed data tokens request resulted in failure."), + + // Vault api interfaces + TABLE_IS_REQUIRED("Invalid %s1 request. Table is required."), + EMPTY_TABLE_NAME("Invalid %s1 request. Table name can not be empty."), + VALUES_IS_REQUIRED("Invalid %s1 request. Values are required."), + EMPTY_VALUES("Invalid %s1 request. Values can not be empty."), + EMPTY_OR_NULL_VALUE_IN_VALUES("Invalid %s1 request. Value can not be null or empty in values for key \"%s2\"."), + EMPTY_OR_NULL_KEY_IN_VALUES("Invalid %s1 request. Key can not be null or empty in values"), + EMPTY_UPSERT("Invalid %s1 request. Upsert can not be empty."), + HOMOGENOUS_NOT_SUPPORTED_WITH_UPSERT("Invalid %s1 request. Homogenous is not supported when upsert is passed."), + TOKENS_NOT_ALLOWED_WITH_BYOT_DISABLE("Invalid %s1 request. Tokens are not allowed when tokenStrict is DISABLE."), + TOKENS_REQUIRED_WITH_BYOT("Invalid %s1 request. Tokens are required when tokenStrict is %s2."), + EMPTY_TOKENS("Invalid %s1 request. Tokens can not be empty."), + EMPTY_OR_NULL_VALUE_IN_TOKENS("Invalid %s1 request. Value can not be null or empty in tokens for key \"%s2\"."), + EMPTY_OR_NULL_KEY_IN_TOKENS("Invalid %s1 request. Key can not be null or empty in tokens."), + INSUFFICIENT_TOKENS_PASSED_FOR_BYOT_ENABLE_STRICT("Invalid %s1 request. For tokenStrict as ENABLE_STRICT, tokens should be passed for all fields."), + MISMATCH_OF_FIELDS_AND_TOKENS("Invalid %s1 request. Keys for values and tokens are not matching."), + INSERT_RECORDS_REJECTED("Insert request resulted in failure."), + TOKENS_REQUIRED("Invalid %s1 request. Tokens are required."), + EMPTY_OR_NULL_TOKEN_IN_TOKENS("Invalid %s1 request. Token can not be null or empty in tokens at index %s2."), + REDACTION_IS_REQUIRED("Invalid %s1 request. Redaction is required."), + DETOKENIZE_REQUEST_REJECTED("Detokenize request resulted in failure."), + IDS_IS_REQUIRED("Invalid %s1 request. Ids are required."), + EMPTY_IDS("Invalid %s1 request. Ids can not be empty."), + EMPTY_OR_NULL_ID_IN_IDS("Invalid %s1 request. Id can not be null or empty in ids at index %s2."), + EMPTY_FIELDS("Invalid %s1 request. Fields can not be empty."), + EMPTY_OR_NULL_FIELD_IN_FIELDS("Invalid %s1 request. Field can not be null or empty in fields at index %s2."), + TOKENIZATION_NOT_SUPPORTED_WITH_REDACTION("Invalid %s1 request. Return tokens is not supported when redaction is applied."), + TOKENIZATION_SUPPORTED_ONLY_WITH_IDS("Invalid %s1 request. Return tokens is not supported when column name and values are passed."), + EMPTY_OFFSET("Invalid %s1 request. Offset can not be empty."), + EMPTY_LIMIT("Invalid %s1 request. Limit can not be empty."), + NEITHER_IDS_NOR_COLUMN_NAME_PASSED("Invalid %s1 request. Neither ids nor column name and values are passed."), + BOTH_IDS_AND_COLUMN_NAME_PASSED("Invalid %s1 request. Both ids and column name and values are passed."), + COLUMN_NAME_IS_REQUIRED("Invalid %s1 request. Column name is required when column values are passed."), + EMPTY_COLUMN_NAME("Invalid %s1 request. Column name can not be empty."), + COLUMN_VALUES_IS_REQUIRED_GET("Invalid %s1 request. Column values are required when column name is passed."), + EMPTY_COLUMN_VALUES("Invalid %s1 request. Column values can not be empty."), + EMPTY_OR_NULL_COLUMN_VALUE_IN_COLUMN_VALUES("Invalid %s1 request. Column value can not by null or empty in column values at index %s2."), + GET_REQUEST_REJECTED("Get request resulted in failure."), + SKYFLOW_ID_IS_REQUIRED("Invalid %s1 request. Skyflow Id is required."), + EMPTY_SKYFLOW_ID("Invalid %s1 request. Skyflow Id can not be empty."), + UPDATE_REQUEST_REJECTED("Update request resulted in failure."), + QUERY_IS_REQUIRED("Invalid %s1 request. Query is required."), + EMPTY_QUERY("Invalid %s1 request. Query can not be empty."), + QUERY_REQUEST_REJECTED("Query request resulted in failure."), + COLUMN_VALUES_IS_REQUIRED_TOKENIZE("Invalid %s1 request. ColumnValues are required."), + EMPTY_OR_NULL_COLUMN_GROUP_IN_COLUMN_VALUES("Invalid %s1 request. Column group can not be null or empty in column values at index %s2."), + TOKENIZE_REQUEST_REJECTED("Tokenize request resulted in failure."), + DELETE_REQUEST_REJECTED("Delete request resulted in failure."); private final String log; diff --git a/v2/src/main/java/com/skyflow/logs/InfoLogs.java b/v2/src/main/java/com/skyflow/logs/InfoLogs.java new file mode 100644 index 00000000..5beecfd3 --- /dev/null +++ b/v2/src/main/java/com/skyflow/logs/InfoLogs.java @@ -0,0 +1,85 @@ +package com.skyflow.logs; + +public enum InfoLogs { + // Client initialization + CLIENT_INITIALIZED("Initialized skyflow client."), + VALIDATING_VAULT_CONFIG("Validating vault config."), + VALIDATING_CONNECTION_CONFIG("Validating connection config."), + UNABLE_TO_GENERATE_SDK_METRIC("Unable to generate %s1 metric."), + VAULT_CONTROLLER_INITIALIZED("Initialized vault controller with vault ID %s1."), + CONNECTION_CONTROLLER_INITIALIZED("Initialized connection controller with connection ID %s1."), + LOGGER_SETUP_DONE("Set up logger."), + CURRENT_LOG_LEVEL("Current log level is %s1."), + + // Bearer token generation + EMPTY_BEARER_TOKEN("Bearer token is empty."), + BEARER_TOKEN_EXPIRED("Bearer token is expired."), + GET_BEARER_TOKEN_TRIGGERED("getBearerToken method triggered."), + GET_BEARER_TOKEN_SUCCESS("Bearer token generated."), + GET_SIGNED_DATA_TOKENS_TRIGGERED("getSignedDataTokens method triggered."), + GET_SIGNED_DATA_TOKEN_SUCCESS("Signed data tokens generated."), + REUSE_BEARER_TOKEN("Reusing bearer token."), + REUSE_API_KEY("Reusing api key."), + GENERATE_BEARER_TOKEN_FROM_CREDENTIALS_TRIGGERED("generateBearerTokenFromCredentials method triggered."), + GENERATE_BEARER_TOKEN_FROM_CREDENTIALS_STRING_TRIGGERED("generateBearerTokenFromCredentialString method triggered."), + GENERATE_SIGNED_TOKENS_FROM_CREDENTIALS_FILE_TRIGGERED("generateSignedTokensFromCredentialsFile method triggered."), + GENERATE_SIGNED_TOKENS_FROM_CREDENTIALS_STRING_TRIGGERED("generateSignedTokensFromCredentialsString method triggered."), + + // Insert interface + INSERT_TRIGGERED("Insert method triggered."), + VALIDATE_INSERT_REQUEST("Validating insert request."), + INSERT_REQUEST_RESOLVED("Insert request resolved."), + INSERT_SUCCESS("Data inserted."), + + // Detokenize interface + DETOKENIZE_TRIGGERED("Detokenize method triggered."), + VALIDATE_DETOKENIZE_REQUEST("Validating detokenize request."), + DETOKENIZE_REQUEST_RESOLVED("Detokenize request resolved."), + DETOKENIZE_PARTIAL_SUCCESS("Data detokenized partially."), + DETOKENIZE_SUCCESS("Data detokenized."), + + // Get interface + GET_TRIGGERED("Get method triggered."), + VALIDATE_GET_REQUEST("Validating get request."), + GET_REQUEST_RESOLVED("Get request resolved."), + GET_SUCCESS("Data revealed."), + + // Update interface + UPDATE_TRIGGERED("Update method triggered."), + VALIDATE_UPDATE_REQUEST("Validating update request."), + UPDATE_REQUEST_RESOLVED("Update request resolved."), + UPDATE_SUCCESS("Data updated."), + + // Delete interface + DELETE_TRIGGERED("Delete method triggered."), + VALIDATING_DELETE_REQUEST("Validating delete request."), + DELETE_REQUEST_RESOLVED("Delete request resolved."), + DELETE_SUCCESS("Data deleted."), + + // Query interface + QUERY_TRIGGERED("Query method triggered."), + VALIDATING_QUERY_REQUEST("Validating query request."), + QUERY_REQUEST_RESOLVED("Query request resolved."), + QUERY_SUCCESS("Query executed."), + + // Tokenize interface + TOKENIZE_TRIGGERED("Tokenize method triggered."), + VALIDATING_TOKENIZE_REQUEST("Validating tokenize request."), + TOKENIZE_REQUEST_RESOLVED("Tokenize request resolved."), + TOKENIZE_SUCCESS("Data tokenized."), + + // Invoke connection interface + INVOKE_CONNECTION_TRIGGERED("Invoke connection method triggered."), + VALIDATING_INVOKE_CONNECTION_REQUEST("Validating invoke connection request."), + INVOKE_CONNECTION_REQUEST_RESOLVED("Invoke connection request resolved."); + + private final String log; + + InfoLogs(String log) { + this.log = log; + } + + public final String getLog() { + return log; + } +} diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java b/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java index 0b396dc5..2040cf16 100644 --- a/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java @@ -4,14 +4,19 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.ApiClient; import com.skyflow.generated.rest.ApiException; import com.skyflow.generated.rest.api.AuthenticationApi; import com.skyflow.generated.rest.models.V1GetAuthTokenRequest; import com.skyflow.generated.rest.models.V1GetAuthTokenResponse; +import com.skyflow.logs.ErrorLogs; +import com.skyflow.logs.InfoLogs; import com.skyflow.utils.Constants; import com.skyflow.utils.Utils; +import com.skyflow.utils.logger.LogUtil; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; @@ -48,31 +53,41 @@ public static BearerTokenBuilder builder() { private static V1GetAuthTokenResponse generateBearerTokenFromCredentials( File credentialsFile, String context, ArrayList roles ) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.GENERATE_BEARER_TOKEN_FROM_CREDENTIALS_TRIGGERED.getLog()); try { if (credentialsFile == null || !credentialsFile.isFile()) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_FILE.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidCredentials.getMessage()); } FileReader reader = new FileReader(String.valueOf(credentialsFile)); JsonObject serviceAccountCredentials = JsonParser.parseReader(reader).getAsJsonObject(); return getBearerTokenFromCredentials(serviceAccountCredentials, context, roles); } catch (JsonSyntaxException e) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_FILE_FORMAT.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( + ErrorMessage.FileInvalidJson.getMessage(), credentialsFile.getAbsolutePath())); } catch (FileNotFoundException e) { - throw new RuntimeException(e); + LogUtil.printErrorLog(ErrorLogs.CREDENTIALS_FILE_NOT_FOUND.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( + ErrorMessage.FileNotFound.getMessage(), credentialsFile.getAbsolutePath())); } } private static V1GetAuthTokenResponse generateBearerTokenFromCredentialString( String credentials, String context, ArrayList roles ) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.GENERATE_BEARER_TOKEN_FROM_CREDENTIALS_STRING_TRIGGERED.getLog()); try { if (credentials == null || credentials.isEmpty()) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_STRING.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidCredentials.getMessage()); } JsonObject serviceAccountCredentials = JsonParser.parseString(credentials).getAsJsonObject(); return getBearerTokenFromCredentials(serviceAccountCredentials, context, roles); } catch (JsonSyntaxException e) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_STRING_FORMAT.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.CredentialsStringInvalidJson.getMessage()); } } @@ -82,22 +97,26 @@ private static V1GetAuthTokenResponse getBearerTokenFromCredentials( try { JsonElement privateKey = credentials.get("privateKey"); if (privateKey == null) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.PRIVATE_KEY_IS_REQUIRED.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.MissingPrivateKey.getMessage()); } JsonElement clientID = credentials.get("clientID"); if (clientID == null) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.CLIENT_ID_IS_REQUIRED.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.MissingClientId.getMessage()); } JsonElement keyID = credentials.get("keyID"); if (keyID == null) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.KEY_ID_IS_REQUIRED.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.MissingKeyId.getMessage()); } JsonElement tokenURI = credentials.get("tokenURI"); if (tokenURI == null) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.TOKEN_URI_IS_REQUIRED.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.MissingTokenUri.getMessage()); } PrivateKey pvtKey = Utils.getPrivateKeyFromPem(privateKey.getAsString()); @@ -118,9 +137,11 @@ private static V1GetAuthTokenResponse getBearerTokenFromCredentials( } return authenticationApi.authenticationServiceGetAuthToken(body); } catch (MalformedURLException e) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVALID_TOKEN_URI.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidTokenUri.getMessage()); } catch (ApiException e) { - throw new RuntimeException(e); + LogUtil.printErrorLog(ErrorLogs.BEARER_TOKEN_REJECTED.getLog()); + throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } } @@ -151,19 +172,17 @@ private static String getScopeUsingRoles(ArrayList roles) { } public synchronized String getBearerToken() throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.GET_BEARER_TOKEN_TRIGGERED.getLog()); V1GetAuthTokenResponse response; String accessToken = null; - try { - if (this.credentialsFile != null && Objects.equals(this.credentialsType, "FILE")) { - response = generateBearerTokenFromCredentials(this.credentialsFile, this.ctx, this.roles); - accessToken = response.getAccessToken(); - } else if (this.credentialsString != null && Objects.equals(this.credentialsType, "STRING")) { - response = generateBearerTokenFromCredentialString(this.credentialsString, this.ctx, this.roles); - accessToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); + if (this.credentialsFile != null && Objects.equals(this.credentialsType, "FILE")) { + response = generateBearerTokenFromCredentials(this.credentialsFile, this.ctx, this.roles); + accessToken = response.getAccessToken(); + } else if (this.credentialsString != null && Objects.equals(this.credentialsType, "STRING")) { + response = generateBearerTokenFromCredentialString(this.credentialsString, this.ctx, this.roles); + accessToken = response.getAccessToken(); } + LogUtil.printInfoLog(InfoLogs.GET_BEARER_TOKEN_SUCCESS.getLog()); return accessToken; } diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java index d5fe52bf..47e50951 100644 --- a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java @@ -4,14 +4,19 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; +import com.skyflow.logs.ErrorLogs; +import com.skyflow.logs.InfoLogs; import com.skyflow.utils.Utils; +import com.skyflow.utils.logger.LogUtil; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileReader; -import java.io.IOException; import java.security.PrivateKey; import java.util.ArrayList; import java.util.Date; @@ -39,75 +44,79 @@ public static SignedDataTokensBuilder builder() { return new SignedDataTokensBuilder(); } - private static List generateSignedTokens( + private static List generateSignedTokenFromCredentialsFile( File credentialsFile, ArrayList dataTokens, Integer timeToLive, String context ) throws SkyflowException { - // print info log + LogUtil.printInfoLog(InfoLogs.GENERATE_SIGNED_TOKENS_FROM_CREDENTIALS_FILE_TRIGGERED.getLog()); List responseToken; try { if (credentialsFile == null || !credentialsFile.isFile()) { - // print error log - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_FILE.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidCredentials.getMessage()); } FileReader reader = new FileReader(String.valueOf(credentialsFile)); JsonObject serviceAccountCredentials = JsonParser.parseReader(reader).getAsJsonObject(); - responseToken = getSignedTokenFromCredentialsFile(serviceAccountCredentials, dataTokens, timeToLive, context); + responseToken = generateSignedTokensFromCredentials(serviceAccountCredentials, dataTokens, timeToLive, context); } catch (JsonSyntaxException e) { - // print error log - throw new SkyflowException(); - } catch (IOException e) { - throw new RuntimeException(e); + LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_FILE_FORMAT.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( + ErrorMessage.FileInvalidJson.getMessage(), credentialsFile.getAbsolutePath())); + } catch (FileNotFoundException e) { + LogUtil.printErrorLog(ErrorLogs.CREDENTIALS_FILE_NOT_FOUND.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( + ErrorMessage.FileNotFound.getMessage(), credentialsFile.getAbsolutePath())); } - return responseToken; } private static List generateSignedTokensFromCredentialsString( String credentials, ArrayList dataTokens, Integer timeToLive, String context ) throws SkyflowException { - // print info log + LogUtil.printInfoLog(InfoLogs.GENERATE_SIGNED_TOKENS_FROM_CREDENTIALS_STRING_TRIGGERED.getLog()); List responseToken; - // print info log try { if (credentials == null || credentials.isEmpty()) { - // print error log - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_STRING.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidCredentials.getMessage()); } JsonObject serviceAccountCredentials = JsonParser.parseString(credentials).getAsJsonObject(); - responseToken = getSignedTokenFromCredentialsFile(serviceAccountCredentials, dataTokens, timeToLive, context); - + responseToken = generateSignedTokensFromCredentials(serviceAccountCredentials, dataTokens, timeToLive, context); } catch (JsonSyntaxException e) { - // print error log - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_STRING_FORMAT.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.CredentialsStringInvalidJson.getMessage()); } - return responseToken; } - private static List getSignedTokenFromCredentialsFile( + private static List generateSignedTokensFromCredentials( JsonObject credentials, ArrayList dataTokens, Integer timeToLive, String context ) throws SkyflowException { List signedDataTokens = null; try { JsonElement privateKey = credentials.get("privateKey"); if (privateKey == null) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.PRIVATE_KEY_IS_REQUIRED.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.MissingPrivateKey.getMessage()); } JsonElement clientID = credentials.get("clientID"); if (clientID == null) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.CLIENT_ID_IS_REQUIRED.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.MissingClientId.getMessage()); } JsonElement keyID = credentials.get("keyID"); if (keyID == null) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.KEY_ID_IS_REQUIRED.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.MissingKeyId.getMessage()); } PrivateKey pvtKey = Utils.getPrivateKeyFromPem(privateKey.getAsString()); signedDataTokens = getSignedToken( clientID.getAsString(), keyID.getAsString(), pvtKey, dataTokens, timeToLive, context); } catch (RuntimeException e) { - // throw error + LogUtil.printErrorLog(ErrorLogs.SIGNED_DATA_TOKENS_REJECTED.getLog()); + throw new SkyflowException(e); } return signedDataTokens; } @@ -144,16 +153,18 @@ private static List getSignedToken( } public synchronized List getSignedDataTokens() throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.GET_SIGNED_DATA_TOKENS_TRIGGERED.getLog()); List signedToken = new ArrayList<>(); try { if (this.credentialsFile != null && Objects.equals(this.credentialsType, "FILE")) { - signedToken = generateSignedTokens(this.credentialsFile, this.dataTokens, this.timeToLive, this.ctx); + signedToken = generateSignedTokenFromCredentialsFile(this.credentialsFile, this.dataTokens, this.timeToLive, this.ctx); } else if (this.credentialsString != null && Objects.equals(this.credentialsType, "STRING")) { signedToken = generateSignedTokensFromCredentialsString(this.credentialsString, this.dataTokens, this.timeToLive, this.ctx); } } catch (SkyflowException e) { e.printStackTrace(); } + LogUtil.printInfoLog(InfoLogs.GET_SIGNED_DATA_TOKEN_SUCCESS.getLog()); return signedToken; } diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/Token.java b/v2/src/main/java/com/skyflow/serviceaccount/util/Token.java index 60e49947..90da0cf4 100644 --- a/v2/src/main/java/com/skyflow/serviceaccount/util/Token.java +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/Token.java @@ -1,12 +1,16 @@ package com.skyflow.serviceaccount.util; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; +import com.skyflow.logs.ErrorLogs; +import com.skyflow.logs.InfoLogs; +import com.skyflow.utils.logger.LogUtil; import org.apache.commons.codec.binary.Base64; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import java.io.File; import java.nio.charset.StandardCharsets; import java.util.Date; @@ -15,30 +19,28 @@ public static boolean isExpired(String token) { long expiryTime; long currentTime; try { - if (token == null || token.isEmpty()) { - // print info log + if (token == null || token.trim().isEmpty()) { + LogUtil.printInfoLog(InfoLogs.EMPTY_BEARER_TOKEN.getLog()); return true; } currentTime = new Date().getTime() / 1000; - expiryTime = (long) decoded(token).get("exp"); + expiryTime = decoded(token).get("exp").getAsLong(); - } catch (ParseException e) { - // display info log - return true; - } catch (SkyflowException e) { - // display info log + } catch (JsonSyntaxException | SkyflowException e) { + LogUtil.printErrorLog(ErrorLogs.INVALID_BEARER_TOKEN.getLog()); return true; } return currentTime > expiryTime; } - static JSONObject decoded(String encodedToken) throws ParseException, SkyflowException { + static JsonObject decoded(String encodedToken) throws JsonSyntaxException, SkyflowException { String[] split = encodedToken.split("\\."); if (split.length < 3) { - throw new SkyflowException("invalid bearer token"); + LogUtil.printErrorLog(ErrorLogs.INVALID_BEARER_TOKEN.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.JwtDecodeError.getMessage()); } byte[] decodedBytes = Base64.decodeBase64(split[1]); - return (JSONObject) new JSONParser().parse(new String(decodedBytes, StandardCharsets.UTF_8)); + return JsonParser.parseString(new String(decodedBytes, StandardCharsets.UTF_8)).getAsJsonObject(); } } diff --git a/v2/src/main/java/com/skyflow/utils/Constants.java b/v2/src/main/java/com/skyflow/utils/Constants.java index e80e9b29..f7c378f5 100644 --- a/v2/src/main/java/com/skyflow/utils/Constants.java +++ b/v2/src/main/java/com/skyflow/utils/Constants.java @@ -12,4 +12,8 @@ public final class Constants { public static final String SIGNED_DATA_TOKEN_PREFIX = "signed_token_"; public static final String ORDER_ASCENDING = "ASCENDING"; public static final String API_KEY_REGEX = "^sky-[a-zA-Z0-9]{5}-[a-fA-F0-9]{32}$"; + public static final String ENV_CREDENTIALS_KEY_NAME = "SKYFLOW_CREDENTIALS"; + public static final String SDK_NAME = "Skyflow Java SDK "; + public static final String SDK_VERSION = "v2"; + public static final String SDK_PREFIX = SDK_NAME + SDK_VERSION; } diff --git a/v2/src/main/java/com/skyflow/utils/Messages.java b/v2/src/main/java/com/skyflow/utils/Messages.java deleted file mode 100644 index 28144e0a..00000000 --- a/v2/src/main/java/com/skyflow/utils/Messages.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.skyflow.utils; - -public final class Messages { - public final static String INVALID_BEARER_TOKEN = "Invalid bearer token"; - public final static String INVALID_VAULT_ID = "Invalid vault id"; - public final static String INVALID_VAULT_URL = "Invalid vault url"; - // other error messages - - public final static String WARNING_MESSAGE = "Some warning message"; - // other warning messages - - public final static String INFO_MESSAGE = "Some info message"; - // other info messages - - public final static String DEBUG_MESSAGE = "Some debug message"; - // other debug messages -} diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/v2/src/main/java/com/skyflow/utils/Utils.java index 7fbf0272..e6811fd3 100644 --- a/v2/src/main/java/com/skyflow/utils/Utils.java +++ b/v2/src/main/java/com/skyflow/utils/Utils.java @@ -2,8 +2,12 @@ import com.skyflow.config.Credentials; import com.skyflow.enums.Env; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; +import com.skyflow.logs.ErrorLogs; import com.skyflow.serviceaccount.util.BearerToken; +import com.skyflow.utils.logger.LogUtil; import org.apache.commons.codec.binary.Base64; import java.io.File; @@ -52,10 +56,8 @@ public static String generateBearerToken(Credentials credentials) throws Skyflow .setCtx(credentials.getContext()) .build() .getBearerToken(); - } else if (credentials.getToken() != null) { - return credentials.getToken(); } else { - return credentials.getApiKey(); + return credentials.getToken(); } } @@ -73,7 +75,8 @@ public static PrivateKey getPrivateKeyFromPem(String pemKey) throws SkyflowExcep privateKeyContent = privateKeyContent.replace("\r\n", ""); privateKey = parsePkcs8PrivateKey(Base64.decodeBase64(privateKeyContent)); } else { - // display error log and throw error + LogUtil.printErrorLog(ErrorLogs.JWT_INVALID_FORMAT.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.JwtInvalidFormat.getMessage()); } return privateKey; } @@ -85,6 +88,13 @@ public static String getBaseURL(String url) throws MalformedURLException { return String.format("%s://%s", protocol, host); } + public static String parameterizedString(String base, String... args) { + for (int index = 0; index < args.length; index++) { + base = base.replace("%s" + (index + 1), args[index]); + } + return base; + } + private static PrivateKey parsePkcs8PrivateKey(byte[] pkcs8Bytes) throws SkyflowException { KeyFactory keyFactory; PrivateKey privateKey = null; @@ -93,9 +103,11 @@ private static PrivateKey parsePkcs8PrivateKey(byte[] pkcs8Bytes) throws Skyflow keyFactory = KeyFactory.getInstance("RSA"); privateKey = keyFactory.generatePrivate(keySpec); } catch (NoSuchAlgorithmException e) { - // display error log and throw error + LogUtil.printErrorLog(ErrorLogs.INVALID_ALGORITHM.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidAlgorithm.getMessage()); } catch (InvalidKeySpecException e) { - // display error log and throw error + LogUtil.printErrorLog(ErrorLogs.INVALID_KEY_SPEC.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidKeySpec.getMessage()); } return privateKey; } diff --git a/v2/src/main/java/com/skyflow/utils/logger/LogUtil.java b/v2/src/main/java/com/skyflow/utils/logger/LogUtil.java new file mode 100644 index 00000000..78cfa038 --- /dev/null +++ b/v2/src/main/java/com/skyflow/utils/logger/LogUtil.java @@ -0,0 +1,100 @@ +package com.skyflow.utils.logger; + +import com.skyflow.enums.LogLevel; +import com.skyflow.logs.InfoLogs; +import com.skyflow.utils.Constants; + +import java.util.logging.*; + +public final class LogUtil { + private static final Logger LOGGER = Logger.getLogger(LogUtil.class.getName()); + private static final String SDK_LOG_PREFIX = "[" + Constants.SDK_PREFIX + "] "; + private static boolean IS_LOGGER_SETUP_DONE = false; + + synchronized public static void setupLogger(LogLevel logLevel) { + IS_LOGGER_SETUP_DONE = true; + LogManager.getLogManager().reset(); + LOGGER.setUseParentHandlers(false); + Formatter formatter = new SimpleFormatter() { + private static final String format = "%s: %s %n"; + + // Override format method + @Override + public synchronized String format(LogRecord logRecord) { + return String.format( + format, + loggerLevelToLogLevelMap(logRecord.getLevel()), + logRecord.getMessage() + ); + } + }; + ConsoleHandler consoleHandler = new ConsoleHandler(); + consoleHandler.setFormatter(formatter); + consoleHandler.setLevel(Level.CONFIG); + + LOGGER.addHandler(consoleHandler); + LOGGER.setLevel(logLevelToLoggerLevelMap(logLevel)); + printInfoLog(InfoLogs.LOGGER_SETUP_DONE.getLog()); + } + + public static void printErrorLog(String message) { + if (IS_LOGGER_SETUP_DONE) + LOGGER.severe(SDK_LOG_PREFIX + message); + else { + setupLogger(LogLevel.ERROR); + LOGGER.severe(SDK_LOG_PREFIX + message); + } + } + + public static void printDebugLog(String message) { + if (IS_LOGGER_SETUP_DONE) + LOGGER.config(SDK_LOG_PREFIX + message); + } + + public static void printWarningLog(String message) { + if (IS_LOGGER_SETUP_DONE) + LOGGER.warning(SDK_LOG_PREFIX + message); + } + + public static void printInfoLog(String message) { + if (IS_LOGGER_SETUP_DONE) + LOGGER.info(SDK_LOG_PREFIX + message); + } + + + private static Level logLevelToLoggerLevelMap(LogLevel logLevel) { + Level loggerLevel; + switch (logLevel) { + case ERROR: + loggerLevel = Level.SEVERE; + break; + case WARN: + loggerLevel = Level.WARNING; + break; + case INFO: + loggerLevel = Level.INFO; + break; + case DEBUG: + loggerLevel = Level.CONFIG; + break; + default: + loggerLevel = Level.OFF; + } + return loggerLevel; + } + + private static LogLevel loggerLevelToLogLevelMap(Level loggerLevel) { + LogLevel logLevel; + if (Level.SEVERE.equals(loggerLevel)) { + logLevel = LogLevel.ERROR; + } else if (Level.WARNING.equals(loggerLevel)) { + logLevel = LogLevel.WARN; + } else if (Level.INFO.equals(loggerLevel)) { + logLevel = LogLevel.INFO; + } else if (Level.CONFIG.equals(loggerLevel)) { + logLevel = LogLevel.DEBUG; + } else + logLevel = LogLevel.OFF; + return logLevel; + } +} diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index e7b4dc1a..bd4a7cd6 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -4,12 +4,17 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.enums.Byot; -import com.skyflow.enums.Env; +import com.skyflow.enums.InterfaceName; import com.skyflow.enums.RedactionType; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; -import com.skyflow.utils.ColumnValue; +import com.skyflow.logs.ErrorLogs; import com.skyflow.utils.Constants; +import com.skyflow.utils.Utils; +import com.skyflow.utils.logger.LogUtil; import com.skyflow.vault.data.*; +import com.skyflow.vault.tokens.ColumnValue; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.TokenizeRequest; @@ -26,21 +31,19 @@ public class Validations { public static void validateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { String vaultId = vaultConfig.getVaultId(); String clusterId = vaultConfig.getClusterId(); - Env env = vaultConfig.getEnv(); Credentials credentials = vaultConfig.getCredentials(); - if (vaultId == null || vaultId.trim().isEmpty()) { - if (vaultId == null) { - // error log for required - } else { - // error log for empty - } - throw new SkyflowException(); - } else if (clusterId == null || clusterId.trim().isEmpty()) { - // error log - throw new SkyflowException(); - } else if (env == null) { - // error log - throw new SkyflowException(); + 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); } @@ -49,16 +52,25 @@ public static void validateVaultConfig(VaultConfig vaultConfig) throws SkyflowEx public static void validateConnectionConfig(ConnectionConfig connectionConfig) throws SkyflowException { String connectionId = connectionConfig.getConnectionId(); String connectionUrl = connectionConfig.getConnectionUrl(); - if (connectionId == null || connectionId.trim().isEmpty()) { - throw new SkyflowException(); - } else if (connectionUrl == null || connectionUrl.trim().isEmpty()) { - throw new SkyflowException(); - } + if (connectionId == null) { + LogUtil.printErrorLog(ErrorLogs.CONNECTION_ID_IS_REQUIRED.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidConnectionId.getMessage()); + } else if (connectionId.trim().isEmpty()) { + LogUtil.printErrorLog(ErrorLogs.EMPTY_CONNECTION_ID.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyConnectionId.getMessage()); + } else if (connectionUrl == null) { + LogUtil.printErrorLog(ErrorLogs.CONNECTION_URL_IS_REQUIRED.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidConnectionUrl.getMessage()); + } else if (connectionUrl.trim().isEmpty()) { + LogUtil.printErrorLog(ErrorLogs.EMPTY_CONNECTION_URL.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyConnectionUrl.getMessage()); + } try { URL url = new URL(connectionUrl); } catch (MalformedURLException e) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVALID_CONNECTION_URL.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidConnectionUrlFormat.getMessage()); } } @@ -68,49 +80,87 @@ public static void validateCredentials(Credentials credentials) throws SkyflowEx String credentialsString = credentials.getCredentialsString(); String token = credentials.getToken(); String apiKey = credentials.getApiKey(); + String context = credentials.getContext(); + ArrayList roles = credentials.getRoles(); if (path != null) nonNullMembers++; if (credentialsString != null) nonNullMembers++; if (token != null) nonNullMembers++; if (apiKey != null) nonNullMembers++; - if (nonNullMembers != 1) { - throw new SkyflowException(); + if (nonNullMembers > 1) { + LogUtil.printErrorLog(ErrorLogs.MULTIPLE_TOKEN_GENERATION_MEANS_PASSED.getLog()); + throw new SkyflowException( + ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.MultipleTokenGenerationMeansPassed.getMessage() + ); + } else if (nonNullMembers < 1) { + LogUtil.printErrorLog(ErrorLogs.NO_TOKEN_GENERATION_MEANS_PASSED.getLog()); + throw new SkyflowException( + ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.NoTokenGenerationMeansPassed.getMessage() + ); } else if (path != null && path.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.EMPTY_CREDENTIALS_PATH.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyCredentialFilePath.getMessage()); } else if (credentialsString != null && credentialsString.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.EMPTY_CREDENTIALS_STRING.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyCredentialsString.getMessage()); } else if (token != null && token.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.EMPTY_TOKEN_VALUE.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyToken.getMessage()); } else if (apiKey != null) { if (apiKey.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.EMPTY_API_KEY_VALUE.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyApikey.getMessage()); } else { Pattern pattern = Pattern.compile(Constants.API_KEY_REGEX); Matcher matcher = pattern.matcher(apiKey); if (!matcher.matches()) { - // invalid api key - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVALID_API_KEY.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidApikey.getMessage()); } } + } else if (roles != null) { + if (roles.isEmpty()) { + LogUtil.printErrorLog(ErrorLogs.EMPTY_ROLES.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyRoles.getMessage()); + } else { + for (int index = 0; index < roles.size(); index++) { + String role = roles.get(index); + if (role == null || role.trim().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_ROLE_IN_ROLES.getLog(), Integer.toString(index) + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyRoleInRoles.getMessage()); + } + } + } + } else if (context != null && context.trim().isEmpty()) { + LogUtil.printErrorLog(ErrorLogs.EMPTY_OR_NULL_CONTEXT.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyContext.getMessage()); } } public static void validateDetokenizeRequest(DetokenizeRequest detokenizeRequest) throws SkyflowException { ArrayList tokens = detokenizeRequest.getTokens(); - RedactionType redactionType = detokenizeRequest.getRedactionType(); - Boolean continueOnError = detokenizeRequest.getContinueOnError(); - if (tokens == null || tokens.isEmpty()) { - throw new SkyflowException(); - } else if (continueOnError == null) { - throw new SkyflowException(); - } else if (redactionType == null) { - throw new SkyflowException(); + if (tokens == null) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.TOKENS_REQUIRED.getLog(), InterfaceName.DETOKENIZE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidDataTokens.getMessage()); + } else if (tokens.isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_TOKENS.getLog(), InterfaceName.DETOKENIZE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyDataTokens.getMessage()); } else { for (int index = 0; index < tokens.size(); index++) { String token = tokens.get(index); if (token == null || token.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_TOKEN_IN_TOKENS.getLog(), + InterfaceName.DETOKENIZE.getName(), Integer.toString(index) + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTokenInDataTokens.getMessage()); } } } @@ -124,31 +174,57 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky Boolean homogeneous = insertRequest.getHomogeneous(); Byot tokenStrict = insertRequest.getTokenStrict(); - if (table == null || table.trim().isEmpty()) { - if (table == null) { - // error log for required - } else { - // error log for empty - } - throw new SkyflowException(); - } else if (values == null || values.isEmpty()) { - throw new SkyflowException(); + if (table == null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TABLE_IS_REQUIRED.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableKeyError.getMessage()); + } else if (table.trim().isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); + } else if (values == null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.VALUES_IS_REQUIRED.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ValuesKeyError.getMessage()); + } else if (values.isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_VALUES.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValues.getMessage()); } else if (upsert != null) { if (upsert.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_UPSERT.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyUpsert.getMessage()); } else if (homogeneous != null && homogeneous) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.HOMOGENOUS_NOT_SUPPORTED_WITH_UPSERT.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException( + ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.HomogenousNotSupportedWithUpsert.getMessage() + ); } } for (HashMap valuesMap : values) { for (String key : valuesMap.keySet()) { if (key == null || key.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_KEY_IN_VALUES.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyKeyInValues.getMessage()); } else { Object value = valuesMap.get(key); if (value == null || value.toString().trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_VALUE_IN_VALUES.getLog(), + InterfaceName.INSERT.getName(), key + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValueInValues.getMessage()); } } } @@ -157,20 +233,41 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky switch (tokenStrict) { case DISABLE: if (tokens != null) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TOKENS_NOT_ALLOWED_WITH_BYOT_DISABLE.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TokensPassedForByotDisable.getMessage()); } break; case ENABLE: if (tokens == null) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TOKENS_REQUIRED_WITH_BYOT.getLog(), + InterfaceName.INSERT.getName(), Byot.ENABLE.toString() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE.toString()) + ); } validateTokensForInsertRequest(tokens, values); break; case ENABLE_STRICT: if (tokens == null) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TOKENS_REQUIRED_WITH_BYOT.getLog(), + InterfaceName.INSERT.getName(), Byot.ENABLE_STRICT.toString() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE_STRICT.toString()) + ); } else if (tokens.size() != values.size()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.INSUFFICIENT_TOKENS_PASSED_FOR_BYOT_ENABLE_STRICT.getLog(), + InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage() + ); } validateTokensForInsertRequest(tokens, values); break; @@ -185,72 +282,132 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep List fields = getRequest.getFields(); String offset = getRequest.getOffset(); String limit = getRequest.getLimit(); - Boolean downloadURL = getRequest.getDownloadURL(); String columnName = getRequest.getColumnName(); ArrayList columnValues = getRequest.getColumnValues(); String orderBy = getRequest.getOrderBy(); - if (table == null || table.trim().isEmpty()) { - throw new SkyflowException(); + if (table == null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TABLE_IS_REQUIRED.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableKeyError.getMessage()); + } else if (table.trim().isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); } else if (ids != null) { if (ids.isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_IDS.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyIds.getMessage()); } else { for (int index = 0; index < ids.size(); index++) { String id = ids.get(index); if (id == null || id.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_ID_IN_IDS.getLog(), + InterfaceName.GET.getName(), Integer.toString(index) + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyIdInIds.getMessage()); } } } } else if (fields != null) { if (fields.isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_FIELDS.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyFields.getMessage()); } else { for (int index = 0; index < fields.size(); index++) { String field = fields.get(index); if (field == null || field.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_FIELD_IN_FIELDS.getLog(), + InterfaceName.GET.getName(), Integer.toString(index) + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyFieldInFields.getMessage()); } } } } else if (redactionType == null && (tokenization == null || !tokenization)) { - // missing redaction - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.REDACTION_IS_REQUIRED.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.RedactionKeyError.getMessage()); } else if (tokenization != null && tokenization) { if (redactionType != null) { - // redaction and tokenization does not work together - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TOKENIZATION_NOT_SUPPORTED_WITH_REDACTION.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.RedactionWithTokensNotSupported.getMessage() + ); } else if (columnName != null || columnValues != null) { - // tokenization does not work with column name/values - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TOKENIZATION_SUPPORTED_ONLY_WITH_IDS.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.TokensGetColumnNotSupported.getMessage() + ); } } else if (offset != null && offset.isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OFFSET.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyOffset.getMessage()); } else if (limit != null && limit.isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_LIMIT.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyLimit.getMessage()); } if (ids == null && columnName == null && columnValues == null) { - // either skyflow ids or column name/values must be passed - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.NEITHER_IDS_NOR_COLUMN_NAME_PASSED.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.UniqueColumnOrIdsKeyError.getMessage()); } else if (ids != null && (columnName != null || columnValues != null)) { - // skyflow ids and column name/values can not be passed together - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.BOTH_IDS_AND_COLUMN_NAME_PASSED.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.BothIdsAndColumnDetailsSpecified.getMessage()); } else if (columnName == null && columnValues != null) { - // column name and values must both be passed - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.COLUMN_NAME_IS_REQUIRED.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ColumnNameKeyError.getMessage()); } else if (columnName != null && columnValues == null) { - // column name and values must both be passed - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.COLUMN_VALUES_IS_REQUIRED_GET.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ColumnValuesKeyErrorGet.getMessage()); } else if (columnName != null) { - if (columnValues.isEmpty()) { - throw new SkyflowException(); + if (columnName.trim().isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_COLUMN_NAME.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyColumnName.getMessage()); + } else if (columnValues.isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_COLUMN_VALUES.getLog(), InterfaceName.GET.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyColumnValues.getMessage()); } else { for (int index = 0; index < columnValues.size(); index++) { String columnValue = columnValues.get(index); if (columnValue == null || columnValue.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_COLUMN_VALUE_IN_COLUMN_VALUES.getLog(), + InterfaceName.GET.getName(), Integer.toString(index) + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.EmptyValueInColumnValues.getMessage()); } } } @@ -260,58 +417,135 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep public static void validateUpdateRequest(UpdateRequest updateRequest) throws SkyflowException { String table = updateRequest.getTable(); String skyflowId = updateRequest.getId(); - Boolean returnTokens = updateRequest.getReturnTokens(); HashMap values = updateRequest.getValues(); HashMap tokens = updateRequest.getTokens(); + Byot tokenStrict = updateRequest.getTokenStrict(); - if (table == null || table.trim().isEmpty()) { - throw new SkyflowException(); - } else if (skyflowId == null || skyflowId.trim().isEmpty()) { - throw new SkyflowException(); - } else if (returnTokens == null) { - throw new SkyflowException(); + if (table == null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TABLE_IS_REQUIRED.getLog(), InterfaceName.UPDATE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableKeyError.getMessage()); + } else if (table.trim().isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.UPDATE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); + } else if (skyflowId == null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.SKYFLOW_ID_IS_REQUIRED.getLog(), InterfaceName.UPDATE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.SkyflowIdKeyError.getMessage()); + } else if (skyflowId.trim().isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_SKYFLOW_ID.getLog(), InterfaceName.UPDATE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptySkyflowId.getMessage()); } else if (values == null || values.isEmpty()) { - throw new SkyflowException(); - } else if (tokens != null) { - if (tokens.isEmpty()) { - throw new SkyflowException(); - } else { - for (String key : tokens.keySet()) { - if (key == null || key.trim().isEmpty()) { - throw new SkyflowException(); - } else { - Object value = tokens.get(key); - if (value == null || value.toString().trim().isEmpty()) { - throw new SkyflowException(); - } - } - } - } + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_VALUES.getLog(), InterfaceName.UPDATE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValues.getMessage()); + } else if (tokens != null && tokens.isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_TOKENS.getLog(), InterfaceName.UPDATE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTokens.getMessage()); } for (String key : values.keySet()) { if (key == null || key.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_KEY_IN_VALUES.getLog(), InterfaceName.UPDATE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyKeyInValues.getMessage()); } else { Object value = values.get(key); if (value == null || value.toString().trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_VALUE_IN_VALUES.getLog(), InterfaceName.UPDATE.getName(), key + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.EmptyValueInValues.getMessage()); } } } + + switch (tokenStrict) { + case DISABLE: + if (tokens != null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TOKENS_NOT_ALLOWED_WITH_BYOT_DISABLE.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.TokensPassedForByotDisable.getMessage()); + } + break; + case ENABLE: + if (tokens == null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TOKENS_REQUIRED_WITH_BYOT.getLog(), + InterfaceName.INSERT.getName(), Byot.ENABLE.toString() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( + ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE.toString())); + } + validateTokensMapWithTokenStrict(tokens, values); + break; + case ENABLE_STRICT: + if (tokens == null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TOKENS_REQUIRED_WITH_BYOT.getLog(), + InterfaceName.INSERT.getName(), Byot.ENABLE_STRICT.toString() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( + ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE_STRICT.toString())); + } else if (tokens.size() != values.size()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.INSUFFICIENT_TOKENS_PASSED_FOR_BYOT_ENABLE_STRICT.getLog(), + InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage()); + } + validateTokensMapWithTokenStrict(tokens, values); + break; + } } public static void validateDeleteRequest(DeleteRequest deleteRequest) throws SkyflowException { String table = deleteRequest.getTable(); ArrayList ids = deleteRequest.getIds(); - if (table == null || table.trim().isEmpty()) { - throw new SkyflowException(); - } else if (ids == null || ids.isEmpty()) { - throw new SkyflowException(); + if (table == null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.TABLE_IS_REQUIRED.getLog(), InterfaceName.DELETE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableKeyError.getMessage()); + } else if (table.trim().isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.DELETE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); + + } else if (ids == null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.IDS_IS_REQUIRED.getLog(), InterfaceName.DELETE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.IdsKeyError.getMessage()); + } else if (ids.isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_IDS.getLog(), InterfaceName.DELETE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyIds.getMessage()); } else { - for (String id : ids) { + for (int index = 0; index < ids.size(); index++) { + String id = ids.get(index); if (id.trim().isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_ID_IN_IDS.getLog(), + InterfaceName.DELETE.getName(), Integer.toString(index) + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyIdInIds.getMessage()); } } } @@ -319,8 +553,16 @@ public static void validateDeleteRequest(DeleteRequest deleteRequest) throws Sky public static void validateQueryRequest(QueryRequest queryRequest) throws SkyflowException { String query = queryRequest.getQuery(); - if (query == null || query.trim().isEmpty()) { - throw new SkyflowException(); + if (query == null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.QUERY_IS_REQUIRED.getLog(), InterfaceName.QUERY.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.QueryKeyError.getMessage()); + } else if (query.trim().isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_QUERY.getLog(), InterfaceName.QUERY.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyQuery.getMessage()); } } @@ -328,13 +570,33 @@ public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) thro List columnValues = tokenizeRequest.getColumnValues(); if (columnValues == null || columnValues.isEmpty()) { - throw new SkyflowException(); + if (columnValues == null) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.COLUMN_VALUES_IS_REQUIRED_TOKENIZE.getLog(), InterfaceName.TOKENIZE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ColumnValuesKeyErrorTokenize.getMessage()); + } else { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_COLUMN_VALUES.getLog(), InterfaceName.TOKENIZE.getName() + )); + } + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyColumnValues.getMessage()); } else { - for (ColumnValue value : columnValues) { + for (int index = 0; index < columnValues.size(); index++) { + ColumnValue value = columnValues.get(index); if (value.getValue() == null || value.getValue().isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_COLUMN_VALUE_IN_COLUMN_VALUES.getLog(), + InterfaceName.TOKENIZE.getName(), Integer.toString(index) + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValueInColumnValues.getMessage()); } else if (value.getColumnGroup() == null || value.getColumnGroup().isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_COLUMN_GROUP_IN_COLUMN_VALUES.getLog(), + InterfaceName.TOKENIZE.getName(), Integer.toString(index) + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.EmptyColumnGroupInColumnValue.getMessage()); } } } @@ -345,23 +607,41 @@ private static void validateTokensForInsertRequest( ArrayList> values ) throws SkyflowException { if (tokens.isEmpty()) { - throw new SkyflowException(); + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_TOKENS.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTokens.getMessage()); } for (int index = 0; index < tokens.size(); index++) { HashMap tokensMap = tokens.get(index); HashMap valuesMap = values.get(index); + validateTokensMapWithTokenStrict(tokensMap, valuesMap); + } + } - for (String key : tokensMap.keySet()) { - if (key == null || key.trim().isEmpty()) { - throw new SkyflowException(); - } else if (!valuesMap.containsKey(key)) { - throw new SkyflowException(); - } else { - Object value = tokensMap.get(key); - if (value == null || value.toString().trim().isEmpty()) { - throw new SkyflowException(); - } + private static void validateTokensMapWithTokenStrict( + HashMap tokensMap, HashMap valuesMap + ) throws SkyflowException { + for (String key : tokensMap.keySet()) { + if (key == null || key.trim().isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_KEY_IN_TOKENS.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyKeyInTokens.getMessage()); + } else if (!valuesMap.containsKey(key)) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.MISMATCH_OF_FIELDS_AND_TOKENS.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.MismatchOfFieldsAndTokens.getMessage()); + } else { + Object value = tokensMap.get(key); + if (value == null || value.toString().trim().isEmpty()) { + LogUtil.printInfoLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_VALUE_IN_TOKENS.getLog(), + InterfaceName.INSERT.getName(), key + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValueInTokens.getMessage()); } } } diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index 69abdcee..08204181 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -8,10 +8,10 @@ import com.skyflow.enums.RedactionType; import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.ApiException; -import com.skyflow.generated.rest.auth.HttpBearerAuth; import com.skyflow.generated.rest.models.*; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.utils.Utils; +import com.skyflow.logs.ErrorLogs; +import com.skyflow.logs.InfoLogs; +import com.skyflow.utils.logger.LogUtil; import com.skyflow.utils.validations.Validations; import com.skyflow.vault.data.*; import com.skyflow.vault.tokens.*; @@ -142,17 +142,20 @@ private static synchronized HashMap getFormattedQueryRecord(V1Fi } public InsertResponse insert(InsertRequest insertRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.INSERT_TRIGGERED.getLog()); V1InsertRecordResponse bulkInsertResult = null; V1BatchOperationResponse batchInsertResult = null; ArrayList> insertedFields = new ArrayList<>(); ArrayList> errorFields = new ArrayList<>(); Boolean continueOnError = insertRequest.getContinueOnError(); try { + LogUtil.printInfoLog(InfoLogs.VALIDATE_INSERT_REQUEST.getLog()); Validations.validateInsertRequest(insertRequest); setBearerToken(); if (continueOnError) { RecordServiceBatchOperationBody insertBody = super.getBatchInsertRequestBody(insertRequest); batchInsertResult = super.getRecordsApi().recordServiceBatchOperation(super.getVaultConfig().getVaultId(), insertBody); + LogUtil.printInfoLog(InfoLogs.INSERT_REQUEST_RESOLVED.getLog()); List records = batchInsertResult.getResponses(); for (int index = 0; index < records.size(); index++) { Object record = records.get(index); @@ -167,6 +170,7 @@ public InsertResponse insert(InsertRequest insertRequest) throws SkyflowExceptio RecordServiceInsertRecordBody insertBody = super.getBulkInsertRequestBody(insertRequest); bulkInsertResult = super.getRecordsApi().recordServiceInsertRecord( super.getVaultConfig().getVaultId(), insertRequest.getTable(), insertBody); + LogUtil.printInfoLog(InfoLogs.INSERT_REQUEST_RESOLVED.getLog()); List records = bulkInsertResult.getRecords(); if (records != null) { for (V1RecordMetaProperties record : records) { @@ -176,20 +180,25 @@ public InsertResponse insert(InsertRequest insertRequest) throws SkyflowExceptio } } } catch (ApiException e) { + LogUtil.printErrorLog(ErrorLogs.INSERT_RECORDS_REJECTED.getLog()); throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } + LogUtil.printInfoLog(InfoLogs.INSERT_SUCCESS.getLog()); return new InsertResponse(insertedFields, errorFields); } public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.DETOKENIZE_TRIGGERED.getLog()); V1DetokenizeResponse result = null; ArrayList detokenizedFields = new ArrayList<>(); ArrayList errorRecords = new ArrayList<>(); try { + LogUtil.printInfoLog(InfoLogs.VALIDATE_DETOKENIZE_REQUEST.getLog()); Validations.validateDetokenizeRequest(detokenizeRequest); setBearerToken(); V1DetokenizePayload payload = super.getDetokenizePayload(detokenizeRequest); result = super.getTokensApi().recordServiceDetokenize(super.getVaultConfig().getVaultId(), payload); + LogUtil.printInfoLog(InfoLogs.DETOKENIZE_REQUEST_RESOLVED.getLog()); List records = result.getRecords(); if (records != null) { for (V1DetokenizeRecordResponse record : records) { @@ -202,21 +211,25 @@ public DetokenizeResponse detokenize(DetokenizeRequest detokenizeRequest) throws } } } catch (ApiException e) { + LogUtil.printErrorLog(ErrorLogs.DETOKENIZE_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } if (!errorRecords.isEmpty()) { - // handle partial case, throw error and send data in error - // or simply log as a partial success and return proper response + LogUtil.printInfoLog(InfoLogs.DETOKENIZE_PARTIAL_SUCCESS.getLog()); + } else { + LogUtil.printInfoLog(InfoLogs.DETOKENIZE_SUCCESS.getLog()); } return new DetokenizeResponse(detokenizedFields, errorRecords); } public GetResponse get(GetRequest getRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.GET_TRIGGERED.getLog()); V1BulkGetRecordResponse result = null; ArrayList> data = new ArrayList<>(); ArrayList> errors = new ArrayList<>(); try { + LogUtil.printInfoLog(InfoLogs.VALIDATE_GET_REQUEST.getLog()); Validations.validateGetRequest(getRequest); setBearerToken(); RedactionType redactionType = getRequest.getRedactionType(); @@ -234,6 +247,7 @@ public GetResponse get(GetRequest getRequest) throws SkyflowException { getRequest.getColumnValues(), getRequest.getOrderBy() ); + LogUtil.printInfoLog(InfoLogs.GET_REQUEST_RESOLVED.getLog()); List records = result.getRecords(); if (records != null) { for (V1FieldRecords record : records) { @@ -241,16 +255,20 @@ public GetResponse get(GetRequest getRequest) throws SkyflowException { } } } catch (ApiException e) { + LogUtil.printErrorLog(ErrorLogs.GET_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } + LogUtil.printInfoLog(InfoLogs.GET_SUCCESS.getLog()); return new GetResponse(data, errors); } public UpdateResponse update(UpdateRequest updateRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.UPDATE_TRIGGERED.getLog()); V1UpdateRecordResponse result; String skyflowId; HashMap tokensMap; try { + LogUtil.printInfoLog(InfoLogs.VALIDATE_UPDATE_REQUEST.getLog()); Validations.validateUpdateRequest(updateRequest); setBearerToken(); RecordServiceUpdateRecordBody updateBody = super.getUpdateRequestBody(updateRequest); @@ -260,17 +278,22 @@ public UpdateResponse update(UpdateRequest updateRequest) throws SkyflowExceptio updateRequest.getId(), updateBody ); + LogUtil.printInfoLog(InfoLogs.UPDATE_REQUEST_RESOLVED.getLog()); skyflowId = result.getSkyflowId(); tokensMap = getFormattedUpdateRecord(result); } catch (ApiException e) { + LogUtil.printErrorLog(ErrorLogs.UPDATE_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } + LogUtil.printInfoLog(InfoLogs.UPDATE_SUCCESS.getLog()); return new UpdateResponse(skyflowId, tokensMap); } public DeleteResponse delete(DeleteRequest deleteRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.DELETE_TRIGGERED.getLog()); V1BulkDeleteRecordResponse result; try { + LogUtil.printInfoLog(InfoLogs.VALIDATING_DELETE_REQUEST.getLog()); Validations.validateDeleteRequest(deleteRequest); setBearerToken(); RecordServiceBulkDeleteRecordBody deleteBody = new RecordServiceBulkDeleteRecordBody(); @@ -279,9 +302,12 @@ public DeleteResponse delete(DeleteRequest deleteRequest) throws SkyflowExceptio } result = super.getRecordsApi().recordServiceBulkDeleteRecord( super.getVaultConfig().getVaultId(), deleteRequest.getTable(), deleteBody); + LogUtil.printInfoLog(InfoLogs.DELETE_REQUEST_RESOLVED.getLog()); } catch (ApiException e) { + LogUtil.printErrorLog(ErrorLogs.DELETE_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } + LogUtil.printInfoLog(InfoLogs.DELETE_SUCCESS.getLog()); return new DeleteResponse((ArrayList) result.getRecordIDResponse()); } @@ -290,34 +316,41 @@ public Object uploadFile(Object uploadFileRequest) { } public QueryResponse query(QueryRequest queryRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.QUERY_TRIGGERED.getLog()); V1GetQueryResponse result; ArrayList> fields = new ArrayList<>(); try { + LogUtil.printInfoLog(InfoLogs.VALIDATING_QUERY_REQUEST.getLog()); Validations.validateQueryRequest(queryRequest); setBearerToken(); result = super.getQueryApi().queryServiceExecuteQuery( super.getVaultConfig().getVaultId(), new QueryServiceExecuteQueryBody().query(queryRequest.getQuery())); + LogUtil.printInfoLog(InfoLogs.QUERY_REQUEST_RESOLVED.getLog()); if (result.getRecords() != null) { for (V1FieldRecords record : result.getRecords()) { fields.add(getFormattedQueryRecord(record)); } } } catch (ApiException e) { + LogUtil.printErrorLog(ErrorLogs.QUERY_REQUEST_REJECTED.getLog()); throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } + LogUtil.printInfoLog(InfoLogs.QUERY_SUCCESS.getLog()); return new QueryResponse(fields); } public TokenizeResponse tokenize(TokenizeRequest tokenizeRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.TOKENIZE_TRIGGERED.getLog()); V1TokenizeResponse result = null; List list = new ArrayList<>(); try { + LogUtil.printInfoLog(InfoLogs.VALIDATING_TOKENIZE_REQUEST.getLog()); Validations.validateTokenizeRequest(tokenizeRequest); setBearerToken(); V1TokenizePayload payload = super.getTokenizePayload(tokenizeRequest); result = super.getTokensApi().recordServiceTokenize(super.getVaultConfig().getVaultId(), payload); + LogUtil.printInfoLog(InfoLogs.TOKENIZE_REQUEST_RESOLVED.getLog()); if (result != null && result.getRecords().size() > 0) { - for (V1TokenizeRecordResponse response : result.getRecords()) { if (response.getToken() != null) { list.add(response.getToken()); @@ -325,8 +358,10 @@ public TokenizeResponse tokenize(TokenizeRequest tokenizeRequest) throws Skyflow } } } catch (ApiException e) { - throw new SkyflowException(e.getResponseBody()); + LogUtil.printErrorLog(ErrorLogs.TOKENIZE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getCode(), e, e.getResponseHeaders(), e.getResponseBody()); } + LogUtil.printInfoLog(InfoLogs.TOKENIZE_SUCCESS.getLog()); return new TokenizeResponse(list); } @@ -350,13 +385,4 @@ public DetectController detect() { } return this.detectController; } - - private void setBearerToken() throws SkyflowException { - Validations.validateCredentials(super.getFinalCredentials()); - if (token == null || Token.isExpired(token)) { - token = Utils.generateBearerToken(super.getFinalCredentials()); - } - HttpBearerAuth Bearer = (HttpBearerAuth) super.getApiClient().getAuthentication("Bearer"); - Bearer.setBearerToken(token); - } } diff --git a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java index 402e070c..0a123e33 100644 --- a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java @@ -30,7 +30,7 @@ public RedactionType getRedactionType() { } public Boolean getReturnTokens() { - return returnTokens; + return this.builder.returnTokens; } public List getFields() { diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java index f569e409..e0eaf098 100644 --- a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java @@ -1,16 +1,9 @@ package com.skyflow.vault.data; -import com.google.gson.internal.LinkedTreeMap; -import com.skyflow.errors.SkyflowException; -import com.skyflow.generated.rest.models.V1InsertRecordResponse; -import com.skyflow.generated.rest.models.V1RecordMetaProperties; - import java.util.ArrayList; import java.util.HashMap; -import java.util.List; public class InsertResponse { -// private final V1InsertRecordResponse generatedResponse; private final ArrayList> insertedFields; private final ArrayList> errorFields; @@ -19,13 +12,6 @@ public InsertResponse(ArrayList> insertedFields, ArrayLi this.errorFields = errorFields; } -// public InsertResponse(V1InsertRecordResponse response) throws SkyflowException { -// this.generatedResponse = response; -// this.insertedFields = new ArrayList<>(); -// this.errorFields = new ArrayList<>(); -// this.createResponse(); -// } - public ArrayList> getInsertedFields() { return insertedFields; } @@ -34,39 +20,6 @@ public ArrayList> getErrorFields() { return errorFields; } -// private void createResponse() throws SkyflowException { -// List records = this.generatedResponse.getRecords(); -// if (records != null && !records.isEmpty()) { -// createSuccessResponse(records); -// } -// } - -// private void createSuccessResponse(List records) throws SkyflowException { -// try { -// for (V1RecordMetaProperties record : records) { -// HashMap insertRecord = new HashMap<>(); -// -// String skyflowId = record.getSkyflowId(); -// insertRecord.put("skyflowId", skyflowId); -// -// /* -// Getting unchecked cast warning, however, this type is inferred -// from an exception trying to cast into another type. Therefore, -// this type cast will not fail. -// */ -// LinkedTreeMap tokensMap = (LinkedTreeMap) record.getTokens(); -// if (tokensMap != null) { -// for (String key : tokensMap.keySet()) { -// insertRecord.put(key, tokensMap.get(key)); -// } -// } -// insertedFields.add(insertRecord); -// } -// } catch (Exception e) { -// throw new SkyflowException(e); -// } -// } - @Override public String toString() { StringBuilder response = new StringBuilder("{"); diff --git a/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java b/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java index 76c1c4b5..78abcd20 100644 --- a/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java @@ -63,7 +63,7 @@ public UpdateRequestBuilder id(String id) { } public UpdateRequestBuilder returnTokens(Boolean returnTokens) { - this.returnTokens = returnTokens; + this.returnTokens = returnTokens == null || returnTokens; return this; } @@ -78,7 +78,7 @@ public UpdateRequestBuilder tokens(HashMap tokens) { } public UpdateRequestBuilder tokenStrict(Byot tokenStrict) { - this.tokenStrict = tokenStrict; + this.tokenStrict = tokenStrict == null ? Byot.DISABLE : tokenStrict; return this; } diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java index 8c80c932..205ecef7 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java @@ -48,7 +48,7 @@ public DetokenizeRequestBuilder redactionType(RedactionType redactionType) { } public DetokenizeRequestBuilder continueOnError(Boolean continueOnError) { - this.continueOnError = continueOnError; + this.continueOnError = continueOnError == null || continueOnError; return this; } From 4e61b527216a9bbc561f273809e90c5997a2339c Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 1 Nov 2024 21:09:32 +0530 Subject: [PATCH 35/68] =?UTF-8?q?SK-1684=20Add=20unit=20tests=20-=20Added?= =?UTF-8?q?=20unit=20tests=20for=20Detokenize=20request=20validations=20-?= =?UTF-8?q?=20Added=20unit=20tests=20for=20Insert=20request=20validations?= =?UTF-8?q?=E2=80=8B=20=E2=80=8B-=20Added=20unit=20tests=20for=20Get=20req?= =?UTF-8?q?uest=20validations=E2=80=8B=20=E2=80=8B-=20Added=20unit=20tests?= =?UTF-8?q?=20for=20Update=20request=20validations=E2=80=8B=20-=20Added=20?= =?UTF-8?q?unit=20tests=20for=20Delete=20request=20validations=E2=80=8B=20?= =?UTF-8?q?=E2=80=8B=E2=80=8B-=20Added=20unit=20tests=20for=20Query=20requ?= =?UTF-8?q?est=20validations=E2=80=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- v2/pom.xml | 15 + v2/src/main/java/com/skyflow/Skyflow.java | 3 +- .../com/skyflow/vault/data/GetRequest.java | 7 +- .../com/skyflow/vault/data/DeleteTests.java | 155 ++++++ .../java/com/skyflow/vault/data/GetTests.java | 471 ++++++++++++++++++ .../com/skyflow/vault/data/InsertTests.java | 375 ++++++++++++++ .../com/skyflow/vault/data/QueryTests.java | 95 ++++ .../com/skyflow/vault/data/UpdateTests.java | 372 ++++++++++++++ .../skyflow/vault/tokens/DetokenizeTests.java | 213 ++++++++ 9 files changed, 1701 insertions(+), 5 deletions(-) create mode 100644 v2/src/test/java/com/skyflow/vault/data/DeleteTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/data/GetTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/data/InsertTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/data/QueryTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/data/UpdateTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java diff --git a/v2/pom.xml b/v2/pom.xml index 4e314ed9..bddf1ae2 100644 --- a/v2/pom.xml +++ b/v2/pom.xml @@ -18,6 +18,8 @@ 4.12.0 2.10.1 1.9.0 + 5.10.3 + 1.10.0 @@ -51,5 +53,18 @@ logging-interceptor ${okhttp-version} + + + org.junit.jupiter + junit-jupiter-engine + ${junit-version} + test + + + org.junit.platform + junit-platform-runner + ${junit-platform-runner.version} + test + \ No newline at end of file diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index abc1eea2..cafa32ca 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -128,7 +128,8 @@ public SkyflowClientBuilder addVaultConfig(VaultConfig vaultConfig) throws Skyfl } else { this.vaultConfigMap.put(vaultConfig.getVaultId(), vaultConfig); this.vaultClientsMap.put(vaultConfig.getVaultId(), new VaultController(vaultConfig, this.skyflowCredentials)); - LogUtil.printInfoLog(InfoLogs.VAULT_CONTROLLER_INITIALIZED.getLog()); + LogUtil.printInfoLog(Utils.parameterizedString( + InfoLogs.VAULT_CONTROLLER_INITIALIZED.getLog(), vaultConfig.getVaultId())); } return this; } diff --git a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java index 0a123e33..04626e35 100644 --- a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/GetRequest.java @@ -4,7 +4,6 @@ import com.skyflow.utils.Constants; import java.util.ArrayList; -import java.util.List; public class GetRequest { private final GetRequestBuilder builder; @@ -33,7 +32,7 @@ public Boolean getReturnTokens() { return this.builder.returnTokens; } - public List getFields() { + public ArrayList getFields() { return this.builder.fields; } @@ -66,7 +65,7 @@ public static final class GetRequestBuilder { private ArrayList ids; private RedactionType redactionType; private Boolean returnTokens; - private List fields; + private ArrayList fields; private String offset; private String limit; private Boolean downloadURL; @@ -99,7 +98,7 @@ public GetRequestBuilder returnTokens(Boolean returnTokens) { return this; } - public GetRequestBuilder fields(List fields) { + public GetRequestBuilder fields(ArrayList fields) { this.fields = fields; return this; } diff --git a/v2/src/test/java/com/skyflow/vault/data/DeleteTests.java b/v2/src/test/java/com/skyflow/vault/data/DeleteTests.java new file mode 100644 index 00000000..5660522e --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/data/DeleteTests.java @@ -0,0 +1,155 @@ +package com.skyflow.vault.data; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.utils.Constants; +import com.skyflow.utils.Utils; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.ArrayList; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(fullyQualifiedNames = "com.skyflow.serviceaccount.util.Token") +public class DeleteTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String vaultID = null; + private static String clusterID = null; + private static String skyflowID = null; + private static String table = null; + private static ArrayList ids = null; + private static Skyflow skyflowClient = null; + + @BeforeClass + public static void setup() throws SkyflowException { + PowerMockito.mockStatic(Token.class); + PowerMockito.when(Token.isExpired("valid_token")).thenReturn(true); + PowerMockito.when(Token.isExpired("not_a_valid_token")).thenReturn(false); + + vaultID = "vault123"; + clusterID = "cluster123"; + + Credentials credentials = new Credentials(); + credentials.setToken("valid-token"); + + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.DEV); +// vaultConfig.setCredentials(credentials); + +// skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + + skyflowID = "test_delete_id_1"; + ids = new ArrayList<>(); + table = "test_table"; + } + + @Test + public void testValidInputInDeleteRequestValidations() { + try { + ids.add(skyflowID); + DeleteRequest request = DeleteRequest.builder().ids(ids).table(table).build(); + Validations.validateDeleteRequest(request); + Assert.assertEquals(1, ids.size()); + Assert.assertEquals(table, request.getTable()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testNoIdsInDeleteRequestValidations() { + DeleteRequest request = DeleteRequest.builder().table(table).build(); + try { + Validations.validateDeleteRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.IdsKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyIdsInDeleteRequestValidations() { + ids.clear(); + DeleteRequest request = DeleteRequest.builder().ids(ids).table(table).build(); + try { + Validations.validateDeleteRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyIds.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyIdInIdsInDeleteRequestValidations() { + ids.add(skyflowID); + ids.add(""); + DeleteRequest request = DeleteRequest.builder().ids(ids).table(table).build(); + try { + Validations.validateDeleteRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyIdInIds.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testNoTableInDeleteRequestValidations() { + ids.clear(); + ids.add(skyflowID); + DeleteRequest request = DeleteRequest.builder().ids(ids).build(); + try { + Validations.validateDeleteRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyTableInDeleteRequestValidations() { + ids.clear(); + ids.add(skyflowID); + DeleteRequest request = DeleteRequest.builder().ids(ids).table("").build(); + try { + Validations.validateDeleteRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyTable.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } +} diff --git a/v2/src/test/java/com/skyflow/vault/data/GetTests.java b/v2/src/test/java/com/skyflow/vault/data/GetTests.java new file mode 100644 index 00000000..66e5cddb --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/data/GetTests.java @@ -0,0 +1,471 @@ +package com.skyflow.vault.data; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.enums.RedactionType; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.utils.Constants; +import com.skyflow.utils.Utils; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.ArrayList; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(fullyQualifiedNames = "com.skyflow.serviceaccount.util.Token") +public class GetTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String vaultID = null; + private static String clusterID = null; + private static String skyflowID = null; + private static String field = null; + private static String table = null; + private static ArrayList ids = null; + private static ArrayList fields = null; + private static String columnName = null; + private static String columnValue = null; + private static ArrayList columnValues = null; + private static Skyflow skyflowClient = null; + + @BeforeClass + public static void setup() throws SkyflowException { + PowerMockito.mockStatic(Token.class); + PowerMockito.when(Token.isExpired("valid_token")).thenReturn(true); + PowerMockito.when(Token.isExpired("not_a_valid_token")).thenReturn(false); + + vaultID = "vault123"; + clusterID = "cluster123"; + + Credentials credentials = new Credentials(); + credentials.setToken("valid-token"); + + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.DEV); + vaultConfig.setCredentials(credentials); + +// skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + + skyflowID = "test_get_id_1"; + ids = new ArrayList<>(); + field = "test_get_field"; + fields = new ArrayList<>(); + columnName = "test_column_name"; + columnValue = "test_column_value"; + columnValues = new ArrayList<>(); + table = "test_table"; + } + + @Test + public void testValidGetByIdInputInGetRequestValidations() { + try { + ids.add(skyflowID); + fields.add(field); + GetRequest request = GetRequest.builder() + .ids(ids) + .table(table) + .returnTokens(true) + .downloadURL(true) + .offset("2") + .limit("1") + .fields(fields) + .orderBy(Constants.ORDER_ASCENDING) + .build(); + Validations.validateGetRequest(request); + Assert.assertEquals(table, request.getTable()); + Assert.assertEquals(1, request.getIds().size()); + Assert.assertEquals(1, request.getFields().size()); + Assert.assertEquals("2", request.getOffset()); + Assert.assertEquals("1", request.getLimit()); + Assert.assertEquals(Constants.ORDER_ASCENDING, request.getOrderBy()); + Assert.assertTrue(request.getDownloadURL()); + Assert.assertTrue(request.getReturnTokens()); + Assert.assertNull(request.getRedactionType()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testValidGetByColumnValuesInputInGetRequestValidations() { + try { + columnValues.add(columnValue); + GetRequest request = GetRequest.builder() + .table(table) + .columnName(columnName) + .columnValues(columnValues) + .redactionType(RedactionType.PLAIN_TEXT) + .downloadURL(true) + .offset("2") + .limit("1") + .fields(fields) + .orderBy(Constants.ORDER_ASCENDING) + .build(); + Validations.validateGetRequest(request); + Assert.assertEquals(table, request.getTable()); + Assert.assertEquals(columnName, request.getColumnName()); + Assert.assertEquals(1, request.getColumnValues().size()); + Assert.assertEquals(1, request.getFields().size()); + Assert.assertEquals(RedactionType.PLAIN_TEXT, request.getRedactionType()); + Assert.assertEquals("2", request.getOffset()); + Assert.assertEquals("1", request.getLimit()); + Assert.assertEquals(Constants.ORDER_ASCENDING, request.getOrderBy()); + Assert.assertTrue(request.getDownloadURL()); + Assert.assertNull(request.getReturnTokens()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testNoTableInGetRequestValidations() { + ids.clear(); + ids.add(skyflowID); + GetRequest request = GetRequest.builder().ids(ids).build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyTableInGetRequestValidations() { + ids.clear(); + ids.add(skyflowID); + GetRequest request = GetRequest.builder().ids(ids).table("").build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyTable.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyIdsInGetRequestValidations() { + ids.clear(); + GetRequest request = GetRequest.builder().ids(ids).table(table).build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyIds.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyIdInIdsInGetRequestValidations() { + ids.add(skyflowID); + ids.add(""); + GetRequest request = GetRequest.builder().ids(ids).table(table).build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyIdInIds.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyFieldsInGetRequestValidations() { + ids.clear(); + ids.add(skyflowID); + fields.clear(); + GetRequest request = GetRequest.builder().ids(ids).table(table).fields(fields).build(); + try { + System.out.println(ids); + System.out.println(fields); + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyFields.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyFieldInFieldsInGetRequestValidations() { + fields.add(field); + fields.add(""); + GetRequest request = GetRequest.builder().ids(ids).table(table).fields(fields).build(); + try { + System.out.println(ids); + System.out.println(fields); + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyFieldInFields.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testNoRedactionInGetRequestValidations() { + GetRequest request = GetRequest.builder().table(table).build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.RedactionKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testReturnTokensWithRedactionInGetRequestValidations() { + GetRequest request = GetRequest.builder() + .table(table).redactionType(RedactionType.PLAIN_TEXT).returnTokens(true) + .build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.RedactionWithTokensNotSupported.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testReturnTokensWithColumnNameInGetRequestValidations() { + GetRequest request = GetRequest.builder().table(table).returnTokens(true).columnName(columnName).build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TokensGetColumnNotSupported.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testReturnTokensWithColumnValuesInGetRequestValidations() { + GetRequest request = GetRequest.builder().table(table).returnTokens(true).columnValues(columnValues).build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TokensGetColumnNotSupported.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyOffsetInGetRequestValidations() { + GetRequest request = GetRequest.builder() + .table(table).redactionType(RedactionType.PLAIN_TEXT).offset("") + .build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyOffset.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyLimitInGetRequestValidations() { + GetRequest request = GetRequest.builder() + .table(table).redactionType(RedactionType.PLAIN_TEXT).limit("") + .build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyLimit.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testNoIdsOrColumnNameInGetRequestValidations() { + GetRequest request = GetRequest.builder().table(table).redactionType(RedactionType.PLAIN_TEXT).build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.UniqueColumnOrIdsKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testBothIdsAndColumnNameInGetRequestValidations() { + GetRequest request = GetRequest.builder() + .table(table).redactionType(RedactionType.PLAIN_TEXT).ids(ids).columnName(columnName) + .build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.BothIdsAndColumnDetailsSpecified.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testBothIdsAndColumnValuesInGetRequestValidations() { + GetRequest request = GetRequest.builder() + .table(table).redactionType(RedactionType.PLAIN_TEXT).ids(ids).columnValues(columnValues) + .build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.BothIdsAndColumnDetailsSpecified.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testColumnNameWithoutColumnValuesInGetRequestValidations() { + GetRequest request = GetRequest.builder() + .table(table).redactionType(RedactionType.PLAIN_TEXT).columnName(columnName) + .build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.ColumnValuesKeyErrorGet.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testColumnValuesWithoutColumnNameInGetRequestValidations() { + GetRequest request = GetRequest.builder() + .table(table).redactionType(RedactionType.PLAIN_TEXT).columnValues(columnValues) + .build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.ColumnNameKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyColumnNameInGetRequestValidations() { + GetRequest request = GetRequest.builder() + .table(table).redactionType(RedactionType.PLAIN_TEXT).columnName("").columnValues(columnValues) + .build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyColumnName.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyColumnValuesInGetRequestValidations() { + columnValues.clear(); + GetRequest request = GetRequest.builder() + .table(table).redactionType(RedactionType.PLAIN_TEXT).columnName(columnName).columnValues(columnValues) + .build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyColumnValues.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyValueInColumnValuesInGetRequestValidations() { + columnValues.add(columnValue); + columnValues.add(""); + GetRequest request = GetRequest.builder() + .table(table).redactionType(RedactionType.PLAIN_TEXT).columnName(columnName).columnValues(columnValues) + .build(); + try { + Validations.validateGetRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyValueInColumnValues.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } +} diff --git a/v2/src/test/java/com/skyflow/vault/data/InsertTests.java b/v2/src/test/java/com/skyflow/vault/data/InsertTests.java new file mode 100644 index 00000000..2b1c8432 --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/data/InsertTests.java @@ -0,0 +1,375 @@ +package com.skyflow.vault.data; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Byot; +import com.skyflow.enums.Env; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.utils.Constants; +import com.skyflow.utils.Utils; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.ArrayList; +import java.util.HashMap; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(fullyQualifiedNames = "com.skyflow.serviceaccount.util.Token") +public class InsertTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String vaultID = null; + private static String clusterID = null; + private static String table = null; + private static ArrayList> values = null; + private static ArrayList> tokens = null; + private static HashMap valueMap = null; + private static HashMap tokenMap = null; + private static String upsert = null; + private static Skyflow skyflowClient = null; + + @BeforeClass + public static void setup() throws SkyflowException { + PowerMockito.mockStatic(Token.class); + PowerMockito.when(Token.isExpired("valid_token")).thenReturn(true); + PowerMockito.when(Token.isExpired("not_a_valid_token")).thenReturn(false); + + vaultID = "vault123"; + clusterID = "cluster123"; + + Credentials credentials = new Credentials(); + credentials.setToken("valid-token"); + + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.DEV); + vaultConfig.setCredentials(credentials); + +// skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + + table = "test_table"; + values = new ArrayList<>(); + tokens = new ArrayList<>(); + valueMap = new HashMap<>(); + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); + tokenMap = new HashMap<>(); + tokenMap.put("test_column_1", "test_token_1"); + upsert = "upsert_column"; + } + + @Test + public void testValidInputInInsertRequestValidations() { + try { + values.add(valueMap); + tokens.add(tokenMap); + InsertRequest request = InsertRequest.builder() + .table(table) + .continueOnError(true) + .returnTokens(true) + .homogeneous(false) + .upsert(upsert) + .values(values) + .tokens(tokens) + .tokenMode(true) + .tokenStrict(Byot.ENABLE) + .build(); + Validations.validateInsertRequest(request); + + Assert.assertEquals(table, request.getTable()); + Assert.assertEquals(upsert, request.getUpsert()); + Assert.assertEquals(1, request.getValues().size()); + Assert.assertEquals(1, request.getTokens().size()); + Assert.assertEquals(Byot.ENABLE, request.getTokenStrict()); + Assert.assertTrue(request.getContinueOnError()); + Assert.assertFalse(request.getHomogeneous()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testNoTableInInsertRequestValidations() { + InsertRequest request = InsertRequest.builder().build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyTableInInsertRequestValidations() { + InsertRequest request = InsertRequest.builder().table("").build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyTable.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testNoValuesInInsertRequestValidations() { + InsertRequest request = InsertRequest.builder().table(table).build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.ValuesKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyValuesInInsertRequestValidations() { + values.clear(); + InsertRequest request = InsertRequest.builder().table(table).values(values).build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyValues.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyKeyInValuesInInsertRequestValidations() { + valueMap.put("", "test_value_3"); + values.add(valueMap); + InsertRequest request = InsertRequest.builder().table(table).values(values).build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyKeyInValues.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyValueInValuesInInsertRequestValidations() { + valueMap.remove(""); + valueMap.put("test_column_3", ""); + InsertRequest request = InsertRequest.builder().table(table).values(values).build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyValueInValues.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyUpsertInInsertRequestValidations() { + valueMap.remove("test_column_3"); + InsertRequest request = InsertRequest.builder().table(table).values(values).upsert("").build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyUpsert.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testUpsertWithHomogenousInInsertRequestValidations() { + InsertRequest request = InsertRequest.builder() + .table(table).values(values).upsert(upsert).homogeneous(true) + .build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.HomogenousNotSupportedWithUpsert.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testTokensWithTokenStrictDisableInInsertRequestValidations() { + InsertRequest request = InsertRequest.builder().table(table).values(values).tokens(tokens).build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TokensPassedForByotDisable.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testNoTokensWithTokenStrictEnableInInsertRequestValidations() { + InsertRequest request = InsertRequest.builder() + .table(table).values(values).tokenStrict(Byot.ENABLE) + .build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE.toString()), + e.getMessage() + ); + } + } + + @Test + public void testNoTokensWithTokenStrictEnableStrictInInsertRequestValidations() { + InsertRequest request = InsertRequest.builder() + .table(table).values(values).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE_STRICT.toString()), + e.getMessage() + ); + } + } + + @Test + public void testEmptyTokensWithTokenStrictEnableInInsertRequestValidations() { + tokens.clear(); + InsertRequest request = InsertRequest.builder() + .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE) + .build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyTokens.getMessage(), e.getMessage()); + } + } + + @Test + public void testInsufficientTokensWithTokenStrictEnableStrictInInsertRequestValidations1() { + tokens.add(tokenMap); + System.out.println(values); + System.out.println(tokens); + InsertRequest request = InsertRequest.builder() + .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage(), e.getMessage()); + } + } + + @Test + public void testInsufficientTokensWithTokenStrictEnableStrictInInsertRequestValidations2() { + values.add(valueMap); + InsertRequest request = InsertRequest.builder() + .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage(), e.getMessage()); + } + } + + @Test + public void testTokenValueMismatchInInsertRequestValidations() { + tokenMap.put("test_column_3", "test_token_3"); + values.remove(1); + InsertRequest request = InsertRequest.builder() + .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.MismatchOfFieldsAndTokens.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyKeyInTokensInInsertRequestValidations() { + tokenMap.remove("test_column_2"); + tokenMap.remove("test_column_3"); + tokenMap.put("", "test_token_2"); + InsertRequest request = InsertRequest.builder() + .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyKeyInTokens.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyValueInTokensInInsertRequestValidations() { + tokenMap.remove(""); + tokenMap.put("test_column_2", ""); + InsertRequest request = InsertRequest.builder() + .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyValueInTokens.getMessage(), e.getMessage()); + } + } + +} diff --git a/v2/src/test/java/com/skyflow/vault/data/QueryTests.java b/v2/src/test/java/com/skyflow/vault/data/QueryTests.java new file mode 100644 index 00000000..141704a1 --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/data/QueryTests.java @@ -0,0 +1,95 @@ +package com.skyflow.vault.data; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.utils.Constants; +import com.skyflow.utils.Utils; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(fullyQualifiedNames = "com.skyflow.serviceaccount.util.Token") +public class QueryTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String vaultID = null; + private static String clusterID = null; + private static String query = null; + private static Skyflow skyflowClient = null; + + @BeforeClass + public static void setup() throws SkyflowException { + PowerMockito.mockStatic(Token.class); + PowerMockito.when(Token.isExpired("valid_token")).thenReturn(true); + PowerMockito.when(Token.isExpired("not_a_valid_token")).thenReturn(false); + + vaultID = "vault123"; + clusterID = "cluster123"; + + Credentials credentials = new Credentials(); + credentials.setToken("valid-token"); + + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.DEV); + vaultConfig.setCredentials(credentials); + + query = "test_query"; + +// skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + } + + @Test + public void testValidInputInQueryRequestValidations() { + try { + QueryRequest request = QueryRequest.builder().query(query).build(); + Validations.validateQueryRequest(request); + Assert.assertEquals(query, request.getQuery()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testNoQueryInQueryRequestValidations() { + QueryRequest request = QueryRequest.builder().build(); + try { + Validations.validateQueryRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.QueryKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyQueryInQueryRequestValidations() { + QueryRequest request = QueryRequest.builder().query("").build(); + try { + Validations.validateQueryRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyQuery.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } +} diff --git a/v2/src/test/java/com/skyflow/vault/data/UpdateTests.java b/v2/src/test/java/com/skyflow/vault/data/UpdateTests.java new file mode 100644 index 00000000..5a72001c --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/data/UpdateTests.java @@ -0,0 +1,372 @@ +package com.skyflow.vault.data; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Byot; +import com.skyflow.enums.Env; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.utils.Constants; +import com.skyflow.utils.Utils; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.HashMap; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(fullyQualifiedNames = "com.skyflow.serviceaccount.util.Token") +public class UpdateTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String vaultID = null; + private static String clusterID = null; + private static String skyflowID = null; + private static String table = null; + private static HashMap valueMap = null; + private static HashMap tokenMap = null; + private static Skyflow skyflowClient = null; + + @BeforeClass + public static void setup() throws SkyflowException { + PowerMockito.mockStatic(Token.class); + PowerMockito.when(Token.isExpired("valid_token")).thenReturn(true); + PowerMockito.when(Token.isExpired("not_a_valid_token")).thenReturn(false); + + vaultID = "vault123"; + clusterID = "cluster123"; + + Credentials credentials = new Credentials(); + credentials.setToken("valid-token"); + + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.DEV); + vaultConfig.setCredentials(credentials); + +// skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + + skyflowID = "test_update_id_1"; + table = "test_table"; + valueMap = new HashMap<>(); + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); + tokenMap = new HashMap<>(); + tokenMap.put("test_column_1", "test_token_1"); + } + + @Test + public void testValidInputInUpdateRequestValidations() { + try { + UpdateRequest request = UpdateRequest.builder() + .id(skyflowID) + .table(table) + .values(valueMap) + .tokens(tokenMap) + .returnTokens(true) + .tokenStrict(Byot.ENABLE) + .build(); + Validations.validateUpdateRequest(request); + Assert.assertEquals(table, request.getTable()); + Assert.assertEquals(skyflowID, request.getId()); + Assert.assertEquals(2, request.getValues().size()); + Assert.assertEquals(1, request.getTokens().size()); + Assert.assertTrue(request.getReturnTokens()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testNoSkyflowIdInUpdateRequestValidations() { + UpdateRequest request = UpdateRequest.builder().table(table).build(); + try { + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.SkyflowIdKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptySkyflowIdInUpdateRequestValidations() { + UpdateRequest request = UpdateRequest.builder().id("").table(table).build(); + try { + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptySkyflowId.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testNoTableInUpdateRequestValidations() { + UpdateRequest request = UpdateRequest.builder().id(skyflowID).build(); + try { + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyTableInUpdateRequestValidations() { + UpdateRequest request = UpdateRequest.builder().id(skyflowID).table("").build(); + try { + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyTable.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testNoValuesInUpdateRequestValidations() { + UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).build(); + try { + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.ValuesKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyValuesInUpdateRequestValidations() { + HashMap emptyValueMap = new HashMap<>(); + UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).values(emptyValueMap).build(); + try { + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyValues.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyKeyInValuesInUpdateRequestValidations() { + valueMap.put("", "test_value_3"); + UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).values(valueMap).build(); + try { + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyKeyInValues.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testEmptyValueInValuesInUpdateRequestValidations() { + valueMap.remove(""); + valueMap.put("test_column_3", ""); + UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).values(valueMap).build(); + try { + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyValueInValues.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testTokensWithTokenStrictDisableInUpdateRequestValidations() { + valueMap.remove("test_column_3"); + UpdateRequest request = UpdateRequest.builder() + .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.DISABLE) + .build(); + try { + System.out.println(valueMap); + System.out.println(tokenMap); + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TokensPassedForByotDisable.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testNoTokensWithTokenStrictEnableInUpdateRequestValidations() { + UpdateRequest request = UpdateRequest.builder() + .id(skyflowID).table(table).values(valueMap).tokenStrict(Byot.ENABLE) + .build(); + try { + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE.toString()), + e.getMessage() + ); + } + } + + @Test + public void testNoTokensWithTokenStrictEnableStrictInUpdateRequestValidations() { + UpdateRequest request = UpdateRequest.builder() + .id(skyflowID).table(table).values(valueMap).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + System.out.println(valueMap); + System.out.println(tokenMap); + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE_STRICT.toString()), + e.getMessage() + ); + } + } + + @Test + public void testEmptyTokensWithTokenStrictEnableInUpdateRequestValidations() { + HashMap emptyTokenMap = new HashMap<>(); + UpdateRequest request = UpdateRequest.builder() + .id(skyflowID).table(table).values(valueMap).tokens(emptyTokenMap).tokenStrict(Byot.ENABLE) + .build(); + try { + System.out.println(valueMap); + System.out.println(tokenMap); + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyTokens.getMessage(), e.getMessage()); + } + } + + @Test + public void testInsufficientTokensWithTokenStrictEnableStrictInUpdateRequestValidations1() { + UpdateRequest request = UpdateRequest.builder() + .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + System.out.println(valueMap); + System.out.println(tokenMap); + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage(), e.getMessage()); + } + } + + @Test + public void testInsufficientTokensWithTokenStrictEnableStrictInUpdateRequestValidations2() { + UpdateRequest request = UpdateRequest.builder() + .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + System.out.println(valueMap); + System.out.println(tokenMap); + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage(), e.getMessage()); + } + } + + @Test + public void testTokenValueMismatchInUpdateRequestValidations() { + tokenMap.put("test_column_3", "test_token_3"); + UpdateRequest request = UpdateRequest.builder() + .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + System.out.println(valueMap); + System.out.println(tokenMap); + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.MismatchOfFieldsAndTokens.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyKeyInTokensInUpdateRequestValidations() { + tokenMap.remove("test_column_2"); + tokenMap.remove("test_column_3"); + tokenMap.put("", "test_token_2"); + UpdateRequest request = UpdateRequest.builder() + .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + System.out.println(valueMap); + System.out.println(tokenMap); + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyKeyInTokens.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyValueInTokensInUpdateRequestValidations() { + tokenMap.remove(""); + tokenMap.put("test_column_2", ""); + UpdateRequest request = UpdateRequest.builder() + .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) + .build(); + try { + System.out.println(valueMap); + System.out.println(tokenMap); + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyValueInTokens.getMessage(), e.getMessage()); + } + } + +} diff --git a/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java b/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java new file mode 100644 index 00000000..04dd406d --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java @@ -0,0 +1,213 @@ +package com.skyflow.vault.tokens; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.enums.LogLevel; +import com.skyflow.enums.RedactionType; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.ApiException; +import com.skyflow.generated.rest.api.TokensApi; +import com.skyflow.generated.rest.models.V1DetokenizeResponse; +import com.skyflow.utils.Constants; +import com.skyflow.utils.Utils; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.mockito.ArgumentMatchers; +import org.powermock.api.mockito.PowerMockito; + +import java.util.ArrayList; + +//@RunWith(PowerMockRunner.class) +//@PrepareForTest(fullyQualifiedNames = { +// "com.skyflow.serviceaccount.util.Token", +// "com.skyflow.generated.rest.ApiClient", +// "com.skyflow.generated.rest.api.TokensApi", +//}) +public class DetokenizeTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String vaultID = null; + private static String clusterID = null; + private static VaultConfig vaultConfig = null; + private static String token = null; + private static ArrayList tokens = null; + private static Skyflow skyflowClient = null; + + @BeforeClass + public static void setup() throws SkyflowException, NoSuchMethodException { +// PowerMockito.mockStatic(Token.class); +// PowerMockito.when(Token.isExpired("valid_token")).thenReturn(true); +// PowerMockito.when(Token.isExpired("not_a_valid_token")).thenReturn(false); +// PowerMockito.mock(ApiClient.class); + + vaultID = "vault123"; + clusterID = "cluster123"; + + Credentials credentials = new Credentials(); + credentials.setToken("valid-token"); + + vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.DEV); + vaultConfig.setCredentials(credentials); + + token = "test_token_1"; + tokens = new ArrayList<>(); + } + + @Test + public void testValidInputInDetokenizeRequestValidations() { + try { + tokens.add(token); + DetokenizeRequest request = DetokenizeRequest.builder(). + tokens(tokens).redactionType(RedactionType.MASKED).continueOnError(false).build(); + Validations.validateDetokenizeRequest(request); + Assert.assertEquals(1, tokens.size()); + Assert.assertEquals(RedactionType.MASKED, request.getRedactionType()); + Assert.assertFalse(request.getContinueOnError()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testNoTokensInDetokenizeRequestValidations() { + DetokenizeRequest request = DetokenizeRequest.builder().build(); + try { + Validations.validateDetokenizeRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.InvalidDataTokens.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + Assert.assertEquals(RedactionType.PLAIN_TEXT, request.getRedactionType()); + Assert.assertTrue(request.getContinueOnError()); + } + } + + @Test + public void testEmptyTokensInDetokenizeRequestValidations() { + tokens.clear(); + DetokenizeRequest request = DetokenizeRequest.builder().tokens(tokens).build(); + try { + Validations.validateDetokenizeRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyDataTokens.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + Assert.assertEquals(RedactionType.PLAIN_TEXT, request.getRedactionType()); + Assert.assertTrue(request.getContinueOnError()); + } + } + + @Test + public void testEmptyTokenInTokensInDetokenizeRequestValidations() { + tokens.add(token); + tokens.add(""); + DetokenizeRequest request = DetokenizeRequest.builder().tokens(tokens).build(); + try { + Validations.validateDetokenizeRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyTokenInDataTokens.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + Assert.assertEquals(RedactionType.PLAIN_TEXT, request.getRedactionType()); + Assert.assertTrue(request.getContinueOnError()); + } + } + + @Test + public void testRedactionAndContinueOnErrorInDetokenizeRequestValidations() { + tokens.clear(); + tokens.add(token); + DetokenizeRequest request = DetokenizeRequest.builder(). + tokens(tokens).redactionType(null).continueOnError(null).build(); + try { + Validations.validateDetokenizeRequest(request); + Assert.assertEquals(RedactionType.PLAIN_TEXT, request.getRedactionType()); + Assert.assertTrue(request.getContinueOnError()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testNoTokensInDetokenizeMethod() { + DetokenizeRequest request = DetokenizeRequest.builder().build(); + try { + V1DetokenizeResponse mockResponse = new V1DetokenizeResponse(); + TokensApi mockApi = PowerMockito.mock(TokensApi.class); + PowerMockito + .when(mockApi.recordServiceDetokenize(ArgumentMatchers.anyString(), ArgumentMatchers.any())) + .thenReturn(mockResponse); + + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + DetokenizeResponse response = skyflowClient.vault().detokenize(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.InvalidDataTokens.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + Assert.assertEquals(RedactionType.PLAIN_TEXT, request.getRedactionType()); + Assert.assertTrue(request.getContinueOnError()); + } catch (ApiException e) { + Assert.fail(); + } + } + + @Test + public void testEmptyTokensInDetokenizeMethod() { + tokens.clear(); + DetokenizeRequest request = DetokenizeRequest.builder().tokens(tokens).build(); + try { + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + DetokenizeResponse response = skyflowClient.vault().detokenize(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyDataTokens.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + Assert.assertEquals(RedactionType.PLAIN_TEXT, request.getRedactionType()); + Assert.assertTrue(request.getContinueOnError()); + } + } + + @Test + public void testEmptyTokenInTokensInDetokenizeMethod() { + tokens.add(token); + tokens.add(""); + DetokenizeRequest request = DetokenizeRequest.builder().tokens(tokens).build(); + try { + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + DetokenizeResponse response = skyflowClient.vault().detokenize(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.EmptyTokenInDataTokens.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + Assert.assertEquals(RedactionType.PLAIN_TEXT, request.getRedactionType()); + Assert.assertTrue(request.getContinueOnError()); + } + } +} From 184124b2a8ba70d917b9caa234e3a8193ce2607b Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 1 Nov 2024 21:11:44 +0530 Subject: [PATCH 36/68] SK-1680 Changed info logs to error logs in validation checks - SK-1681 Updated validation checks for Get request interface --- .../utils/validations/Validations.java | 155 ++++++++++-------- 1 file changed, 87 insertions(+), 68 deletions(-) diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index bd4a7cd6..266bb0aa 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -175,33 +175,33 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky Byot tokenStrict = insertRequest.getTokenStrict(); if (table == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TABLE_IS_REQUIRED.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableKeyError.getMessage()); } else if (table.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); } else if (values == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.VALUES_IS_REQUIRED.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ValuesKeyError.getMessage()); } else if (values.isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_VALUES.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValues.getMessage()); } else if (upsert != null) { if (upsert.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_UPSERT.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyUpsert.getMessage()); } else if (homogeneous != null && homogeneous) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.HOMOGENOUS_NOT_SUPPORTED_WITH_UPSERT.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException( @@ -213,14 +213,14 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky for (HashMap valuesMap : values) { for (String key : valuesMap.keySet()) { if (key == null || key.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_KEY_IN_VALUES.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyKeyInValues.getMessage()); } else { Object value = valuesMap.get(key); if (value == null || value.toString().trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_VALUE_IN_VALUES.getLog(), InterfaceName.INSERT.getName(), key )); @@ -233,7 +233,7 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky switch (tokenStrict) { case DISABLE: if (tokens != null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TOKENS_NOT_ALLOWED_WITH_BYOT_DISABLE.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TokensPassedForByotDisable.getMessage()); @@ -241,7 +241,7 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky break; case ENABLE: if (tokens == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TOKENS_REQUIRED_WITH_BYOT.getLog(), InterfaceName.INSERT.getName(), Byot.ENABLE.toString() )); @@ -249,11 +249,11 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE.toString()) ); } - validateTokensForInsertRequest(tokens, values); + validateTokensForInsertRequest(tokens, values, tokenStrict); break; case ENABLE_STRICT: if (tokens == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TOKENS_REQUIRED_WITH_BYOT.getLog(), InterfaceName.INSERT.getName(), Byot.ENABLE_STRICT.toString() )); @@ -261,7 +261,7 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE_STRICT.toString()) ); } else if (tokens.size() != values.size()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.INSUFFICIENT_TOKENS_PASSED_FOR_BYOT_ENABLE_STRICT.getLog(), InterfaceName.INSERT.getName() )); @@ -269,7 +269,7 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage() ); } - validateTokensForInsertRequest(tokens, values); + validateTokensForInsertRequest(tokens, values, tokenStrict); break; } } @@ -279,7 +279,7 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep ArrayList ids = getRequest.getIds(); RedactionType redactionType = getRequest.getRedactionType(); Boolean tokenization = getRequest.getReturnTokens(); - List fields = getRequest.getFields(); + ArrayList fields = getRequest.getFields(); String offset = getRequest.getOffset(); String limit = getRequest.getLimit(); String columnName = getRequest.getColumnName(); @@ -287,18 +287,18 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep String orderBy = getRequest.getOrderBy(); if (table == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TABLE_IS_REQUIRED.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableKeyError.getMessage()); } else if (table.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); } else if (ids != null) { if (ids.isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_IDS.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyIds.getMessage()); @@ -306,7 +306,7 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep for (int index = 0; index < ids.size(); index++) { String id = ids.get(index); if (id == null || id.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_ID_IN_IDS.getLog(), InterfaceName.GET.getName(), Integer.toString(index) )); @@ -314,9 +314,10 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep } } } - } else if (fields != null) { + } + if (fields != null) { if (fields.isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_FIELDS.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyFields.getMessage()); @@ -324,7 +325,7 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep for (int index = 0; index < fields.size(); index++) { String field = fields.get(index); if (field == null || field.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_FIELD_IN_FIELDS.getLog(), InterfaceName.GET.getName(), Integer.toString(index) )); @@ -332,69 +333,72 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep } } } - } else if (redactionType == null && (tokenization == null || !tokenization)) { - LogUtil.printInfoLog(Utils.parameterizedString( + } + if (redactionType == null && (tokenization == null || !tokenization)) { + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.REDACTION_IS_REQUIRED.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.RedactionKeyError.getMessage()); - } else if (tokenization != null && tokenization) { + } + if (tokenization != null && tokenization) { if (redactionType != null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TOKENIZATION_NOT_SUPPORTED_WITH_REDACTION.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.RedactionWithTokensNotSupported.getMessage() ); } else if (columnName != null || columnValues != null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TOKENIZATION_SUPPORTED_ONLY_WITH_IDS.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TokensGetColumnNotSupported.getMessage() ); } - } else if (offset != null && offset.isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + } + if (offset != null && offset.trim().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OFFSET.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyOffset.getMessage()); - } else if (limit != null && limit.isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + } + if (limit != null && limit.trim().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_LIMIT.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyLimit.getMessage()); } - if (ids == null && columnName == null && columnValues == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.NEITHER_IDS_NOR_COLUMN_NAME_PASSED.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.UniqueColumnOrIdsKeyError.getMessage()); } else if (ids != null && (columnName != null || columnValues != null)) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.BOTH_IDS_AND_COLUMN_NAME_PASSED.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.BothIdsAndColumnDetailsSpecified.getMessage()); } else if (columnName == null && columnValues != null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.COLUMN_NAME_IS_REQUIRED.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ColumnNameKeyError.getMessage()); } else if (columnName != null && columnValues == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.COLUMN_VALUES_IS_REQUIRED_GET.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ColumnValuesKeyErrorGet.getMessage()); } else if (columnName != null) { if (columnName.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_COLUMN_NAME.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyColumnName.getMessage()); } else if (columnValues.isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_COLUMN_VALUES.getLog(), InterfaceName.GET.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyColumnValues.getMessage()); @@ -402,7 +406,7 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep for (int index = 0; index < columnValues.size(); index++) { String columnValue = columnValues.get(index); if (columnValue == null || columnValue.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_COLUMN_VALUE_IN_COLUMN_VALUES.getLog(), InterfaceName.GET.getName(), Integer.toString(index) )); @@ -422,32 +426,37 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky Byot tokenStrict = updateRequest.getTokenStrict(); if (table == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TABLE_IS_REQUIRED.getLog(), InterfaceName.UPDATE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableKeyError.getMessage()); } else if (table.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.UPDATE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); } else if (skyflowId == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.SKYFLOW_ID_IS_REQUIRED.getLog(), InterfaceName.UPDATE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.SkyflowIdKeyError.getMessage()); } else if (skyflowId.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_SKYFLOW_ID.getLog(), InterfaceName.UPDATE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptySkyflowId.getMessage()); - } else if (values == null || values.isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + } else if (values == null) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.VALUES_IS_REQUIRED.getLog(), InterfaceName.UPDATE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ValuesKeyError.getMessage()); + } else if (values.isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_VALUES.getLog(), InterfaceName.UPDATE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValues.getMessage()); } else if (tokens != null && tokens.isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_TOKENS.getLog(), InterfaceName.UPDATE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTokens.getMessage()); @@ -455,14 +464,14 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky for (String key : values.keySet()) { if (key == null || key.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_KEY_IN_VALUES.getLog(), InterfaceName.UPDATE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyKeyInValues.getMessage()); } else { Object value = values.get(key); if (value == null || value.toString().trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_VALUE_IN_VALUES.getLog(), InterfaceName.UPDATE.getName(), key )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), @@ -474,7 +483,7 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky switch (tokenStrict) { case DISABLE: if (tokens != null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TOKENS_NOT_ALLOWED_WITH_BYOT_DISABLE.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), @@ -483,7 +492,7 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky break; case ENABLE: if (tokens == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TOKENS_REQUIRED_WITH_BYOT.getLog(), InterfaceName.INSERT.getName(), Byot.ENABLE.toString() )); @@ -494,14 +503,14 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky break; case ENABLE_STRICT: if (tokens == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TOKENS_REQUIRED_WITH_BYOT.getLog(), InterfaceName.INSERT.getName(), Byot.ENABLE_STRICT.toString() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE_STRICT.toString())); } else if (tokens.size() != values.size()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.INSUFFICIENT_TOKENS_PASSED_FOR_BYOT_ENABLE_STRICT.getLog(), InterfaceName.INSERT.getName() )); @@ -517,23 +526,23 @@ public static void validateDeleteRequest(DeleteRequest deleteRequest) throws Sky String table = deleteRequest.getTable(); ArrayList ids = deleteRequest.getIds(); if (table == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TABLE_IS_REQUIRED.getLog(), InterfaceName.DELETE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableKeyError.getMessage()); } else if (table.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.DELETE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); } else if (ids == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.IDS_IS_REQUIRED.getLog(), InterfaceName.DELETE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.IdsKeyError.getMessage()); } else if (ids.isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_IDS.getLog(), InterfaceName.DELETE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyIds.getMessage()); @@ -541,7 +550,7 @@ public static void validateDeleteRequest(DeleteRequest deleteRequest) throws Sky for (int index = 0; index < ids.size(); index++) { String id = ids.get(index); if (id.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_ID_IN_IDS.getLog(), InterfaceName.DELETE.getName(), Integer.toString(index) )); @@ -554,12 +563,12 @@ public static void validateDeleteRequest(DeleteRequest deleteRequest) throws Sky public static void validateQueryRequest(QueryRequest queryRequest) throws SkyflowException { String query = queryRequest.getQuery(); if (query == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.QUERY_IS_REQUIRED.getLog(), InterfaceName.QUERY.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.QueryKeyError.getMessage()); } else if (query.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_QUERY.getLog(), InterfaceName.QUERY.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyQuery.getMessage()); @@ -571,12 +580,12 @@ public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) thro if (columnValues == null || columnValues.isEmpty()) { if (columnValues == null) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.COLUMN_VALUES_IS_REQUIRED_TOKENIZE.getLog(), InterfaceName.TOKENIZE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ColumnValuesKeyErrorTokenize.getMessage()); } else { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_COLUMN_VALUES.getLog(), InterfaceName.TOKENIZE.getName() )); } @@ -585,13 +594,13 @@ public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) thro for (int index = 0; index < columnValues.size(); index++) { ColumnValue value = columnValues.get(index); if (value.getValue() == null || value.getValue().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_COLUMN_VALUE_IN_COLUMN_VALUES.getLog(), InterfaceName.TOKENIZE.getName(), Integer.toString(index) )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValueInColumnValues.getMessage()); } else if (value.getColumnGroup() == null || value.getColumnGroup().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_COLUMN_GROUP_IN_COLUMN_VALUES.getLog(), InterfaceName.TOKENIZE.getName(), Integer.toString(index) )); @@ -604,10 +613,11 @@ public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) thro private static void validateTokensForInsertRequest( ArrayList> tokens, - ArrayList> values + ArrayList> values, + Byot tokenStrict ) throws SkyflowException { if (tokens.isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_TOKENS.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTokens.getMessage()); @@ -616,6 +626,15 @@ private static void validateTokensForInsertRequest( for (int index = 0; index < tokens.size(); index++) { HashMap tokensMap = tokens.get(index); HashMap valuesMap = values.get(index); + if (tokensMap.size() != valuesMap.size() && tokenStrict == Byot.ENABLE_STRICT) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.INSUFFICIENT_TOKENS_PASSED_FOR_BYOT_ENABLE_STRICT.getLog(), + InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage() + ); + } validateTokensMapWithTokenStrict(tokensMap, valuesMap); } } @@ -625,19 +644,19 @@ private static void validateTokensMapWithTokenStrict( ) throws SkyflowException { for (String key : tokensMap.keySet()) { if (key == null || key.trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_KEY_IN_TOKENS.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyKeyInTokens.getMessage()); } else if (!valuesMap.containsKey(key)) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.MISMATCH_OF_FIELDS_AND_TOKENS.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.MismatchOfFieldsAndTokens.getMessage()); } else { Object value = tokensMap.get(key); if (value == null || value.toString().trim().isEmpty()) { - LogUtil.printInfoLog(Utils.parameterizedString( + LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_VALUE_IN_TOKENS.getLog(), InterfaceName.INSERT.getName(), key )); From 8df4058d66aafd78d911e7d4227a453609462a42 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Tue, 5 Nov 2024 20:32:14 +0530 Subject: [PATCH 37/68] SK-1684 Add unit tests - Add unit tests for configs i.e. vault, connection and credentials - Add unit tests for response pojo classes for few vault API interfaces --- .../com/skyflow/config/ConnectionConfig.java | 4 + .../java/com/skyflow/config/VaultConfig.java | 5 - .../utils/validations/Validations.java | 3 +- .../skyflow/vault/data/DeleteResponse.java | 2 +- .../com/skyflow/vault/data/QueryResponse.java | 2 +- .../skyflow/vault/data/UpdateResponse.java | 4 +- .../vault/config/ConnectionConfigTests.java | 144 ++++++++++ .../vault/config/CredentialsTests.java | 262 ++++++++++++++++++ .../vault/config/VaultConfigTests.java | 174 ++++++++++++ .../com/skyflow/vault/data/DeleteTests.java | 12 + .../java/com/skyflow/vault/data/GetTests.java | 22 +- .../com/skyflow/vault/data/InsertTests.java | 4 +- .../com/skyflow/vault/data/QueryTests.java | 23 ++ .../com/skyflow/vault/data/UpdateTests.java | 31 +-- .../vault/serviceaccount/util/TokenTests.java | 46 +++ 15 files changed, 700 insertions(+), 38 deletions(-) create mode 100644 v2/src/test/java/com/skyflow/vault/config/ConnectionConfigTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/config/CredentialsTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/config/VaultConfigTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/serviceaccount/util/TokenTests.java diff --git a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java index f0821de7..7661df0d 100644 --- a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java +++ b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java @@ -27,6 +27,10 @@ public void setConnectionUrl(String connectionUrl) { this.connectionUrl = connectionUrl; } + public Credentials getCredentials() { + return credentials; + } + public void setCredentials(Credentials credentials) { this.credentials = credentials; } diff --git a/v2/src/main/java/com/skyflow/config/VaultConfig.java b/v2/src/main/java/com/skyflow/config/VaultConfig.java index 2e757c7b..fd36d384 100644 --- a/v2/src/main/java/com/skyflow/config/VaultConfig.java +++ b/v2/src/main/java/com/skyflow/config/VaultConfig.java @@ -1,7 +1,6 @@ package com.skyflow.config; import com.skyflow.enums.Env; -import com.skyflow.utils.Utils; public class VaultConfig { private String vaultId; @@ -48,10 +47,6 @@ public void setCredentials(Credentials credentials) { this.credentials = credentials; } - public String getVaultURL() { - return Utils.getVaultURL(this.clusterId, this.env); - } - @Override public String toString() { return "VaultConfig {" + diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 266bb0aa..f0c44956 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -134,7 +134,8 @@ public static void validateCredentials(Credentials credentials) throws SkyflowEx } } } - } else if (context != null && context.trim().isEmpty()) { + } + if (context != null && context.trim().isEmpty()) { LogUtil.printErrorLog(ErrorLogs.EMPTY_OR_NULL_CONTEXT.getLog()); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyContext.getMessage()); } diff --git a/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java b/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java index 0024c68a..21adc788 100644 --- a/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java @@ -3,7 +3,7 @@ import java.util.ArrayList; public class DeleteResponse { - private ArrayList deletedIds; + private final ArrayList deletedIds; public DeleteResponse(ArrayList deletedIds) { this.deletedIds = deletedIds; diff --git a/v2/src/main/java/com/skyflow/vault/data/QueryResponse.java b/v2/src/main/java/com/skyflow/vault/data/QueryResponse.java index 72d1e316..e8103506 100644 --- a/v2/src/main/java/com/skyflow/vault/data/QueryResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/QueryResponse.java @@ -4,7 +4,7 @@ import java.util.HashMap; public class QueryResponse { - private ArrayList> fields; + private final ArrayList> fields; private ArrayList> tokenizedData; public QueryResponse(ArrayList> fields) { diff --git a/v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java b/v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java index 05ae30bd..0f860b22 100644 --- a/v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java @@ -3,8 +3,8 @@ import java.util.HashMap; public class UpdateResponse { - private String skyflowId; - private HashMap tokens; + private final String skyflowId; + private final HashMap tokens; public UpdateResponse(String skyflowId, HashMap tokens) { this.skyflowId = skyflowId; diff --git a/v2/src/test/java/com/skyflow/vault/config/ConnectionConfigTests.java b/v2/src/test/java/com/skyflow/vault/config/ConnectionConfigTests.java new file mode 100644 index 00000000..648ad98d --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/config/ConnectionConfigTests.java @@ -0,0 +1,144 @@ +package com.skyflow.vault.config; + +import com.skyflow.config.ConnectionConfig; +import com.skyflow.config.Credentials; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(fullyQualifiedNames = "com.skyflow.serviceaccount.util.Token") +public class ConnectionConfigTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String connectionID = null; + private static String connectionURL = null; + private static String invalidConnectionURL = null; + private static Credentials credentials = null; + + @BeforeClass + public static void setup() throws SkyflowException, NoSuchMethodException { + PowerMockito.mockStatic(Token.class); + PowerMockito.when(Token.isExpired("valid_token")).thenReturn(true); + PowerMockito.when(Token.isExpired("not_a_valid_token")).thenReturn(false); + PowerMockito.mock(ApiClient.class); + + connectionID = "connection123"; + connectionURL = "https://connection.url.com"; + invalidConnectionURL = "invalid.connection.url.com"; + + credentials = new Credentials(); + credentials.setToken("valid-token"); + } + + @Test + public void testValidConnectionConfigWithCredentials() { + try { + ConnectionConfig connectionConfig = new ConnectionConfig(); + connectionConfig.setConnectionId(connectionID); + connectionConfig.setConnectionUrl(connectionURL); + connectionConfig.setCredentials(credentials); + Validations.validateConnectionConfig(connectionConfig); + + Assert.assertEquals(connectionID, connectionConfig.getConnectionId()); + Assert.assertEquals(connectionURL, connectionConfig.getConnectionUrl()); + Assert.assertNotNull(connectionConfig.getCredentials()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testValidConnectionConfigWithoutCredentials() { + try { + ConnectionConfig connectionConfig = new ConnectionConfig(); + connectionConfig.setConnectionId(connectionID); + connectionConfig.setConnectionUrl(connectionURL); + Validations.validateConnectionConfig(connectionConfig); + + Assert.assertEquals(connectionID, connectionConfig.getConnectionId()); + Assert.assertEquals(connectionURL, connectionConfig.getConnectionUrl()); + Assert.assertNull(connectionConfig.getCredentials()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testNoConnectionIdInConnectionConfig() { + ConnectionConfig connectionConfig = new ConnectionConfig(); + try { + connectionConfig.setConnectionUrl(connectionURL); + Validations.validateConnectionConfig(connectionConfig); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidConnectionId.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyConnectionIdInConnectionConfig() { + try { + ConnectionConfig connectionConfig = new ConnectionConfig(); + connectionConfig.setConnectionId(""); + connectionConfig.setConnectionUrl(connectionURL); + Validations.validateConnectionConfig(connectionConfig); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyConnectionId.getMessage(), e.getMessage()); + } + } + + @Test + public void testNoConnectionURLInConnectionConfig() { + try { + ConnectionConfig connectionConfig = new ConnectionConfig(); + connectionConfig.setConnectionId(connectionID); + Validations.validateConnectionConfig(connectionConfig); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidConnectionUrl.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyConnectionURLInConnectionConfig() { + try { + ConnectionConfig connectionConfig = new ConnectionConfig(); + connectionConfig.setConnectionId(connectionID); + connectionConfig.setConnectionUrl(""); + Validations.validateConnectionConfig(connectionConfig); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyConnectionUrl.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidConnectionURLInConnectionConfig() { + try { + ConnectionConfig connectionConfig = new ConnectionConfig(); + connectionConfig.setConnectionId(connectionID); + connectionConfig.setConnectionUrl(invalidConnectionURL); + Validations.validateConnectionConfig(connectionConfig); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidConnectionUrlFormat.getMessage(), e.getMessage()); + } + } +} diff --git a/v2/src/test/java/com/skyflow/vault/config/CredentialsTests.java b/v2/src/test/java/com/skyflow/vault/config/CredentialsTests.java new file mode 100644 index 00000000..554f7f0d --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/config/CredentialsTests.java @@ -0,0 +1,262 @@ +package com.skyflow.vault.config; + +import com.skyflow.config.Credentials; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.ArrayList; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(fullyQualifiedNames = "com.skyflow.serviceaccount.util.Token") +public class CredentialsTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String path = null; + private static String credentialsString = null; + private static String token = null; + private static String validApiKey = null; + private static String invalidApiKey = null; + private static ArrayList roles = null; + private static String role = null; + private static String context = null; + + @BeforeClass + public static void setup() throws SkyflowException, NoSuchMethodException { + PowerMockito.mockStatic(Token.class); + PowerMockito.when(Token.isExpired("valid_token")).thenReturn(true); + PowerMockito.when(Token.isExpired("not_a_valid_token")).thenReturn(false); + PowerMockito.mock(ApiClient.class); + + path = "valid-path-to-credentials-file"; + credentialsString = "valid-credentials-string"; + token = "valid-token"; + validApiKey = "sky-ab123-abcd1234cdef1234abcd4321cdef4321"; + invalidApiKey = "invalid-api-key"; + roles = new ArrayList<>(); + role = "test_credentials_role"; + context = "test_context_value"; + } + + @Test + public void testValidCredentialsWithPath() { + try { + Credentials credentials = new Credentials(); + credentials.setPath(path); + Validations.validateCredentials(credentials); + Assert.assertNull(credentials.getCredentialsString()); + Assert.assertNull(credentials.getToken()); + Assert.assertNull(credentials.getApiKey()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testValidCredentialsWithCredentialsString() { + try { + Credentials credentials = new Credentials(); + credentials.setCredentialsString(credentialsString); + Validations.validateCredentials(credentials); + Assert.assertNull(credentials.getPath()); + Assert.assertNull(credentials.getToken()); + Assert.assertNull(credentials.getApiKey()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testValidCredentialsWithToken() { + try { + Credentials credentials = new Credentials(); + credentials.setToken(token); + Validations.validateCredentials(credentials); + Assert.assertNull(credentials.getPath()); + Assert.assertNull(credentials.getCredentialsString()); + Assert.assertNull(credentials.getApiKey()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testValidCredentialsWithApikey() { + try { + Credentials credentials = new Credentials(); + credentials.setApiKey(validApiKey); + Validations.validateCredentials(credentials); + Assert.assertNull(credentials.getPath()); + Assert.assertNull(credentials.getCredentialsString()); + Assert.assertNull(credentials.getToken()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testValidCredentialsWithRolesAndContext() { + try { + roles.add(role); + Credentials credentials = new Credentials(); + credentials.setApiKey(validApiKey); + credentials.setRoles(roles); + credentials.setContext(context); + Validations.validateCredentials(credentials); + Assert.assertNull(credentials.getPath()); + Assert.assertNull(credentials.getCredentialsString()); + Assert.assertNull(credentials.getToken()); + Assert.assertEquals(context, credentials.getContext()); + Assert.assertEquals(1, credentials.getRoles().size()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testEmptyPathInCredentials() { + try { + Credentials credentials = new Credentials(); + credentials.setPath(""); + Validations.validateCredentials(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyCredentialFilePath.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyCredentialsStringInCredentials() { + try { + Credentials credentials = new Credentials(); + credentials.setCredentialsString(""); + Validations.validateCredentials(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyCredentialsString.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyTokenInCredentials() { + try { + Credentials credentials = new Credentials(); + credentials.setToken(""); + Validations.validateCredentials(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyToken.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyApikeyInCredentials() { + try { + Credentials credentials = new Credentials(); + credentials.setApiKey(""); + Validations.validateCredentials(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyApikey.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidApikeyInCredentials() { + try { + Credentials credentials = new Credentials(); + credentials.setApiKey(invalidApiKey); + Validations.validateCredentials(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidApikey.getMessage(), e.getMessage()); + } + } + + @Test + public void testBothTokenAndPathInCredentials() { + try { + Credentials credentials = new Credentials(); + credentials.setPath(path); + credentials.setToken(token); + Validations.validateCredentials(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.MultipleTokenGenerationMeansPassed.getMessage(), e.getMessage()); + } + } + + @Test + public void testNothingPassedInCredentials() { + try { + Credentials credentials = new Credentials(); + Validations.validateCredentials(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.NoTokenGenerationMeansPassed.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyRolesInCredentials() { + try { + roles.clear(); + Credentials credentials = new Credentials(); + credentials.setPath(path); + credentials.setRoles(roles); + Validations.validateCredentials(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyRoles.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyRoleInRolesInCredentials() { + try { + Credentials credentials = new Credentials(); + credentials.setPath(path); + roles.add(role); + roles.add(""); + credentials.setRoles(roles); + Validations.validateCredentials(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyRoleInRoles.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyContextInCredentials() { + try { + Credentials credentials = new Credentials(); + credentials.setPath(path); + credentials.setContext(""); + Validations.validateCredentials(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyContext.getMessage(), e.getMessage()); + } + } + +} diff --git a/v2/src/test/java/com/skyflow/vault/config/VaultConfigTests.java b/v2/src/test/java/com/skyflow/vault/config/VaultConfigTests.java new file mode 100644 index 00000000..011f2990 --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/config/VaultConfigTests.java @@ -0,0 +1,174 @@ +package com.skyflow.vault.config; + +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(fullyQualifiedNames = "com.skyflow.serviceaccount.util.Token") +public class VaultConfigTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String vaultID = null; + private static String clusterID = null; + private static Credentials credentials = null; + + + @BeforeClass + public static void setup() throws SkyflowException, NoSuchMethodException { + PowerMockito.mockStatic(Token.class); + PowerMockito.when(Token.isExpired("valid_token")).thenReturn(true); + PowerMockito.when(Token.isExpired("not_a_valid_token")).thenReturn(false); + PowerMockito.mock(ApiClient.class); + + vaultID = "vault123"; + clusterID = "cluster123"; + + credentials = new Credentials(); + credentials.setToken("valid-token"); + + } + + @Test + public void testValidVaultConfigWithCredentials() { + try { + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.SANDBOX); + vaultConfig.setCredentials(credentials); + Validations.validateVaultConfig(vaultConfig); + + Assert.assertEquals(vaultID, vaultConfig.getVaultId()); + Assert.assertEquals(clusterID, vaultConfig.getClusterId()); + Assert.assertEquals(Env.SANDBOX, vaultConfig.getEnv()); + Assert.assertNotNull(vaultConfig.getCredentials()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testValidVaultConfigWithoutCredentials() { + try { + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.SANDBOX); + Validations.validateVaultConfig(vaultConfig); + + Assert.assertEquals(vaultID, vaultConfig.getVaultId()); + Assert.assertEquals(clusterID, vaultConfig.getClusterId()); + Assert.assertEquals(Env.SANDBOX, vaultConfig.getEnv()); + Assert.assertNull(vaultConfig.getCredentials()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testDefaultEnvInVaultConfigWithCredentials() { + try { + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + vaultConfig.setCredentials(credentials); + Validations.validateVaultConfig(vaultConfig); + + Assert.assertEquals(vaultID, vaultConfig.getVaultId()); + Assert.assertEquals(clusterID, vaultConfig.getClusterId()); + Assert.assertEquals(Env.PROD, vaultConfig.getEnv()); + Assert.assertNotNull(vaultConfig.getCredentials()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testDefaultEnvInVaultConfigWithoutCredentials() { + try { + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + Validations.validateVaultConfig(vaultConfig); + + Assert.assertEquals(vaultID, vaultConfig.getVaultId()); + Assert.assertEquals(clusterID, vaultConfig.getClusterId()); + Assert.assertEquals(Env.PROD, vaultConfig.getEnv()); + Assert.assertNull(vaultConfig.getCredentials()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testNoVaultIdInVaultConfig() { + VaultConfig vaultConfig = new VaultConfig(); + try { + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.SANDBOX); + Validations.validateVaultConfig(vaultConfig); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidVaultId.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyVaultIdInVaultConfig() { + try { + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(""); + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.SANDBOX); + Validations.validateVaultConfig(vaultConfig); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyVaultId.getMessage(), e.getMessage()); + } + } + + @Test + public void testNoClusterIdInVaultConfig() { + try { + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setEnv(Env.SANDBOX); + Validations.validateVaultConfig(vaultConfig); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidClusterId.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyClusterIdInVaultConfig() { + try { + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(""); + vaultConfig.setEnv(Env.SANDBOX); + Validations.validateVaultConfig(vaultConfig); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyClusterId.getMessage(), e.getMessage()); + } + } +} diff --git a/v2/src/test/java/com/skyflow/vault/data/DeleteTests.java b/v2/src/test/java/com/skyflow/vault/data/DeleteTests.java index 5660522e..9ab78af6 100644 --- a/v2/src/test/java/com/skyflow/vault/data/DeleteTests.java +++ b/v2/src/test/java/com/skyflow/vault/data/DeleteTests.java @@ -152,4 +152,16 @@ public void testEmptyTableInDeleteRequestValidations() { ); } } + + @Test + public void testDeleteResponse() { + try { + DeleteResponse response = new DeleteResponse(ids); + String responseString = "{\n\t\"deletedIds\": [\n\t\t\"" + skyflowID + "\"]\n}"; + Assert.assertEquals(1, response.getDeletedIds().size()); + Assert.assertEquals(responseString, response.toString()); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } } diff --git a/v2/src/test/java/com/skyflow/vault/data/GetTests.java b/v2/src/test/java/com/skyflow/vault/data/GetTests.java index 66e5cddb..ac6625fe 100644 --- a/v2/src/test/java/com/skyflow/vault/data/GetTests.java +++ b/v2/src/test/java/com/skyflow/vault/data/GetTests.java @@ -13,6 +13,7 @@ import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; import org.junit.Assert; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; @@ -69,6 +70,13 @@ public static void setup() throws SkyflowException { table = "test_table"; } + @Before + public void setupTest() { + ids.clear(); + fields.clear(); + columnValues.clear(); + } + @Test public void testValidGetByIdInputInGetRequestValidations() { try { @@ -103,6 +111,7 @@ public void testValidGetByIdInputInGetRequestValidations() { public void testValidGetByColumnValuesInputInGetRequestValidations() { try { columnValues.add(columnValue); + fields.add(field); GetRequest request = GetRequest.builder() .table(table) .columnName(columnName) @@ -132,7 +141,6 @@ public void testValidGetByColumnValuesInputInGetRequestValidations() { @Test public void testNoTableInGetRequestValidations() { - ids.clear(); ids.add(skyflowID); GetRequest request = GetRequest.builder().ids(ids).build(); try { @@ -149,7 +157,6 @@ public void testNoTableInGetRequestValidations() { @Test public void testEmptyTableInGetRequestValidations() { - ids.clear(); ids.add(skyflowID); GetRequest request = GetRequest.builder().ids(ids).table("").build(); try { @@ -166,7 +173,6 @@ public void testEmptyTableInGetRequestValidations() { @Test public void testEmptyIdsInGetRequestValidations() { - ids.clear(); GetRequest request = GetRequest.builder().ids(ids).table(table).build(); try { Validations.validateGetRequest(request); @@ -199,13 +205,9 @@ public void testEmptyIdInIdsInGetRequestValidations() { @Test public void testEmptyFieldsInGetRequestValidations() { - ids.clear(); ids.add(skyflowID); - fields.clear(); GetRequest request = GetRequest.builder().ids(ids).table(table).fields(fields).build(); try { - System.out.println(ids); - System.out.println(fields); Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { @@ -219,12 +221,11 @@ public void testEmptyFieldsInGetRequestValidations() { @Test public void testEmptyFieldInFieldsInGetRequestValidations() { + ids.add(skyflowID); fields.add(field); fields.add(""); GetRequest request = GetRequest.builder().ids(ids).table(table).fields(fields).build(); try { - System.out.println(ids); - System.out.println(fields); Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { @@ -349,6 +350,7 @@ public void testNoIdsOrColumnNameInGetRequestValidations() { @Test public void testBothIdsAndColumnNameInGetRequestValidations() { + ids.add(skyflowID); GetRequest request = GetRequest.builder() .table(table).redactionType(RedactionType.PLAIN_TEXT).ids(ids).columnName(columnName) .build(); @@ -366,6 +368,7 @@ public void testBothIdsAndColumnNameInGetRequestValidations() { @Test public void testBothIdsAndColumnValuesInGetRequestValidations() { + ids.add(skyflowID); GetRequest request = GetRequest.builder() .table(table).redactionType(RedactionType.PLAIN_TEXT).ids(ids).columnValues(columnValues) .build(); @@ -434,7 +437,6 @@ public void testEmptyColumnNameInGetRequestValidations() { @Test public void testEmptyColumnValuesInGetRequestValidations() { - columnValues.clear(); GetRequest request = GetRequest.builder() .table(table).redactionType(RedactionType.PLAIN_TEXT).columnName(columnName).columnValues(columnValues) .build(); diff --git a/v2/src/test/java/com/skyflow/vault/data/InsertTests.java b/v2/src/test/java/com/skyflow/vault/data/InsertTests.java index 2b1c8432..f49f9c20 100644 --- a/v2/src/test/java/com/skyflow/vault/data/InsertTests.java +++ b/v2/src/test/java/com/skyflow/vault/data/InsertTests.java @@ -93,6 +93,8 @@ public void testValidInputInInsertRequestValidations() { Assert.assertEquals(1, request.getTokens().size()); Assert.assertEquals(Byot.ENABLE, request.getTokenStrict()); Assert.assertTrue(request.getContinueOnError()); + Assert.assertTrue(request.getReturnTokens()); + Assert.assertTrue(request.getTokenMode()); Assert.assertFalse(request.getHomogeneous()); } catch (SkyflowException e) { Assert.fail(INVALID_EXCEPTION_THROWN); @@ -294,8 +296,6 @@ public void testEmptyTokensWithTokenStrictEnableInInsertRequestValidations() { @Test public void testInsufficientTokensWithTokenStrictEnableStrictInInsertRequestValidations1() { tokens.add(tokenMap); - System.out.println(values); - System.out.println(tokens); InsertRequest request = InsertRequest.builder() .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE_STRICT) .build(); diff --git a/v2/src/test/java/com/skyflow/vault/data/QueryTests.java b/v2/src/test/java/com/skyflow/vault/data/QueryTests.java index 141704a1..3197a83c 100644 --- a/v2/src/test/java/com/skyflow/vault/data/QueryTests.java +++ b/v2/src/test/java/com/skyflow/vault/data/QueryTests.java @@ -19,6 +19,9 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import java.util.ArrayList; +import java.util.HashMap; + @RunWith(PowerMockRunner.class) @PrepareForTest(fullyQualifiedNames = "com.skyflow.serviceaccount.util.Token") public class QueryTests { @@ -28,6 +31,7 @@ public class QueryTests { private static String clusterID = null; private static String query = null; private static Skyflow skyflowClient = null; + private static HashMap queryRecord = null; @BeforeClass public static void setup() throws SkyflowException { @@ -48,6 +52,9 @@ public static void setup() throws SkyflowException { vaultConfig.setCredentials(credentials); query = "test_query"; + queryRecord = new HashMap<>(); + queryRecord.put("name", "test_name"); + queryRecord.put("card_number", "test_card_number"); // skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); } @@ -92,4 +99,20 @@ public void testEmptyQueryInQueryRequestValidations() { ); } } + + @Test + public void testQueryResponse() { + try { + ArrayList> fields = new ArrayList<>(); + fields.add(queryRecord); + QueryResponse response = new QueryResponse(fields); + String responseString = "{\n\t\"fields\": " + + "[{\n\t\t\"card_number\": \"test_card_number\",\n\t\t\"name\": \"test_name\"," + + "\n\t\t\"tokenizedData\": " + null + "\n\t}]\n}"; + Assert.assertEquals(1, response.getFields().size()); + Assert.assertEquals(responseString, response.toString()); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } } diff --git a/v2/src/test/java/com/skyflow/vault/data/UpdateTests.java b/v2/src/test/java/com/skyflow/vault/data/UpdateTests.java index 5a72001c..3780a417 100644 --- a/v2/src/test/java/com/skyflow/vault/data/UpdateTests.java +++ b/v2/src/test/java/com/skyflow/vault/data/UpdateTests.java @@ -217,8 +217,6 @@ public void testTokensWithTokenStrictDisableInUpdateRequestValidations() { .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.DISABLE) .build(); try { - System.out.println(valueMap); - System.out.println(tokenMap); Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { @@ -253,8 +251,6 @@ public void testNoTokensWithTokenStrictEnableStrictInUpdateRequestValidations() .id(skyflowID).table(table).values(valueMap).tokenStrict(Byot.ENABLE_STRICT) .build(); try { - System.out.println(valueMap); - System.out.println(tokenMap); Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { @@ -273,8 +269,6 @@ public void testEmptyTokensWithTokenStrictEnableInUpdateRequestValidations() { .id(skyflowID).table(table).values(valueMap).tokens(emptyTokenMap).tokenStrict(Byot.ENABLE) .build(); try { - System.out.println(valueMap); - System.out.println(tokenMap); Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { @@ -289,8 +283,6 @@ public void testInsufficientTokensWithTokenStrictEnableStrictInUpdateRequestVali .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) .build(); try { - System.out.println(valueMap); - System.out.println(tokenMap); Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { @@ -305,8 +297,6 @@ public void testInsufficientTokensWithTokenStrictEnableStrictInUpdateRequestVali .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) .build(); try { - System.out.println(valueMap); - System.out.println(tokenMap); Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { @@ -322,8 +312,6 @@ public void testTokenValueMismatchInUpdateRequestValidations() { .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) .build(); try { - System.out.println(valueMap); - System.out.println(tokenMap); Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { @@ -341,8 +329,6 @@ public void testEmptyKeyInTokensInUpdateRequestValidations() { .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) .build(); try { - System.out.println(valueMap); - System.out.println(tokenMap); Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { @@ -359,8 +345,6 @@ public void testEmptyValueInTokensInUpdateRequestValidations() { .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) .build(); try { - System.out.println(valueMap); - System.out.println(tokenMap); Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { @@ -369,4 +353,19 @@ public void testEmptyValueInTokensInUpdateRequestValidations() { } } + @Test + public void testUpdateResponse() { + try { + tokenMap.put("test_column_2", "test_token_2"); + UpdateResponse response = new UpdateResponse(skyflowID, tokenMap); + String responseString = "{\n\t\"skyflowId\": " + skyflowID + "\n\t\"tokens\": " + + "{\n\t\t\"test_column_1\": \"test_token_1\"," + + "\n\t\t\"test_column_2\": \"test_token_2\",\n\t}\n}"; + Assert.assertEquals(skyflowID, response.getSkyflowId()); + Assert.assertEquals(2, response.getTokens().size()); + Assert.assertEquals(responseString, response.toString()); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } } diff --git a/v2/src/test/java/com/skyflow/vault/serviceaccount/util/TokenTests.java b/v2/src/test/java/com/skyflow/vault/serviceaccount/util/TokenTests.java new file mode 100644 index 00000000..3a3d8f6e --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/serviceaccount/util/TokenTests.java @@ -0,0 +1,46 @@ +package com.skyflow.vault.serviceaccount.util; + +import com.skyflow.serviceaccount.util.Token; +import org.junit.Assert; +import org.junit.Test; + +public class TokenTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + + @Test + public void testNoTokenForIsExpiredToken() { + try { + Assert.assertTrue(Token.isExpired(null)); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testEmptyTokenForIsExpiredToken() { + try { + Assert.assertTrue(Token.isExpired("")); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testInvalidTokenForIsExpiredToken() { + try { + Assert.assertTrue(Token.isExpired("invalid-token")); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testExpiredTokenForIsExpiredToken() { + try { + String token = System.getProperty("TEST_EXPIRED_TOKEN"); + Assert.assertTrue(Token.isExpired(token)); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } +} From be856d008b90ef36ace543b0e830798b98088a92 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 6 Nov 2024 21:12:15 +0530 Subject: [PATCH 38/68] SK-1684 Add unit tests for bearer token utilities --- .../serviceaccount/util/BearerToken.java | 4 +- .../serviceaccount/util/SignedDataTokens.java | 4 +- .../config/ConnectionConfigTests.java | 2 +- .../{vault => }/config/CredentialsTests.java | 2 +- .../{vault => }/config/VaultConfigTests.java | 20 +- .../serviceaccount/util/BearerTokenTests.java | 220 ++++++++++++++++++ .../serviceaccount/util/TokenTests.java | 3 +- .../java/com/skyflow/utils/UtilsTests.java | 136 +++++++++++ .../skyflow/vault/tokens/DetokenizeTests.java | 23 +- .../invalidPrivateKeyCredentials.json | 1 + .../resources/invalidTokenURICredentials.json | 1 + .../test/resources/noClientIDCredentials.json | 1 + v2/src/test/resources/noKeyIDCredentials.json | 1 + .../resources/noPrivateKeyCredentials.json | 1 + .../test/resources/noTokenURICredentials.json | 1 + v2/src/test/resources/notJson.txt | 1 + 16 files changed, 401 insertions(+), 20 deletions(-) rename v2/src/test/java/com/skyflow/{vault => }/config/ConnectionConfigTests.java (99%) rename v2/src/test/java/com/skyflow/{vault => }/config/CredentialsTests.java (99%) rename v2/src/test/java/com/skyflow/{vault => }/config/VaultConfigTests.java (91%) create mode 100644 v2/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java rename v2/src/test/java/com/skyflow/{vault => }/serviceaccount/util/TokenTests.java (92%) create mode 100644 v2/src/test/java/com/skyflow/utils/UtilsTests.java create mode 100644 v2/src/test/resources/invalidPrivateKeyCredentials.json create mode 100644 v2/src/test/resources/invalidTokenURICredentials.json create mode 100644 v2/src/test/resources/noClientIDCredentials.json create mode 100644 v2/src/test/resources/noKeyIDCredentials.json create mode 100644 v2/src/test/resources/noPrivateKeyCredentials.json create mode 100644 v2/src/test/resources/noTokenURICredentials.json create mode 100644 v2/src/test/resources/notJson.txt diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java b/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java index 2040cf16..f235da49 100644 --- a/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java @@ -65,11 +65,11 @@ private static V1GetAuthTokenResponse generateBearerTokenFromCredentials( } catch (JsonSyntaxException e) { LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_FILE_FORMAT.getLog()); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( - ErrorMessage.FileInvalidJson.getMessage(), credentialsFile.getAbsolutePath())); + ErrorMessage.FileInvalidJson.getMessage(), credentialsFile.getPath())); } catch (FileNotFoundException e) { LogUtil.printErrorLog(ErrorLogs.CREDENTIALS_FILE_NOT_FOUND.getLog()); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( - ErrorMessage.FileNotFound.getMessage(), credentialsFile.getAbsolutePath())); + ErrorMessage.FileNotFound.getMessage(), credentialsFile.getPath())); } } diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java index 47e50951..88312ff7 100644 --- a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java @@ -60,11 +60,11 @@ private static List generateSignedTokenFromCredentialsF } catch (JsonSyntaxException e) { LogUtil.printErrorLog(ErrorLogs.INVALID_CREDENTIALS_FILE_FORMAT.getLog()); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( - ErrorMessage.FileInvalidJson.getMessage(), credentialsFile.getAbsolutePath())); + ErrorMessage.FileInvalidJson.getMessage(), credentialsFile.getPath())); } catch (FileNotFoundException e) { LogUtil.printErrorLog(ErrorLogs.CREDENTIALS_FILE_NOT_FOUND.getLog()); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( - ErrorMessage.FileNotFound.getMessage(), credentialsFile.getAbsolutePath())); + ErrorMessage.FileNotFound.getMessage(), credentialsFile.getPath())); } return responseToken; } diff --git a/v2/src/test/java/com/skyflow/vault/config/ConnectionConfigTests.java b/v2/src/test/java/com/skyflow/config/ConnectionConfigTests.java similarity index 99% rename from v2/src/test/java/com/skyflow/vault/config/ConnectionConfigTests.java rename to v2/src/test/java/com/skyflow/config/ConnectionConfigTests.java index 648ad98d..03b1021e 100644 --- a/v2/src/test/java/com/skyflow/vault/config/ConnectionConfigTests.java +++ b/v2/src/test/java/com/skyflow/config/ConnectionConfigTests.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.config; +package com.skyflow.config; import com.skyflow.config.ConnectionConfig; import com.skyflow.config.Credentials; diff --git a/v2/src/test/java/com/skyflow/vault/config/CredentialsTests.java b/v2/src/test/java/com/skyflow/config/CredentialsTests.java similarity index 99% rename from v2/src/test/java/com/skyflow/vault/config/CredentialsTests.java rename to v2/src/test/java/com/skyflow/config/CredentialsTests.java index 554f7f0d..64f34c94 100644 --- a/v2/src/test/java/com/skyflow/vault/config/CredentialsTests.java +++ b/v2/src/test/java/com/skyflow/config/CredentialsTests.java @@ -1,4 +1,4 @@ -package com.skyflow.vault.config; +package com.skyflow.config; import com.skyflow.config.Credentials; import com.skyflow.errors.ErrorCode; diff --git a/v2/src/test/java/com/skyflow/vault/config/VaultConfigTests.java b/v2/src/test/java/com/skyflow/config/VaultConfigTests.java similarity index 91% rename from v2/src/test/java/com/skyflow/vault/config/VaultConfigTests.java rename to v2/src/test/java/com/skyflow/config/VaultConfigTests.java index 011f2990..478f8cf0 100644 --- a/v2/src/test/java/com/skyflow/vault/config/VaultConfigTests.java +++ b/v2/src/test/java/com/skyflow/config/VaultConfigTests.java @@ -1,7 +1,5 @@ -package com.skyflow.vault.config; +package com.skyflow.config; -import com.skyflow.config.Credentials; -import com.skyflow.config.VaultConfig; import com.skyflow.enums.Env; import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; @@ -43,7 +41,7 @@ public static void setup() throws SkyflowException, NoSuchMethodException { } @Test - public void testValidVaultConfigWithCredentials() { + public void testValidVaultConfigWithCredentialsInValidations() { try { VaultConfig vaultConfig = new VaultConfig(); vaultConfig.setVaultId(vaultID); @@ -62,7 +60,7 @@ public void testValidVaultConfigWithCredentials() { } @Test - public void testValidVaultConfigWithoutCredentials() { + public void testValidVaultConfigWithoutCredentialsInValidations() { try { VaultConfig vaultConfig = new VaultConfig(); vaultConfig.setVaultId(vaultID); @@ -80,7 +78,7 @@ public void testValidVaultConfigWithoutCredentials() { } @Test - public void testDefaultEnvInVaultConfigWithCredentials() { + public void testDefaultEnvInVaultConfigWithCredentialsInValidations() { try { VaultConfig vaultConfig = new VaultConfig(); vaultConfig.setVaultId(vaultID); @@ -98,7 +96,7 @@ public void testDefaultEnvInVaultConfigWithCredentials() { } @Test - public void testDefaultEnvInVaultConfigWithoutCredentials() { + public void testDefaultEnvInVaultConfigWithoutCredentialsInValidations() { try { VaultConfig vaultConfig = new VaultConfig(); vaultConfig.setVaultId(vaultID); @@ -115,7 +113,7 @@ public void testDefaultEnvInVaultConfigWithoutCredentials() { } @Test - public void testNoVaultIdInVaultConfig() { + public void testNoVaultIdInVaultConfigInValidations() { VaultConfig vaultConfig = new VaultConfig(); try { vaultConfig.setClusterId(clusterID); @@ -129,7 +127,7 @@ public void testNoVaultIdInVaultConfig() { } @Test - public void testEmptyVaultIdInVaultConfig() { + public void testEmptyVaultIdInVaultConfigInValidations() { try { VaultConfig vaultConfig = new VaultConfig(); vaultConfig.setVaultId(""); @@ -144,7 +142,7 @@ public void testEmptyVaultIdInVaultConfig() { } @Test - public void testNoClusterIdInVaultConfig() { + public void testNoClusterIdInVaultConfigInValidations() { try { VaultConfig vaultConfig = new VaultConfig(); vaultConfig.setVaultId(vaultID); @@ -158,7 +156,7 @@ public void testNoClusterIdInVaultConfig() { } @Test - public void testEmptyClusterIdInVaultConfig() { + public void testEmptyClusterIdInVaultConfigInValidations() { try { VaultConfig vaultConfig = new VaultConfig(); vaultConfig.setVaultId(vaultID); diff --git a/v2/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java b/v2/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java new file mode 100644 index 00000000..3993e476 --- /dev/null +++ b/v2/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java @@ -0,0 +1,220 @@ +package com.skyflow.serviceaccount.util; + +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.Utils; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.File; +import java.util.ArrayList; + +public class BearerTokenTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String invalidJsonFilePath = null; + private static String credentialsFilePath = null; + private static String invalidFilePath = null; + private static String credentialsString = null; + private static String context = null; + private static ArrayList roles = null; + private static String role = null; + + @BeforeClass + public static void setup() { + credentialsFilePath = "./credentials.json"; + invalidJsonFilePath = "./src/test/resources/notJson.txt"; + invalidFilePath = "./src/test/credentials.json"; + credentialsString = "{\"key\":\"value\"}"; + context = "test_context"; + roles = new ArrayList<>(); + role = "test_role"; + } + + @Test + public void testBearerTokenBuilderWithCredentialsFile() { + try { + roles.add(role); + File file = new File(credentialsFilePath); + BearerToken.builder().setCredentials(file).setCtx(context).setRoles(roles).build(); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testBearerTokenBuilderWithCredentialsString() { + try { + BearerToken.builder().setCredentials(credentialsString).setCtx(context).setRoles(roles).build(); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + + } + + @Test + public void testEmptyCredentialsFilePath() { + try { + File file = new File(""); + BearerToken bearerToken = BearerToken.builder().setCredentials(file).build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidFilePath() { + try { + File file = new File(invalidFilePath); + BearerToken bearerToken = BearerToken.builder().setCredentials(file).build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidCredentialsFile() { + try { + File file = new File(invalidJsonFilePath); + BearerToken bearerToken = BearerToken.builder().setCredentials(file).build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.FileInvalidJson.getMessage(), invalidJsonFilePath), + e.getMessage() + ); + } + } + + @Test + public void testEmptyCredentialsString() { + try { + BearerToken bearerToken = BearerToken.builder().setCredentials("").build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidCredentialsString() { + try { + BearerToken bearerToken = BearerToken.builder().setCredentials(invalidFilePath).build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.CredentialsStringInvalidJson.getMessage(), e.getMessage()); + } + } + + + @Test + public void testNoPrivateKeyInCredentialsForCredentials() { + String filePath = "./src/test/resources/noPrivateKeyCredentials.json"; + File file = new File(filePath); + try { + BearerToken bearerToken = BearerToken.builder().setCredentials(file).build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.MissingPrivateKey.getMessage(), e.getMessage()); + } + } + + @Test + public void testNoClientIDInCredentialsForCredentials() { + String filePath = "./src/test/resources/noClientIDCredentials.json"; + File file = new File(filePath); + try { + BearerToken bearerToken = BearerToken.builder().setCredentials(file).build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.MissingClientId.getMessage(), e.getMessage()); + } + } + + @Test + public void testNoKeyIDInCredentialsForCredentials() { + String filePath = "./src/test/resources/noKeyIDCredentials.json"; + File file = new File(filePath); + try { + BearerToken bearerToken = BearerToken.builder().setCredentials(file).build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.MissingKeyId.getMessage(), e.getMessage()); + } + } + + @Test + public void testNoTokenURIInCredentialsForCredentials() { + String filePath = "./src/test/resources/noTokenURICredentials.json"; + File file = new File(filePath); + try { + BearerToken bearerToken = BearerToken.builder().setCredentials(file).build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.MissingTokenUri.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidPrivateKeyInCredentialsForCredentials() { + String filePath = "./src/test/resources/invalidPrivateKeyCredentials.json"; + File file = new File(filePath); + try { + BearerToken bearerToken = BearerToken.builder().setCredentials(file).build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.JwtInvalidFormat.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidKeySpecInCredentialsForCredentials() { + String credentialsString = "{\"privateKey\": \"-----BEGIN PRIVATE KEY-----\\ncHJpdmF0ZV9rZXlfdmFsdWU=\\n-----END PRIVATE KEY-----\", \"clientID\": \"client_id_value\", \"keyID\": \"key_id_value\", \"tokenURI\": \"invalid_token_uri\"}"; + try { + BearerToken bearerToken = BearerToken.builder().setCredentials(credentialsString).build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidKeySpec.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidTokenURIInCredentialsForCredentials() throws SkyflowException { + String filePath = "./src/test/resources/invalidTokenURICredentials.json"; + File file = new File(filePath); + try { + BearerToken bearerToken = BearerToken.builder().setCredentials(file).build(); + bearerToken.getBearerToken(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidTokenUri.getMessage(), e.getMessage()); + } + } +} diff --git a/v2/src/test/java/com/skyflow/vault/serviceaccount/util/TokenTests.java b/v2/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java similarity index 92% rename from v2/src/test/java/com/skyflow/vault/serviceaccount/util/TokenTests.java rename to v2/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java index 3a3d8f6e..d1ac044b 100644 --- a/v2/src/test/java/com/skyflow/vault/serviceaccount/util/TokenTests.java +++ b/v2/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java @@ -1,6 +1,5 @@ -package com.skyflow.vault.serviceaccount.util; +package com.skyflow.serviceaccount.util; -import com.skyflow.serviceaccount.util.Token; import org.junit.Assert; import org.junit.Test; diff --git a/v2/src/test/java/com/skyflow/utils/UtilsTests.java b/v2/src/test/java/com/skyflow/utils/UtilsTests.java new file mode 100644 index 00000000..33a83f59 --- /dev/null +++ b/v2/src/test/java/com/skyflow/utils/UtilsTests.java @@ -0,0 +1,136 @@ +package com.skyflow.utils; + +import com.skyflow.config.Credentials; +import com.skyflow.enums.Env; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.util.ArrayList; + +public class UtilsTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String clusterId = null; + private static String url = null; + private static String filePath = null; + private static String credentialsString = null; + private static String token = null; + private static String context = null; + private static ArrayList roles = null; + + @BeforeClass + public static void setup() { + clusterId = "test_cluster_id"; + url = "https://test-url.com/java/unit/tests"; + filePath = "invalid/file/path/credentials.json"; + credentialsString = "invalid credentials string"; + token = "invalid-token"; + context = "test_context"; + roles = new ArrayList<>(); + String role = "test_role"; + roles.add(role); + } + + @Test + public void testGetVaultURLForDev() { + try { + String vaultURL = Utils.getVaultURL(clusterId, Env.DEV); + String devUrl = "https://test_cluster_id.vault.skyflowapis.dev"; + Assert.assertEquals(devUrl, vaultURL); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testGetVaultURLForStage() { + try { + String vaultURL = Utils.getVaultURL(clusterId, Env.STAGE); + String stageUrl = "https://test_cluster_id.vault.skyflowapis.tech"; + Assert.assertEquals(stageUrl, vaultURL); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testGetVaultURLForSandbox() { + try { + String vaultURL = Utils.getVaultURL(clusterId, Env.SANDBOX); + String sandboxUrl = "https://test_cluster_id.vault.skyflowapis-preview.com"; + Assert.assertEquals(sandboxUrl, vaultURL); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testGetVaultURLForProd() { + try { + String vaultURL = Utils.getVaultURL(clusterId, Env.PROD); + String prodUrl = "https://test_cluster_id.vault.skyflowapis.com"; + Assert.assertEquals(prodUrl, vaultURL); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testGetBaseURL() { + try { + String baseURL = Utils.getBaseURL(url); + String url = "https://test-url.com"; + Assert.assertEquals(url, baseURL); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testGenerateBearerTokenWithCredentialsFile() { + try { + Credentials credentials = new Credentials(); + credentials.setPath(filePath); + credentials.setContext(context); + credentials.setRoles(roles); + Utils.generateBearerToken(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); + } + } + + @Test + public void testGenerateBearerTokenWithCredentialsString() { + try { + Credentials credentials = new Credentials(); + credentials.setCredentialsString(credentialsString); + credentials.setContext(context); + credentials.setRoles(roles); + Utils.generateBearerToken(credentials); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.CredentialsStringInvalidJson.getMessage(), e.getMessage()); + } + } + + @Test + public void testGenerateBearerTokenWithToken() { + try { + Credentials credentials = new Credentials(); + credentials.setToken(token); + credentials.setContext(context); + credentials.setRoles(roles); + String bearerToken = Utils.generateBearerToken(credentials); + Assert.assertEquals(token, bearerToken); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } +} diff --git a/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java b/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java index 04dd406d..d7a7d7fc 100644 --- a/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java +++ b/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java @@ -9,17 +9,23 @@ import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.ApiClient; import com.skyflow.generated.rest.ApiException; import com.skyflow.generated.rest.api.TokensApi; import com.skyflow.generated.rest.models.V1DetokenizeResponse; +import com.skyflow.serviceaccount.util.Token; import com.skyflow.utils.Constants; import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; import org.junit.Assert; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.ArgumentMatchers; import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import java.util.ArrayList; @@ -38,13 +44,14 @@ public class DetokenizeTests { private static String token = null; private static ArrayList tokens = null; private static Skyflow skyflowClient = null; + private ApiClient mockApiClient; + private TokensApi mockTokensApi; @BeforeClass public static void setup() throws SkyflowException, NoSuchMethodException { // PowerMockito.mockStatic(Token.class); // PowerMockito.when(Token.isExpired("valid_token")).thenReturn(true); // PowerMockito.when(Token.isExpired("not_a_valid_token")).thenReturn(false); -// PowerMockito.mock(ApiClient.class); vaultID = "vault123"; clusterID = "cluster123"; @@ -60,8 +67,22 @@ public static void setup() throws SkyflowException, NoSuchMethodException { token = "test_token_1"; tokens = new ArrayList<>(); + +// System.setProperty("ssl.TrustManagerFactory.algorithm", "PKIX"); } +// @Before +// public void setupMock() throws ApiException { +// mockApiClient = PowerMockito.mock(ApiClient.class); +// mockTokensApi = PowerMockito.mock(TokensApi.class); +// +// V1DetokenizeResponse mockResponse = new V1DetokenizeResponse(); +// PowerMockito +// .when(mockTokensApi.recordServiceDetokenize(ArgumentMatchers.anyString(), ArgumentMatchers.any())) +// .thenReturn(mockResponse); +// +// } + @Test public void testValidInputInDetokenizeRequestValidations() { try { diff --git a/v2/src/test/resources/invalidPrivateKeyCredentials.json b/v2/src/test/resources/invalidPrivateKeyCredentials.json new file mode 100644 index 00000000..3615e623 --- /dev/null +++ b/v2/src/test/resources/invalidPrivateKeyCredentials.json @@ -0,0 +1 @@ +{"privateKey": "private_key_value", "clientID": "client_id_value", "keyID": "key_id_value", "tokenURI": "invalid_token_uri"} \ No newline at end of file diff --git a/v2/src/test/resources/invalidTokenURICredentials.json b/v2/src/test/resources/invalidTokenURICredentials.json new file mode 100644 index 00000000..ac9346aa --- /dev/null +++ b/v2/src/test/resources/invalidTokenURICredentials.json @@ -0,0 +1 @@ +{"privateKey":"-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCzLp0TVwidRMtZ\n4tGLHPDEF6ihmE4OHSR/r5rZGqE+PNtw/uwXzBrfz1Mktb0hddMZNwC2IKhHE0Yw\nvtBT0jsfy4OUQR13Mohn9znz+5TES/yXjkvZjhZKzs5rxNw/cO8lpKYUYdwbFzwl\n9e3joCsWBXBDCbXdLQGPyggJV+KBI0LBal+LngNLU/U680LRlybCKCTyyrF0SERD\npytcpnq41CS2Q0ZDfkK/zLrvsCkEBU8xYeAf/TphXMKeqvMGTqxxg6IPOKfYya7Q\nnH9eZ1pn1SCe6N5XBUpQpB4K+1IZKvadOYpYWzRgM+tT5k4UVsg6s7kUm8k9n85/\nNQMjMY2XAgMBAAECggEASlg05ClgcaBxn0H1H3tKipImbaX7/O8qjbAW162s6V3m\nzuN2ogkVvXcQUFL3vkJc7EFeEjNKnvLoVKFXXvADiBWw6np591MINdrmOM1R1ICS\ntW9dGU9TAIb+LsjneYsqLrw6DIruAG+LjVSU97UlK2XmRmppAvQBid+Rpg7I9Dsy\naJyGjDHeC3RyYYNfpei2dBPUYlUjOkBqgYGOOyjYxHzzgYtdVZku0JPtsAey3WKL\nSbu8ryugu7r23fxP50H3FtYz91TPlVu1zVEk9Viizp2c9642ZKEoA0bB/bSNMUnt\nZ/kemZENAzC7tnoYgwN09rI3h0+U5jaU1BhXbrLpAQKBgQDt8eaywv6j+Hdv8i7S\nyMnZE4CaM70Z319ctJPlt2QdCZp8dtac858qnnrrZSCWV3n3yMv//bf1WZB4Lssw\nuxBzSCFI/imG6eY9uQA6yXLl1TY9DA5IJ8s2LGzwmtA1q+vC+jzWs+0+S/evUewo\nTZGQuNjHMHoM22jeLErqQZkHUQKBgQDAxz1WY56ZHdC3Y4aXkDeb5Ag+ZJV8Uqwn\nootA2zHCaEx8gM9CzChCl4pQcghHFXv4eEKqezdWSK+SIRA1CtR+q8g5dP8YtAkR\n9Uav6/fEkM8iCUvhZg+1DPRShu15nQF0ZAleSJ9OiSW5pIfAbY79RHru8H31azhE\nDOWezXbcZwKBgB9LAAckg+62n6aWWDgadglZekFNaqI7cUQ073p3mvACslGKI4Fy\nvM0TGKFapGWBTaYbv1CEYqwewlQ7+zcGcwxmQRJjcryuiDw312Lj2XuGheKTclFl\nAmG2iAFAqv9UA+aZmGS4NwxJW2KwSHmocetxk/jmVDbaqDkH5DZYuDJxAoGBAJqn\n/PRujVEnk0dc6CB1ybcd9OMhTK/ln0lY5MDOWRgvFpWXvS9InE/4RTWOlkd42/EV\ngd5FZbqqK3hfYCI9owZQiBxYWUMXRGOM0/3Un/ypdBNJQ//7IkTMtMH0j1XOeNlI\nXB+wwWV/L63EakgdXOag5sMEWvjl4MjvU9PX4DCnAoGAR0c567DWbkTXvcNIjvNF\nNK8suq/fGt4dpbkkFOEHjgqFd5RsjFHKc98JVrudPweUR7YjpeKQaeNKXfVFd4+N\nDPOs0zWSsaHckh1g9djkZlidha9SD/V6cOpxi3g2okcn/LI7h8NyNlAwDSn2mPEi\nMd3mrgMCZwJsXLndGQSDVUw=\n-----END PRIVATE KEY-----\n", "clientID": "client_id_value", "keyID": "key_id_value", "tokenURI": "invalid_token_uri"} \ No newline at end of file diff --git a/v2/src/test/resources/noClientIDCredentials.json b/v2/src/test/resources/noClientIDCredentials.json new file mode 100644 index 00000000..6e7edd20 --- /dev/null +++ b/v2/src/test/resources/noClientIDCredentials.json @@ -0,0 +1 @@ +{"privateKey":"private_key_value"} \ No newline at end of file diff --git a/v2/src/test/resources/noKeyIDCredentials.json b/v2/src/test/resources/noKeyIDCredentials.json new file mode 100644 index 00000000..64ff438e --- /dev/null +++ b/v2/src/test/resources/noKeyIDCredentials.json @@ -0,0 +1 @@ +{"privateKey":"private_key_value","clientID":"client_id_value"} \ No newline at end of file diff --git a/v2/src/test/resources/noPrivateKeyCredentials.json b/v2/src/test/resources/noPrivateKeyCredentials.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/v2/src/test/resources/noPrivateKeyCredentials.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/v2/src/test/resources/noTokenURICredentials.json b/v2/src/test/resources/noTokenURICredentials.json new file mode 100644 index 00000000..f88b0792 --- /dev/null +++ b/v2/src/test/resources/noTokenURICredentials.json @@ -0,0 +1 @@ +{"privateKey":"private_key_value","clientID":"client_id_value","keyID":"key_id_value"} \ No newline at end of file diff --git a/v2/src/test/resources/notJson.txt b/v2/src/test/resources/notJson.txt new file mode 100644 index 00000000..bdf08de0 --- /dev/null +++ b/v2/src/test/resources/notJson.txt @@ -0,0 +1 @@ +test file \ No newline at end of file From fc336f0a6b83b3d2f86eb1a353b3c5fb84fb1971 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Thu, 7 Nov 2024 20:15:43 +0530 Subject: [PATCH 39/68] SK-1684 Add unit tests for signed data tokens SK-1684 Add unit tests for Tokenize request validations --- .../serviceaccount/util/SignedDataTokens.java | 12 +- .../utils/validations/Validations.java | 20 +- .../skyflow/vault/tokens/TokenizeRequest.java | 2 - .../util/SignedDataTokensTests.java | 209 ++++++++++++++++++ .../skyflow/vault/tokens/TokenizeTests.java | 109 +++++++++ 5 files changed, 331 insertions(+), 21 deletions(-) create mode 100644 v2/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java index 88312ff7..2f486c42 100644 --- a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java +++ b/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java @@ -155,14 +155,10 @@ private static List getSignedToken( public synchronized List getSignedDataTokens() throws SkyflowException { LogUtil.printInfoLog(InfoLogs.GET_SIGNED_DATA_TOKENS_TRIGGERED.getLog()); List signedToken = new ArrayList<>(); - try { - if (this.credentialsFile != null && Objects.equals(this.credentialsType, "FILE")) { - signedToken = generateSignedTokenFromCredentialsFile(this.credentialsFile, this.dataTokens, this.timeToLive, this.ctx); - } else if (this.credentialsString != null && Objects.equals(this.credentialsType, "STRING")) { - signedToken = generateSignedTokensFromCredentialsString(this.credentialsString, this.dataTokens, this.timeToLive, this.ctx); - } - } catch (SkyflowException e) { - e.printStackTrace(); + if (this.credentialsFile != null && Objects.equals(this.credentialsType, "FILE")) { + signedToken = generateSignedTokenFromCredentialsFile(this.credentialsFile, this.dataTokens, this.timeToLive, this.ctx); + } else if (this.credentialsString != null && Objects.equals(this.credentialsType, "STRING")) { + signedToken = generateSignedTokensFromCredentialsString(this.credentialsString, this.dataTokens, this.timeToLive, this.ctx); } LogUtil.printInfoLog(InfoLogs.GET_SIGNED_DATA_TOKEN_SUCCESS.getLog()); return signedToken; diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index f0c44956..a35f3f64 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -579,17 +579,15 @@ public static void validateQueryRequest(QueryRequest queryRequest) throws Skyflo public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) throws SkyflowException { List columnValues = tokenizeRequest.getColumnValues(); - if (columnValues == null || columnValues.isEmpty()) { - if (columnValues == null) { - LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.COLUMN_VALUES_IS_REQUIRED_TOKENIZE.getLog(), InterfaceName.TOKENIZE.getName() - )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ColumnValuesKeyErrorTokenize.getMessage()); - } else { - LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.EMPTY_COLUMN_VALUES.getLog(), InterfaceName.TOKENIZE.getName() - )); - } + if (columnValues == null) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.COLUMN_VALUES_IS_REQUIRED_TOKENIZE.getLog(), InterfaceName.TOKENIZE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ColumnValuesKeyErrorTokenize.getMessage()); + } else if (columnValues.isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_COLUMN_VALUES.getLog(), InterfaceName.TOKENIZE.getName() + )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyColumnValues.getMessage()); } else { for (int index = 0; index < columnValues.size(); index++) { diff --git a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java index f7570714..a1a5ca33 100644 --- a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java +++ b/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java @@ -1,6 +1,5 @@ package com.skyflow.vault.tokens; -import java.util.ArrayList; import java.util.List; public class TokenizeRequest { @@ -22,7 +21,6 @@ public static final class TokenizeRequestBuilder { private List columnValues; private TokenizeRequestBuilder() { - this.columnValues = new ArrayList<>(); } public TokenizeRequestBuilder values(List columnValues) { diff --git a/v2/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java b/v2/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java new file mode 100644 index 00000000..e5ce56b1 --- /dev/null +++ b/v2/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java @@ -0,0 +1,209 @@ +package com.skyflow.serviceaccount.util; + +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.Utils; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.File; +import java.util.ArrayList; + +public class SignedDataTokensTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String invalidJsonFilePath = null; + private static String credentialsFilePath = null; + private static String invalidFilePath = null; + private static String credentialsString = null; + private static String context = null; + private static ArrayList dataTokens = null; + private static String dataToken = null; + private static Integer ttl = null; + + @BeforeClass + public static void setup() { + credentialsFilePath = "./credentials.json"; + invalidJsonFilePath = "./src/test/resources/notJson.txt"; + invalidFilePath = "./src/test/credentials.json"; + credentialsString = "{\"key\":\"value\"}"; + context = "test_context"; + dataTokens = new ArrayList<>(); + dataToken = "test_data_token"; + ttl = 60; + } + + @Test + public void testSignedDataTokensBuilderWithCredentialsFile() { + try { + File file = new File(credentialsFilePath); + dataTokens.add(dataToken); + SignedDataTokens.builder() + .setCredentials(file).setCtx(context).setDataTokens(dataTokens).setTimeToLive(ttl) + .build(); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testSignedDataTokensBuilderWithCredentialsString() { + try { + SignedDataTokens.builder() + .setCredentials(credentialsString).setCtx(context).setDataTokens(dataTokens).setTimeToLive(ttl) + .build(); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + + } + + @Test + public void testEmptyCredentialsFilePath() { + try { + File file = new File(""); + SignedDataTokens signedTokens = SignedDataTokens.builder().setCredentials(file).build(); + signedTokens.getSignedDataTokens(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidFilePath() { + try { + File file = new File(invalidFilePath); + SignedDataTokens signedTokens = SignedDataTokens.builder().setCredentials(file).build(); + signedTokens.getSignedDataTokens(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidCredentialsFile() { + try { + File file = new File(invalidJsonFilePath); + SignedDataTokens signedTokens = SignedDataTokens.builder().setCredentials(file).build(); + signedTokens.getSignedDataTokens(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.FileInvalidJson.getMessage(), invalidJsonFilePath), + e.getMessage() + ); + } + } + + @Test + public void testEmptyCredentialsString() { + try { + SignedDataTokens signedTokens = SignedDataTokens.builder().setCredentials("").build(); + signedTokens.getSignedDataTokens(); + System.out.println("in try block"); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + System.out.println("caught skyflow exception"); + System.out.println(e); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.InvalidCredentials.getMessage(), invalidJsonFilePath), + e.getMessage() + ); + } catch (Exception e) { + System.out.println("catching exception"); + System.out.println(e); + } + } + + @Test + public void testInvalidCredentialsString() { + try { + SignedDataTokens signedTokens = SignedDataTokens.builder().setCredentials(invalidFilePath).build(); + signedTokens.getSignedDataTokens(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.CredentialsStringInvalidJson.getMessage(), invalidJsonFilePath), + e.getMessage() + ); + } + } + + @Test + public void testNoPrivateKeyInCredentials() { + String filePath = "./src/test/resources/noPrivateKeyCredentials.json"; + File file = new File(filePath); + try { + SignedDataTokens signedTokens = SignedDataTokens.builder().setCredentials(file).build(); + signedTokens.getSignedDataTokens(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.MissingPrivateKey.getMessage(), e.getMessage()); + } + } + + @Test + public void testNoClientIDInCredentials() { + String filePath = "./src/test/resources/noClientIDCredentials.json"; + File file = new File(filePath); + try { + SignedDataTokens signedTokens = SignedDataTokens.builder().setCredentials(file).build(); + signedTokens.getSignedDataTokens(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.MissingClientId.getMessage(), e.getMessage()); + } + } + + @Test + public void testNoKeyIDInCredentials() { + String filePath = "./src/test/resources/noKeyIDCredentials.json"; + File file = new File(filePath); + try { + SignedDataTokens signedTokens = SignedDataTokens.builder().setCredentials(file).build(); + signedTokens.getSignedDataTokens(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.MissingKeyId.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidPrivateKeyInCredentials() { + String filePath = "./src/test/resources/invalidPrivateKeyCredentials.json"; + File file = new File(filePath); + try { + SignedDataTokens signedTokens = SignedDataTokens.builder().setCredentials(file).build(); + signedTokens.getSignedDataTokens(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.JwtInvalidFormat.getMessage(), e.getMessage()); + } + } + + @Test + public void testInvalidKeySpecInCredentials() { + String credentialsString = "{\"privateKey\": \"-----BEGIN PRIVATE KEY-----\\ncHJpdmF0ZV9rZXlfdmFsdWU=\\n-----END PRIVATE KEY-----\", \"clientID\": \"client_id_value\", \"keyID\": \"key_id_value\", \"tokenURI\": \"invalid_token_uri\"}"; + try { + SignedDataTokens signedTokens = SignedDataTokens.builder().setCredentials(credentialsString).build(); + signedTokens.getSignedDataTokens(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidKeySpec.getMessage(), e.getMessage()); + } + } +} diff --git a/v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java b/v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java new file mode 100644 index 00000000..4f801a44 --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java @@ -0,0 +1,109 @@ +package com.skyflow.vault.tokens; + +import com.skyflow.Skyflow; +import com.skyflow.config.VaultConfig; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +public class TokenizeTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String vaultID = null; + private static String clusterID = null; + private static VaultConfig vaultConfig = null; + private static String token = null; + private static ArrayList tokens = null; + private static Skyflow skyflowClient = null; + private static List columnValues = null; + private static ColumnValue columnValue = null; + private static String value = null; + private static String group = null; + + @BeforeClass + public static void setup() { + columnValues = new ArrayList<>(); + value = "test_value"; + group = "test_group"; + } + + @Before + public void setupTest() { + columnValues.clear(); + } + + @Test + public void testValidInputInTokenizeRequestValidations() { + try { + columnValue = ColumnValue.builder().value(value).columnGroup(group).build(); + columnValues.add(columnValue); + TokenizeRequest request = TokenizeRequest.builder().values(columnValues).build(); + Validations.validateTokenizeRequest(request); + Assert.assertEquals(1, request.getColumnValues().size()); + Assert.assertEquals(value, request.getColumnValues().get(0).getValue()); + Assert.assertEquals(group, request.getColumnValues().get(0).getColumnGroup()); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testNoColumnValuesInTokenizeRequestValidations() { + try { + TokenizeRequest request = TokenizeRequest.builder().build(); + Validations.validateTokenizeRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.ColumnValuesKeyErrorTokenize.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyColumnValuesInTokenizeRequestValidations() { + try { + TokenizeRequest request = TokenizeRequest.builder().values(columnValues).build(); + Validations.validateTokenizeRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyColumnValues.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyColumnValueInColumnValuesInTokenizeRequestValidations() { + try { + columnValue = ColumnValue.builder().value("").columnGroup(group).build(); + columnValues.add(columnValue); + TokenizeRequest request = TokenizeRequest.builder().values(columnValues).build(); + Validations.validateTokenizeRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyValueInColumnValues.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyColumnGroupInColumnValuesInTokenizeRequestValidations() { + try { + columnValue = ColumnValue.builder().value(value).columnGroup("").build(); + columnValues.add(columnValue); + TokenizeRequest request = TokenizeRequest.builder().values(columnValues).build(); + Validations.validateTokenizeRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyColumnGroupInColumnValue.getMessage(), e.getMessage()); + } + } +} From 9f3bd92e854455b63fb09efb449c65bfbe434787 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 8 Nov 2024 21:06:52 +0530 Subject: [PATCH 40/68] SK-1684 Add unit tests for Java SDK v2 --- .../vault/controller/VaultController.java | 2 - .../com/skyflow/vault/data/GetResponse.java | 2 +- .../skyflow/vault/data/InsertResponse.java | 2 +- .../test/java/com/skyflow/SkyflowTests.java | 281 ++++++++++++++++++ .../controller/VaultControllerTests.java | 192 ++++++++++++ .../java/com/skyflow/vault/data/GetTests.java | 27 ++ .../com/skyflow/vault/data/InsertTests.java | 58 +++- .../com/skyflow/vault/data/QueryTests.java | 5 +- .../skyflow/vault/tokens/DetokenizeTests.java | 72 ----- .../skyflow/vault/tokens/TokenizeTests.java | 14 + 10 files changed, 568 insertions(+), 87 deletions(-) create mode 100644 v2/src/test/java/com/skyflow/SkyflowTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java index 08204181..3a3bc03f 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -26,8 +26,6 @@ public final class VaultController extends VaultClient { private AuditController auditController; private BinLookupController binLookupController; - private String token; - public VaultController(VaultConfig vaultConfig, Credentials credentials) { super(vaultConfig, credentials); this.auditController = null; diff --git a/v2/src/main/java/com/skyflow/vault/data/GetResponse.java b/v2/src/main/java/com/skyflow/vault/data/GetResponse.java index 2d2a4b1d..bd882138 100644 --- a/v2/src/main/java/com/skyflow/vault/data/GetResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/GetResponse.java @@ -24,7 +24,7 @@ public ArrayList> getErrors() { public String toString() { StringBuilder response = new StringBuilder("{"); response.append("\n\t\"data\": ").append(formatRecords(data)); - response.append("\n\t\"errors\": ").append(formatRecords(errors)); + response.append(",\n\t\"errors\": ").append(formatRecords(errors)); response.append("\n}"); return response.toString(); } diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java index e0eaf098..240c6940 100644 --- a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java @@ -24,7 +24,7 @@ public ArrayList> getErrorFields() { public String toString() { StringBuilder response = new StringBuilder("{"); response.append("\n\t\"insertedFields\": ").append(formatRecords(insertedFields)); - response.append("\n\t\"errors\": ").append(formatRecords(errorFields)); + response.append(",\n\t\"errors\": ").append(formatRecords(errorFields)); response.append("\n}"); return response.toString(); } diff --git a/v2/src/test/java/com/skyflow/SkyflowTests.java b/v2/src/test/java/com/skyflow/SkyflowTests.java new file mode 100644 index 00000000..cfdd7e5a --- /dev/null +++ b/v2/src/test/java/com/skyflow/SkyflowTests.java @@ -0,0 +1,281 @@ +package com.skyflow; + +import com.skyflow.config.ConnectionConfig; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.enums.LogLevel; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +public class SkyflowTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String vaultID = null; + private static String clusterID = null; + private static String newClusterID = null; + private static String connectionID = null; + private static String connectionURL = null; + private static String token = null; + + @BeforeClass + public static void setup() { + vaultID = "test_vault_id"; + clusterID = "test_cluster_id"; + newClusterID = "new_test_cluster_id"; + connectionID = "test_connection_id"; + connectionURL = "https://test.connection.url"; + token = "test_token"; + } + + @Test + public void testAddingInvalidVaultConfigInSkyflowBuilder() { + try { + VaultConfig config = new VaultConfig(); + config.setVaultId(""); + config.setClusterId(clusterID); + config.setEnv(Env.SANDBOX); + Skyflow.builder().addVaultConfig(config).build(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyVaultId.getMessage(), e.getMessage()); + } + } + + @Test + public void testAddingInvalidVaultConfigInSkyflowClient() { + try { + VaultConfig config = new VaultConfig(); + config.setVaultId(""); + config.setClusterId(clusterID); + config.setEnv(Env.SANDBOX); + Skyflow skyflowClient = Skyflow.builder().build(); + skyflowClient.addVaultConfig(config); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyVaultId.getMessage(), e.getMessage()); + } + } + + @Test + public void testAddingValidVaultConfigInSkyflowClient() { + try { + VaultConfig config = new VaultConfig(); + config.setVaultId(vaultID); + config.setClusterId(clusterID); + config.setEnv(Env.SANDBOX); + Skyflow skyflowClient = Skyflow.builder().build(); + skyflowClient.addVaultConfig(config); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testAddingExistingVaultConfigInSkyflowClient() { + try { + VaultConfig config = new VaultConfig(); + config.setVaultId(vaultID); + config.setClusterId(clusterID); + config.setEnv(Env.SANDBOX); + Skyflow skyflowClient = Skyflow.builder().build(); + skyflowClient.addVaultConfig(config).addVaultConfig(config); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.VaultIdAlreadyInConfigList.getMessage(), e.getMessage()); + } + } + + @Test + public void testUpdatingNonExistentVaultConfigInSkyflowBuilder() { + try { + VaultConfig config = new VaultConfig(); + config.setVaultId(vaultID); + config.setClusterId(clusterID); + config.setEnv(Env.SANDBOX); + Skyflow.builder().updateVaultConfig(config).build(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage()); + } + } + + @Test + public void testUpdatingNonExistentVaultConfigInSkyflowClient() { + try { + VaultConfig config = new VaultConfig(); + config.setVaultId(vaultID); + config.setClusterId(clusterID); + config.setEnv(Env.SANDBOX); + Skyflow skyflowClient = Skyflow.builder().build(); + skyflowClient.updateVaultConfig(config); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage()); + } catch (Exception e) { + Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage()); + } + } + + @Test + public void testUpdatingValidVaultConfigInSkyflowClient() { + try { + VaultConfig config = new VaultConfig(); + config.setVaultId(vaultID); + config.setClusterId(clusterID); + config.setEnv(Env.SANDBOX); + Skyflow skyflowClient = Skyflow.builder().addVaultConfig(config).build(); + + Credentials credentials = new Credentials(); + credentials.setToken(token); + + skyflowClient.updateVaultConfig(config); + + config.setClusterId(newClusterID); + config.setEnv(Env.PROD); + config.setCredentials(credentials); + + skyflowClient.updateVaultConfig(config); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testRemovingNonExistentVaultConfigInSkyflowBuilder() { + try { + Skyflow.builder().removeVaultConfig(vaultID).build(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage()); + } + } + + @Test + public void testRemovingNonExistentVaultConfigInSkyflowClient() { + try { + VaultConfig config = new VaultConfig(); + config.setVaultId(vaultID); + config.setClusterId(clusterID); + config.setEnv(Env.SANDBOX); + Skyflow skyflowClient = Skyflow.builder().addVaultConfig(config).build(); + skyflowClient.removeVaultConfig(vaultID); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testRemovingValidVaultConfigInSkyflowClient() { + try { + Skyflow skyflowClient = Skyflow.builder().build(); + skyflowClient.removeVaultConfig(vaultID); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage()); + } + } + + @Test + public void testGettingNonExistentVaultConfigInSkyflowClient() { + try { + Skyflow skyflowClient = Skyflow.builder().build(); + VaultConfig config = skyflowClient.getVaultConfig(vaultID); + Assert.assertNull(config); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + + @Test + public void testAddingInvalidConnectionConfigInSkyflowBuilder() { + try { + ConnectionConfig config = new ConnectionConfig(); + config.setConnectionId(""); + config.setConnectionUrl(connectionURL); + Skyflow.builder().addConnectionConfig(config).build(); +// Assert.fail(EXCEPTION_NOT_THROWN); + } catch (Exception e) { +// Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyVaultId.getMessage(), e.getMessage()); + } + } + + @Test + public void testAddingInvalidConnectionConfigInSkyflowClient() { + try { + ConnectionConfig config = new ConnectionConfig(); + config.setConnectionId(""); + config.setConnectionUrl(connectionURL); + Skyflow skyflowClient = Skyflow.builder().build(); + skyflowClient.addConnectionConfig(config); +// Assert.fail(EXCEPTION_NOT_THROWN); + } catch (Exception e) { +// Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyVaultId.getMessage(), e.getMessage()); + } + } + + @Test + public void testAddingInvalidSkyflowCredentialsInSkyflowBuilder() { + try { + Credentials credentials = new Credentials(); + Skyflow.builder().addSkyflowCredentials(credentials).build(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.NoTokenGenerationMeansPassed.getMessage(), e.getMessage()); + } + } + + @Test + public void testUpdatingValidSkyflowCredentialsInSkyflowClient() { + try { + Credentials credentials = new Credentials(); + credentials.setToken(token); + Skyflow skyflowClient = Skyflow.builder().build(); + skyflowClient.updateSkyflowCredentials(credentials); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testDefaultLogLevel() { + try { + Skyflow skyflowClient = Skyflow.builder().setLogLevel(null).build(); + Assert.assertEquals(LogLevel.ERROR, skyflowClient.getLogLevel()); + } catch (Exception e) { + e.printStackTrace(); + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testUpdateLogLevel() { + try { + Skyflow skyflowClient = Skyflow.builder().setLogLevel(LogLevel.INFO).build(); + Assert.assertEquals(LogLevel.INFO, skyflowClient.getLogLevel()); + skyflowClient.updateLogLevel(LogLevel.WARN); + Assert.assertEquals(LogLevel.WARN, skyflowClient.getLogLevel()); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + +} diff --git a/v2/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java b/v2/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java new file mode 100644 index 00000000..ecfca480 --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java @@ -0,0 +1,192 @@ +package com.skyflow.vault.controller; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.enums.LogLevel; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.ApiClient; +import com.skyflow.generated.rest.api.TokensApi; +import com.skyflow.utils.Constants; +import com.skyflow.utils.Utils; +import com.skyflow.vault.data.*; +import com.skyflow.vault.tokens.DetokenizeRequest; +import com.skyflow.vault.tokens.TokenizeRequest; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +public class VaultControllerTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String vaultID = null; + private static String clusterID = null; + private static VaultConfig vaultConfig = null; + private static Skyflow skyflowClient = null; + private ApiClient mockApiClient; + private TokensApi mockTokensApi; + + @BeforeClass + public static void setup() throws SkyflowException, NoSuchMethodException { + vaultID = "vault123"; + clusterID = "cluster123"; + + Credentials credentials = new Credentials(); + credentials.setToken("valid-token"); + + vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.DEV); + vaultConfig.setCredentials(credentials); + } + + @Test + public void testInvalidRequestInInsertMethod() { + try { + InsertRequest request = InsertRequest.builder().build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().insert(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testInvalidRequestInDetokenizeMethod() { + try { + DetokenizeRequest request = DetokenizeRequest.builder().build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().detokenize(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.InvalidDataTokens.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testInvalidRequestInGetMethod() { + try { + GetRequest request = GetRequest.builder().build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().get(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testInvalidRequestInUpdateMethod() { + try { + UpdateRequest request = UpdateRequest.builder().build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().update(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testInvalidRequestInDeleteMethod() { + try { + DeleteRequest request = DeleteRequest.builder().build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().delete(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testInvalidRequestInQueryMethod() { + try { + QueryRequest request = QueryRequest.builder().build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().query(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.QueryKeyError.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testInvalidRequestInTokenizeMethod() { + try { + TokenizeRequest request = TokenizeRequest.builder().build(); + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().tokenize(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.ColumnValuesKeyErrorTokenize.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + + @Test + public void testLookUpBin() { + try { + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().lookUpBin(); + skyflowClient.vault().lookUpBin(); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testAudit() { + try { + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().audit(); + skyflowClient.vault().audit(); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testDetect() { + try { + skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); + skyflowClient.vault().detect(); + skyflowClient.vault().detect(); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + +} diff --git a/v2/src/test/java/com/skyflow/vault/data/GetTests.java b/v2/src/test/java/com/skyflow/vault/data/GetTests.java index ac6625fe..140990a7 100644 --- a/v2/src/test/java/com/skyflow/vault/data/GetTests.java +++ b/v2/src/test/java/com/skyflow/vault/data/GetTests.java @@ -22,6 +22,7 @@ import org.powermock.modules.junit4.PowerMockRunner; import java.util.ArrayList; +import java.util.HashMap; @RunWith(PowerMockRunner.class) @PrepareForTest(fullyQualifiedNames = "com.skyflow.serviceaccount.util.Token") @@ -470,4 +471,30 @@ public void testEmptyValueInColumnValuesInGetRequestValidations() { ); } } + + @Test + public void testGetResponse() { + try { + ArrayList> data = new ArrayList<>(); + HashMap record = new HashMap<>(); + record.put("test_column_1", "test_value_1"); + record.put("test_column_2", "test_value_2"); + data.add(record); + data.add(record); + ArrayList> errors = new ArrayList<>(); + GetResponse response = new GetResponse(data, errors); + String responseString = "{\n\t\"data\": [" + + "{\n\t\t\"test_column_1\": \"test_value_1\"," + + "\n\t\t\"test_column_2\": \"test_value_2\",\n\t}, " + + "{\n\t\t\"test_column_1\": \"test_value_1\"," + + "\n\t\t\"test_column_2\": \"test_value_2\",\n\t}]" + + ",\n\t\"errors\": " + errors + "\n}"; + Assert.assertEquals(2, response.getData().size()); + Assert.assertTrue(response.getErrors().isEmpty()); + Assert.assertEquals(responseString, response.toString()); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + + } } diff --git a/v2/src/test/java/com/skyflow/vault/data/InsertTests.java b/v2/src/test/java/com/skyflow/vault/data/InsertTests.java index f49f9c20..50b1e5fc 100644 --- a/v2/src/test/java/com/skyflow/vault/data/InsertTests.java +++ b/v2/src/test/java/com/skyflow/vault/data/InsertTests.java @@ -13,6 +13,7 @@ import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; import org.junit.Assert; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; @@ -62,11 +63,19 @@ public static void setup() throws SkyflowException { values = new ArrayList<>(); tokens = new ArrayList<>(); valueMap = new HashMap<>(); + tokenMap = new HashMap<>(); + upsert = "upsert_column"; + } + + @Before + public void setupTest() { + values.clear(); + tokens.clear(); + valueMap.clear(); valueMap.put("test_column_1", "test_value_1"); valueMap.put("test_column_2", "test_value_2"); - tokenMap = new HashMap<>(); + tokenMap.clear(); tokenMap.put("test_column_1", "test_token_1"); - upsert = "upsert_column"; } @Test @@ -148,7 +157,6 @@ public void testNoValuesInInsertRequestValidations() { @Test public void testEmptyValuesInInsertRequestValidations() { - values.clear(); InsertRequest request = InsertRequest.builder().table(table).values(values).build(); try { Validations.validateInsertRequest(request); @@ -181,8 +189,8 @@ public void testEmptyKeyInValuesInInsertRequestValidations() { @Test public void testEmptyValueInValuesInInsertRequestValidations() { - valueMap.remove(""); valueMap.put("test_column_3", ""); + values.add(valueMap); InsertRequest request = InsertRequest.builder().table(table).values(values).build(); try { Validations.validateInsertRequest(request); @@ -198,7 +206,7 @@ public void testEmptyValueInValuesInInsertRequestValidations() { @Test public void testEmptyUpsertInInsertRequestValidations() { - valueMap.remove("test_column_3"); + values.add(valueMap); InsertRequest request = InsertRequest.builder().table(table).values(values).upsert("").build(); try { Validations.validateInsertRequest(request); @@ -214,6 +222,7 @@ public void testEmptyUpsertInInsertRequestValidations() { @Test public void testUpsertWithHomogenousInInsertRequestValidations() { + values.add(valueMap); InsertRequest request = InsertRequest.builder() .table(table).values(values).upsert(upsert).homogeneous(true) .build(); @@ -231,6 +240,7 @@ public void testUpsertWithHomogenousInInsertRequestValidations() { @Test public void testTokensWithTokenStrictDisableInInsertRequestValidations() { + values.add(valueMap); InsertRequest request = InsertRequest.builder().table(table).values(values).tokens(tokens).build(); try { Validations.validateInsertRequest(request); @@ -246,6 +256,7 @@ public void testTokensWithTokenStrictDisableInInsertRequestValidations() { @Test public void testNoTokensWithTokenStrictEnableInInsertRequestValidations() { + values.add(valueMap); InsertRequest request = InsertRequest.builder() .table(table).values(values).tokenStrict(Byot.ENABLE) .build(); @@ -263,6 +274,7 @@ public void testNoTokensWithTokenStrictEnableInInsertRequestValidations() { @Test public void testNoTokensWithTokenStrictEnableStrictInInsertRequestValidations() { + values.add(valueMap); InsertRequest request = InsertRequest.builder() .table(table).values(values).tokenStrict(Byot.ENABLE_STRICT) .build(); @@ -280,7 +292,7 @@ public void testNoTokensWithTokenStrictEnableStrictInInsertRequestValidations() @Test public void testEmptyTokensWithTokenStrictEnableInInsertRequestValidations() { - tokens.clear(); + values.add(valueMap); InsertRequest request = InsertRequest.builder() .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE) .build(); @@ -295,6 +307,7 @@ public void testEmptyTokensWithTokenStrictEnableInInsertRequestValidations() { @Test public void testInsufficientTokensWithTokenStrictEnableStrictInInsertRequestValidations1() { + values.add(valueMap); tokens.add(tokenMap); InsertRequest request = InsertRequest.builder() .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE_STRICT) @@ -311,6 +324,8 @@ public void testInsufficientTokensWithTokenStrictEnableStrictInInsertRequestVali @Test public void testInsufficientTokensWithTokenStrictEnableStrictInInsertRequestValidations2() { values.add(valueMap); + values.add(valueMap); + tokens.add(tokenMap); InsertRequest request = InsertRequest.builder() .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE_STRICT) .build(); @@ -325,8 +340,9 @@ public void testInsufficientTokensWithTokenStrictEnableStrictInInsertRequestVali @Test public void testTokenValueMismatchInInsertRequestValidations() { + values.add(valueMap); tokenMap.put("test_column_3", "test_token_3"); - values.remove(1); + tokens.add(tokenMap); InsertRequest request = InsertRequest.builder() .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE_STRICT) .build(); @@ -341,9 +357,9 @@ public void testTokenValueMismatchInInsertRequestValidations() { @Test public void testEmptyKeyInTokensInInsertRequestValidations() { - tokenMap.remove("test_column_2"); - tokenMap.remove("test_column_3"); tokenMap.put("", "test_token_2"); + values.add(valueMap); + tokens.add(tokenMap); InsertRequest request = InsertRequest.builder() .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE_STRICT) .build(); @@ -358,8 +374,9 @@ public void testEmptyKeyInTokensInInsertRequestValidations() { @Test public void testEmptyValueInTokensInInsertRequestValidations() { - tokenMap.remove(""); tokenMap.put("test_column_2", ""); + values.add(valueMap); + tokens.add(tokenMap); InsertRequest request = InsertRequest.builder() .table(table).values(values).tokens(tokens).tokenStrict(Byot.ENABLE_STRICT) .build(); @@ -372,4 +389,25 @@ public void testEmptyValueInTokensInInsertRequestValidations() { } } + @Test + public void testInsertResponse() { + try { + ArrayList> errorFields = new ArrayList<>(); + values.add(valueMap); + values.add(valueMap); + InsertResponse response = new InsertResponse(values, errorFields); + String responseString = "{\n\t\"insertedFields\": [" + + "{\n\t\t\"test_column_1\": \"test_value_1\"," + + "\n\t\t\"test_column_2\": \"test_value_2\",\n\t}, " + + "{\n\t\t\"test_column_1\": \"test_value_1\"," + + "\n\t\t\"test_column_2\": \"test_value_2\",\n\t}]" + + ",\n\t\"errors\": " + errorFields + "\n}"; + Assert.assertEquals(2, response.getInsertedFields().size()); + Assert.assertTrue(response.getErrorFields().isEmpty()); + Assert.assertEquals(responseString, response.toString()); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + } diff --git a/v2/src/test/java/com/skyflow/vault/data/QueryTests.java b/v2/src/test/java/com/skyflow/vault/data/QueryTests.java index 3197a83c..a84c9113 100644 --- a/v2/src/test/java/com/skyflow/vault/data/QueryTests.java +++ b/v2/src/test/java/com/skyflow/vault/data/QueryTests.java @@ -105,11 +105,14 @@ public void testQueryResponse() { try { ArrayList> fields = new ArrayList<>(); fields.add(queryRecord); + fields.add(queryRecord); QueryResponse response = new QueryResponse(fields); String responseString = "{\n\t\"fields\": " + "[{\n\t\t\"card_number\": \"test_card_number\",\n\t\t\"name\": \"test_name\"," + + "\n\t\t\"tokenizedData\": " + null + "\n\t}, " + + "{\n\t\t\"card_number\": \"test_card_number\",\n\t\t\"name\": \"test_name\"," + "\n\t\t\"tokenizedData\": " + null + "\n\t}]\n}"; - Assert.assertEquals(1, response.getFields().size()); + Assert.assertEquals(2, response.getFields().size()); Assert.assertEquals(responseString, response.toString()); } catch (Exception e) { Assert.fail(INVALID_EXCEPTION_THROWN); diff --git a/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java b/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java index d7a7d7fc..b4185260 100644 --- a/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java +++ b/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java @@ -13,19 +13,12 @@ import com.skyflow.generated.rest.ApiException; import com.skyflow.generated.rest.api.TokensApi; import com.skyflow.generated.rest.models.V1DetokenizeResponse; -import com.skyflow.serviceaccount.util.Token; import com.skyflow.utils.Constants; import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; import org.junit.Assert; -import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentMatchers; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; import java.util.ArrayList; @@ -166,69 +159,4 @@ public void testRedactionAndContinueOnErrorInDetokenizeRequestValidations() { Assert.fail(INVALID_EXCEPTION_THROWN); } } - - @Test - public void testNoTokensInDetokenizeMethod() { - DetokenizeRequest request = DetokenizeRequest.builder().build(); - try { - V1DetokenizeResponse mockResponse = new V1DetokenizeResponse(); - TokensApi mockApi = PowerMockito.mock(TokensApi.class); - PowerMockito - .when(mockApi.recordServiceDetokenize(ArgumentMatchers.anyString(), ArgumentMatchers.any())) - .thenReturn(mockResponse); - - skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); - DetokenizeResponse response = skyflowClient.vault().detokenize(request); - Assert.fail(EXCEPTION_NOT_THROWN); - } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); - Assert.assertEquals( - Utils.parameterizedString(ErrorMessage.InvalidDataTokens.getMessage(), Constants.SDK_PREFIX), - e.getMessage() - ); - Assert.assertEquals(RedactionType.PLAIN_TEXT, request.getRedactionType()); - Assert.assertTrue(request.getContinueOnError()); - } catch (ApiException e) { - Assert.fail(); - } - } - - @Test - public void testEmptyTokensInDetokenizeMethod() { - tokens.clear(); - DetokenizeRequest request = DetokenizeRequest.builder().tokens(tokens).build(); - try { - skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); - DetokenizeResponse response = skyflowClient.vault().detokenize(request); - Assert.fail(EXCEPTION_NOT_THROWN); - } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); - Assert.assertEquals( - Utils.parameterizedString(ErrorMessage.EmptyDataTokens.getMessage(), Constants.SDK_PREFIX), - e.getMessage() - ); - Assert.assertEquals(RedactionType.PLAIN_TEXT, request.getRedactionType()); - Assert.assertTrue(request.getContinueOnError()); - } - } - - @Test - public void testEmptyTokenInTokensInDetokenizeMethod() { - tokens.add(token); - tokens.add(""); - DetokenizeRequest request = DetokenizeRequest.builder().tokens(tokens).build(); - try { - skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); - DetokenizeResponse response = skyflowClient.vault().detokenize(request); - Assert.fail(EXCEPTION_NOT_THROWN); - } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); - Assert.assertEquals( - Utils.parameterizedString(ErrorMessage.EmptyTokenInDataTokens.getMessage(), Constants.SDK_PREFIX), - e.getMessage() - ); - Assert.assertEquals(RedactionType.PLAIN_TEXT, request.getRedactionType()); - Assert.assertTrue(request.getContinueOnError()); - } - } } diff --git a/v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java b/v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java index 4f801a44..1f4360b2 100644 --- a/v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java +++ b/v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java @@ -1,7 +1,9 @@ package com.skyflow.vault.tokens; import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; @@ -30,6 +32,18 @@ public class TokenizeTests { @BeforeClass public static void setup() { + vaultID = "vault123"; + clusterID = "cluster123"; + + Credentials credentials = new Credentials(); + credentials.setToken("valid-token"); + + vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + vaultConfig.setEnv(Env.DEV); + vaultConfig.setCredentials(credentials); + columnValues = new ArrayList<>(); value = "test_value"; group = "test_group"; From f1484693d41823b73968c27e2a62394dbbb05357 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 8 Nov 2024 22:10:45 +0530 Subject: [PATCH 41/68] SK-1666 Fix conflicts and build issues after merge --- v2/src/main/java/com/skyflow/Skyflow.java | 23 +++++++------------ .../com/skyflow/config/ConnectionConfig.java | 8 ------- v2/src/main/java/com/skyflow/utils/Utils.java | 4 ++-- .../utils/validations/Validations.java | 12 +++------- 4 files changed, 13 insertions(+), 34 deletions(-) diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index b4223e32..eaf7a7a2 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -39,7 +39,7 @@ public VaultConfig getVaultConfig(String vaultId) { return this.builder.vaultConfigMap.get(vaultId); } - public Skyflow updateVaultConfig(VaultConfig vaultConfig) throws Exception { + public Skyflow updateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { this.builder.updateVaultConfig(vaultConfig); return this; } @@ -206,7 +206,7 @@ public SkyflowClientBuilder addSkyflowCredentials(Credentials credentials) throw public SkyflowClientBuilder setLogLevel(LogLevel logLevel) { this.logLevel = logLevel == null ? LogLevel.ERROR : logLevel; - LogUtil.setupLogger(logLevel); + LogUtil.setupLogger(this.logLevel); LogUtil.printInfoLog(Utils.parameterizedString( InfoLogs.CURRENT_LOG_LEVEL.getLog(), String.valueOf(logLevel) )); @@ -219,19 +219,12 @@ public Skyflow build() { private VaultConfig findAndUpdateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { VaultConfig previousConfig = this.vaultConfigMap.get(vaultConfig.getVaultId()); - if (previousConfig == null) { - LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.VAULT_CONFIG_DOES_NOT_EXIST.getLog(), vaultConfig.getVaultId() - )); - throw new SkyflowException(); - } else { - Env env = vaultConfig.getEnv() != null ? vaultConfig.getEnv() : previousConfig.getEnv(); - String clusterId = vaultConfig.getClusterId() != null ? vaultConfig.getClusterId() : previousConfig.getClusterId(); - Credentials credentials = vaultConfig.getCredentials() != null ? vaultConfig.getCredentials() : previousConfig.getCredentials(); - previousConfig.setEnv(env); - previousConfig.setClusterId(clusterId); - previousConfig.setCredentials(credentials); - } + Env env = vaultConfig.getEnv() != null ? vaultConfig.getEnv() : previousConfig.getEnv(); + String clusterId = vaultConfig.getClusterId() != null ? vaultConfig.getClusterId() : previousConfig.getClusterId(); + Credentials credentials = vaultConfig.getCredentials() != null ? vaultConfig.getCredentials() : previousConfig.getCredentials(); + previousConfig.setEnv(env); + previousConfig.setClusterId(clusterId); + previousConfig.setCredentials(credentials); return previousConfig; } } diff --git a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java index acab67ad..c017b181 100644 --- a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java +++ b/v2/src/main/java/com/skyflow/config/ConnectionConfig.java @@ -35,12 +35,4 @@ public void setCredentials(Credentials credentials) { this.credentials = credentials; } - public String getConnectionUrl() { - return connectionUrl; - } - - public Credentials getCredentials() { - return credentials; - } - } diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/v2/src/main/java/com/skyflow/utils/Utils.java index 86eb17b8..66e50b5a 100644 --- a/v2/src/main/java/com/skyflow/utils/Utils.java +++ b/v2/src/main/java/com/skyflow/utils/Utils.java @@ -8,8 +8,8 @@ import com.skyflow.errors.SkyflowException; import com.skyflow.logs.ErrorLogs; import com.skyflow.serviceaccount.util.BearerToken; -import com.skyflow.vault.connection.InvokeConnectionRequest; import com.skyflow.utils.logger.LogUtil; +import com.skyflow.vault.connection.InvokeConnectionRequest; import org.apache.commons.codec.binary.Base64; import java.io.File; @@ -127,7 +127,7 @@ public static String constructConnectionURL(ConnectionConfig config, InvokeConne } } - if(invokeConnectionRequest.getQueryParams() != null && !invokeConnectionRequest.getQueryParams().isEmpty()) { + if (invokeConnectionRequest.getQueryParams() != null && !invokeConnectionRequest.getQueryParams().isEmpty()) { filledURL.append("?"); for (Map.Entry entry : invokeConnectionRequest.getQueryParams().entrySet()) { String key = entry.getKey(); diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 42ef80ee..61c7ff80 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -3,14 +3,10 @@ import com.skyflow.config.ConnectionConfig; import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; - -import com.skyflow.enums.RequestMethod; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.vault.connection.InvokeConnectionRequest; import com.skyflow.enums.Byot; import com.skyflow.enums.InterfaceName; import com.skyflow.enums.RedactionType; +import com.skyflow.enums.RequestMethod; import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; @@ -18,14 +14,12 @@ import com.skyflow.utils.Constants; import com.skyflow.utils.Utils; import com.skyflow.utils.logger.LogUtil; +import com.skyflow.vault.connection.InvokeConnectionRequest; import com.skyflow.vault.data.*; import com.skyflow.vault.tokens.ColumnValue; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.TokenizeRequest; -import java.net.URL; - -// Add config and request validations import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; @@ -92,7 +86,7 @@ public static void validateInvokeConnectionRequest(InvokeConnectionRequest invok throw new SkyflowException(); } - if (invokeConnectionRequest.getMethodName()!=null) { + if (invokeConnectionRequest.getMethodName() != null) { try { RequestMethod requestMethod = RequestMethod.valueOf(invokeConnectionRequest.getMethodName()); } catch (Exception e) { From f529a234de0ef10f557ad53aafe6e883e1c76fa9 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 15 Nov 2024 16:57:24 +0530 Subject: [PATCH 42/68] SK-1684 Add unit tests for invoke connection SK-1766 Add validations for invoke connection interface SK-1766 Refactor code for invoke connection, removed unnecessary components for code optimisation --- .../java/com/skyflow/ConnectionClient.java | 53 ++- v2/src/main/java/com/skyflow/Skyflow.java | 57 ++- v2/src/main/java/com/skyflow/VaultClient.java | 8 - .../java/com/skyflow/errors/ErrorMessage.java | 8 +- .../com/skyflow/errors/SkyflowException.java | 3 - .../main/java/com/skyflow/logs/ErrorLogs.java | 15 +- .../utils/validations/Validations.java | 96 +++-- .../connection/InvokeConnectionRequest.java | 25 +- .../controller/ConnectionController.java | 68 +-- .../test/java/com/skyflow/SkyflowTests.java | 154 ++++++- .../com/skyflow/config/CredentialsTests.java | 8 +- .../com/skyflow/utils/HttpUtilityTests.java | 123 ++++++ .../java/com/skyflow/utils/UtilsTests.java | 48 +++ .../connection/InvokeConnectionTests.java | 394 ++++++++++++++++++ .../controller/ConnectionControllerTests.java | 49 +++ .../skyflow/vault/tokens/DetokenizeTests.java | 59 +-- 16 files changed, 967 insertions(+), 201 deletions(-) create mode 100644 v2/src/test/java/com/skyflow/utils/HttpUtilityTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java create mode 100644 v2/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java diff --git a/v2/src/main/java/com/skyflow/ConnectionClient.java b/v2/src/main/java/com/skyflow/ConnectionClient.java index a42d3aa6..40fd741a 100644 --- a/v2/src/main/java/com/skyflow/ConnectionClient.java +++ b/v2/src/main/java/com/skyflow/ConnectionClient.java @@ -2,32 +2,31 @@ import com.skyflow.config.ConnectionConfig; import com.skyflow.config.Credentials; -import com.skyflow.config.VaultConfig; -import com.skyflow.generated.rest.ApiClient; -import com.skyflow.generated.rest.api.RecordsApi; -import com.skyflow.generated.rest.api.TokensApi; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.logs.InfoLogs; +import com.skyflow.serviceaccount.util.Token; +import com.skyflow.utils.Constants; +import com.skyflow.utils.Utils; +import com.skyflow.utils.logger.LogUtil; +import com.skyflow.utils.validations.Validations; import io.github.cdimascio.dotenv.Dotenv; public class ConnectionClient { - private final ConnectionConfig connectionConfig; + protected String token; + protected String apiKey; private Credentials commonCredentials; private Credentials finalCredentials; - private final ApiClient apiClient; - protected ConnectionClient(ConnectionConfig connectionConfig, Credentials credentials) { super(); this.connectionConfig = connectionConfig; this.commonCredentials = credentials; - this.apiClient = new ApiClient(); prioritiseCredentials(); } - protected Credentials getFinalCredentials() { - return finalCredentials; - } - protected ConnectionConfig getConnectionConfig() { return connectionConfig; } @@ -37,8 +36,29 @@ protected void setCommonCredentials(Credentials commonCredentials) { prioritiseCredentials(); } - protected ApiClient getApiClient() { - return apiClient; + protected void updateConnectionConfig(ConnectionConfig connectionConfig) { + prioritiseCredentials(); + } + + protected void setBearerToken() throws SkyflowException { + Validations.validateCredentials(this.finalCredentials); + if (this.finalCredentials.getApiKey() != null) { + setApiKey(); + return; + } else if (token == null || Token.isExpired(token)) { + LogUtil.printInfoLog(InfoLogs.BEARER_TOKEN_EXPIRED.getLog()); + token = Utils.generateBearerToken(this.finalCredentials); + } else { + LogUtil.printInfoLog(InfoLogs.REUSE_BEARER_TOKEN.getLog()); + } + } + + private void setApiKey() { + if (apiKey == null) { + apiKey = this.finalCredentials.getApiKey(); + } else { + LogUtil.printInfoLog(InfoLogs.REUSE_API_KEY.getLog()); + } } private void prioritiseCredentials() { @@ -49,9 +69,10 @@ private void prioritiseCredentials() { this.finalCredentials = this.commonCredentials; } else { Dotenv dotenv = Dotenv.load(); - String sysCredentials = dotenv.get("SKYFLOW_CREDENTIALS"); + String sysCredentials = dotenv.get(Constants.ENV_CREDENTIALS_KEY_NAME); if (sysCredentials == null) { - // throw error for not passing any credentials + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.EmptyCredentials.getMessage()); } else { this.finalCredentials = new Credentials(); this.finalCredentials.setCredentialsString(sysCredentials); diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/v2/src/main/java/com/skyflow/Skyflow.java index eaf7a7a2..2a2e42cc 100644 --- a/v2/src/main/java/com/skyflow/Skyflow.java +++ b/v2/src/main/java/com/skyflow/Skyflow.java @@ -49,21 +49,21 @@ public Skyflow removeVaultConfig(String vaultId) throws SkyflowException { return this; } - public Skyflow addConnectionConfig(ConnectionConfig connectionConfig) { + public Skyflow addConnectionConfig(ConnectionConfig connectionConfig) throws SkyflowException { this.builder.addConnectionConfig(connectionConfig); return this; } public ConnectionConfig getConnectionConfig(String connectionId) { - return this.builder.connectionsMap.get(connectionId).getConnectionConfig(); + return this.builder.connectionConfigMap.get(connectionId); } - public Skyflow updateConnectionConfig(ConnectionConfig connectionConfig) { + public Skyflow updateConnectionConfig(ConnectionConfig connectionConfig) throws SkyflowException { this.builder.updateConnectionConfig(connectionConfig); return this; } - public Skyflow removeConnectionConfig(String connectionId) { + public Skyflow removeConnectionConfig(String connectionId) throws SkyflowException { this.builder.removeConnectionConfig(connectionId); return this; } @@ -91,7 +91,6 @@ public VaultController vault(String vaultId) { return this.builder.vaultClientsMap.get(vaultId); } - // In case no id is passed, return first connection controller public ConnectionController connection() { String connectionId = (String) this.builder.connectionsMap.keySet().toArray()[0]; return this.connection(connectionId); @@ -137,6 +136,8 @@ public SkyflowClientBuilder addVaultConfig(VaultConfig vaultConfig) throws Skyfl } public SkyflowClientBuilder updateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.VALIDATING_VAULT_CONFIG.getLog()); + Validations.validateVaultConfig(vaultConfig); if (this.vaultClientsMap.containsKey(vaultConfig.getVaultId())) { VaultConfig updatedConfig = findAndUpdateVaultConfig(vaultConfig); this.vaultClientsMap.get(updatedConfig.getVaultId()).updateVaultConfig(); @@ -160,34 +161,51 @@ public SkyflowClientBuilder removeVaultConfig(String vaultId) throws SkyflowExce return this; } - public SkyflowClientBuilder addConnectionConfig(ConnectionConfig connectionConfig) { - // check if connectionConfig already exists + public SkyflowClientBuilder addConnectionConfig(ConnectionConfig connectionConfig) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.VALIDATING_CONNECTION_CONFIG.getLog()); + Validations.validateConnectionConfig(connectionConfig); if (this.connectionsMap.containsKey(connectionConfig.getConnectionId())) { - // display error log, throw error, or both + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.CONNECTION_CONFIG_EXISTS.getLog(), connectionConfig.getConnectionId() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.ConnectionIdAlreadyInConfigList.getMessage()); } else { this.connectionConfigMap.put(connectionConfig.getConnectionId(), connectionConfig); ConnectionController controller = new ConnectionController(connectionConfig, this.skyflowCredentials); this.connectionsMap.put(connectionConfig.getConnectionId(), controller); + LogUtil.printInfoLog(Utils.parameterizedString( + InfoLogs.CONNECTION_CONTROLLER_INITIALIZED.getLog(), connectionConfig.getConnectionId())); } return this; } - public SkyflowClientBuilder updateConnectionConfig(ConnectionConfig connectionConfig) { + public SkyflowClientBuilder updateConnectionConfig(ConnectionConfig connectionConfig) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.VALIDATING_CONNECTION_CONFIG.getLog()); + Validations.validateConnectionConfig(connectionConfig); if (this.connectionsMap.containsKey(connectionConfig.getConnectionId())) { - ConnectionController controller = this.connectionsMap.get(connectionConfig.getConnectionId()); - controller.setConnectionConfig(connectionConfig); + ConnectionConfig updatedConfig = findAndUpdateConnectionConfig(connectionConfig); + this.connectionsMap.get(updatedConfig.getConnectionId()).updateConnectionConfig(connectionConfig); } else { - // display error log, throw error, or both + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.CONNECTION_CONFIG_DOES_NOT_EXIST.getLog(), connectionConfig.getConnectionId() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.ConnectionIdNotInConfigList.getMessage()); } return this; } - public SkyflowClientBuilder removeConnectionConfig(String connectionId) { + public SkyflowClientBuilder removeConnectionConfig(String connectionId) throws SkyflowException { if (this.connectionsMap.containsKey(connectionId)) { this.connectionsMap.remove(connectionId); this.connectionConfigMap.remove(connectionId); } else { - // display error log, throw error, or both + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.CONNECTION_CONFIG_DOES_NOT_EXIST.getLog(), connectionId + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), + ErrorMessage.ConnectionIdNotInConfigList.getMessage()); } return this; } @@ -217,7 +235,7 @@ public Skyflow build() { return new Skyflow(this); } - private VaultConfig findAndUpdateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { + private VaultConfig findAndUpdateVaultConfig(VaultConfig vaultConfig) { VaultConfig previousConfig = this.vaultConfigMap.get(vaultConfig.getVaultId()); Env env = vaultConfig.getEnv() != null ? vaultConfig.getEnv() : previousConfig.getEnv(); String clusterId = vaultConfig.getClusterId() != null ? vaultConfig.getClusterId() : previousConfig.getClusterId(); @@ -227,5 +245,14 @@ private VaultConfig findAndUpdateVaultConfig(VaultConfig vaultConfig) throws Sky previousConfig.setCredentials(credentials); return previousConfig; } + + private ConnectionConfig findAndUpdateConnectionConfig(ConnectionConfig connectionConfig) { + ConnectionConfig previousConfig = this.connectionConfigMap.get(connectionConfig.getConnectionId()); + String connectionURL = connectionConfig.getConnectionUrl() != null ? connectionConfig.getConnectionUrl() : previousConfig.getConnectionUrl(); + Credentials credentials = connectionConfig.getCredentials() != null ? connectionConfig.getCredentials() : previousConfig.getCredentials(); + previousConfig.setConnectionUrl(connectionURL); + previousConfig.setCredentials(credentials); + return previousConfig; + } } } diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/v2/src/main/java/com/skyflow/VaultClient.java index 1c2e81ea..b1acbdad 100644 --- a/v2/src/main/java/com/skyflow/VaultClient.java +++ b/v2/src/main/java/com/skyflow/VaultClient.java @@ -51,10 +51,6 @@ protected VaultClient(VaultConfig vaultConfig, Credentials credentials) { prioritiseCredentials(); } - protected Credentials getFinalCredentials() { - return finalCredentials; - } - protected RecordsApi getRecordsApi() { return recordsApi; } @@ -75,10 +71,6 @@ protected VaultConfig getVaultConfig() { return vaultConfig; } - protected String getToken() { - return token; - } - protected void setCommonCredentials(Credentials commonCredentials) { this.commonCredentials = commonCredentials; prioritiseCredentials(); diff --git a/v2/src/main/java/com/skyflow/errors/ErrorMessage.java b/v2/src/main/java/com/skyflow/errors/ErrorMessage.java index 5d9905a3..f44427fb 100644 --- a/v2/src/main/java/com/skyflow/errors/ErrorMessage.java +++ b/v2/src/main/java/com/skyflow/errors/ErrorMessage.java @@ -20,8 +20,8 @@ public enum ErrorMessage { // connection config InvalidConnectionId("%s1 Initialization failed. Invalid connection ID. Specify a valid connection ID."), EmptyConnectionId("%s1 Initialization failed. Invalid connection ID. Connection ID must not be empty."), - EmptyConnectionUrl("%s1 Initialization failed. Invalid connection URL. Connection URL must not be empty."), InvalidConnectionUrl("%s1 Initialization failed. Invalid connection URL. Specify a valid connection URL."), + EmptyConnectionUrl("%s1 Initialization failed. Invalid connection URL. Connection URL must not be empty."), InvalidConnectionUrlFormat("%s1 Initialization failed. Connection URL is not a valid URL. Specify a valid connection URL."), // credentials @@ -112,9 +112,13 @@ public enum ErrorMessage { ColumnValuesKeyErrorTokenize("%s1 Validation error. 'columnValues' key is missing from the payload. Specify a 'columnValues' key."), EmptyColumnGroupInColumnValue("%s1 Validation error. Invalid column group in column value. Specify a valid column group."), - //connection + // connection + InvalidRequestHeaders("%s1 Validation error. Request headers aren't valid. Specify valid request headers."), + EmptyRequestHeaders("%s1 Validation error. Request headers are empty. Specify valid ."), InvalidPathParams("%s1 Validation error. Path parameters aren't valid. Specify valid path parameters."), EmptyPathParams("%s1 Validation error. Path parameters are empty. Specify valid path parameters."), + InvalidQueryParams("%s1 Validation error. Query parameters aren't valid. Specify valid query parameters."), + EmptyQueryParams("%s1 Validation error. Query parameters are empty. Specify valid query parameters."), InvalidRequestBody("%s1 Validation error. Invalid request body. Specify the request body as an object."), EmptyRequestBody("%s1 Validation error. Request body can't be empty. Specify a valid request body."), diff --git a/v2/src/main/java/com/skyflow/errors/SkyflowException.java b/v2/src/main/java/com/skyflow/errors/SkyflowException.java index 1d0c81ff..625b0d2e 100644 --- a/v2/src/main/java/com/skyflow/errors/SkyflowException.java +++ b/v2/src/main/java/com/skyflow/errors/SkyflowException.java @@ -16,9 +16,6 @@ public class SkyflowException extends Exception { private JsonArray details; private JsonObject responseBody; - public SkyflowException() { - } - public SkyflowException(String message) { super(message); this.message = message; diff --git a/v2/src/main/java/com/skyflow/logs/ErrorLogs.java b/v2/src/main/java/com/skyflow/logs/ErrorLogs.java index fa1f945d..98bc3064 100644 --- a/v2/src/main/java/com/skyflow/logs/ErrorLogs.java +++ b/v2/src/main/java/com/skyflow/logs/ErrorLogs.java @@ -91,7 +91,20 @@ public enum ErrorLogs { COLUMN_VALUES_IS_REQUIRED_TOKENIZE("Invalid %s1 request. ColumnValues are required."), EMPTY_OR_NULL_COLUMN_GROUP_IN_COLUMN_VALUES("Invalid %s1 request. Column group can not be null or empty in column values at index %s2."), TOKENIZE_REQUEST_REJECTED("Tokenize request resulted in failure."), - DELETE_REQUEST_REJECTED("Delete request resulted in failure."); + DELETE_REQUEST_REJECTED("Delete request resulted in failure."), + + // invoke connection interface + INVOKE_CONNECTION_INVALID_CONNECTION_URL("Invalid %s1 request. Connection URL is not a valid URL."), + EMPTY_REQUEST_HEADERS("Invalid %s1 request. Request headers can not be empty."), + INVALID_REQUEST_HEADERS("Invalid %s1 request. Request header can not be null or empty in request headers."), + EMPTY_PATH_PARAMS("Invalid %s1 request. Path params can not be empty."), + INVALID_PATH_PARAM("Invalid %s1 request. Path parameter can not be null or empty in path params."), + EMPTY_QUERY_PARAMS("Invalid %s1 request. Query params can not be empty."), + INVALID_QUERY_PARAM("Invalid %s1 request. Query parameter can not be null or empty in query params."), + EMPTY_REQUEST_BODY("Invalid %s1 request. Request body can not be empty."), + INVALID_REQUEST_BODY("Invalid %s1 request. Request body can not be empty."), + INVOKE_CONNECTION_REQUEST_REJECTED("Invoke connection request resulted in failure."), + ; private final String log; diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/v2/src/main/java/com/skyflow/utils/validations/Validations.java index 61c7ff80..5e88ec1b 100644 --- a/v2/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v2/src/main/java/com/skyflow/utils/validations/Validations.java @@ -6,7 +6,6 @@ import com.skyflow.enums.Byot; import com.skyflow.enums.InterfaceName; import com.skyflow.enums.RedactionType; -import com.skyflow.enums.RequestMethod; import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; @@ -20,11 +19,11 @@ import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.TokenizeRequest; -import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -67,44 +66,77 @@ public static void validateConnectionConfig(ConnectionConfig connectionConfig) t } else if (connectionUrl.trim().isEmpty()) { LogUtil.printErrorLog(ErrorLogs.EMPTY_CONNECTION_URL.getLog()); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyConnectionUrl.getMessage()); - } - try { - URL url = new URL(connectionUrl); - } catch (MalformedURLException e) { + } else if (isInvalidURL(connectionUrl)) { LogUtil.printErrorLog(ErrorLogs.INVALID_CONNECTION_URL.getLog()); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidConnectionUrlFormat.getMessage()); } } public static void validateInvokeConnectionRequest(InvokeConnectionRequest invokeConnectionRequest) throws SkyflowException { - if (invokeConnectionRequest.getRequestHeaders().containsKey("connectionURL")) { - String connectionURL = invokeConnectionRequest.getRequestHeaders().get("connectionURL"); - if (isInvalidURL(connectionURL)) { - throw new SkyflowException(); + Map requestHeaders = invokeConnectionRequest.getRequestHeaders(); + Map pathParams = invokeConnectionRequest.getPathParams(); + Map queryParams = invokeConnectionRequest.getQueryParams(); + Object requestBody = invokeConnectionRequest.getRequestBody(); + + if (requestHeaders != null) { + if (requestHeaders.isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_REQUEST_HEADERS.getLog(), InterfaceName.INVOKE_CONNECTION.getName())); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyRequestHeaders.getMessage()); + } else { + for (String header : requestHeaders.keySet()) { + String headerValue = requestHeaders.get(header); + if (header == null || header.trim().isEmpty() || headerValue == null || headerValue.trim().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.INVALID_REQUEST_HEADERS.getLog(), InterfaceName.INVOKE_CONNECTION.getName())); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidRequestHeaders.getMessage()); + } + } } - } else { - throw new SkyflowException(); } - if (invokeConnectionRequest.getMethodName() != null) { - try { - RequestMethod requestMethod = RequestMethod.valueOf(invokeConnectionRequest.getMethodName()); - } catch (Exception e) { - throw new SkyflowException(); + if (pathParams != null) { + if (pathParams.isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_PATH_PARAMS.getLog(), InterfaceName.INVOKE_CONNECTION.getName())); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyPathParams.getMessage()); + } else { + for (String param : pathParams.keySet()) { + String paramValue = pathParams.get(param); + if (param == null || param.trim().isEmpty() || paramValue == null || paramValue.trim().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.INVALID_PATH_PARAM.getLog(), InterfaceName.INVOKE_CONNECTION.getName())); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidPathParams.getMessage()); + } + } } - } else { - throw new SkyflowException(); } - } - private static boolean isInvalidURL(String configURL) { - try { - URL url = new URL(configURL); - if (!url.getProtocol().equals("https")) throw new Exception(); - } catch (Exception e) { - return true; + if (queryParams != null) { + if (queryParams.isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_QUERY_PARAMS.getLog(), InterfaceName.INVOKE_CONNECTION.getName())); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyQueryParams.getMessage()); + } else { + for (String param : queryParams.keySet()) { + String paramValue = queryParams.get(param); + if (param == null || param.trim().isEmpty() || paramValue == null || paramValue.trim().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.INVALID_QUERY_PARAM.getLog(), InterfaceName.INVOKE_CONNECTION.getName())); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidQueryParams.getMessage()); + } + } + } + } + + if (requestBody != null) { + Map requestBodyMap = (Map) requestBody; + if (requestBodyMap.isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_REQUEST_BODY.getLog(), InterfaceName.INVOKE_CONNECTION.getName())); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyRequestBody.getMessage()); + } } - return false; } public static void validateCredentials(Credentials credentials) throws SkyflowException { @@ -643,6 +675,16 @@ public static void validateTokenizeRequest(TokenizeRequest tokenizeRequest) thro } } + private static boolean isInvalidURL(String configURL) { + try { + URL url = new URL(configURL); + if (!url.getProtocol().equals("https")) throw new Exception(); + } catch (Exception e) { + return true; + } + return false; + } + private static void validateTokensForInsertRequest( ArrayList> tokens, ArrayList> values, diff --git a/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java b/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java index a74b9adb..5edf4f4f 100644 --- a/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java +++ b/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java @@ -1,11 +1,7 @@ package com.skyflow.vault.connection; -import com.google.gson.JsonObject; -import com.skyflow.enums.RedactionType; -import com.skyflow.vault.tokens.DetokenizeRequest; -import com.skyflow.vault.tokens.TokenizeRequest; +import com.skyflow.enums.RequestMethod; -import java.util.ArrayList; import java.util.HashMap; import java.util.Map; @@ -21,11 +17,7 @@ public static InvokeConnectionRequestBuilder builder() { return new InvokeConnectionRequestBuilder(); } - public InvokeConnectionRequest getConnectionRequest() { - return new InvokeConnectionRequest(builder); - } - - public String getMethodName() { + public RequestMethod getMethodName() { return builder.methodName; } @@ -45,24 +37,23 @@ public Object getRequestBody() { return builder.requestBody; } - public static final class InvokeConnectionRequestBuilder{ - - private String methodName; + public static final class InvokeConnectionRequestBuilder { + private RequestMethod methodName; private Map pathParams; private Map queryParams; private Map requestHeaders; private Object requestBody; - public InvokeConnectionRequestBuilder() { - this.methodName = ""; + private InvokeConnectionRequestBuilder() { + this.methodName = RequestMethod.POST; this.pathParams = new HashMap<>(); this.queryParams = new HashMap<>(); this.requestHeaders = new HashMap<>(); this.requestBody = new Object(); } - public InvokeConnectionRequestBuilder methodName(String methodName) { - this.methodName = methodName; + public InvokeConnectionRequestBuilder methodName(RequestMethod methodName) { + this.methodName = methodName == null ? RequestMethod.POST : methodName; return this; } diff --git a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java index d2e08977..7ae03a2a 100644 --- a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java +++ b/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java @@ -1,97 +1,75 @@ package com.skyflow.vault.controller; import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.skyflow.ConnectionClient; import com.skyflow.config.ConnectionConfig; import com.skyflow.config.Credentials; +import com.skyflow.enums.RequestMethod; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; -import com.skyflow.generated.rest.auth.HttpBearerAuth; -import com.skyflow.serviceaccount.util.Token; +import com.skyflow.logs.ErrorLogs; +import com.skyflow.logs.InfoLogs; import com.skyflow.utils.HttpUtility; import com.skyflow.utils.Utils; +import com.skyflow.utils.logger.LogUtil; import com.skyflow.utils.validations.Validations; import com.skyflow.vault.connection.InvokeConnectionRequest; import com.skyflow.vault.connection.InvokeConnectionResponse; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import java.net.URL; import java.io.IOException; -import java.text.ParseException; +import java.net.URL; import java.util.HashMap; import java.util.Map; public class ConnectionController extends ConnectionClient { - private ConnectionConfig connectionConfig; - private Credentials commonCredentials; - - private String token; - public ConnectionController(ConnectionConfig connectionConfig, Credentials credentials) { super(connectionConfig, credentials); - this.connectionConfig = connectionConfig; - this.commonCredentials = credentials; } - public void setCommonCredentials(Credentials commonCredentials) { - this.commonCredentials = commonCredentials; - } - - public ConnectionConfig getConnectionConfig() { - return connectionConfig; - } - - public void setConnectionConfig(ConnectionConfig connectionConfig) { - this.connectionConfig = connectionConfig; - } - - public InvokeConnectionResponse invoke(InvokeConnectionRequest invokeConnectionRequest) throws SkyflowException, IOException { - + public InvokeConnectionResponse invoke(InvokeConnectionRequest invokeConnectionRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.INVOKE_CONNECTION_TRIGGERED.getLog()); InvokeConnectionResponse connectionResponse; try { + LogUtil.printInfoLog(InfoLogs.VALIDATING_INVOKE_CONNECTION_REQUEST.getLog()); Validations.validateInvokeConnectionRequest(invokeConnectionRequest); setBearerToken(); - String filledURL = Utils.constructConnectionURL(connectionConfig, invokeConnectionRequest); + String filledURL = Utils.constructConnectionURL(super.getConnectionConfig(), invokeConnectionRequest); Map headers = new HashMap<>(); if (invokeConnectionRequest.getRequestHeaders().containsKey("requestHeader")) { headers = Utils.constructConnectionHeadersMap(invokeConnectionRequest.getRequestHeaders()); } if (!headers.containsKey("x-skyflow-authorization")) { - headers.put("x-skyflow-authorization", token); + headers.put("x-skyflow-authorization", token == null ? apiKey : token); } - String requestMethod = invokeConnectionRequest.getMethodName(); + RequestMethod requestMethod = invokeConnectionRequest.getMethodName(); JsonObject requestBody = null; Object requestBodyObject = invokeConnectionRequest.getRequestBody(); - if(requestBodyObject!=null) { + if (requestBodyObject != null) { try { requestBody = convertObjectToJson(requestBodyObject); } catch (Exception e) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVALID_REQUEST_HEADERS.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidRequestBody.getMessage()); } } - String response = HttpUtility.sendRequest(requestMethod, new URL(filledURL), requestBody, headers); - connectionResponse = new InvokeConnectionResponse((JsonObject) new JsonParser().parse(response)); + String response = HttpUtility.sendRequest(requestMethod.name(), new URL(filledURL), requestBody, headers); + connectionResponse = new InvokeConnectionResponse((JsonObject) JsonParser.parseString(response)); + LogUtil.printInfoLog(InfoLogs.INVOKE_CONNECTION_REQUEST_RESOLVED.getLog()); } catch (IOException e) { - throw new SkyflowException(); + LogUtil.printErrorLog(ErrorLogs.INVOKE_CONNECTION_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage(), e); } return connectionResponse; } - private void setBearerToken() throws SkyflowException { - Validations.validateCredentials(super.getFinalCredentials()); - if (token == null || Token.isExpired(token)) { - token = Utils.generateBearerToken(super.getFinalCredentials()); - } - HttpBearerAuth Bearer = (HttpBearerAuth) super.getApiClient().getAuthentication("Bearer"); - Bearer.setBearerToken(token); - } - private JsonObject convertObjectToJson(Object object) { Gson gson = new Gson(); JsonElement jsonElement = gson.toJsonTree(object); diff --git a/v2/src/test/java/com/skyflow/SkyflowTests.java b/v2/src/test/java/com/skyflow/SkyflowTests.java index cfdd7e5a..efdc54dc 100644 --- a/v2/src/test/java/com/skyflow/SkyflowTests.java +++ b/v2/src/test/java/com/skyflow/SkyflowTests.java @@ -20,6 +20,7 @@ public class SkyflowTests { private static String newClusterID = null; private static String connectionID = null; private static String connectionURL = null; + private static String newConnectionURL = null; private static String token = null; @BeforeClass @@ -29,6 +30,7 @@ public static void setup() { newClusterID = "new_test_cluster_id"; connectionID = "test_connection_id"; connectionURL = "https://test.connection.url"; + newConnectionURL = "https://new.test.connection.url"; token = "test_token"; } @@ -147,8 +149,6 @@ public void testUpdatingValidVaultConfigInSkyflowClient() { skyflowClient.updateVaultConfig(config); } catch (SkyflowException e) { Assert.fail(INVALID_EXCEPTION_THROWN); - } catch (Exception e) { - Assert.fail(INVALID_EXCEPTION_THROWN); } } @@ -208,10 +208,10 @@ public void testAddingInvalidConnectionConfigInSkyflowBuilder() { config.setConnectionId(""); config.setConnectionUrl(connectionURL); Skyflow.builder().addConnectionConfig(config).build(); -// Assert.fail(EXCEPTION_NOT_THROWN); - } catch (Exception e) { -// Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); - Assert.assertEquals(ErrorMessage.EmptyVaultId.getMessage(), e.getMessage()); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyConnectionId.getMessage(), e.getMessage()); } } @@ -223,10 +223,134 @@ public void testAddingInvalidConnectionConfigInSkyflowClient() { config.setConnectionUrl(connectionURL); Skyflow skyflowClient = Skyflow.builder().build(); skyflowClient.addConnectionConfig(config); -// Assert.fail(EXCEPTION_NOT_THROWN); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyConnectionId.getMessage(), e.getMessage()); + } + } + + @Test + public void testAddingValidConnectionConfigInSkyflowClient() { + try { + ConnectionConfig config = new ConnectionConfig(); + config.setConnectionId(connectionID); + config.setConnectionUrl(connectionURL); + Skyflow skyflowClient = Skyflow.builder().build(); + skyflowClient.addConnectionConfig(config); } catch (Exception e) { -// Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); - Assert.assertEquals(ErrorMessage.EmptyVaultId.getMessage(), e.getMessage()); + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testAddingExistingConnectionConfigInSkyflowClient() { + try { + ConnectionConfig config = new ConnectionConfig(); + config.setConnectionId(connectionID); + config.setConnectionUrl(connectionURL); + Skyflow skyflowClient = Skyflow.builder().addConnectionConfig(config).build(); + skyflowClient.addConnectionConfig(config); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.ConnectionIdAlreadyInConfigList.getMessage(), e.getMessage()); + } + } + + @Test + public void testUpdatingNonExistentConnectionConfigInSkyflowBuilder() { + try { + ConnectionConfig config = new ConnectionConfig(); + config.setConnectionId(connectionID); + config.setConnectionUrl(connectionURL); + Skyflow.builder().updateConnectionConfig(config).build(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.ConnectionIdNotInConfigList.getMessage(), e.getMessage()); + } + } + + @Test + public void testUpdatingNonExistentConnectionConfigInSkyflowClient() { + try { + ConnectionConfig config = new ConnectionConfig(); + config.setConnectionId(connectionID); + config.setConnectionUrl(connectionURL); + Skyflow skyflowClient = Skyflow.builder().build(); + skyflowClient.updateConnectionConfig(config); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.ConnectionIdNotInConfigList.getMessage(), e.getMessage()); + } + } + + @Test + public void testUpdatingValidConnectionConfigInSkyflowClient() { + try { + ConnectionConfig config = new ConnectionConfig(); + config.setConnectionId(connectionID); + config.setConnectionUrl(connectionURL); + Skyflow skyflowClient = Skyflow.builder().addConnectionConfig(config).build(); + + Credentials credentials = new Credentials(); + credentials.setToken(token); + + config.setConnectionUrl(newConnectionURL); + config.setCredentials(credentials); + + skyflowClient.updateConnectionConfig(config); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testRemovingNonExistentConnectionConfigInSkyflowBuilder() { + try { + Skyflow.builder().removeConnectionConfig(connectionID).build(); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.ConnectionIdNotInConfigList.getMessage(), e.getMessage()); + } + } + + @Test + public void testRemovingNonExistentConnectionConfigInSkyflowClient() { + try { + Skyflow skyflowClient = Skyflow.builder().build(); + skyflowClient.removeConnectionConfig(connectionID); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.ConnectionIdNotInConfigList.getMessage(), e.getMessage()); + } + } + + @Test + public void testRemovingValidConnectionConfigInSkyflowClient() { + try { + ConnectionConfig config = new ConnectionConfig(); + config.setConnectionId(connectionID); + config.setConnectionUrl(connectionURL); + Skyflow skyflowClient = Skyflow.builder().addConnectionConfig(config).build(); + skyflowClient.removeConnectionConfig(connectionID); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testGettingNonExistentConnectionConfigInSkyflowClient() { + try { + Skyflow skyflowClient = Skyflow.builder().build(); + ConnectionConfig config = skyflowClient.getConnectionConfig(connectionID); + Assert.assertNull(config); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); } } @@ -245,9 +369,17 @@ public void testAddingInvalidSkyflowCredentialsInSkyflowBuilder() { @Test public void testUpdatingValidSkyflowCredentialsInSkyflowClient() { try { + VaultConfig vaultConfig = new VaultConfig(); + vaultConfig.setVaultId(vaultID); + vaultConfig.setClusterId(clusterID); + + ConnectionConfig connectionConfig = new ConnectionConfig(); + connectionConfig.setConnectionId(connectionID); + connectionConfig.setConnectionUrl(connectionURL); + Credentials credentials = new Credentials(); credentials.setToken(token); - Skyflow skyflowClient = Skyflow.builder().build(); + Skyflow skyflowClient = Skyflow.builder().addVaultConfig(vaultConfig).addConnectionConfig(connectionConfig).build(); skyflowClient.updateSkyflowCredentials(credentials); } catch (SkyflowException e) { Assert.fail(INVALID_EXCEPTION_THROWN); @@ -260,7 +392,6 @@ public void testDefaultLogLevel() { Skyflow skyflowClient = Skyflow.builder().setLogLevel(null).build(); Assert.assertEquals(LogLevel.ERROR, skyflowClient.getLogLevel()); } catch (Exception e) { - e.printStackTrace(); Assert.fail(INVALID_EXCEPTION_THROWN); } } @@ -277,5 +408,4 @@ public void testUpdateLogLevel() { } } - } diff --git a/v2/src/test/java/com/skyflow/config/CredentialsTests.java b/v2/src/test/java/com/skyflow/config/CredentialsTests.java index 64f34c94..1b7f6e64 100644 --- a/v2/src/test/java/com/skyflow/config/CredentialsTests.java +++ b/v2/src/test/java/com/skyflow/config/CredentialsTests.java @@ -1,6 +1,5 @@ package com.skyflow.config; -import com.skyflow.config.Credentials; import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; @@ -8,6 +7,7 @@ import com.skyflow.serviceaccount.util.Token; import com.skyflow.utils.validations.Validations; import org.junit.Assert; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; @@ -48,6 +48,11 @@ public static void setup() throws SkyflowException, NoSuchMethodException { context = "test_context_value"; } + @Before + public void setupTest() { + roles.clear(); + } + @Test public void testValidCredentialsWithPath() { try { @@ -217,7 +222,6 @@ public void testNothingPassedInCredentials() { @Test public void testEmptyRolesInCredentials() { try { - roles.clear(); Credentials credentials = new Credentials(); credentials.setPath(path); credentials.setRoles(roles); diff --git a/v2/src/test/java/com/skyflow/utils/HttpUtilityTests.java b/v2/src/test/java/com/skyflow/utils/HttpUtilityTests.java new file mode 100644 index 00000000..816f1504 --- /dev/null +++ b/v2/src/test/java/com/skyflow/utils/HttpUtilityTests.java @@ -0,0 +1,123 @@ +package com.skyflow.utils; + +import com.google.gson.JsonObject; +import com.skyflow.errors.SkyflowException; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLStreamHandler; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.fail; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.BDDMockito.given; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({URL.class, HttpURLConnection.class}) +public class HttpUtilityTests { + + private static String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + @InjectMocks + HttpUtility httpUtility; + @Mock + OutputStream outputStream; + private String expected; + private String expectedError; + private URL url; + private HttpURLConnection mockConnection; + + @Before + public void setup() throws IOException { + expected = "{\"status\":\"success\"}"; + expectedError = "{\"status\":\"something went wrong\"}"; + mockConnection = Mockito.mock(HttpURLConnection.class); + given(mockConnection.getInputStream()).willReturn(new ByteArrayInputStream(expected.getBytes())); + given(mockConnection.getErrorStream()).willReturn(new ByteArrayInputStream(expectedError.getBytes())); + given(mockConnection.getOutputStream()).willReturn(outputStream); + given(mockConnection.getResponseCode()).willReturn(200); + given(mockConnection.getHeaderField(anyString())).willReturn("id"); + final URLStreamHandler handler = new URLStreamHandler() { + @Override + protected URLConnection openConnection(final URL arg0) throws IOException { + return mockConnection; + } + }; + url = new URL("https://google.com", "google.com", 80, "", handler); + } + + @Test + @PrepareForTest({URL.class, HttpURLConnection.class}) + public void testSendRequest() { + try { + given(mockConnection.getRequestProperty("content-type")).willReturn("application/json"); + Map headers = new HashMap<>(); + headers.put("content-type", "application/json"); + JsonObject params = new JsonObject(); + params.addProperty("key", "value"); + String response = httpUtility.sendRequest("GET", url, params, headers); + Assert.assertEquals(expected, response); + } catch (Exception e) { + fail(INVALID_EXCEPTION_THROWN); + } + } + + + @Test + @PrepareForTest({URL.class, HttpURLConnection.class}) + public void testSendRequestFormData() { + try { + given(mockConnection.getRequestProperty("content-type")).willReturn("multipart/form-data"); + Map headers = new HashMap<>(); + headers.put("content-type", "multipart/form-data"); + JsonObject params = new JsonObject(); + params.addProperty("key", "value"); + String response = httpUtility.sendRequest("GET", url, params, headers); + Assert.assertEquals(expected, response); + } catch (Exception e) { + fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + @PrepareForTest({URL.class, HttpURLConnection.class}) + public void testSendRequestFormURLEncoded() { + try { + given(mockConnection.getRequestProperty("content-type")).willReturn("application/x-www-form-urlencoded"); + Map headers = new HashMap<>(); + headers.put("content-type", "application/x-www-form-urlencoded"); + JsonObject params = new JsonObject(); + params.addProperty("key", "value"); + String response = httpUtility.sendRequest("GET", url, params, headers); + Assert.assertEquals(expected, response); + } catch (Exception e) { + fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + @PrepareForTest({URL.class, HttpURLConnection.class}) + public void testSendRequestError() { + try { + given(mockConnection.getResponseCode()).willReturn(500); + String response = httpUtility.sendRequest("GET", url, null, null); + } catch (SkyflowException e) { + Assert.assertEquals(expectedError, e.getMessage()); + } catch (Exception e) { + fail(INVALID_EXCEPTION_THROWN); + } + } +} diff --git a/v2/src/test/java/com/skyflow/utils/UtilsTests.java b/v2/src/test/java/com/skyflow/utils/UtilsTests.java index 33a83f59..5a1b9de7 100644 --- a/v2/src/test/java/com/skyflow/utils/UtilsTests.java +++ b/v2/src/test/java/com/skyflow/utils/UtilsTests.java @@ -1,15 +1,20 @@ package com.skyflow.utils; +import com.skyflow.config.ConnectionConfig; import com.skyflow.config.Credentials; import com.skyflow.enums.Env; +import com.skyflow.enums.RequestMethod; import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.connection.InvokeConnectionRequest; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; public class UtilsTests { private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; @@ -21,6 +26,11 @@ public class UtilsTests { private static String token = null; private static String context = null; private static ArrayList roles = null; + private static String connectionId = null; + private static String connectionUrl = null; + private static Map queryParams; + private static Map pathParams; + private static Map requestHeaders; @BeforeClass public static void setup() { @@ -33,6 +43,11 @@ public static void setup() { roles = new ArrayList<>(); String role = "test_role"; roles.add(role); + connectionId = "test_connection_id"; + connectionUrl = "https://test.connection.url"; + pathParams = new HashMap<>(); + queryParams = new HashMap<>(); + requestHeaders = new HashMap<>(); } @Test @@ -133,4 +148,37 @@ public void testGenerateBearerTokenWithToken() { Assert.fail(INVALID_EXCEPTION_THROWN); } } + + @Test + public void testConstructConnectionURL() { + try { + queryParams.put("query_param", "value"); + pathParams.put("path_param", "value"); + + ConnectionConfig connectionConfig = new ConnectionConfig(); + connectionConfig.setConnectionId(connectionId); + connectionConfig.setConnectionUrl(connectionUrl); + + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST).pathParams(pathParams).queryParams(queryParams).build(); + String filledUrl = Utils.constructConnectionURL(connectionConfig, request); + Assert.assertEquals(connectionUrl + "?" + "query_param=value", filledUrl); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testConstructConnectionHeaderMap() { + try { + requestHeaders.put("HEADER", "value"); + Map headers = Utils.constructConnectionHeadersMap(requestHeaders); + Assert.assertEquals(1, headers.size()); + Assert.assertTrue(headers.containsKey("header")); + Assert.assertFalse(headers.containsKey("HEADER")); + Assert.assertEquals("value", headers.get("header")); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } } diff --git a/v2/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java b/v2/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java new file mode 100644 index 00000000..2294bdaa --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java @@ -0,0 +1,394 @@ +package com.skyflow.vault.connection; + +import com.skyflow.enums.RequestMethod; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +public class InvokeConnectionTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static Map queryParams; + private static Map pathParams; + private static Map requestHeaders; + private static Map requestBody; + + @BeforeClass + public static void setup() { + queryParams = new HashMap<>(); + pathParams = new HashMap<>(); + requestHeaders = new HashMap<>(); + requestBody = new HashMap<>(); + } + + @Before + public void setupTest() { + queryParams.clear(); + pathParams.clear(); + requestHeaders.clear(); + requestBody.clear(); + } + + @Test + public void testValidInputInInvokeConnectionRequestValidations() { + queryParams.put("query_param", "value"); + pathParams.put("path_param", "value"); + requestHeaders.put("header", "value"); + requestBody.put("key", "value"); + try { + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.assertEquals(1, request.getQueryParams().size()); + Assert.assertEquals(1, request.getPathParams().size()); + Assert.assertEquals(1, request.getRequestHeaders().size()); + Assert.assertEquals(RequestMethod.POST, request.getMethodName()); + Assert.assertNotNull(request.getRequestBody()); + } catch (SkyflowException e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } + + @Test + public void testEmptyRequestHeadersInInvokeConnectionRequestValidations() { + try { + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyRequestHeaders.getMessage(), e.getMessage()); + } + } + + @Test + public void testNullRequestHeaderKeyInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value1"); + requestHeaders.put(null, "value2"); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidRequestHeaders.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyRequestHeaderKeyInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + requestHeaders.put("", "value"); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidRequestHeaders.getMessage(), e.getMessage()); + } + } + + @Test + public void testNullRequestHeaderValueInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + requestHeaders.put("header2", null); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidRequestHeaders.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyRequestHeaderValueInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + requestHeaders.put("header2", ""); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidRequestHeaders.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyPathParamsInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyPathParams.getMessage(), e.getMessage()); + } + } + + @Test + public void testNullPathParamKeyInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + pathParams.put("path_param", "value"); + pathParams.put(null, "value"); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidPathParams.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyPathParamKeyInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + pathParams.put("path_param", "value"); + pathParams.put("", "value"); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidPathParams.getMessage(), e.getMessage()); + } + } + + @Test + public void testNullPathParamValueInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + pathParams.put("path_param1", "value"); + pathParams.put("path_param2", null); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidPathParams.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyPathParamValueInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + pathParams.put("path_param1", "value"); + pathParams.put("path_param2", ""); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidPathParams.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyQueryParamsInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + pathParams.put("path_param", "value"); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyQueryParams.getMessage(), e.getMessage()); + } + } + + @Test + public void testNullQueryParamKeyInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + pathParams.put("path_param", "value"); + queryParams.put("query_param", "value"); + queryParams.put(null, "value"); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidQueryParams.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyQueryParamKeyInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + pathParams.put("path_param", "value"); + queryParams.put("query_param", "value"); + queryParams.put("", "value"); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidQueryParams.getMessage(), e.getMessage()); + } + } + + @Test + public void testNullQueryParamValueInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + pathParams.put("path_param", "value"); + queryParams.put("query_param1", "value"); + queryParams.put("query_param2", null); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidQueryParams.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyQueryParamValueInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header1", "value"); + pathParams.put("path_param", "value"); + queryParams.put("query_param1", "value"); + queryParams.put("query_param2", ""); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.InvalidQueryParams.getMessage(), e.getMessage()); + } + } + + @Test + public void testEmptyRequestBodyInInvokeConnectionRequestValidations() { + try { + requestHeaders.put("header", "value"); + pathParams.put("path_param", "value"); + queryParams.put("query_param", "value"); + InvokeConnectionRequest request = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestHeaders(requestHeaders) + .pathParams(pathParams) + .queryParams(queryParams) + .requestBody(requestBody) + .build(); + Validations.validateInvokeConnectionRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyRequestBody.getMessage(), e.getMessage()); + } + } +} diff --git a/v2/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java b/v2/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java new file mode 100644 index 00000000..0b933b4a --- /dev/null +++ b/v2/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java @@ -0,0 +1,49 @@ +package com.skyflow.vault.controller; + +import com.skyflow.Skyflow; +import com.skyflow.config.ConnectionConfig; +import com.skyflow.config.Credentials; +import com.skyflow.enums.LogLevel; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.connection.InvokeConnectionRequest; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +public class ConnectionControllerTests { + private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; + private static String connectionID = null; + private static String connectionURL = null; + private static ConnectionConfig connectionConfig = null; + private static Skyflow skyflowClient = null; + + @BeforeClass + public static void setup() { + connectionID = "vault123"; + connectionURL = "https://test.connection.url"; + + Credentials credentials = new Credentials(); + credentials.setToken("valid-token"); + + connectionConfig = new ConnectionConfig(); + connectionConfig.setConnectionId(connectionID); + connectionConfig.setConnectionUrl(connectionURL); + connectionConfig.setCredentials(credentials); + } + + @Test + public void testInvalidRequestInInvokeConnectionMethod() { + try { + InvokeConnectionRequest connectionRequest = InvokeConnectionRequest.builder().build(); + Skyflow skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addConnectionConfig(connectionConfig).build(); + skyflowClient.connection().invoke(connectionRequest); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorMessage.EmptyRequestHeaders.getMessage(), e.getMessage()); + } + } +} diff --git a/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java b/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java index b4185260..d569cbc9 100644 --- a/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java +++ b/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java @@ -1,80 +1,35 @@ package com.skyflow.vault.tokens; -import com.skyflow.Skyflow; -import com.skyflow.config.Credentials; -import com.skyflow.config.VaultConfig; -import com.skyflow.enums.Env; -import com.skyflow.enums.LogLevel; import com.skyflow.enums.RedactionType; import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; -import com.skyflow.generated.rest.ApiClient; -import com.skyflow.generated.rest.ApiException; -import com.skyflow.generated.rest.api.TokensApi; -import com.skyflow.generated.rest.models.V1DetokenizeResponse; import com.skyflow.utils.Constants; import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; import org.junit.Assert; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import java.util.ArrayList; -//@RunWith(PowerMockRunner.class) -//@PrepareForTest(fullyQualifiedNames = { -// "com.skyflow.serviceaccount.util.Token", -// "com.skyflow.generated.rest.ApiClient", -// "com.skyflow.generated.rest.api.TokensApi", -//}) public class DetokenizeTests { private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; - private static String vaultID = null; - private static String clusterID = null; - private static VaultConfig vaultConfig = null; private static String token = null; private static ArrayList tokens = null; - private static Skyflow skyflowClient = null; - private ApiClient mockApiClient; - private TokensApi mockTokensApi; @BeforeClass public static void setup() throws SkyflowException, NoSuchMethodException { -// PowerMockito.mockStatic(Token.class); -// PowerMockito.when(Token.isExpired("valid_token")).thenReturn(true); -// PowerMockito.when(Token.isExpired("not_a_valid_token")).thenReturn(false); - - vaultID = "vault123"; - clusterID = "cluster123"; - - Credentials credentials = new Credentials(); - credentials.setToken("valid-token"); - - vaultConfig = new VaultConfig(); - vaultConfig.setVaultId(vaultID); - vaultConfig.setClusterId(clusterID); - vaultConfig.setEnv(Env.DEV); - vaultConfig.setCredentials(credentials); - - token = "test_token_1"; tokens = new ArrayList<>(); - -// System.setProperty("ssl.TrustManagerFactory.algorithm", "PKIX"); + token = "test_token_1"; } -// @Before -// public void setupMock() throws ApiException { -// mockApiClient = PowerMockito.mock(ApiClient.class); -// mockTokensApi = PowerMockito.mock(TokensApi.class); -// -// V1DetokenizeResponse mockResponse = new V1DetokenizeResponse(); -// PowerMockito -// .when(mockTokensApi.recordServiceDetokenize(ArgumentMatchers.anyString(), ArgumentMatchers.any())) -// .thenReturn(mockResponse); -// -// } + @Before + public void setupTest() { + tokens.clear(); + } @Test public void testValidInputInDetokenizeRequestValidations() { @@ -110,7 +65,6 @@ public void testNoTokensInDetokenizeRequestValidations() { @Test public void testEmptyTokensInDetokenizeRequestValidations() { - tokens.clear(); DetokenizeRequest request = DetokenizeRequest.builder().tokens(tokens).build(); try { Validations.validateDetokenizeRequest(request); @@ -147,7 +101,6 @@ public void testEmptyTokenInTokensInDetokenizeRequestValidations() { @Test public void testRedactionAndContinueOnErrorInDetokenizeRequestValidations() { - tokens.clear(); tokens.add(token); DetokenizeRequest request = DetokenizeRequest.builder(). tokens(tokens).redactionType(null).continueOnError(null).build(); From 8efdf12e903c037ec62ee81f230b15084efad53e Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 15 Nov 2024 17:38:16 +0530 Subject: [PATCH 43/68] SK-1623 Java SDK v2 Removed v1,v2 modules and moved all v2 code directly to parent module Removed unnecessary dependencies --- pom.xml | 76 +- .../java/com/skyflow/ConnectionClient.java | 0 .../main/java/com/skyflow/Skyflow.java | 0 .../main/java/com/skyflow/VaultClient.java | 0 .../com/skyflow/config/ConnectionConfig.java | 0 .../java/com/skyflow/config/Credentials.java | 0 .../com/skyflow/config/ManagementConfig.java | 0 .../java/com/skyflow/config/VaultConfig.java | 0 .../main/java/com/skyflow/enums/Byot.java | 0 .../main/java/com/skyflow/enums/Env.java | 0 .../java/com/skyflow/enums/InterfaceName.java | 0 .../main/java/com/skyflow/enums/LogLevel.java | 0 .../java/com/skyflow/enums/RedactionType.java | 0 .../java/com/skyflow/enums/RequestMethod.java | 0 .../java/com/skyflow/errors/ErrorCode.java | 0 .../java/com/skyflow/errors/ErrorMessage.java | 0 .../com/skyflow/errors/SkyflowException.java | 0 .../skyflow/generated/rest/ApiCallback.java | 0 .../com/skyflow/generated/rest/ApiClient.java | 0 .../skyflow/generated/rest/ApiException.java | 0 .../skyflow/generated/rest/ApiResponse.java | 0 .../skyflow/generated/rest/Configuration.java | 0 .../rest/GzipRequestInterceptor.java | 0 .../java/com/skyflow/generated/rest/JSON.java | 0 .../java/com/skyflow/generated/rest/Pair.java | 0 .../generated/rest/ProgressRequestBody.java | 0 .../generated/rest/ProgressResponseBody.java | 0 .../generated/rest/ServerConfiguration.java | 0 .../generated/rest/ServerVariable.java | 0 .../skyflow/generated/rest/StringUtil.java | 0 .../skyflow/generated/rest/api/AuditApi.java | 0 .../generated/rest/api/AuthenticationApi.java | 0 .../generated/rest/api/BinLookupApi.java | 0 .../skyflow/generated/rest/api/QueryApi.java | 0 .../generated/rest/api/RecordsApi.java | 0 .../skyflow/generated/rest/api/TokensApi.java | 0 .../generated/rest/auth/ApiKeyAuth.java | 0 .../generated/rest/auth/Authentication.java | 0 .../generated/rest/auth/HttpBasicAuth.java | 0 .../generated/rest/auth/HttpBearerAuth.java | 0 .../rest/models/AbstractOpenApiSchema.java | 0 .../models/AuditEventAuditResourceType.java | 0 .../rest/models/AuditEventContext.java | 0 .../generated/rest/models/AuditEventData.java | 0 .../rest/models/AuditEventHTTPInfo.java | 0 .../rest/models/BatchRecordMethod.java | 0 .../rest/models/ContextAccessType.java | 0 .../rest/models/ContextAuthMode.java | 0 .../DetokenizeRecordResponseValueType.java | 0 .../rest/models/GooglerpcStatus.java | 0 .../generated/rest/models/ProtobufAny.java | 0 .../models/QueryServiceExecuteQueryBody.java | 0 .../RecordServiceBatchOperationBody.java | 0 .../RecordServiceBulkDeleteRecordBody.java | 0 .../models/RecordServiceInsertRecordBody.java | 0 .../models/RecordServiceUpdateRecordBody.java | 0 .../rest/models/RedactionEnumREDACTION.java | 0 .../rest/models/RequestActionType.java | 0 .../rest/models/V1AuditAfterOptions.java | 0 .../rest/models/V1AuditEventResponse.java | 0 .../rest/models/V1AuditResponse.java | 0 .../rest/models/V1AuditResponseEvent.java | 0 .../models/V1AuditResponseEventRequest.java | 0 .../rest/models/V1BINListRequest.java | 0 .../rest/models/V1BINListResponse.java | 0 .../skyflow/generated/rest/models/V1BYOT.java | 0 .../rest/models/V1BatchOperationResponse.java | 0 .../generated/rest/models/V1BatchRecord.java | 0 .../models/V1BulkDeleteRecordResponse.java | 0 .../rest/models/V1BulkGetRecordResponse.java | 0 .../skyflow/generated/rest/models/V1Card.java | 0 .../rest/models/V1DeleteFileResponse.java | 0 .../rest/models/V1DeleteRecordResponse.java | 0 .../rest/models/V1DetokenizePayload.java | 0 .../models/V1DetokenizeRecordRequest.java | 0 .../models/V1DetokenizeRecordResponse.java | 0 .../rest/models/V1DetokenizeResponse.java | 0 .../generated/rest/models/V1FieldRecords.java | 0 .../rest/models/V1FileAVScanStatus.java | 0 .../rest/models/V1GetAuthTokenRequest.java | 0 .../rest/models/V1GetAuthTokenResponse.java | 0 .../models/V1GetFileScanStatusResponse.java | 0 .../rest/models/V1GetQueryResponse.java | 0 .../rest/models/V1InsertRecordResponse.java | 0 .../generated/rest/models/V1MemberType.java | 0 .../rest/models/V1RecordMetaProperties.java | 0 .../rest/models/V1TokenizePayload.java | 0 .../rest/models/V1TokenizeRecordRequest.java | 0 .../rest/models/V1TokenizeRecordResponse.java | 0 .../rest/models/V1TokenizeResponse.java | 0 .../rest/models/V1UpdateRecordResponse.java | 0 .../rest/models/V1VaultFieldMapping.java | 0 .../rest/models/V1VaultSchemaConfig.java | 0 .../main/java/com/skyflow/logs/ErrorLogs.java | 0 .../main/java/com/skyflow/logs/InfoLogs.java | 0 .../serviceaccount/util/BearerToken.java | 0 .../util/SignedDataTokenResponse.java | 0 .../serviceaccount/util/SignedDataTokens.java | 0 .../skyflow/serviceaccount/util/Token.java | 0 .../java/com/skyflow/utils/Constants.java | 0 .../java/com/skyflow/utils/HttpUtility.java | 0 .../main/java/com/skyflow/utils/Utils.java | 0 .../com/skyflow/utils/logger/LogUtil.java | 0 .../utils/validations/Validations.java | 0 .../skyflow/vault/audit/ListEventRequest.java | 0 .../vault/audit/ListEventResponse.java | 0 .../com/skyflow/vault/bin/GetBinRequest.java | 0 .../com/skyflow/vault/bin/GetBinResponse.java | 0 .../connection/InvokeConnectionRequest.java | 0 .../connection/InvokeConnectionResponse.java | 0 .../vault/controller/AuditController.java | 0 .../vault/controller/BinLookupController.java | 0 .../controller/ConnectionController.java | 0 .../vault/controller/DetectController.java | 0 .../vault/controller/VaultController.java | 0 .../com/skyflow/vault/data/DeleteRequest.java | 0 .../skyflow/vault/data/DeleteResponse.java | 0 .../com/skyflow/vault/data/GetRequest.java | 0 .../com/skyflow/vault/data/GetResponse.java | 0 .../com/skyflow/vault/data/InsertRequest.java | 0 .../skyflow/vault/data/InsertResponse.java | 0 .../com/skyflow/vault/data/QueryRequest.java | 0 .../com/skyflow/vault/data/QueryResponse.java | 0 .../com/skyflow/vault/data/UpdateRequest.java | 0 .../skyflow/vault/data/UpdateResponse.java | 0 .../vault/detect/DeIdentifyRequest.java | 0 .../vault/detect/DeIdentifyResponse.java | 0 .../com/skyflow/vault/tokens/ColumnValue.java | 0 .../tokens/DetokenizeRecordResponse.java | 0 .../vault/tokens/DetokenizeRequest.java | 0 .../vault/tokens/DetokenizeResponse.java | 0 .../skyflow/vault/tokens/TokenizeRequest.java | 0 .../vault/tokens/TokenizeResponse.java | 0 .../test/java/com/skyflow/SkyflowTests.java | 0 .../skyflow/config/ConnectionConfigTests.java | 0 .../com/skyflow/config/CredentialsTests.java | 0 .../com/skyflow/config/VaultConfigTests.java | 0 .../serviceaccount/util/BearerTokenTests.java | 0 .../util/SignedDataTokensTests.java | 0 .../serviceaccount/util/TokenTests.java | 12 +- .../com/skyflow/utils/HttpUtilityTests.java | 0 .../java/com/skyflow/utils/UtilsTests.java | 0 .../connection/InvokeConnectionTests.java | 15 + .../controller/ConnectionControllerTests.java | 0 .../controller/VaultControllerTests.java | 0 .../com/skyflow/vault/data/DeleteTests.java | 13 +- .../java/com/skyflow/vault/data/GetTests.java | 0 .../com/skyflow/vault/data/InsertTests.java | 0 .../com/skyflow/vault/data/QueryTests.java | 0 .../com/skyflow/vault/data/UpdateTests.java | 70 +- .../skyflow/vault/tokens/DetokenizeTests.java | 0 .../skyflow/vault/tokens/TokenizeTests.java | 0 .../invalidPrivateKeyCredentials.json | 0 .../resources/invalidTokenURICredentials.json | 0 .../test/resources/noClientIDCredentials.json | 0 .../test/resources/noKeyIDCredentials.json | 0 .../resources/noPrivateKeyCredentials.json | 0 .../test/resources/noTokenURICredentials.json | 0 {v2/src => src}/test/resources/notJson.txt | 0 v1/pom.xml | 20 - v1/src/main/java/DetokenizeExample.java | 71 - v1/src/main/java/InsertExample.java | 84 - .../main/java/com/skyflow/Configuration.java | 16 - .../com/skyflow/common/utils/Constants.java | 8 - .../com/skyflow/common/utils/Helpers.java | 440 --- .../com/skyflow/common/utils/HttpUtility.java | 107 - .../com/skyflow/common/utils/LogUtil.java | 102 - .../com/skyflow/common/utils/TokenUtils.java | 74 - .../com/skyflow/common/utils/Validators.java | 176 -- .../com/skyflow/entities/DeleteInput.java | 13 - .../com/skyflow/entities/DeleteOptions.java | 5 - .../skyflow/entities/DeleteRecordInput.java | 22 - .../com/skyflow/entities/DetokenizeInput.java | 16 - .../skyflow/entities/DetokenizeRecord.java | 25 - .../com/skyflow/entities/GetByIdInput.java | 16 - .../skyflow/entities/GetByIdRecordInput.java | 34 - .../java/com/skyflow/entities/GetInput.java | 16 - .../java/com/skyflow/entities/GetOptions.java | 16 - .../com/skyflow/entities/GetRecordInput.java | 52 - .../skyflow/entities/InsertBulkOptions.java | 35 - .../com/skyflow/entities/InsertInput.java | 17 - .../com/skyflow/entities/InsertOptions.java | 60 - .../skyflow/entities/InsertRecordInput.java | 27 - .../java/com/skyflow/entities/LogLevel.java | 12 - .../java/com/skyflow/entities/QueryInput.java | 13 - .../com/skyflow/entities/QueryOptions.java | 8 - .../skyflow/entities/QueryRecordInput.java | 11 - .../com/skyflow/entities/RedactionType.java | 24 - .../com/skyflow/entities/RequestMethod.java | 25 - .../com/skyflow/entities/ResponseToken.java | 25 - .../entities/SkyflowConfiguration.java | 46 - .../com/skyflow/entities/TokenProvider.java | 10 - .../com/skyflow/entities/UpdateInput.java | 13 - .../com/skyflow/entities/UpdateOptions.java | 18 - .../skyflow/entities/UpdateRecordInput.java | 35 - .../com/skyflow/entities/UpsertOption.java | 22 - .../java/com/skyflow/errors/ErrorCode.java | 79 - .../com/skyflow/errors/SkyflowException.java | 54 - .../main/java/com/skyflow/logs/DebugLogs.java | 19 - .../main/java/com/skyflow/logs/ErrorLogs.java | 70 - .../main/java/com/skyflow/logs/InfoLogs.java | 39 - .../main/java/com/skyflow/logs/WarnLogs.java | 18 - .../serviceaccount/util/BearerToken.java | 229 -- .../util/SignedDataTokenResponse.java | 20 - .../serviceaccount/util/SignedDataTokens.java | 224 -- .../skyflow/serviceaccount/util/Token.java | 231 -- .../com/skyflow/vault/DeleteBySkyflowId.java | 94 - .../java/com/skyflow/vault/Detokenize.java | 102 - v1/src/main/java/com/skyflow/vault/Get.java | 138 - .../com/skyflow/vault/GetBySkyflowId.java | 110 - .../main/java/com/skyflow/vault/Insert.java | 120 - .../main/java/com/skyflow/vault/Skyflow.java | 565 ---- .../com/skyflow/vault/UpdateBySkyflowId.java | 106 - .../com/skyflow/common/utils/HelpersTest.java | 205 -- .../skyflow/common/utils/HttpUtilityTest.java | 154 - .../skyflow/common/utils/TokenUtilsTest.java | 87 - .../utils/TokenUtilsValidTokenTest.java | 88 - .../skyflow/common/utils/ValidatorsTest.java | 160 -- .../serviceaccount/util/BearerTokenTest.java | 275 -- .../util/SignedDataTokenResponseTest.java | 19 - .../util/SignedDataTokensTest.java | 197 -- .../serviceaccount/util/TokenTest.java | 229 -- .../com/skyflow/vault/DeleteMethodTest.java | 421 --- .../java/com/skyflow/vault/GetMethodTest.java | 870 ------ .../skyflow/vault/InvokeConnectionTest.java | 258 -- .../java/com/skyflow/vault/SkyflowTest.java | 2485 ----------------- v1/src/test/resources/invalidCredentials.json | 1 - v1/src/test/resources/notJson.txt | 0 v2/pom.xml | 70 - 229 files changed, 125 insertions(+), 9512 deletions(-) rename {v2/src => src}/main/java/com/skyflow/ConnectionClient.java (100%) rename {v2/src => src}/main/java/com/skyflow/Skyflow.java (100%) rename {v2/src => src}/main/java/com/skyflow/VaultClient.java (100%) rename {v2/src => src}/main/java/com/skyflow/config/ConnectionConfig.java (100%) rename {v2/src => src}/main/java/com/skyflow/config/Credentials.java (100%) rename {v2/src => src}/main/java/com/skyflow/config/ManagementConfig.java (100%) rename {v2/src => src}/main/java/com/skyflow/config/VaultConfig.java (100%) rename {v2/src => src}/main/java/com/skyflow/enums/Byot.java (100%) rename {v2/src => src}/main/java/com/skyflow/enums/Env.java (100%) rename {v2/src => src}/main/java/com/skyflow/enums/InterfaceName.java (100%) rename {v2/src => src}/main/java/com/skyflow/enums/LogLevel.java (100%) rename {v2/src => src}/main/java/com/skyflow/enums/RedactionType.java (100%) rename {v2/src => src}/main/java/com/skyflow/enums/RequestMethod.java (100%) rename {v2/src => src}/main/java/com/skyflow/errors/ErrorCode.java (100%) rename {v2/src => src}/main/java/com/skyflow/errors/ErrorMessage.java (100%) rename {v2/src => src}/main/java/com/skyflow/errors/SkyflowException.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/ApiCallback.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/ApiClient.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/ApiException.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/ApiResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/Configuration.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/GzipRequestInterceptor.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/JSON.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/Pair.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/ProgressRequestBody.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/ProgressResponseBody.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/ServerConfiguration.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/ServerVariable.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/StringUtil.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/api/AuditApi.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/api/AuthenticationApi.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/api/BinLookupApi.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/api/QueryApi.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/api/RecordsApi.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/api/TokensApi.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/auth/ApiKeyAuth.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/auth/Authentication.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/auth/HttpBasicAuth.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/auth/HttpBearerAuth.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/AbstractOpenApiSchema.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/AuditEventAuditResourceType.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/AuditEventContext.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/AuditEventData.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/AuditEventHTTPInfo.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/BatchRecordMethod.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/ContextAccessType.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/ContextAuthMode.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/DetokenizeRecordResponseValueType.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/GooglerpcStatus.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/ProtobufAny.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/QueryServiceExecuteQueryBody.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/RecordServiceBatchOperationBody.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/RecordServiceBulkDeleteRecordBody.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/RecordServiceInsertRecordBody.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/RecordServiceUpdateRecordBody.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/RedactionEnumREDACTION.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/RequestActionType.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1AuditAfterOptions.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1AuditEventResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1AuditResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1AuditResponseEvent.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1AuditResponseEventRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1BINListRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1BINListResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1BYOT.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1BatchOperationResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1BatchRecord.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1BulkDeleteRecordResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1BulkGetRecordResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1Card.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1DeleteFileResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1DeleteRecordResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1DetokenizePayload.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1DetokenizeResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1FieldRecords.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1FileAVScanStatus.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1GetFileScanStatusResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1GetQueryResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1InsertRecordResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1MemberType.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1RecordMetaProperties.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1TokenizePayload.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1TokenizeResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1UpdateRecordResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1VaultFieldMapping.java (100%) rename {v2/src => src}/main/java/com/skyflow/generated/rest/models/V1VaultSchemaConfig.java (100%) rename {v2/src => src}/main/java/com/skyflow/logs/ErrorLogs.java (100%) rename {v2/src => src}/main/java/com/skyflow/logs/InfoLogs.java (100%) rename {v2/src => src}/main/java/com/skyflow/serviceaccount/util/BearerToken.java (100%) rename {v2/src => src}/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java (100%) rename {v2/src => src}/main/java/com/skyflow/serviceaccount/util/Token.java (100%) rename {v2/src => src}/main/java/com/skyflow/utils/Constants.java (100%) rename {v2/src => src}/main/java/com/skyflow/utils/HttpUtility.java (100%) rename {v2/src => src}/main/java/com/skyflow/utils/Utils.java (100%) rename {v2/src => src}/main/java/com/skyflow/utils/logger/LogUtil.java (100%) rename {v2/src => src}/main/java/com/skyflow/utils/validations/Validations.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/audit/ListEventRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/audit/ListEventResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/bin/GetBinRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/bin/GetBinResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/controller/AuditController.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/controller/BinLookupController.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/controller/ConnectionController.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/controller/DetectController.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/controller/VaultController.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/data/DeleteRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/data/DeleteResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/data/GetRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/data/GetResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/data/InsertRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/data/InsertResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/data/QueryRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/data/QueryResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/data/UpdateRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/data/UpdateResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/detect/DeIdentifyRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/detect/DeIdentifyResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/tokens/ColumnValue.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/tokens/TokenizeRequest.java (100%) rename {v2/src => src}/main/java/com/skyflow/vault/tokens/TokenizeResponse.java (100%) rename {v2/src => src}/test/java/com/skyflow/SkyflowTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/config/ConnectionConfigTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/config/CredentialsTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/config/VaultConfigTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/serviceaccount/util/TokenTests.java (75%) rename {v2/src => src}/test/java/com/skyflow/utils/HttpUtilityTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/utils/UtilsTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java (96%) rename {v2/src => src}/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/vault/controller/VaultControllerTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/vault/data/DeleteTests.java (97%) rename {v2/src => src}/test/java/com/skyflow/vault/data/GetTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/vault/data/InsertTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/vault/data/QueryTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/vault/data/UpdateTests.java (88%) rename {v2/src => src}/test/java/com/skyflow/vault/tokens/DetokenizeTests.java (100%) rename {v2/src => src}/test/java/com/skyflow/vault/tokens/TokenizeTests.java (100%) rename {v2/src => src}/test/resources/invalidPrivateKeyCredentials.json (100%) rename {v2/src => src}/test/resources/invalidTokenURICredentials.json (100%) rename {v2/src => src}/test/resources/noClientIDCredentials.json (100%) rename {v2/src => src}/test/resources/noKeyIDCredentials.json (100%) rename {v2/src => src}/test/resources/noPrivateKeyCredentials.json (100%) rename {v2/src => src}/test/resources/noTokenURICredentials.json (100%) rename {v2/src => src}/test/resources/notJson.txt (100%) delete mode 100644 v1/pom.xml delete mode 100644 v1/src/main/java/DetokenizeExample.java delete mode 100644 v1/src/main/java/InsertExample.java delete mode 100644 v1/src/main/java/com/skyflow/Configuration.java delete mode 100644 v1/src/main/java/com/skyflow/common/utils/Constants.java delete mode 100644 v1/src/main/java/com/skyflow/common/utils/Helpers.java delete mode 100644 v1/src/main/java/com/skyflow/common/utils/HttpUtility.java delete mode 100644 v1/src/main/java/com/skyflow/common/utils/LogUtil.java delete mode 100644 v1/src/main/java/com/skyflow/common/utils/TokenUtils.java delete mode 100644 v1/src/main/java/com/skyflow/common/utils/Validators.java delete mode 100644 v1/src/main/java/com/skyflow/entities/DeleteInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/DeleteOptions.java delete mode 100644 v1/src/main/java/com/skyflow/entities/DeleteRecordInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/DetokenizeInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/DetokenizeRecord.java delete mode 100644 v1/src/main/java/com/skyflow/entities/GetByIdInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/GetByIdRecordInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/GetInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/GetOptions.java delete mode 100644 v1/src/main/java/com/skyflow/entities/GetRecordInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/InsertBulkOptions.java delete mode 100644 v1/src/main/java/com/skyflow/entities/InsertInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/InsertOptions.java delete mode 100644 v1/src/main/java/com/skyflow/entities/InsertRecordInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/LogLevel.java delete mode 100644 v1/src/main/java/com/skyflow/entities/QueryInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/QueryOptions.java delete mode 100644 v1/src/main/java/com/skyflow/entities/QueryRecordInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/RedactionType.java delete mode 100644 v1/src/main/java/com/skyflow/entities/RequestMethod.java delete mode 100644 v1/src/main/java/com/skyflow/entities/ResponseToken.java delete mode 100644 v1/src/main/java/com/skyflow/entities/SkyflowConfiguration.java delete mode 100644 v1/src/main/java/com/skyflow/entities/TokenProvider.java delete mode 100644 v1/src/main/java/com/skyflow/entities/UpdateInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/UpdateOptions.java delete mode 100644 v1/src/main/java/com/skyflow/entities/UpdateRecordInput.java delete mode 100644 v1/src/main/java/com/skyflow/entities/UpsertOption.java delete mode 100644 v1/src/main/java/com/skyflow/errors/ErrorCode.java delete mode 100644 v1/src/main/java/com/skyflow/errors/SkyflowException.java delete mode 100644 v1/src/main/java/com/skyflow/logs/DebugLogs.java delete mode 100644 v1/src/main/java/com/skyflow/logs/ErrorLogs.java delete mode 100644 v1/src/main/java/com/skyflow/logs/InfoLogs.java delete mode 100644 v1/src/main/java/com/skyflow/logs/WarnLogs.java delete mode 100644 v1/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java delete mode 100644 v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java delete mode 100644 v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java delete mode 100644 v1/src/main/java/com/skyflow/serviceaccount/util/Token.java delete mode 100644 v1/src/main/java/com/skyflow/vault/DeleteBySkyflowId.java delete mode 100644 v1/src/main/java/com/skyflow/vault/Detokenize.java delete mode 100644 v1/src/main/java/com/skyflow/vault/Get.java delete mode 100644 v1/src/main/java/com/skyflow/vault/GetBySkyflowId.java delete mode 100644 v1/src/main/java/com/skyflow/vault/Insert.java delete mode 100644 v1/src/main/java/com/skyflow/vault/Skyflow.java delete mode 100644 v1/src/main/java/com/skyflow/vault/UpdateBySkyflowId.java delete mode 100644 v1/src/test/java/com/skyflow/common/utils/HelpersTest.java delete mode 100644 v1/src/test/java/com/skyflow/common/utils/HttpUtilityTest.java delete mode 100644 v1/src/test/java/com/skyflow/common/utils/TokenUtilsTest.java delete mode 100644 v1/src/test/java/com/skyflow/common/utils/TokenUtilsValidTokenTest.java delete mode 100644 v1/src/test/java/com/skyflow/common/utils/ValidatorsTest.java delete mode 100644 v1/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTest.java delete mode 100644 v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokenResponseTest.java delete mode 100644 v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTest.java delete mode 100644 v1/src/test/java/com/skyflow/serviceaccount/util/TokenTest.java delete mode 100644 v1/src/test/java/com/skyflow/vault/DeleteMethodTest.java delete mode 100644 v1/src/test/java/com/skyflow/vault/GetMethodTest.java delete mode 100644 v1/src/test/java/com/skyflow/vault/InvokeConnectionTest.java delete mode 100644 v1/src/test/java/com/skyflow/vault/SkyflowTest.java delete mode 100644 v1/src/test/resources/invalidCredentials.json delete mode 100644 v1/src/test/resources/notJson.txt delete mode 100644 v2/pom.xml diff --git a/pom.xml b/pom.xml index 85befa48..12533834 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.skyflow skyflow-java 1.15.0 - pom + jar ${project.groupId}:${project.artifactId} Skyflow SDK for the Java programming language @@ -25,10 +25,6 @@ skyflow - - v1 - v2 - scm:git:git://github.com:skyflowapi/skyflow-java.git scm:git:ssh://github.com:skyflowapi/skyflow-java.git @@ -41,6 +37,11 @@ 4.12.0 2.10.1 1.9.0 + UTF-8 + 4.12.0 + 5.10.3 + 1.10.0 + 1.3.5 @@ -55,49 +56,68 @@ + - com.fasterxml.jackson.core - jackson-core - 2.13.0 + io.github.cdimascio + dotenv-java + 3.0.0 - com.googlecode.json-simple - json-simple - 1.1.1 + com.google.code.findbugs + jsr305 + 3.0.2 - io.jsonwebtoken - jjwt - 0.9.1 + io.gsonfire + gson-fire + ${gson-fire-version} + + + com.google.code.gson + gson + ${gson-version} + + + com.squareup.okhttp3 + okhttp + ${okhttp-version} + + com.squareup.okhttp3 + logging-interceptor + ${okhttp-version} + + commons-codec commons-codec 1.15 - javax.xml.bind - jaxb-api - 2.3.1 + io.jsonwebtoken + jjwt + 0.9.1 - io.jsonwebtoken - jjwt-impl - 0.11.2 - runtime + jakarta.annotation + jakarta.annotation-api + ${jakarta-annotation-version} + provided + - io.jsonwebtoken - jjwt-jackson - 0.11.2 - runtime + org.junit.jupiter + junit-jupiter-engine + ${junit-version} + test - junit - junit - 4.13.2 + org.junit.platform + junit-platform-runner + ${junit-platform-runner.version} test + org.powermock powermock-module-junit4 diff --git a/v2/src/main/java/com/skyflow/ConnectionClient.java b/src/main/java/com/skyflow/ConnectionClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/ConnectionClient.java rename to src/main/java/com/skyflow/ConnectionClient.java diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/src/main/java/com/skyflow/Skyflow.java similarity index 100% rename from v2/src/main/java/com/skyflow/Skyflow.java rename to src/main/java/com/skyflow/Skyflow.java diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/src/main/java/com/skyflow/VaultClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/VaultClient.java rename to src/main/java/com/skyflow/VaultClient.java diff --git a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java b/src/main/java/com/skyflow/config/ConnectionConfig.java similarity index 100% rename from v2/src/main/java/com/skyflow/config/ConnectionConfig.java rename to src/main/java/com/skyflow/config/ConnectionConfig.java diff --git a/v2/src/main/java/com/skyflow/config/Credentials.java b/src/main/java/com/skyflow/config/Credentials.java similarity index 100% rename from v2/src/main/java/com/skyflow/config/Credentials.java rename to src/main/java/com/skyflow/config/Credentials.java diff --git a/v2/src/main/java/com/skyflow/config/ManagementConfig.java b/src/main/java/com/skyflow/config/ManagementConfig.java similarity index 100% rename from v2/src/main/java/com/skyflow/config/ManagementConfig.java rename to src/main/java/com/skyflow/config/ManagementConfig.java diff --git a/v2/src/main/java/com/skyflow/config/VaultConfig.java b/src/main/java/com/skyflow/config/VaultConfig.java similarity index 100% rename from v2/src/main/java/com/skyflow/config/VaultConfig.java rename to src/main/java/com/skyflow/config/VaultConfig.java diff --git a/v2/src/main/java/com/skyflow/enums/Byot.java b/src/main/java/com/skyflow/enums/Byot.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/Byot.java rename to src/main/java/com/skyflow/enums/Byot.java diff --git a/v2/src/main/java/com/skyflow/enums/Env.java b/src/main/java/com/skyflow/enums/Env.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/Env.java rename to src/main/java/com/skyflow/enums/Env.java diff --git a/v2/src/main/java/com/skyflow/enums/InterfaceName.java b/src/main/java/com/skyflow/enums/InterfaceName.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/InterfaceName.java rename to src/main/java/com/skyflow/enums/InterfaceName.java diff --git a/v2/src/main/java/com/skyflow/enums/LogLevel.java b/src/main/java/com/skyflow/enums/LogLevel.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/LogLevel.java rename to src/main/java/com/skyflow/enums/LogLevel.java diff --git a/v2/src/main/java/com/skyflow/enums/RedactionType.java b/src/main/java/com/skyflow/enums/RedactionType.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/RedactionType.java rename to src/main/java/com/skyflow/enums/RedactionType.java diff --git a/v2/src/main/java/com/skyflow/enums/RequestMethod.java b/src/main/java/com/skyflow/enums/RequestMethod.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/RequestMethod.java rename to src/main/java/com/skyflow/enums/RequestMethod.java diff --git a/v2/src/main/java/com/skyflow/errors/ErrorCode.java b/src/main/java/com/skyflow/errors/ErrorCode.java similarity index 100% rename from v2/src/main/java/com/skyflow/errors/ErrorCode.java rename to src/main/java/com/skyflow/errors/ErrorCode.java diff --git a/v2/src/main/java/com/skyflow/errors/ErrorMessage.java b/src/main/java/com/skyflow/errors/ErrorMessage.java similarity index 100% rename from v2/src/main/java/com/skyflow/errors/ErrorMessage.java rename to src/main/java/com/skyflow/errors/ErrorMessage.java diff --git a/v2/src/main/java/com/skyflow/errors/SkyflowException.java b/src/main/java/com/skyflow/errors/SkyflowException.java similarity index 100% rename from v2/src/main/java/com/skyflow/errors/SkyflowException.java rename to src/main/java/com/skyflow/errors/SkyflowException.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/ApiCallback.java b/src/main/java/com/skyflow/generated/rest/ApiCallback.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/ApiCallback.java rename to src/main/java/com/skyflow/generated/rest/ApiCallback.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/ApiClient.java b/src/main/java/com/skyflow/generated/rest/ApiClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/ApiClient.java rename to src/main/java/com/skyflow/generated/rest/ApiClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/ApiException.java b/src/main/java/com/skyflow/generated/rest/ApiException.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/ApiException.java rename to src/main/java/com/skyflow/generated/rest/ApiException.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/ApiResponse.java b/src/main/java/com/skyflow/generated/rest/ApiResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/ApiResponse.java rename to src/main/java/com/skyflow/generated/rest/ApiResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/Configuration.java b/src/main/java/com/skyflow/generated/rest/Configuration.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/Configuration.java rename to src/main/java/com/skyflow/generated/rest/Configuration.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/GzipRequestInterceptor.java b/src/main/java/com/skyflow/generated/rest/GzipRequestInterceptor.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/GzipRequestInterceptor.java rename to src/main/java/com/skyflow/generated/rest/GzipRequestInterceptor.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/JSON.java b/src/main/java/com/skyflow/generated/rest/JSON.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/JSON.java rename to src/main/java/com/skyflow/generated/rest/JSON.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/Pair.java b/src/main/java/com/skyflow/generated/rest/Pair.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/Pair.java rename to src/main/java/com/skyflow/generated/rest/Pair.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/ProgressRequestBody.java b/src/main/java/com/skyflow/generated/rest/ProgressRequestBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/ProgressRequestBody.java rename to src/main/java/com/skyflow/generated/rest/ProgressRequestBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/ProgressResponseBody.java b/src/main/java/com/skyflow/generated/rest/ProgressResponseBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/ProgressResponseBody.java rename to src/main/java/com/skyflow/generated/rest/ProgressResponseBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/ServerConfiguration.java b/src/main/java/com/skyflow/generated/rest/ServerConfiguration.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/ServerConfiguration.java rename to src/main/java/com/skyflow/generated/rest/ServerConfiguration.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/ServerVariable.java b/src/main/java/com/skyflow/generated/rest/ServerVariable.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/ServerVariable.java rename to src/main/java/com/skyflow/generated/rest/ServerVariable.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/StringUtil.java b/src/main/java/com/skyflow/generated/rest/StringUtil.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/StringUtil.java rename to src/main/java/com/skyflow/generated/rest/StringUtil.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/AuditApi.java b/src/main/java/com/skyflow/generated/rest/api/AuditApi.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/api/AuditApi.java rename to src/main/java/com/skyflow/generated/rest/api/AuditApi.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/AuthenticationApi.java b/src/main/java/com/skyflow/generated/rest/api/AuthenticationApi.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/api/AuthenticationApi.java rename to src/main/java/com/skyflow/generated/rest/api/AuthenticationApi.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/BinLookupApi.java b/src/main/java/com/skyflow/generated/rest/api/BinLookupApi.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/api/BinLookupApi.java rename to src/main/java/com/skyflow/generated/rest/api/BinLookupApi.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/QueryApi.java b/src/main/java/com/skyflow/generated/rest/api/QueryApi.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/api/QueryApi.java rename to src/main/java/com/skyflow/generated/rest/api/QueryApi.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/RecordsApi.java b/src/main/java/com/skyflow/generated/rest/api/RecordsApi.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/api/RecordsApi.java rename to src/main/java/com/skyflow/generated/rest/api/RecordsApi.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/api/TokensApi.java b/src/main/java/com/skyflow/generated/rest/api/TokensApi.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/api/TokensApi.java rename to src/main/java/com/skyflow/generated/rest/api/TokensApi.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/auth/ApiKeyAuth.java b/src/main/java/com/skyflow/generated/rest/auth/ApiKeyAuth.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/auth/ApiKeyAuth.java rename to src/main/java/com/skyflow/generated/rest/auth/ApiKeyAuth.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/auth/Authentication.java b/src/main/java/com/skyflow/generated/rest/auth/Authentication.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/auth/Authentication.java rename to src/main/java/com/skyflow/generated/rest/auth/Authentication.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/auth/HttpBasicAuth.java b/src/main/java/com/skyflow/generated/rest/auth/HttpBasicAuth.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/auth/HttpBasicAuth.java rename to src/main/java/com/skyflow/generated/rest/auth/HttpBasicAuth.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/auth/HttpBearerAuth.java b/src/main/java/com/skyflow/generated/rest/auth/HttpBearerAuth.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/auth/HttpBearerAuth.java rename to src/main/java/com/skyflow/generated/rest/auth/HttpBearerAuth.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/AbstractOpenApiSchema.java b/src/main/java/com/skyflow/generated/rest/models/AbstractOpenApiSchema.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/AbstractOpenApiSchema.java rename to src/main/java/com/skyflow/generated/rest/models/AbstractOpenApiSchema.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventAuditResourceType.java b/src/main/java/com/skyflow/generated/rest/models/AuditEventAuditResourceType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/AuditEventAuditResourceType.java rename to src/main/java/com/skyflow/generated/rest/models/AuditEventAuditResourceType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventContext.java b/src/main/java/com/skyflow/generated/rest/models/AuditEventContext.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/AuditEventContext.java rename to src/main/java/com/skyflow/generated/rest/models/AuditEventContext.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventData.java b/src/main/java/com/skyflow/generated/rest/models/AuditEventData.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/AuditEventData.java rename to src/main/java/com/skyflow/generated/rest/models/AuditEventData.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/AuditEventHTTPInfo.java b/src/main/java/com/skyflow/generated/rest/models/AuditEventHTTPInfo.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/AuditEventHTTPInfo.java rename to src/main/java/com/skyflow/generated/rest/models/AuditEventHTTPInfo.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/BatchRecordMethod.java b/src/main/java/com/skyflow/generated/rest/models/BatchRecordMethod.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/BatchRecordMethod.java rename to src/main/java/com/skyflow/generated/rest/models/BatchRecordMethod.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/ContextAccessType.java b/src/main/java/com/skyflow/generated/rest/models/ContextAccessType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/ContextAccessType.java rename to src/main/java/com/skyflow/generated/rest/models/ContextAccessType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/ContextAuthMode.java b/src/main/java/com/skyflow/generated/rest/models/ContextAuthMode.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/ContextAuthMode.java rename to src/main/java/com/skyflow/generated/rest/models/ContextAuthMode.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/DetokenizeRecordResponseValueType.java b/src/main/java/com/skyflow/generated/rest/models/DetokenizeRecordResponseValueType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/DetokenizeRecordResponseValueType.java rename to src/main/java/com/skyflow/generated/rest/models/DetokenizeRecordResponseValueType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/GooglerpcStatus.java b/src/main/java/com/skyflow/generated/rest/models/GooglerpcStatus.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/GooglerpcStatus.java rename to src/main/java/com/skyflow/generated/rest/models/GooglerpcStatus.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/ProtobufAny.java b/src/main/java/com/skyflow/generated/rest/models/ProtobufAny.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/ProtobufAny.java rename to src/main/java/com/skyflow/generated/rest/models/ProtobufAny.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/QueryServiceExecuteQueryBody.java b/src/main/java/com/skyflow/generated/rest/models/QueryServiceExecuteQueryBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/QueryServiceExecuteQueryBody.java rename to src/main/java/com/skyflow/generated/rest/models/QueryServiceExecuteQueryBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBatchOperationBody.java b/src/main/java/com/skyflow/generated/rest/models/RecordServiceBatchOperationBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBatchOperationBody.java rename to src/main/java/com/skyflow/generated/rest/models/RecordServiceBatchOperationBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBulkDeleteRecordBody.java b/src/main/java/com/skyflow/generated/rest/models/RecordServiceBulkDeleteRecordBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceBulkDeleteRecordBody.java rename to src/main/java/com/skyflow/generated/rest/models/RecordServiceBulkDeleteRecordBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceInsertRecordBody.java b/src/main/java/com/skyflow/generated/rest/models/RecordServiceInsertRecordBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceInsertRecordBody.java rename to src/main/java/com/skyflow/generated/rest/models/RecordServiceInsertRecordBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceUpdateRecordBody.java b/src/main/java/com/skyflow/generated/rest/models/RecordServiceUpdateRecordBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/RecordServiceUpdateRecordBody.java rename to src/main/java/com/skyflow/generated/rest/models/RecordServiceUpdateRecordBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RedactionEnumREDACTION.java b/src/main/java/com/skyflow/generated/rest/models/RedactionEnumREDACTION.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/RedactionEnumREDACTION.java rename to src/main/java/com/skyflow/generated/rest/models/RedactionEnumREDACTION.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/RequestActionType.java b/src/main/java/com/skyflow/generated/rest/models/RequestActionType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/RequestActionType.java rename to src/main/java/com/skyflow/generated/rest/models/RequestActionType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditAfterOptions.java b/src/main/java/com/skyflow/generated/rest/models/V1AuditAfterOptions.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1AuditAfterOptions.java rename to src/main/java/com/skyflow/generated/rest/models/V1AuditAfterOptions.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditEventResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1AuditEventResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1AuditEventResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1AuditEventResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1AuditResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1AuditResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEvent.java b/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEvent.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEvent.java rename to src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEvent.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEventRequest.java b/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEventRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEventRequest.java rename to src/main/java/com/skyflow/generated/rest/models/V1AuditResponseEventRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BINListRequest.java b/src/main/java/com/skyflow/generated/rest/models/V1BINListRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1BINListRequest.java rename to src/main/java/com/skyflow/generated/rest/models/V1BINListRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BINListResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1BINListResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1BINListResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1BINListResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BYOT.java b/src/main/java/com/skyflow/generated/rest/models/V1BYOT.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1BYOT.java rename to src/main/java/com/skyflow/generated/rest/models/V1BYOT.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BatchOperationResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1BatchOperationResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1BatchOperationResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1BatchOperationResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BatchRecord.java b/src/main/java/com/skyflow/generated/rest/models/V1BatchRecord.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1BatchRecord.java rename to src/main/java/com/skyflow/generated/rest/models/V1BatchRecord.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BulkDeleteRecordResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1BulkDeleteRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1BulkDeleteRecordResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1BulkDeleteRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1BulkGetRecordResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1BulkGetRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1BulkGetRecordResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1BulkGetRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1Card.java b/src/main/java/com/skyflow/generated/rest/models/V1Card.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1Card.java rename to src/main/java/com/skyflow/generated/rest/models/V1Card.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteFileResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1DeleteFileResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteFileResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1DeleteFileResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteRecordResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1DeleteRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1DeleteRecordResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1DeleteRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizePayload.java b/src/main/java/com/skyflow/generated/rest/models/V1DetokenizePayload.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizePayload.java rename to src/main/java/com/skyflow/generated/rest/models/V1DetokenizePayload.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordRequest.java b/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordRequest.java rename to src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1DetokenizeRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1DetokenizeResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1DetokenizeResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1FieldRecords.java b/src/main/java/com/skyflow/generated/rest/models/V1FieldRecords.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1FieldRecords.java rename to src/main/java/com/skyflow/generated/rest/models/V1FieldRecords.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1FileAVScanStatus.java b/src/main/java/com/skyflow/generated/rest/models/V1FileAVScanStatus.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1FileAVScanStatus.java rename to src/main/java/com/skyflow/generated/rest/models/V1FileAVScanStatus.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenRequest.java b/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenRequest.java rename to src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1GetAuthTokenResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1GetFileScanStatusResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1GetFileScanStatusResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1GetFileScanStatusResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1GetFileScanStatusResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1GetQueryResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1GetQueryResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1GetQueryResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1GetQueryResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1InsertRecordResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1InsertRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1InsertRecordResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1InsertRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1MemberType.java b/src/main/java/com/skyflow/generated/rest/models/V1MemberType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1MemberType.java rename to src/main/java/com/skyflow/generated/rest/models/V1MemberType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1RecordMetaProperties.java b/src/main/java/com/skyflow/generated/rest/models/V1RecordMetaProperties.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1RecordMetaProperties.java rename to src/main/java/com/skyflow/generated/rest/models/V1RecordMetaProperties.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizePayload.java b/src/main/java/com/skyflow/generated/rest/models/V1TokenizePayload.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizePayload.java rename to src/main/java/com/skyflow/generated/rest/models/V1TokenizePayload.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordRequest.java b/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordRequest.java rename to src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1TokenizeRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1TokenizeResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1TokenizeResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1TokenizeResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1UpdateRecordResponse.java b/src/main/java/com/skyflow/generated/rest/models/V1UpdateRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1UpdateRecordResponse.java rename to src/main/java/com/skyflow/generated/rest/models/V1UpdateRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1VaultFieldMapping.java b/src/main/java/com/skyflow/generated/rest/models/V1VaultFieldMapping.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1VaultFieldMapping.java rename to src/main/java/com/skyflow/generated/rest/models/V1VaultFieldMapping.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/models/V1VaultSchemaConfig.java b/src/main/java/com/skyflow/generated/rest/models/V1VaultSchemaConfig.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/models/V1VaultSchemaConfig.java rename to src/main/java/com/skyflow/generated/rest/models/V1VaultSchemaConfig.java diff --git a/v2/src/main/java/com/skyflow/logs/ErrorLogs.java b/src/main/java/com/skyflow/logs/ErrorLogs.java similarity index 100% rename from v2/src/main/java/com/skyflow/logs/ErrorLogs.java rename to src/main/java/com/skyflow/logs/ErrorLogs.java diff --git a/v2/src/main/java/com/skyflow/logs/InfoLogs.java b/src/main/java/com/skyflow/logs/InfoLogs.java similarity index 100% rename from v2/src/main/java/com/skyflow/logs/InfoLogs.java rename to src/main/java/com/skyflow/logs/InfoLogs.java diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java b/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java similarity index 100% rename from v2/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java rename to src/main/java/com/skyflow/serviceaccount/util/BearerToken.java diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java b/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java rename to src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java b/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java similarity index 100% rename from v2/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java rename to src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java diff --git a/v2/src/main/java/com/skyflow/serviceaccount/util/Token.java b/src/main/java/com/skyflow/serviceaccount/util/Token.java similarity index 100% rename from v2/src/main/java/com/skyflow/serviceaccount/util/Token.java rename to src/main/java/com/skyflow/serviceaccount/util/Token.java diff --git a/v2/src/main/java/com/skyflow/utils/Constants.java b/src/main/java/com/skyflow/utils/Constants.java similarity index 100% rename from v2/src/main/java/com/skyflow/utils/Constants.java rename to src/main/java/com/skyflow/utils/Constants.java diff --git a/v2/src/main/java/com/skyflow/utils/HttpUtility.java b/src/main/java/com/skyflow/utils/HttpUtility.java similarity index 100% rename from v2/src/main/java/com/skyflow/utils/HttpUtility.java rename to src/main/java/com/skyflow/utils/HttpUtility.java diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/src/main/java/com/skyflow/utils/Utils.java similarity index 100% rename from v2/src/main/java/com/skyflow/utils/Utils.java rename to src/main/java/com/skyflow/utils/Utils.java diff --git a/v2/src/main/java/com/skyflow/utils/logger/LogUtil.java b/src/main/java/com/skyflow/utils/logger/LogUtil.java similarity index 100% rename from v2/src/main/java/com/skyflow/utils/logger/LogUtil.java rename to src/main/java/com/skyflow/utils/logger/LogUtil.java diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/src/main/java/com/skyflow/utils/validations/Validations.java similarity index 100% rename from v2/src/main/java/com/skyflow/utils/validations/Validations.java rename to src/main/java/com/skyflow/utils/validations/Validations.java diff --git a/v2/src/main/java/com/skyflow/vault/audit/ListEventRequest.java b/src/main/java/com/skyflow/vault/audit/ListEventRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/audit/ListEventRequest.java rename to src/main/java/com/skyflow/vault/audit/ListEventRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/audit/ListEventResponse.java b/src/main/java/com/skyflow/vault/audit/ListEventResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/audit/ListEventResponse.java rename to src/main/java/com/skyflow/vault/audit/ListEventResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/bin/GetBinRequest.java b/src/main/java/com/skyflow/vault/bin/GetBinRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/bin/GetBinRequest.java rename to src/main/java/com/skyflow/vault/bin/GetBinRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/bin/GetBinResponse.java b/src/main/java/com/skyflow/vault/bin/GetBinResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/bin/GetBinResponse.java rename to src/main/java/com/skyflow/vault/bin/GetBinResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java b/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java rename to src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java b/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java rename to src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/AuditController.java b/src/main/java/com/skyflow/vault/controller/AuditController.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/controller/AuditController.java rename to src/main/java/com/skyflow/vault/controller/AuditController.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java b/src/main/java/com/skyflow/vault/controller/BinLookupController.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java rename to src/main/java/com/skyflow/vault/controller/BinLookupController.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java b/src/main/java/com/skyflow/vault/controller/ConnectionController.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java rename to src/main/java/com/skyflow/vault/controller/ConnectionController.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/DetectController.java b/src/main/java/com/skyflow/vault/controller/DetectController.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/controller/DetectController.java rename to src/main/java/com/skyflow/vault/controller/DetectController.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/src/main/java/com/skyflow/vault/controller/VaultController.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/controller/VaultController.java rename to src/main/java/com/skyflow/vault/controller/VaultController.java diff --git a/v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java b/src/main/java/com/skyflow/vault/data/DeleteRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java rename to src/main/java/com/skyflow/vault/data/DeleteRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java b/src/main/java/com/skyflow/vault/data/DeleteResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java rename to src/main/java/com/skyflow/vault/data/DeleteResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java b/src/main/java/com/skyflow/vault/data/GetRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/GetRequest.java rename to src/main/java/com/skyflow/vault/data/GetRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/data/GetResponse.java b/src/main/java/com/skyflow/vault/data/GetResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/GetResponse.java rename to src/main/java/com/skyflow/vault/data/GetResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java b/src/main/java/com/skyflow/vault/data/InsertRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/InsertRequest.java rename to src/main/java/com/skyflow/vault/data/InsertRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java b/src/main/java/com/skyflow/vault/data/InsertResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/InsertResponse.java rename to src/main/java/com/skyflow/vault/data/InsertResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/data/QueryRequest.java b/src/main/java/com/skyflow/vault/data/QueryRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/QueryRequest.java rename to src/main/java/com/skyflow/vault/data/QueryRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/data/QueryResponse.java b/src/main/java/com/skyflow/vault/data/QueryResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/QueryResponse.java rename to src/main/java/com/skyflow/vault/data/QueryResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java b/src/main/java/com/skyflow/vault/data/UpdateRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java rename to src/main/java/com/skyflow/vault/data/UpdateRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java b/src/main/java/com/skyflow/vault/data/UpdateResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java rename to src/main/java/com/skyflow/vault/data/UpdateResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/DeIdentifyRequest.java b/src/main/java/com/skyflow/vault/detect/DeIdentifyRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/DeIdentifyRequest.java rename to src/main/java/com/skyflow/vault/detect/DeIdentifyRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/DeIdentifyResponse.java b/src/main/java/com/skyflow/vault/detect/DeIdentifyResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/DeIdentifyResponse.java rename to src/main/java/com/skyflow/vault/detect/DeIdentifyResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/ColumnValue.java b/src/main/java/com/skyflow/vault/tokens/ColumnValue.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/ColumnValue.java rename to src/main/java/com/skyflow/vault/tokens/ColumnValue.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java b/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java rename to src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java b/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java rename to src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java b/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java rename to src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java b/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java rename to src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java b/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java rename to src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java diff --git a/v2/src/test/java/com/skyflow/SkyflowTests.java b/src/test/java/com/skyflow/SkyflowTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/SkyflowTests.java rename to src/test/java/com/skyflow/SkyflowTests.java diff --git a/v2/src/test/java/com/skyflow/config/ConnectionConfigTests.java b/src/test/java/com/skyflow/config/ConnectionConfigTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/config/ConnectionConfigTests.java rename to src/test/java/com/skyflow/config/ConnectionConfigTests.java diff --git a/v2/src/test/java/com/skyflow/config/CredentialsTests.java b/src/test/java/com/skyflow/config/CredentialsTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/config/CredentialsTests.java rename to src/test/java/com/skyflow/config/CredentialsTests.java diff --git a/v2/src/test/java/com/skyflow/config/VaultConfigTests.java b/src/test/java/com/skyflow/config/VaultConfigTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/config/VaultConfigTests.java rename to src/test/java/com/skyflow/config/VaultConfigTests.java diff --git a/v2/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java b/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java rename to src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java diff --git a/v2/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java b/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java rename to src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java diff --git a/v2/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java b/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java similarity index 75% rename from v2/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java rename to src/test/java/com/skyflow/serviceaccount/util/TokenTests.java index d1ac044b..ed5c72b2 100644 --- a/v2/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java +++ b/src/test/java/com/skyflow/serviceaccount/util/TokenTests.java @@ -1,11 +1,20 @@ package com.skyflow.serviceaccount.util; +import com.skyflow.Skyflow; +import com.skyflow.enums.LogLevel; +import io.github.cdimascio.dotenv.Dotenv; import org.junit.Assert; +import org.junit.BeforeClass; import org.junit.Test; public class TokenTests { private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; + @BeforeClass + public static void setup() { + Skyflow skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).build(); + } + @Test public void testNoTokenForIsExpiredToken() { try { @@ -36,7 +45,8 @@ public void testInvalidTokenForIsExpiredToken() { @Test public void testExpiredTokenForIsExpiredToken() { try { - String token = System.getProperty("TEST_EXPIRED_TOKEN"); + Dotenv dotenv = Dotenv.load(); + String token = dotenv.get("TEST_EXPIRED_TOKEN"); Assert.assertTrue(Token.isExpired(token)); } catch (Exception e) { Assert.fail(INVALID_EXCEPTION_THROWN); diff --git a/v2/src/test/java/com/skyflow/utils/HttpUtilityTests.java b/src/test/java/com/skyflow/utils/HttpUtilityTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/utils/HttpUtilityTests.java rename to src/test/java/com/skyflow/utils/HttpUtilityTests.java diff --git a/v2/src/test/java/com/skyflow/utils/UtilsTests.java b/src/test/java/com/skyflow/utils/UtilsTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/utils/UtilsTests.java rename to src/test/java/com/skyflow/utils/UtilsTests.java diff --git a/v2/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java b/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java similarity index 96% rename from v2/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java rename to src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java index 2294bdaa..db23e010 100644 --- a/v2/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java +++ b/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java @@ -1,5 +1,6 @@ package com.skyflow.vault.connection; +import com.google.gson.JsonObject; import com.skyflow.enums.RequestMethod; import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; @@ -391,4 +392,18 @@ public void testEmptyRequestBodyInInvokeConnectionRequestValidations() { Assert.assertEquals(ErrorMessage.EmptyRequestBody.getMessage(), e.getMessage()); } } + + @Test + public void testInvokeConnectionResponse() { + try { + JsonObject responseObject = new JsonObject(); + responseObject.addProperty("test_key_1", "test_value_1"); + responseObject.addProperty("test_key_2", "test_value_2"); + InvokeConnectionResponse connectionResponse = new InvokeConnectionResponse(responseObject); + String responseString = "InvokeConnectionResponse{" + "response=" + responseObject + "}"; + Assert.assertEquals(responseString, connectionResponse.toString()); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } } diff --git a/v2/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java b/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java rename to src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java diff --git a/v2/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java b/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java rename to src/test/java/com/skyflow/vault/controller/VaultControllerTests.java diff --git a/v2/src/test/java/com/skyflow/vault/data/DeleteTests.java b/src/test/java/com/skyflow/vault/data/DeleteTests.java similarity index 97% rename from v2/src/test/java/com/skyflow/vault/data/DeleteTests.java rename to src/test/java/com/skyflow/vault/data/DeleteTests.java index 9ab78af6..5f2eefc7 100644 --- a/v2/src/test/java/com/skyflow/vault/data/DeleteTests.java +++ b/src/test/java/com/skyflow/vault/data/DeleteTests.java @@ -12,6 +12,7 @@ import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; import org.junit.Assert; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; @@ -58,6 +59,11 @@ public static void setup() throws SkyflowException { table = "test_table"; } + @Before + public void setupTest() { + ids.clear(); + } + @Test public void testValidInputInDeleteRequestValidations() { try { @@ -88,7 +94,7 @@ public void testNoIdsInDeleteRequestValidations() { @Test public void testEmptyIdsInDeleteRequestValidations() { - ids.clear(); +// ids.clear(); DeleteRequest request = DeleteRequest.builder().ids(ids).table(table).build(); try { Validations.validateDeleteRequest(request); @@ -121,7 +127,7 @@ public void testEmptyIdInIdsInDeleteRequestValidations() { @Test public void testNoTableInDeleteRequestValidations() { - ids.clear(); +// ids.clear(); ids.add(skyflowID); DeleteRequest request = DeleteRequest.builder().ids(ids).build(); try { @@ -138,7 +144,7 @@ public void testNoTableInDeleteRequestValidations() { @Test public void testEmptyTableInDeleteRequestValidations() { - ids.clear(); +// ids.clear(); ids.add(skyflowID); DeleteRequest request = DeleteRequest.builder().ids(ids).table("").build(); try { @@ -156,6 +162,7 @@ public void testEmptyTableInDeleteRequestValidations() { @Test public void testDeleteResponse() { try { + ids.add(skyflowID); DeleteResponse response = new DeleteResponse(ids); String responseString = "{\n\t\"deletedIds\": [\n\t\t\"" + skyflowID + "\"]\n}"; Assert.assertEquals(1, response.getDeletedIds().size()); diff --git a/v2/src/test/java/com/skyflow/vault/data/GetTests.java b/src/test/java/com/skyflow/vault/data/GetTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/data/GetTests.java rename to src/test/java/com/skyflow/vault/data/GetTests.java diff --git a/v2/src/test/java/com/skyflow/vault/data/InsertTests.java b/src/test/java/com/skyflow/vault/data/InsertTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/data/InsertTests.java rename to src/test/java/com/skyflow/vault/data/InsertTests.java diff --git a/v2/src/test/java/com/skyflow/vault/data/QueryTests.java b/src/test/java/com/skyflow/vault/data/QueryTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/data/QueryTests.java rename to src/test/java/com/skyflow/vault/data/QueryTests.java diff --git a/v2/src/test/java/com/skyflow/vault/data/UpdateTests.java b/src/test/java/com/skyflow/vault/data/UpdateTests.java similarity index 88% rename from v2/src/test/java/com/skyflow/vault/data/UpdateTests.java rename to src/test/java/com/skyflow/vault/data/UpdateTests.java index 3780a417..22417257 100644 --- a/v2/src/test/java/com/skyflow/vault/data/UpdateTests.java +++ b/src/test/java/com/skyflow/vault/data/UpdateTests.java @@ -13,6 +13,7 @@ import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; import org.junit.Assert; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; @@ -53,20 +54,24 @@ public static void setup() throws SkyflowException { vaultConfig.setEnv(Env.DEV); vaultConfig.setCredentials(credentials); -// skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addVaultConfig(vaultConfig).build(); - skyflowID = "test_update_id_1"; table = "test_table"; valueMap = new HashMap<>(); - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); tokenMap = new HashMap<>(); - tokenMap.put("test_column_1", "test_token_1"); + } + + @Before + public void setupTest() { + valueMap.clear(); + tokenMap.clear(); } @Test public void testValidInputInUpdateRequestValidations() { try { + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); + tokenMap.put("test_column_1", "test_token_1"); UpdateRequest request = UpdateRequest.builder() .id(skyflowID) .table(table) @@ -163,8 +168,7 @@ public void testNoValuesInUpdateRequestValidations() { @Test public void testEmptyValuesInUpdateRequestValidations() { - HashMap emptyValueMap = new HashMap<>(); - UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).values(emptyValueMap).build(); + UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).values(valueMap).build(); try { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); @@ -179,6 +183,8 @@ public void testEmptyValuesInUpdateRequestValidations() { @Test public void testEmptyKeyInValuesInUpdateRequestValidations() { + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); valueMap.put("", "test_value_3"); UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).values(valueMap).build(); try { @@ -195,7 +201,8 @@ public void testEmptyKeyInValuesInUpdateRequestValidations() { @Test public void testEmptyValueInValuesInUpdateRequestValidations() { - valueMap.remove(""); + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); valueMap.put("test_column_3", ""); UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).values(valueMap).build(); try { @@ -212,7 +219,9 @@ public void testEmptyValueInValuesInUpdateRequestValidations() { @Test public void testTokensWithTokenStrictDisableInUpdateRequestValidations() { - valueMap.remove("test_column_3"); + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); + tokenMap.put("test_column_1", "test_token_1"); UpdateRequest request = UpdateRequest.builder() .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.DISABLE) .build(); @@ -230,6 +239,8 @@ public void testTokensWithTokenStrictDisableInUpdateRequestValidations() { @Test public void testNoTokensWithTokenStrictEnableInUpdateRequestValidations() { + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); UpdateRequest request = UpdateRequest.builder() .id(skyflowID).table(table).values(valueMap).tokenStrict(Byot.ENABLE) .build(); @@ -247,6 +258,8 @@ public void testNoTokensWithTokenStrictEnableInUpdateRequestValidations() { @Test public void testNoTokensWithTokenStrictEnableStrictInUpdateRequestValidations() { + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); UpdateRequest request = UpdateRequest.builder() .id(skyflowID).table(table).values(valueMap).tokenStrict(Byot.ENABLE_STRICT) .build(); @@ -264,9 +277,10 @@ public void testNoTokensWithTokenStrictEnableStrictInUpdateRequestValidations() @Test public void testEmptyTokensWithTokenStrictEnableInUpdateRequestValidations() { - HashMap emptyTokenMap = new HashMap<>(); + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); UpdateRequest request = UpdateRequest.builder() - .id(skyflowID).table(table).values(valueMap).tokens(emptyTokenMap).tokenStrict(Byot.ENABLE) + .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE) .build(); try { Validations.validateUpdateRequest(request); @@ -278,21 +292,10 @@ public void testEmptyTokensWithTokenStrictEnableInUpdateRequestValidations() { } @Test - public void testInsufficientTokensWithTokenStrictEnableStrictInUpdateRequestValidations1() { - UpdateRequest request = UpdateRequest.builder() - .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) - .build(); - try { - Validations.validateUpdateRequest(request); - Assert.fail(EXCEPTION_NOT_THROWN); - } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); - Assert.assertEquals(ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage(), e.getMessage()); - } - } - - @Test - public void testInsufficientTokensWithTokenStrictEnableStrictInUpdateRequestValidations2() { + public void testInsufficientTokensWithTokenStrictEnableStrictInUpdateRequestValidations() { + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); + tokenMap.put("test_column_1", "test_token_1"); UpdateRequest request = UpdateRequest.builder() .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) .build(); @@ -307,6 +310,9 @@ public void testInsufficientTokensWithTokenStrictEnableStrictInUpdateRequestVali @Test public void testTokenValueMismatchInUpdateRequestValidations() { + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); + tokenMap.put("test_column_1", "test_token_1"); tokenMap.put("test_column_3", "test_token_3"); UpdateRequest request = UpdateRequest.builder() .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) @@ -322,8 +328,9 @@ public void testTokenValueMismatchInUpdateRequestValidations() { @Test public void testEmptyKeyInTokensInUpdateRequestValidations() { - tokenMap.remove("test_column_2"); - tokenMap.remove("test_column_3"); + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); + tokenMap.put("test_column_1", "test_token_1"); tokenMap.put("", "test_token_2"); UpdateRequest request = UpdateRequest.builder() .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) @@ -339,7 +346,9 @@ public void testEmptyKeyInTokensInUpdateRequestValidations() { @Test public void testEmptyValueInTokensInUpdateRequestValidations() { - tokenMap.remove(""); + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); + tokenMap.put("test_column_1", "test_token_1"); tokenMap.put("test_column_2", ""); UpdateRequest request = UpdateRequest.builder() .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) @@ -356,6 +365,9 @@ public void testEmptyValueInTokensInUpdateRequestValidations() { @Test public void testUpdateResponse() { try { + valueMap.put("test_column_1", "test_value_1"); + valueMap.put("test_column_2", "test_value_2"); + tokenMap.put("test_column_1", "test_token_1"); tokenMap.put("test_column_2", "test_token_2"); UpdateResponse response = new UpdateResponse(skyflowID, tokenMap); String responseString = "{\n\t\"skyflowId\": " + skyflowID + "\n\t\"tokens\": " diff --git a/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java b/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java rename to src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java diff --git a/v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java b/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java rename to src/test/java/com/skyflow/vault/tokens/TokenizeTests.java diff --git a/v2/src/test/resources/invalidPrivateKeyCredentials.json b/src/test/resources/invalidPrivateKeyCredentials.json similarity index 100% rename from v2/src/test/resources/invalidPrivateKeyCredentials.json rename to src/test/resources/invalidPrivateKeyCredentials.json diff --git a/v2/src/test/resources/invalidTokenURICredentials.json b/src/test/resources/invalidTokenURICredentials.json similarity index 100% rename from v2/src/test/resources/invalidTokenURICredentials.json rename to src/test/resources/invalidTokenURICredentials.json diff --git a/v2/src/test/resources/noClientIDCredentials.json b/src/test/resources/noClientIDCredentials.json similarity index 100% rename from v2/src/test/resources/noClientIDCredentials.json rename to src/test/resources/noClientIDCredentials.json diff --git a/v2/src/test/resources/noKeyIDCredentials.json b/src/test/resources/noKeyIDCredentials.json similarity index 100% rename from v2/src/test/resources/noKeyIDCredentials.json rename to src/test/resources/noKeyIDCredentials.json diff --git a/v2/src/test/resources/noPrivateKeyCredentials.json b/src/test/resources/noPrivateKeyCredentials.json similarity index 100% rename from v2/src/test/resources/noPrivateKeyCredentials.json rename to src/test/resources/noPrivateKeyCredentials.json diff --git a/v2/src/test/resources/noTokenURICredentials.json b/src/test/resources/noTokenURICredentials.json similarity index 100% rename from v2/src/test/resources/noTokenURICredentials.json rename to src/test/resources/noTokenURICredentials.json diff --git a/v2/src/test/resources/notJson.txt b/src/test/resources/notJson.txt similarity index 100% rename from v2/src/test/resources/notJson.txt rename to src/test/resources/notJson.txt diff --git a/v1/pom.xml b/v1/pom.xml deleted file mode 100644 index ff3fc13a..00000000 --- a/v1/pom.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - 4.0.0 - - com.skyflow - skyflow-java - 1.15.0 - - - v1 - - - 8 - 8 - UTF-8 - - - \ No newline at end of file diff --git a/v1/src/main/java/DetokenizeExample.java b/v1/src/main/java/DetokenizeExample.java deleted file mode 100644 index 8b2a657f..00000000 --- a/v1/src/main/java/DetokenizeExample.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ - -import com.skyflow.Configuration; -import com.skyflow.entities.*; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - - -public class DetokenizeExample { - - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration( - "l906001b0b4e4843a69b091f278f7017", - "https://sb.area51.vault.skyflowapis.dev", - new DemoTokenProvider() - ); - - Configuration.setLogLevel(LogLevel.DEBUG); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("token", "4304-0207-2378-9259"); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - JSONObject record1 = new JSONObject(); - record1.put("token", "3809-9467-7122-3994"); - record1.put("redaction", RedactionType.PLAIN_TEXT.toString()); - recordsArray.add(record); - recordsArray.add(record1); - records.put("records", recordsArray); - - JSONObject response = skyflowClient.detokenize(records); - System.out.println(response); - - } catch (SkyflowException e) { - e.printStackTrace(); - System.out.println(e.getData()); - } - - } - - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRwczovL21hbmFnZS5za3lmbG93YXBpcy5kZXYiLCJjbGkiOiJ2OGY0NTE1OWYxNjA0NzViYTk4MjAxOGJkMmFiMmVlZSIsImV4cCI6MTcxMTA5NDYwMSwiaWF0IjoxNzExMDkxMDAyLCJpc3MiOiJzYS1hdXRoQG1hbmFnZS5za3lmbG93YXBpcy5kZXYiLCJqdGkiOiJuMzk0OGI1ODIxOGQ0NWQ2OWQyYTExZjMwYjk2YmRiMiIsImtleSI6Imc0NDRmZTQxMmEzZTQ5ZTA5YjJlN2E4ZGE2ZDhkZWNlIiwic2NwIjpudWxsLCJzdWIiOiJzZGstZTJlLWJsaXR6LW5ldyJ9.D1bkgk8U5yC7Ped-eC8W4zc7CSImRdMbH2jvx9o_ADGYLmRsUJg3Jm004RtmCz6Vqy1hfgBobje4SgccavlYQTO3JUdtwx9SLJVwMGSEYnM_LvTAKqTVInJkvkKgJThHfh6na4iKWZlzUjNjhIFVjLcEhJuikRO68dpw8YFo84mc8iAjzW4BiKIyfAPzEUqIYq6VNUtz80ZsIhkfMz99_93NFf_KKzIR_a-MVYa7LzJfCrO6EQ-1fXLrTeJkusuco4MFSOf3-x55TimJygcQJjJC34lEtDK0OhFJWbM65gJRpRv6ftaknXRcp8caVE6xkqXI320O6GcBZK933aHw8w"; - - @Override - public String getBearerToken() throws Exception { -// ResponseToken response = null; -// try { -// String filePath = "/home/vivekj/SKYFLOW/SDKs/skyflow-java/samples/credentials.json"; -// if (Token.isExpired(bearerToken)) { -// response = Token.generateBearerToken(filePath); -// bearerToken = response.getAccessToken(); -// } -// } catch (SkyflowException e) { -// e.printStackTrace(); -// } - - return bearerToken; - } - } -} diff --git a/v1/src/main/java/InsertExample.java b/v1/src/main/java/InsertExample.java deleted file mode 100644 index 1cdd0900..00000000 --- a/v1/src/main/java/InsertExample.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ - -import com.skyflow.Configuration; -import com.skyflow.entities.*; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -public class InsertExample { - - public static void main(String[] args) { - // blitz -// String vaultID = ""; -// String vaultURL = ""; - - // stage - String vaultID = "aef438f3be974c8f897795ab02248f78"; - String vaultURL = "https://cf5643204594.vault.skyflowapis.tech"; - - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Configuration.setLogLevel(LogLevel.DEBUG); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", "customers"); - JSONObject fields = new JSONObject(); - fields.put("name", "chandragupta maurya"); - fields.put("card_number", "4111111111111111"); - fields.put("email", "chandragupta.maurya@test.com"); - record.put("fields", fields); - - JSONObject record2 = new JSONObject(); - record2.put("table", "pii_fields_upsert"); - JSONObject fields2 = new JSONObject(); - fields2.put("name", "java coe"); - fields2.put("card_number", "4111111111111111"); - fields2.put("expiration_year", "2025"); - fields2.put("expiration_month", "11"); - fields2.put("expiration_date", "11/25"); - fields2.put("cvv", "123"); - record2.put("fields", fields2); - - recordsArray.add(record); -// recordsArray.add(record2); - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(false); - JSONObject res = skyflowClient.insert(records, insertOptions); - - System.out.println("final response " + res); - } catch (SkyflowException e) { - System.out.println(e); - e.printStackTrace(); - } - } - - static class DemoTokenProvider implements TokenProvider { - private String bearerToken; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - String env = "stage"; - try { - String filePath = "/home/vivekj/Documents/credentials/sdk-integration-tests/" + env + "-credentials.json"; - if (Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - return bearerToken; - } - } -} diff --git a/v1/src/main/java/com/skyflow/Configuration.java b/v1/src/main/java/com/skyflow/Configuration.java deleted file mode 100644 index fac93b8b..00000000 --- a/v1/src/main/java/com/skyflow/Configuration.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow; - -import com.skyflow.common.utils.Helpers; -import com.skyflow.common.utils.LogUtil; -import com.skyflow.entities.LogLevel; -import com.skyflow.logs.InfoLogs; - -public final class Configuration { - public static void setLogLevel(LogLevel level) { - LogUtil.setupLogger(level); - LogUtil.printInfoLog(Helpers.parameterizedString(InfoLogs.CurrentLogLevel.getLog(), String.valueOf(level))); - } -} diff --git a/v1/src/main/java/com/skyflow/common/utils/Constants.java b/v1/src/main/java/com/skyflow/common/utils/Constants.java deleted file mode 100644 index 05e22578..00000000 --- a/v1/src/main/java/com/skyflow/common/utils/Constants.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.skyflow.common.utils; - -public class Constants { - - public static final String SDK_METRICS_HEADER_KEY = "sky-metadata"; - public static final String SDK_VERSION = "1.15.0"; - -} diff --git a/v1/src/main/java/com/skyflow/common/utils/Helpers.java b/v1/src/main/java/com/skyflow/common/utils/Helpers.java deleted file mode 100644 index e5c3bbfe..00000000 --- a/v1/src/main/java/com/skyflow/common/utils/Helpers.java +++ /dev/null @@ -1,440 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.common.utils; - -import com.skyflow.entities.*; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.DebugLogs; -import com.skyflow.logs.ErrorLogs; -import org.apache.commons.codec.binary.Base64; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.PrivateKey; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.PKCS8EncodedKeySpec; -import java.util.*; - -public final class Helpers { - - private static final String LINE_FEED = "\r\n"; - - public static String getUpsertColumn(String tableName, UpsertOption[] upsertOptions) { - String upsertColumn = ""; - - for (UpsertOption upsertOption : upsertOptions) { - if (Objects.equals(tableName, upsertOption.getTable())) { - upsertColumn = upsertOption.getColumn(); - } - } - return upsertColumn; - } - - public static JSONObject constructInsertRequest(InsertInput recordsInput, InsertOptions options) - throws SkyflowException { - JSONObject finalRequest = new JSONObject(); - List requestBodyContent = new ArrayList(); - boolean isTokens = options.isTokens(); - boolean continueOnError = options.isContinueOnError(); - InsertRecordInput[] records = recordsInput.getRecords(); - - if (records == null || records.length == 0) { - throw new SkyflowException(ErrorCode.EmptyRecords); - } - - for (int i = 0; i < records.length; i++) { - InsertRecordInput record = records[i]; - - if (record.getTable() == null || record.getTable().isEmpty()) { - throw new SkyflowException(ErrorCode.InvalidTable); - } - if (record.getFields() == null) { - throw new SkyflowException(ErrorCode.InvalidFields); - } - - JSONObject postRequestInput = new JSONObject(); - postRequestInput.put("method", "POST"); - postRequestInput.put("quorum", true); - postRequestInput.put("tableName", record.getTable()); - postRequestInput.put("fields", record.getFields()); - if (options.getUpsertOptions() != null) - postRequestInput.put("upsert", getUpsertColumn(record.getTable(), options.getUpsertOptions())); - if (isTokens){ - postRequestInput.put("tokenization", true); - } - requestBodyContent.add(postRequestInput); - - } - finalRequest.put("records", requestBodyContent); - finalRequest.put("continueOnError", continueOnError); - - return finalRequest; - } - - public static JSONObject constructUpdateRequest(UpdateRecordInput record, UpdateOptions options) throws SkyflowException { - if (record == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidUpdateInput.getLog()); - throw new SkyflowException(ErrorCode.EmptyRecords); - } - if (record.getId() == null || record.getId().isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.InvalidSkyflowId.getLog()); - throw new SkyflowException(ErrorCode.InvalidSkyflowId); - } - if (record.getTable() == null || record.getTable().isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.InvalidTable.getLog()); - throw new SkyflowException(ErrorCode.InvalidTable); - } - if (record.getFields() == null || record.getFields().isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.InvalidField.getLog()); - throw new SkyflowException(ErrorCode.InvalidFields); - } - - JSONObject postRequestInput = new JSONObject(); - postRequestInput.put("fields", record.getFields()); - return postRequestInput; - - } - public static JSONObject constructQueryRequest(QueryRecordInput queryInput, QueryOptions options) - throws SkyflowException { - if (queryInput == null) { - throw new SkyflowException(ErrorCode.EmptyRecords); - } - JSONObject postRequestInput = new JSONObject(); - if (queryInput.getQuery() == null||queryInput.getQuery().trim().isEmpty()) { - throw new SkyflowException(ErrorCode.InvalidQuery); - } - postRequestInput.put("query", queryInput.getQuery()); - return postRequestInput; - } - - public static JSONObject constructQueryErrorObject(SkyflowException skyflowException) { - JSONObject finalResponseError = new JSONObject(); - try { - JSONObject errorObject = (JSONObject) ((JSONObject) new JSONParser().parse(skyflowException.getMessage())).get("error"); - if (errorObject != null) { - JSONObject responseError = new JSONObject(); - responseError.put("code", errorObject.get("http_code")); - responseError.put("description", errorObject.get("message")); - finalResponseError.put("error", responseError); - } - } catch (ParseException e) { - JSONObject responseError = new JSONObject(); - responseError.put("code", skyflowException.getCode()); - responseError.put("description", skyflowException.getMessage()); - finalResponseError.put("error", responseError); - - } - return finalResponseError; - } - - public static StringBuilder constructGetByIdRequestURLParams(GetByIdRecordInput record) { - StringBuilder paramsList = new StringBuilder(); - - for (String id : record.getIds()) { - paramsList.append("skyflow_ids=").append(id).append("&"); - } - - paramsList.append("redaction=").append(record.getRedaction()); - return paramsList; - } - - public static StringBuilder constructGetRequestURLParams(GetRecordInput record, GetOptions getOptions) { - StringBuilder paramsList = new StringBuilder(); - - if (record.getIds() != null) { - for (String id : record.getIds()) { - paramsList.append("skyflow_ids=").append(id).append("&"); - } - } - - if (record.getColumnName() != null && record.getColumnValues() != null) { - paramsList.append("column_name=").append(record.getColumnName()).append("&"); - for (String value : record.getColumnValues()) { - paramsList.append("column_values=").append(value).append("&"); - } - } - if(record.getRedaction() == null && getOptions.getOptionToken() == true){ - paramsList.append("tokenization=").append(getOptions.getOptionToken()); - } else { - paramsList.append("redaction=").append(record.getRedaction()); - } - return paramsList; - } - - public static JSONObject constructInsertResponse(JSONObject response, List requestRecords, InsertOptions options) { - JSONArray responses = (JSONArray) response.get("responses"); - JSONArray successResponses = new JSONArray(); - JSONArray failureResponses = new JSONArray(); - JSONObject insertResponse = new JSONObject(); - - boolean tokens = options.isTokens(); - boolean continueOnError = options.isContinueOnError(); - - if (continueOnError) { - for (int index = 0; index < responses.size(); index++) { - JSONObject body = (JSONObject) ((JSONObject) responses.get(index)).get("Body"); - Long status = (Long) ((JSONObject) responses.get(index)).get("Status"); - if (body.containsKey("records")) { - JSONObject record = ((JSONObject) ((JSONArray) body.get("records")).get(0)); - String skyflowID = (String) record.get("skyflow_id"); - JSONObject responseTokens = (JSONObject) record.get("tokens"); - String table = (String) ((JSONObject) requestRecords.get(index)).get("tableName"); - JSONObject successObj = new JSONObject(); - successObj.put("table", table); - successObj.put("request_index", index); - if (tokens) { - responseTokens.remove("*"); - responseTokens.put("skyflow_id", skyflowID); - successObj.put("fields", responseTokens); - } else { - successObj.put("skyflow_id", skyflowID); - } - successResponses.add(successObj); - } else { - JSONObject failureObj = new JSONObject(); - JSONObject errorObj = new JSONObject(); - errorObj.put("code", status); - errorObj.put("description", appendRequestId((String) body.get("error"), HttpUtility.getRequestID())); - errorObj.put("request_index", index); - failureObj.put("error", errorObj); - failureResponses.add(failureObj); - } - } - } else if (tokens) { - for (int index = 0; index < responses.size(); index++) { - String skyflowId = (String) ((JSONObject) ((JSONArray) ((JSONObject) responses.get(index)) - .get("records")).get(0)).get("skyflow_id"); - JSONObject newObj = new JSONObject(); - newObj.put("table", ((JSONObject) requestRecords.get(index)).get("tableName")); - JSONObject newFields = (JSONObject) ((JSONObject) ((JSONArray) ((JSONObject) responses.get(index)) - .get("records")).get(0)).get("tokens"); - newFields.remove("*"); - newFields.put("skyflow_id", skyflowId); - newObj.put("fields", newFields); - newObj.put("request_index", index); - successResponses.add(newObj); - } - } else { - for (int index = 0; index < responses.size(); index++) { - JSONObject newObj = new JSONObject(); - - newObj.put("table", ((JSONObject) requestRecords.get(index)).get("tableName")); - newObj.put("skyflow_id", - ((JSONObject) ((JSONArray) ((JSONObject) responses.get(index)).get("records")).get(0)) - .get("skyflow_id")); - newObj.put("request_index", index); - successResponses.add(newObj); - } - } - if (successResponses.size() > 0) { - insertResponse.put("records", successResponses); - } - if (failureResponses.size() > 0) { - insertResponse.put("errors", failureResponses); - } - return insertResponse; - } - - public static String parameterizedString(String base, String... args) { - for (int index = 0; index < args.length; index++) { - base = base.replace("%s" + (index + 1), args[index]); - } - return base; - } - - public static String constructConnectionURL(JSONObject config) { - StringBuilder filledURL = new StringBuilder((String) config.get("connectionURL")); - - if (config.containsKey("pathParams")) { - JSONObject pathParams = (JSONObject) config.get("pathParams"); - for (Object key : pathParams.keySet()) { - Object value = pathParams.get(key); - filledURL = new StringBuilder(filledURL.toString().replace(String.format("{%s}", key), (String) value)); - } - } - - if (config.containsKey("queryParams")) { - JSONObject queryParams = (JSONObject) config.get("queryParams"); - filledURL.append("?"); - for (Object key : queryParams.keySet()) { - Object value = queryParams.get(key); - filledURL.append(key).append("=").append(value).append("&"); - } - filledURL = new StringBuilder(filledURL.substring(0, filledURL.length() - 1)); - - } - return filledURL.toString(); - } - - public static Map constructConnectionHeadersMap(JSONObject configHeaders) { - Map headersMap = new HashMap<>(); - for (Object key : configHeaders.keySet()) { - Object value = configHeaders.get(key); - headersMap.put(((String) key).toLowerCase(), (String) value); - } - return headersMap; - } - - public static String appendRequestId(String message, String requestId) { - if (requestId != null && !requestId.isEmpty()) { - message = message + " - requestId: " + requestId; - } - return message; - } - - public static String appendRequestIdToErrorObj(int status, String error, String requestId) throws SkyflowException { - try { - if (requestId != null && !requestId.isEmpty()) { - JSONObject errorObject = (JSONObject) new JSONParser().parse(error); - JSONObject tempError = (JSONObject) errorObject.get("error"); - if (tempError != null) { - String message = (String) tempError.get("message"); - message = message + " - requestId: " + requestId; - - tempError.put("message", message); - errorObject.put("error", tempError); - } - error = errorObject.toString(); - } - } catch (ParseException e) { - throw new SkyflowException(status, error); - } - return error; - } - - public static String formatJsonToFormEncodedString(JSONObject requestBody) { - LogUtil.printDebugLog(DebugLogs.FormatRequestBodyFormUrlFormEncoded.getLog()); - StringBuilder formEncodeString = new StringBuilder(); - HashMap jsonMap = convertJsonToMap(requestBody, ""); - - for (Map.Entry currentEntry : jsonMap.entrySet()) - formEncodeString.append(makeFormEncodeKeyValuePair(currentEntry.getKey(), currentEntry.getValue())); - - return formEncodeString.substring(0, formEncodeString.length() - 1); - } - - public static String formatJsonToMultiPartFormDataString(JSONObject requestBody, String boundary) { - LogUtil.printDebugLog(DebugLogs.FormatRequestBodyFormData.getLog()); - StringBuilder formEncodeString = new StringBuilder(); - HashMap jsonMap = convertJsonToMap(requestBody, ""); - - for (Map.Entry currentEntry : jsonMap.entrySet()) - formEncodeString.append(makeFormDataKeyValuePair(currentEntry.getKey(), currentEntry.getValue(), boundary)); - - formEncodeString.append(LINE_FEED); - formEncodeString.append("--").append(boundary).append("--").append(LINE_FEED); - - return formEncodeString.toString(); - } - - private static HashMap convertJsonToMap(JSONObject json, String rootKey) { - HashMap currentMap = new HashMap<>(); - for (Object key : json.keySet()) { - Object currentValue = json.get(key); - String currentKey = rootKey.length() != 0 ? rootKey + '[' + key.toString() + ']' : rootKey + key.toString(); - if (currentValue instanceof JSONObject) { - currentMap.putAll(convertJsonToMap((JSONObject) currentValue, currentKey)); - } else { - currentMap.put(currentKey, currentValue.toString()); - } - } - return currentMap; - } - - private static String makeFormEncodeKeyValuePair(String key, String value) { - return key + "=" + value + "&"; - } - - private static String makeFormDataKeyValuePair(String key, String value, String boundary) { - StringBuilder formDataTextField = new StringBuilder(); - formDataTextField.append("--").append(boundary).append(LINE_FEED); - formDataTextField.append("Content-Disposition: form-data; name=\"").append(key).append("\"").append(LINE_FEED); - formDataTextField.append(LINE_FEED); - formDataTextField.append(value).append(LINE_FEED); - - return formDataTextField.toString(); - } - - public static PrivateKey getPrivateKeyFromPem(String pemKey) throws SkyflowException { - - String PKCS8PrivateHeader = "-----BEGIN PRIVATE KEY-----"; - String PKCS8PrivateFooter = "-----END PRIVATE KEY-----"; - - String privateKeyContent = pemKey; - PrivateKey privateKey = null; - - if (pemKey.contains(PKCS8PrivateHeader)) { - privateKeyContent = privateKeyContent.replace(PKCS8PrivateHeader, ""); - privateKeyContent = privateKeyContent.replace(PKCS8PrivateFooter, ""); - privateKeyContent = privateKeyContent.replace("\n", ""); - privateKeyContent = privateKeyContent.replace("\r\n", ""); - privateKey = parsePkcs8PrivateKey(Base64.decodeBase64(privateKeyContent)); - } else { - LogUtil.printErrorLog(ErrorLogs.UnableToRetrieveRSA.getLog()); - throw new SkyflowException(ErrorCode.UnableToRetrieveRSA); - } - return privateKey; - } - - /** - * Create a PrivateKey instance from raw PKCS#8 bytes. - */ - public static PrivateKey parsePkcs8PrivateKey(byte[] pkcs8Bytes) throws SkyflowException { - KeyFactory keyFactory; - PrivateKey privateKey = null; - try { - PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(pkcs8Bytes); - keyFactory = KeyFactory.getInstance("RSA"); - privateKey = keyFactory.generatePrivate(keySpec); - } catch (NoSuchAlgorithmException e) { - LogUtil.printErrorLog(ErrorLogs.NoSuchAlgorithm.getLog()); - throw new SkyflowException(ErrorCode.NoSuchAlgorithm, e); - } catch (InvalidKeySpecException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidKeySpec.getLog()); - throw new SkyflowException(ErrorCode.InvalidKeySpec, e); - } - return privateKey; - } - public static JSONObject getMetrics(){ - JSONObject details = new JSONObject(); - - String sdkVersion = Constants.SDK_VERSION; - String deviceModel = ""; - String osDetails = ""; - String javaVersion = ""; - - details.put("sdk_name_version", "skyflow-java@" + sdkVersion); - - // Retrieve device model - try { - deviceModel = System.getProperty("os.name"); - } catch (Exception e) { - deviceModel = ""; - } - details.put("sdk_client_device_model", deviceModel); - - // Retrieve OS details - try { - osDetails = System.getProperty("os.version"); - } catch (Exception e) { - osDetails = ""; - } - details.put("sdk_client_os_details", osDetails); - - // Retrieve Java version details - try { - javaVersion = System.getProperty("java.version"); - } catch (Exception e) { - javaVersion = ""; - } - details.put("sdk_runtime_details", "Java@" + javaVersion); - - return details; - } -} diff --git a/v1/src/main/java/com/skyflow/common/utils/HttpUtility.java b/v1/src/main/java/com/skyflow/common/utils/HttpUtility.java deleted file mode 100644 index 60cf9aac..00000000 --- a/v1/src/main/java/com/skyflow/common/utils/HttpUtility.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.common.utils; - -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import org.json.simple.JSONObject; - -import java.io.*; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Map; - -import static com.skyflow.common.utils.Helpers.formatJsonToFormEncodedString; -import static com.skyflow.common.utils.Helpers.formatJsonToMultiPartFormDataString; - -public final class HttpUtility { - private static String requestID; - - public static String getRequestID() { - return requestID; - } - - public static String sendRequest(String method, URL url, JSONObject params, Map headers) throws IOException, SkyflowException { - HttpURLConnection connection = null; - BufferedReader in = null; - StringBuffer response = null; - String boundary = String.valueOf(System.currentTimeMillis()); - try { - connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod(method); - connection.setRequestProperty("content-type", "application/json"); - connection.setRequestProperty("Accept", "*/*"); - - if (headers != null && headers.size() > 0) { - for (Map.Entry entry : headers.entrySet()) - connection.setRequestProperty(entry.getKey(), entry.getValue()); - - // append dynamic boundary if content-type is multipart/form-data - if (headers.containsKey("content-type")) { - if (headers.get("content-type") == "multipart/form-data") { - connection.setRequestProperty("content-type", "multipart/form-data; boundary=" + boundary); - } - } - } - if (params != null && params.size() > 0) { - connection.setDoOutput(true); - try (DataOutputStream wr = new DataOutputStream(connection.getOutputStream())) { - byte[] input = null; - String requestContentType = connection.getRequestProperty("content-type"); - - if (requestContentType.contains("application/x-www-form-urlencoded")) { - input = formatJsonToFormEncodedString(params).getBytes(StandardCharsets.UTF_8); - } else if (requestContentType.contains("multipart/form-data")) { - input = formatJsonToMultiPartFormDataString(params, boundary).getBytes(StandardCharsets.UTF_8); - }else { - input = params.toString().getBytes(StandardCharsets.UTF_8); - } - - wr.write(input, 0, input.length); - wr.flush(); - } - } - - int status = connection.getResponseCode(); - String requestID = connection.getHeaderField("x-request-id"); - HttpUtility.requestID = requestID; - - Reader streamReader; - if (status > 299) { - if (connection.getErrorStream() != null) - streamReader = new InputStreamReader(connection.getErrorStream()); - else { - String description = Helpers.appendRequestId(ErrorCode.Server.getDescription(), requestID); - LogUtil.printErrorLog(description); - throw new SkyflowException(status, description); - } - } else { - streamReader = new InputStreamReader(connection.getInputStream()); - } - - response = new StringBuffer(); - in = new BufferedReader(streamReader); - String inputLine; - while ((inputLine = in.readLine()) != null) { - response.append(inputLine); - } - - if (status > 299) { - LogUtil.printErrorLog(Helpers.appendRequestId(response.toString(), requestID)); - String errorMsg = Helpers.appendRequestIdToErrorObj(status, response.toString(), requestID); - throw new SkyflowException(status, errorMsg); - } - } finally { - if (in != null) { - in.close(); - } - if (connection != null) { - connection.disconnect(); - } - } - return response.toString(); - } - -} diff --git a/v1/src/main/java/com/skyflow/common/utils/LogUtil.java b/v1/src/main/java/com/skyflow/common/utils/LogUtil.java deleted file mode 100644 index fa48cdb3..00000000 --- a/v1/src/main/java/com/skyflow/common/utils/LogUtil.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.common.utils; - -import com.skyflow.entities.LogLevel; -import com.skyflow.logs.InfoLogs; - -import java.util.logging.*; - -public final class LogUtil { - private static final Logger LOGGER = Logger.getLogger(LogUtil.class.getName()); - private static final String SDK_OWNER = "[Skyflow] "; - private static boolean IS_LOGGER_SETUP_DONE = false; - - - synchronized public static void setupLogger(LogLevel logLevel) { - IS_LOGGER_SETUP_DONE = true; - LogManager.getLogManager().reset(); - LOGGER.setUseParentHandlers(false); - Formatter formatter = new SimpleFormatter() { - private static final String format = "%s: %s %n"; - - // Override format method - @Override - public synchronized String format(LogRecord logRecord) { - return String.format(format, loggerLevelToLogLevelMap(logRecord.getLevel()), - logRecord.getMessage()); - } - }; - ConsoleHandler consoleHandler = new ConsoleHandler(); - consoleHandler.setFormatter(formatter); - consoleHandler.setLevel(Level.CONFIG); - - LOGGER.addHandler(consoleHandler); - LOGGER.setLevel(logLevelToLoggerLevelMap(logLevel)); - printInfoLog(InfoLogs.LoggerSetup.getLog()); - } - - public static void printErrorLog(String message) { - if (IS_LOGGER_SETUP_DONE) - LOGGER.severe(SDK_OWNER + message); - else { - setupLogger(LogLevel.ERROR); - LOGGER.severe(SDK_OWNER + message); - } - } - - public static void printDebugLog(String message) { - if (IS_LOGGER_SETUP_DONE) - LOGGER.config(SDK_OWNER + message); - } - - public static void printWarningLog(String message) { - if (IS_LOGGER_SETUP_DONE) - LOGGER.warning(SDK_OWNER + message); - } - - public static void printInfoLog(String message) { - if (IS_LOGGER_SETUP_DONE) - LOGGER.info(SDK_OWNER + message); - } - - - private static Level logLevelToLoggerLevelMap(LogLevel logLevel) { - Level loggerLevel; - switch (logLevel) { - case ERROR: - loggerLevel = Level.SEVERE; - break; - case WARN: - loggerLevel = Level.WARNING; - break; - case INFO: - loggerLevel = Level.INFO; - break; - case DEBUG: - loggerLevel = Level.CONFIG; - break; - default: - loggerLevel = Level.OFF; - } - return loggerLevel; - } - - private static LogLevel loggerLevelToLogLevelMap(Level loggerLevel) { - LogLevel logLevel; - if (Level.SEVERE.equals(loggerLevel)) { - logLevel = LogLevel.ERROR; - } else if (Level.WARNING.equals(loggerLevel)) { - logLevel = LogLevel.WARN; - } else if (Level.INFO.equals(loggerLevel)) { - logLevel = LogLevel.INFO; - } else if (Level.CONFIG.equals(loggerLevel)){ - logLevel = LogLevel.DEBUG; - }else - logLevel = LogLevel.OFF; - return logLevel; - } - - -} diff --git a/v1/src/main/java/com/skyflow/common/utils/TokenUtils.java b/v1/src/main/java/com/skyflow/common/utils/TokenUtils.java deleted file mode 100644 index 288f2faa..00000000 --- a/v1/src/main/java/com/skyflow/common/utils/TokenUtils.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.common.utils; - -import com.skyflow.entities.TokenProvider; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import com.skyflow.logs.InfoLogs; -import org.apache.commons.codec.binary.Base64; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -import java.nio.charset.StandardCharsets; -import java.util.Date; - -public final class TokenUtils { - - private String token; - - public TokenUtils() { - LogUtil.printInfoLog(InfoLogs.TokenUtilsInstanceCreated.getLog()); - this.token = null; - } - - public static boolean isTokenValid(String token) throws SkyflowException { - try { - if (token != null) { - return !isExpired(token); - } - } catch (ParseException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidBearerToken.getLog()); - throw new SkyflowException(ErrorCode.InvalidBearerToken, e); - } - - return false; - } - - private static boolean isExpired(String encodedToken) throws ParseException, SkyflowException { - long currentTime = new Date().getTime() / 1000; - long expiryTime = (long) decoded(encodedToken).get("exp"); - return currentTime > expiryTime; - } - - public static JSONObject decoded(String encodedToken) throws ParseException, SkyflowException { - String[] split = encodedToken.split("\\."); - if (split.length < 3) { - throw new SkyflowException(ErrorCode.InvalidBearerToken); - } - byte[] decodedBytes = Base64.decodeBase64(split[1]); - return (JSONObject) new JSONParser().parse(new String(decodedBytes, StandardCharsets.UTF_8)); - } - - public String getBearerToken(TokenProvider tokenProvider) throws SkyflowException { - if (token != null && isTokenValid(token)) - return token; - - try { - token = tokenProvider.getBearerToken(); - if(!isTokenValid(token)){ - LogUtil.printErrorLog(ErrorLogs.BearerTokenExpired.getLog()); - throw new SkyflowException(ErrorCode.BearerTokenExpired); - } - } catch (SkyflowException exception) { - throw exception; - } catch (Exception e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.BearerThrownException.getLog(), e.getMessage())); - throw new SkyflowException(ErrorCode.BearerThrownException.getCode(), e.getMessage(), e); - } - return token; - } -} diff --git a/v1/src/main/java/com/skyflow/common/utils/Validators.java b/v1/src/main/java/com/skyflow/common/utils/Validators.java deleted file mode 100644 index c1eda9e1..00000000 --- a/v1/src/main/java/com/skyflow/common/utils/Validators.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.common.utils; - -import com.skyflow.entities.*; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import com.skyflow.logs.InfoLogs; -import org.json.simple.JSONObject; - -import java.net.URL; -import java.util.Objects; - -public final class Validators { - public static void validateConfiguration(SkyflowConfiguration config) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.ValidatingSkyflowConfiguration.getLog()); - if (config.getVaultID() == null || config.getVaultID().length() <= 0) { - LogUtil.printErrorLog(ErrorLogs.InvalidVaultId.getLog()); - throw new SkyflowException(ErrorCode.EmptyVaultID); - } - - if (config.getVaultURL() == null || isInvalidURL(config.getVaultURL())) { - LogUtil.printErrorLog(ErrorLogs.InvalidVaultURL.getLog()); - throw new SkyflowException(ErrorCode.InvalidVaultURL); - } - - if (config.getTokenProvider() == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidTokenProvider.getLog()); - throw new SkyflowException(ErrorCode.InvalidTokenProvider); - } - - } - - public static void validateConnectionConfiguration(JSONObject connectionConfig, SkyflowConfiguration skyflowConfiguration) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.ValidatingInvokeConnectionConfig.getLog()); - if (skyflowConfiguration.getTokenProvider() == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidTokenProvider.getLog()); - throw new SkyflowException(ErrorCode.InvalidTokenProvider); - } - - if (connectionConfig.containsKey("connectionURL")) { - String connectionURL = (String) connectionConfig.get("connectionURL"); - if (isInvalidURL(connectionURL)) { - LogUtil.printErrorLog(ErrorLogs.InvalidConnectionURL.getLog()); - throw new SkyflowException(ErrorCode.InvalidConnectionURL); - } - } else { - LogUtil.printErrorLog(ErrorLogs.ConnectionURLMissing.getLog()); - throw new SkyflowException(ErrorCode.ConnectionURLMissing); - } - - if (connectionConfig.containsKey("methodName")) { - try { - RequestMethod requestMethod = (RequestMethod) connectionConfig.get("methodName"); - } catch (Exception e) { - LogUtil.printErrorLog(ErrorLogs.InvalidMethodName.getLog()); - throw new SkyflowException(ErrorCode.InvalidMethodName); - } - } else { - LogUtil.printErrorLog(ErrorLogs.MethodNameMissing.getLog()); - throw new SkyflowException(ErrorCode.MethodNameMissing); - } - } - - public static void validateUpsertOptions(UpsertOption[] upsertOptions) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.ValidatingUpsertOptions.getLog()); - if (upsertOptions.length == 0) { - LogUtil.printErrorLog(ErrorLogs.InvalidUpsertOptionType.getLog()); - throw new SkyflowException(ErrorCode.InvalidUpsertOptionType); - } - - for (UpsertOption upsertOption : upsertOptions) { - if (upsertOption == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidUpsertObjectType.getLog()); - throw new SkyflowException(ErrorCode.InvalidUpsertObjectType); - } - - if (upsertOption.getTable() == null || Objects.equals(upsertOption.getTable(), "")) { - LogUtil.printErrorLog(ErrorLogs.InvalidTableInUpsertOption.getLog()); - throw new SkyflowException(ErrorCode.InvalidTableInUpsertOption); - } - if (upsertOption.getColumn() == null || Objects.equals(upsertOption.getColumn(), "")) { - LogUtil.printErrorLog(ErrorLogs.InvalidColumnInUpsertOption.getLog()); - throw new SkyflowException(ErrorCode.InvalidColumnInUpsertOption); - } - } - - } - - private static boolean isInvalidURL(String configURL) { - try { - URL url = new URL(configURL); - if (!url.getProtocol().equals("https")) throw new Exception(); - } catch (Exception e) { - return true; - } - return false; - } - - public static void validateGetByIdRequestRecord(GetByIdRecordInput record) throws SkyflowException { - String table = record.getTable(); - - if (table == null || table.trim().isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.InvalidTable.getLog()); - throw new SkyflowException(ErrorCode.InvalidTable); - } - } - - public static void validateGetRequestRecord(GetRecordInput record, GetOptions getOptions) throws SkyflowException { - String[] ids = record.getIds(); - String table = record.getTable(); - String columnName = record.getColumnName(); - String[] columnValues = record.getColumnValues(); - RedactionType redaction = record.getRedaction(); - - if (table == null || table.trim().isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.InvalidTable.getLog()); - throw new SkyflowException(ErrorCode.InvalidTable); - } - if (getOptions.getOptionToken() == false && redaction == null) { - LogUtil.printErrorLog((ErrorLogs.MissingRedaction.getLog())); - throw new SkyflowException(ErrorCode.MissingRedaction); - } - - if (ids == null && columnName == null && columnValues == null) { - LogUtil.printErrorLog(ErrorLogs.MissingIdAndColumnName.getLog()); - throw new SkyflowException(ErrorCode.MissingIdAndColumnName); - } - if( ids != null && columnName != null) { - LogUtil.printErrorLog(ErrorLogs.SkyflowIdAndColumnNameBothSpecified.getLog()); - throw new SkyflowException(ErrorCode.SkyflowIdAndColumnNameBothSpecified); - } - - if (columnName != null && columnValues == null) { - LogUtil.printErrorLog(ErrorLogs.MissingRecordColumnValue.getLog()); - throw new SkyflowException(ErrorCode.MissingRecordColumnValue); - } - if (columnName == null && columnValues != null) { - LogUtil.printErrorLog(ErrorLogs.MissingRecordColumnName.getLog()); - throw new SkyflowException(ErrorCode.MissingRecordColumnName); - } - if (getOptions.getOptionToken() == true) { - if (columnName != null || columnValues != null) { - LogUtil.printErrorLog(ErrorLogs.TokensGetColumnNotSupported.getLog()); - throw new SkyflowException(ErrorCode.TokensGetColumnNotSupported); - } - if (redaction != null) { - LogUtil.printErrorLog(ErrorLogs.RedactionWithTokenNotSupported.getLog()); - throw new SkyflowException(ErrorCode.RedactionWithTokenNotSupported); - } - } - } - public static void validateDeleteBySkyflowId(DeleteRecordInput deleteRecordInput) throws SkyflowException{ - String table = deleteRecordInput.getTable(); - String id = deleteRecordInput.getId(); - if (table == null || table.trim().isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.InvalidTable.getLog()); - throw new SkyflowException(ErrorCode.InvalidTable); - } - if (id == null || id.trim().isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.InvalidId.getLog()); - throw new SkyflowException(ErrorCode.InvalidId); - } - - } - public static void validateInsertRecord(InsertRecordInput record) throws SkyflowException { - if (record.getTable() == null || record.getTable().isEmpty()) { - throw new SkyflowException(ErrorCode.InvalidTable); - } - if (record.getFields() == null) { - throw new SkyflowException(ErrorCode.InvalidFields); - } - } -} diff --git a/v1/src/main/java/com/skyflow/entities/DeleteInput.java b/v1/src/main/java/com/skyflow/entities/DeleteInput.java deleted file mode 100644 index 422d929d..00000000 --- a/v1/src/main/java/com/skyflow/entities/DeleteInput.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.skyflow.entities; - -public class DeleteInput { - private DeleteRecordInput[] records; - - public DeleteRecordInput[] getRecords() { - return records; - } - - public void setRecords(DeleteRecordInput[] records) { - this.records = records; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/DeleteOptions.java b/v1/src/main/java/com/skyflow/entities/DeleteOptions.java deleted file mode 100644 index affa26c6..00000000 --- a/v1/src/main/java/com/skyflow/entities/DeleteOptions.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.skyflow.entities; - -public class DeleteOptions { - public DeleteOptions(){} -} diff --git a/v1/src/main/java/com/skyflow/entities/DeleteRecordInput.java b/v1/src/main/java/com/skyflow/entities/DeleteRecordInput.java deleted file mode 100644 index 6e11b2a4..00000000 --- a/v1/src/main/java/com/skyflow/entities/DeleteRecordInput.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.skyflow.entities; - -public class DeleteRecordInput { - private String id; - private String table; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getTable() { - return table; - } - - public void setTable(String table) { - this.table = table; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/DetokenizeInput.java b/v1/src/main/java/com/skyflow/entities/DetokenizeInput.java deleted file mode 100644 index b8d8f908..00000000 --- a/v1/src/main/java/com/skyflow/entities/DetokenizeInput.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public class DetokenizeInput { - private DetokenizeRecord[] records; - - public DetokenizeRecord[] getRecords() { - return records; - } - - public void setRecords(DetokenizeRecord[] records) { - this.records = records; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/DetokenizeRecord.java b/v1/src/main/java/com/skyflow/entities/DetokenizeRecord.java deleted file mode 100644 index 4bd9ee40..00000000 --- a/v1/src/main/java/com/skyflow/entities/DetokenizeRecord.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public class DetokenizeRecord { - private String token; - private RedactionType redaction = RedactionType.PLAIN_TEXT; - - public String getToken() { - return token; - } - - void setToken(String token) { - this.token = token; - } - - public RedactionType getRedaction() { - return redaction; - } - - public void setRedaction(RedactionType redaction) { - this.redaction = redaction; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/GetByIdInput.java b/v1/src/main/java/com/skyflow/entities/GetByIdInput.java deleted file mode 100644 index a31f4b49..00000000 --- a/v1/src/main/java/com/skyflow/entities/GetByIdInput.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public class GetByIdInput { - private GetByIdRecordInput[] records; - - public GetByIdRecordInput[] getRecords() { - return records; - } - - public void setRecords(GetByIdRecordInput[] records) { - this.records = records; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/GetByIdRecordInput.java b/v1/src/main/java/com/skyflow/entities/GetByIdRecordInput.java deleted file mode 100644 index e858bb24..00000000 --- a/v1/src/main/java/com/skyflow/entities/GetByIdRecordInput.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public class GetByIdRecordInput { - private String[] ids; - private String table; - private RedactionType redaction; - - public String[] getIds() { - return ids; - } - - public void setIds(String[] ids) { - this.ids = ids; - } - - public String getTable() { - return table; - } - - public void setTable(String table) { - this.table = table; - } - - public RedactionType getRedaction() { - return redaction; - } - - public void setRedaction(RedactionType redaction) { - this.redaction = redaction; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/GetInput.java b/v1/src/main/java/com/skyflow/entities/GetInput.java deleted file mode 100644 index 786be682..00000000 --- a/v1/src/main/java/com/skyflow/entities/GetInput.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public class GetInput { - private GetRecordInput[] records; - - public GetRecordInput[] getRecords() { - return records; - } - - public void setRecords(GetRecordInput[] records) { - this.records = records; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/GetOptions.java b/v1/src/main/java/com/skyflow/entities/GetOptions.java deleted file mode 100644 index 7620b761..00000000 --- a/v1/src/main/java/com/skyflow/entities/GetOptions.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.skyflow.entities; - -public class GetOptions { - private boolean tokens; - - public GetOptions(){ - this.tokens = false; - } - public GetOptions(boolean tokens){ - this.tokens = tokens; - } - - public boolean getOptionToken(){ - return tokens; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/GetRecordInput.java b/v1/src/main/java/com/skyflow/entities/GetRecordInput.java deleted file mode 100644 index 169c0c18..00000000 --- a/v1/src/main/java/com/skyflow/entities/GetRecordInput.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public class GetRecordInput { - private String[] ids; - private String table; - private String columnName; - private String[] columnValues; - private RedactionType redaction; - - public String[] getIds() { - return ids; - } - - public void setIds(String[] ids) { - this.ids = ids; - } - - public String getTable() { - return table; - } - - public void setTable(String table) { - this.table = table; - } - - public String getColumnName() { - return columnName; - } - - public void setColumnName(String columnName) { - this.columnName = columnName; - } - - public String[] getColumnValues() { - return columnValues; - } - - public void setColumnValues(String[] columnValues) { - this.columnValues = columnValues; - } - - public RedactionType getRedaction() { - return redaction; - } - - public void setRedaction(RedactionType redaction) { - this.redaction = redaction; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/InsertBulkOptions.java b/v1/src/main/java/com/skyflow/entities/InsertBulkOptions.java deleted file mode 100644 index b7c03963..00000000 --- a/v1/src/main/java/com/skyflow/entities/InsertBulkOptions.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.skyflow.entities; - -public class InsertBulkOptions { - - private boolean tokens; - private UpsertOption[] upsertOptions; - - public InsertBulkOptions() { - this.tokens = true; - this.upsertOptions = null; - } - - public InsertBulkOptions(boolean tokens) { - this.tokens = tokens; - this.upsertOptions = null; - } - - public InsertBulkOptions(UpsertOption[] upsertOptions) { - this.tokens = true; - this.upsertOptions = upsertOptions; - } - - public InsertBulkOptions(boolean tokens, UpsertOption[] upsertOptions) { - this.tokens = tokens; - this.upsertOptions = upsertOptions; - } - - public boolean isTokens() { - return tokens; - } - - public UpsertOption[] getUpsertOptions() { - return upsertOptions; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/InsertInput.java b/v1/src/main/java/com/skyflow/entities/InsertInput.java deleted file mode 100644 index 0163aace..00000000 --- a/v1/src/main/java/com/skyflow/entities/InsertInput.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public class InsertInput { - - private InsertRecordInput[] records; - - public InsertRecordInput[] getRecords() { - return records; - } - - public void setRecords(InsertRecordInput[] records) { - this.records = records; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/InsertOptions.java b/v1/src/main/java/com/skyflow/entities/InsertOptions.java deleted file mode 100644 index 16739892..00000000 --- a/v1/src/main/java/com/skyflow/entities/InsertOptions.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public class InsertOptions { - - private boolean tokens; - private UpsertOption[] upsertOptions; - private boolean continueOnError; - - public InsertOptions() { - this.tokens = true; - this.upsertOptions = null; - this.continueOnError = false; - } - - public InsertOptions(boolean tokens) { - this.tokens = tokens; - this.upsertOptions = null; - } - - public InsertOptions(UpsertOption[] upsertOptions) { - this.tokens = true; - this.upsertOptions = upsertOptions; - } - - public InsertOptions(boolean tokens, UpsertOption[] upsertOptions) { - this.tokens = tokens; - this.upsertOptions = upsertOptions; - } - - public InsertOptions(boolean tokens, boolean continueOnError) { - this.tokens = tokens; - this.continueOnError = continueOnError; - } - - public InsertOptions(UpsertOption[] upsertOptions, boolean continueOnError) { - this.upsertOptions = upsertOptions; - this.continueOnError = continueOnError; - } - - public InsertOptions(boolean tokens, UpsertOption[] upsertOptions, boolean continueOnError) { - this.tokens = tokens; - this.upsertOptions = upsertOptions; - this.continueOnError = continueOnError; - } - - public boolean isTokens() { - return tokens; - } - - public UpsertOption[] getUpsertOptions() { - return upsertOptions; - } - - public boolean isContinueOnError() { - return continueOnError; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/InsertRecordInput.java b/v1/src/main/java/com/skyflow/entities/InsertRecordInput.java deleted file mode 100644 index 6572b5c0..00000000 --- a/v1/src/main/java/com/skyflow/entities/InsertRecordInput.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -import org.json.simple.JSONObject; - -public class InsertRecordInput { - private String table; - private JSONObject fields; - - public String getTable() { - return table; - } - - public void setTable(String table) { - this.table = table; - } - - public JSONObject getFields() { - return fields; - } - - public void setFields(JSONObject fields) { - this.fields = fields; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/LogLevel.java b/v1/src/main/java/com/skyflow/entities/LogLevel.java deleted file mode 100644 index 3bed5284..00000000 --- a/v1/src/main/java/com/skyflow/entities/LogLevel.java +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public enum LogLevel { - DEBUG, - INFO, - WARN, - ERROR, - OFF -} diff --git a/v1/src/main/java/com/skyflow/entities/QueryInput.java b/v1/src/main/java/com/skyflow/entities/QueryInput.java deleted file mode 100644 index 7e578d41..00000000 --- a/v1/src/main/java/com/skyflow/entities/QueryInput.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.skyflow.entities; - -public class QueryInput { - private QueryRecordInput queryInput; - - public QueryRecordInput getQueryInput() { - return queryInput; - } - - public void setQueryInput(QueryRecordInput queryInput) { - this.queryInput = queryInput; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/QueryOptions.java b/v1/src/main/java/com/skyflow/entities/QueryOptions.java deleted file mode 100644 index 7cc1a3de..00000000 --- a/v1/src/main/java/com/skyflow/entities/QueryOptions.java +++ /dev/null @@ -1,8 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public class QueryOptions { - -} diff --git a/v1/src/main/java/com/skyflow/entities/QueryRecordInput.java b/v1/src/main/java/com/skyflow/entities/QueryRecordInput.java deleted file mode 100644 index 032c4fd0..00000000 --- a/v1/src/main/java/com/skyflow/entities/QueryRecordInput.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.skyflow.entities; - -public class QueryRecordInput { - private String query; - public String getQuery() { - return query; - } - public void setQuery(String query) { - this.query = query; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/RedactionType.java b/v1/src/main/java/com/skyflow/entities/RedactionType.java deleted file mode 100644 index 7bf240fc..00000000 --- a/v1/src/main/java/com/skyflow/entities/RedactionType.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public enum RedactionType { - DEFAULT("DEFAULT"), - PLAIN_TEXT("PLAIN_TEXT"), - MASKED("MASKED"), - REDACTED("REDACTED"), - ; - - private final String text; - - RedactionType(final String text) { - this.text = text; - } - - @Override - public String toString() { - return text; - } - -} diff --git a/v1/src/main/java/com/skyflow/entities/RequestMethod.java b/v1/src/main/java/com/skyflow/entities/RequestMethod.java deleted file mode 100644 index 7e2cea75..00000000 --- a/v1/src/main/java/com/skyflow/entities/RequestMethod.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public enum RequestMethod { - GET("GET"), - POST("POST"), - PUT("PUT"), - PATCH("PATCH"), - DELETE("DELETE"), - ; - - private final String requestMethod; - - - RequestMethod(String requestMethod) { - this.requestMethod = requestMethod; - } - - @Override - public String toString() { - return requestMethod; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/ResponseToken.java b/v1/src/main/java/com/skyflow/entities/ResponseToken.java deleted file mode 100644 index d1e4e978..00000000 --- a/v1/src/main/java/com/skyflow/entities/ResponseToken.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public class ResponseToken { - private String accessToken; - private String tokenType; - - public String getAccessToken() { - return accessToken; - } - - public void setAccessToken(String accessToken) { - this.accessToken = accessToken; - } - - public String getTokenType() { - return tokenType; - } - - public void setTokenType(String tokenType) { - this.tokenType = tokenType; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/SkyflowConfiguration.java b/v1/src/main/java/com/skyflow/entities/SkyflowConfiguration.java deleted file mode 100644 index a240e8ca..00000000 --- a/v1/src/main/java/com/skyflow/entities/SkyflowConfiguration.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public final class SkyflowConfiguration { - private final String vaultID; - private final String vaultURL; - private final TokenProvider tokenProvider; - - /** - * - * @param vaultID is the Skyflow vaultID, which can be found in EditVault Details. - * @param vaultURL is the vaultURL, which can be found in EditVault Details. - * @param tokenProvider class which implements the TokenProvider interface. - */ - public SkyflowConfiguration(String vaultID, String vaultURL, TokenProvider tokenProvider) { - this.vaultID = vaultID; - this.vaultURL = formatVaultURL(vaultURL); - this.tokenProvider = tokenProvider; - } - public SkyflowConfiguration(TokenProvider tokenProvider){ - this.vaultID = ""; - this.vaultURL = ""; - this.tokenProvider = tokenProvider; - } - - - public String getVaultID() { - return vaultID; - } - - public String getVaultURL() { - return vaultURL; - } - - public TokenProvider getTokenProvider() { - return tokenProvider; - } - - private String formatVaultURL(String vaultURL){ - if(vaultURL != null && vaultURL.trim().length() > 0 && vaultURL.trim().charAt(vaultURL.trim().length() - 1) == '/') - return vaultURL.trim().substring(0,vaultURL.trim().length()-1); - return vaultURL; - } -} \ No newline at end of file diff --git a/v1/src/main/java/com/skyflow/entities/TokenProvider.java b/v1/src/main/java/com/skyflow/entities/TokenProvider.java deleted file mode 100644 index 95863a21..00000000 --- a/v1/src/main/java/com/skyflow/entities/TokenProvider.java +++ /dev/null @@ -1,10 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -import com.skyflow.errors.SkyflowException; - -public interface TokenProvider { - String getBearerToken() throws Exception; -} diff --git a/v1/src/main/java/com/skyflow/entities/UpdateInput.java b/v1/src/main/java/com/skyflow/entities/UpdateInput.java deleted file mode 100644 index 9c7319d2..00000000 --- a/v1/src/main/java/com/skyflow/entities/UpdateInput.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.skyflow.entities; - -public class UpdateInput { - private UpdateRecordInput[] records; - - public UpdateRecordInput[] getRecords() { - return records; - } - - public void setRecords(UpdateRecordInput[] records) { - this.records = records; - } -} diff --git a/v1/src/main/java/com/skyflow/entities/UpdateOptions.java b/v1/src/main/java/com/skyflow/entities/UpdateOptions.java deleted file mode 100644 index 0f3703ec..00000000 --- a/v1/src/main/java/com/skyflow/entities/UpdateOptions.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.skyflow.entities; - -public class UpdateOptions { - private boolean tokens; - - public UpdateOptions() { - this.tokens = true; - } - - public UpdateOptions(boolean tokens) { - this.tokens = tokens; - } - - public boolean isTokens() { - return tokens; - } - -} diff --git a/v1/src/main/java/com/skyflow/entities/UpdateRecordInput.java b/v1/src/main/java/com/skyflow/entities/UpdateRecordInput.java deleted file mode 100644 index b6283e80..00000000 --- a/v1/src/main/java/com/skyflow/entities/UpdateRecordInput.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.skyflow.entities; - -import org.json.simple.JSONObject; - -public class UpdateRecordInput { - private String id; - private String table; - private JSONObject fields; - - public String getTable() { - return table; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public void setTable(String table) { - this.table = table; - } - - public JSONObject getFields() { - return fields; - } - - public void setFields(JSONObject fields) { - this.fields = fields; - } - - -} diff --git a/v1/src/main/java/com/skyflow/entities/UpsertOption.java b/v1/src/main/java/com/skyflow/entities/UpsertOption.java deleted file mode 100644 index 7c50eb71..00000000 --- a/v1/src/main/java/com/skyflow/entities/UpsertOption.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.entities; - -public class UpsertOption { - private String table; - private String column; - - public UpsertOption(String table, String column) { - this.table = table; - this.column = column; - } - - public String getTable() { - return table; - } - - public String getColumn() { - return column; - } -} diff --git a/v1/src/main/java/com/skyflow/errors/ErrorCode.java b/v1/src/main/java/com/skyflow/errors/ErrorCode.java deleted file mode 100644 index f996d828..00000000 --- a/v1/src/main/java/com/skyflow/errors/ErrorCode.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.errors; - -public enum ErrorCode { - InvalidVaultURL(400, "Invalid Vault URL"), - EmptyVaultID(400, "Empty Vault ID"), - InvalidTokenProvider(400, "Invalid TokenProvider"), - InvalidKeySpec(400, "Unable to parse RSA private key"), - NoSuchAlgorithm(400, "Invalid algorithm"), - UnableToRetrieveRSA(400, "Unable to retrieve RSA private key"), - UnableToReadResponse(400, "Unable to read response payload"), - InvalidTokenURI(400, "Unable to read tokenURI"), - InvalidKeyID(400, "Unable to read keyID"), - InvalidClientID(400, "Unable to read clientID"), - InvalidCredentialsPath(400, "Unable to open credentials - file %s1"), - InvalidJsonFormat(400, "Provided json file is in wrong format - file %s1"), - InvalidBearerToken(400, "Invalid token"), - BearerThrownException(400, "getBearer() thrown exception"), - EmptyRecords(400, "Records cannot be empty"), - InvalidTable(400, "Table name is missing"), - InvalidId(400, "Skyflow id is missing"), - InvalidFields(400, "Fields are missing"), - InvalidQueryInput(400, "Invalid query input"), - InvalidQuery(400, "Query is missing"), - InvalidSkyflowId(400, "Skyflow id are missing"), - InvalidToken(400, "Token is empty"), - InvalidDetokenizeInput(400, "Invalid Detokenize Input"), - InvalidInsertInput(400, "Invalid insert input"), - InvalidUpdateInput(400, "Invalid update input"), - InvalidDeleteInput(400, "Invalid delete input"), - InvalidGetByIdInput(400, "Invalid getById input"), - InvalidGetInput(400, "Invalid get input"), - MissingIdAndColumnName(400, "Provide either Ids or column name to get records."), - SkyflowIdAndColumnNameBothSpecified(400, "ids and columnName can not be specified together."), - MissingRecordColumnValue(400, "Column Values can not be empty when Column Name is specified."), - MissingRecordColumnName(400, "Column Name can not be empty when Column Values are specified."), - ResponseParsingError(500, "Unable to parse response"), - ThreadInterruptedException(500, "Thread was interrupted"), - ThreadExecutionException(500, "ThreadExecution exception"), - Server(500, "Internal server error"), - ServerReturnedErrors(500, "Server returned errors, check SkyflowException.getData() for more"), - ConnectionURLMissing(400, "connectionURL is required"), - InvalidConnectionURL(400, "Invalid connectionURL"), - MethodNameMissing(400, "methodName is required"), - InvalidMethodName(400, "methodName is invalid"), - InvalidConnectionInput(400, "Invalid connection Input"), - EmptyJSONString(400, "credentials string cannot be empty"), - InvalidJSONStringFormat(400, "credentials string is not a valid json string format"), - EmptyFilePath(400, "file path cannot be empty or null"), - EmptyContext(400, "ctx claim field is missing from the jwt assertion"), - IncorrectRole(400, "Requested scope cannot be granted"), - IncorrectCredentials(400, "Incorrect credentials provided"), - InvalidUpsertOptionType(400, "upsert options should be an non empty UpsertOption array."), - InvalidUpsertObjectType(400, "upsert option cannot be null, should be an UpsertOption object."), - InvalidTableInUpsertOption(400, "Invalid table in upsert object, non empty string is required."), - InvalidColumnInUpsertOption(400, "Invalid column in upsert object, non empty string is required."), - MissingRedaction(400, "Missing Redaction Property"), - TokensGetColumnNotSupported(400,"Interface: get method - column_name or column_values cannot be used with tokens in options."), - RedactionWithTokenNotSupported(400, "Interface: get method - redaction cannot be used when tokens are true in options."), - - BearerTokenExpired(400,"Bearer token is invalid or expired."); - private final int code; - private final String description; - - ErrorCode(int code, String description) { - this.code = code; - this.description = description; - } - - public int getCode() { - return code; - } - - public String getDescription() { - return description; - } -} diff --git a/v1/src/main/java/com/skyflow/errors/SkyflowException.java b/v1/src/main/java/com/skyflow/errors/SkyflowException.java deleted file mode 100644 index 129eb67d..00000000 --- a/v1/src/main/java/com/skyflow/errors/SkyflowException.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.errors; - -import org.json.simple.JSONObject; - -public final class SkyflowException extends Exception { - private int code; - private JSONObject data; - - public SkyflowException(ErrorCode errorCode) { - super(errorCode.getDescription()); - this.setCode(errorCode.getCode()); - } - - public SkyflowException(ErrorCode errorCode, Throwable cause) { - super(errorCode.getDescription(), cause); - this.setCode(errorCode.getCode()); - } - - public SkyflowException(int code, String description) { - super(description); - this.setCode(code); - } - - public SkyflowException(int code, String description, Throwable cause) { - super(description, cause); - this.setCode(code); - } - - public SkyflowException(int code, String description, JSONObject data) { - super(description); - this.setCode(code); - setData(data); - } - - public int getCode() { - return code; - } - - void setCode(int code) { - this.code = code; - } - - - public JSONObject getData() { - return data; - } - - void setData(JSONObject data) { - this.data = data; - } -} diff --git a/v1/src/main/java/com/skyflow/logs/DebugLogs.java b/v1/src/main/java/com/skyflow/logs/DebugLogs.java deleted file mode 100644 index 82e636d4..00000000 --- a/v1/src/main/java/com/skyflow/logs/DebugLogs.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.logs; - -public enum DebugLogs { - - FormatRequestBodyFormUrlFormEncoded("Formatting request body for form-urlencoded content-type"), - FormatRequestBodyFormData("Formatting request body for form-data content-type"); - private final String log; - - DebugLogs(String log) { - this.log = log; - } - - public String getLog() { - return log; - } -} \ No newline at end of file diff --git a/v1/src/main/java/com/skyflow/logs/ErrorLogs.java b/v1/src/main/java/com/skyflow/logs/ErrorLogs.java deleted file mode 100644 index 2f7c78ff..00000000 --- a/v1/src/main/java/com/skyflow/logs/ErrorLogs.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.logs; - -public enum ErrorLogs { - InvalidVaultId("empty or invalid vaultID"), - InvalidVaultURL("invalid vault url"), - InvalidTokenProvider("invalid TokenProvider. TokenProvider cannot be null"), - InvalidInsertInput("invalid insert input"), - InvalidUpdateInput("invalid update input"), - InvalidDeleteInput("invalid delete input"), - InvalidDetokenizeInput("invalid detokenize input"), - InvalidQueryInput("Invalid query input"), - ResponseParsingError("Unable to parse response in %s1 method"), - ThreadInterruptedException("Thread was interrupted in %s1 method"), - ThreadExecutionException("ThreadExecution exception in %s1 method"), - InvalidGetByIdInput("Invalid getById input"), - InvalidGetInput("Invalid get input"), - MissingIdAndColumnName("Provide either Ids or column name to get records."), - SkyflowIdAndColumnNameBothSpecified("ids and columnName can not be specified together."), - MissingRecordColumnValue("Column Values can not be empty when Column Name is specified."), - MissingRecordColumnName("Column Name can not be empty when Column Values are specified."), - InvalidInvokeConnectionInput("Invalid invokeConnection Input"), - ConnectionURLMissing("connectionURL is required"), - InvalidConnectionURL("Invalid connectionURL"), - MethodNameMissing("methodName is required"), - InvalidMethodName("methodName is invalid"), - InvalidKeySpec("Unable to parse RSA private key"), - NoSuchAlgorithm("Invalid algorithm"), - UnableToRetrieveRSA("Unable to retrieve RSA private key"), - UnableToReadResponse("Unable to read response payload"), - InvalidTokenURI("Unable to read tokenURI"), - InvalidKeyID("Unable to read keyID"), - InvalidClientID("Unable to read clientID"), - InvalidCredentialsPath("Unable to open credentials - file %s1"), - InvalidJsonFormat("Provided json file is in wrong format - file %s1"), - EmptyJSONString("credentials string cannot be empty or null"), - EmptyFilePath("file path cannot be empty or null"), - InvalidJSONStringFormat("credentials string is not a valid json string format"), - BearerThrownException("getBearer() thrown exception "), - InvalidBearerToken("Invalid Bearer token"), - InvalidTable("Table name is missing"), - InvalidId("Skyflow id is missing"), - InvalidQuery("Query is missing"), - - Server("Internal server error"), - ServerReturnedErrors("Server returned errors, check SkyflowException.getData() for more"), - InvalidUpsertOptionType("upsert options cannot be null, should be an non empty UpsertOption array."), - InvalidTableInUpsertOption("Invalid table in upsert object, non empty string is required."), - InvalidColumnInUpsertOption("Invalid column in upsert object, non empty string is required."), - InvalidUpsertObjectType("upsert option cannot be null, should be an UpsertOption object."), - InvalidSkyflowId("Skyflow Id is missing"), - InvalidField("Fields missing"), - MissingRedaction("Missing Redaction property."), - TokensGetColumnNotSupported("Interface: get method - column_name or column_values cannot be used with tokens in options."), - RedactionWithTokenNotSupported("Interface: get method - redaction cannot be used when tokens are true in options."), - InvalidToken("Invalid Token value"), - BearerTokenExpired("Bearer token is invalid or expired."); - - private final String log; - - ErrorLogs(String log) { - this.log = log; - } - - public final String getLog() { - return log; - } -} diff --git a/v1/src/main/java/com/skyflow/logs/InfoLogs.java b/v1/src/main/java/com/skyflow/logs/InfoLogs.java deleted file mode 100644 index 33728a3a..00000000 --- a/v1/src/main/java/com/skyflow/logs/InfoLogs.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.logs; - -public enum InfoLogs { - EmptyBearerToken("BearerToken is empty"), - InitializedClient("skyflow client initialized successfully"), - CurrentLogLevel("client LogLevel is %s1"), - LoggerSetup("logger has setup successfully"), - ValidatingSkyflowConfiguration("validating skyflow configuration"), - ValidatedSkyflowConfiguration("validated skyflow configuration in %s1 method"), - ValidatingInvokeConnectionConfig("validating invoke connection configuration"), - InsertMethodCalled("insert method has triggered"), - InsertBulkMethodCalled("insertBulk method has triggered"), - - UpdateMethodCalled("update method has triggered"), - deleteMethodCalled("delete method has triggered"), - ConstructInsertResponse("constructing insert response"), - ConstructUpdateResponse("constructing update response"), - DetokenizeMethodCalled("detokenize method has triggered"), - GetByIdMethodCalled("getById method has triggered"), - GetMethodCalled("get method has triggered"), - InvokeConnectionCalled("invokeConnection method has triggered"), - GenerateBearerTokenCalled("generateBearerToken method has triggered"), - QuerySupportCalled("query method has triggered"), - GenerateBearerTokenFromCredsCalled("generateBearerTokenFromCreds method has triggered"), - ValidatingUpsertOptions("validating upsert options."), - TokenUtilsInstanceCreated("token utils instance created"); - private final String log; - - InfoLogs(String log) { - this.log = log; - } - - public String getLog() { - return log; - } -} diff --git a/v1/src/main/java/com/skyflow/logs/WarnLogs.java b/v1/src/main/java/com/skyflow/logs/WarnLogs.java deleted file mode 100644 index 6a1a3d16..00000000 --- a/v1/src/main/java/com/skyflow/logs/WarnLogs.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.logs; - -public enum WarnLogs { - GetTokenDeprecated("GenerateToken method is deprecated, will be removed in future, use generateBearerToken()"), - IsValidDeprecated("isValid method is deprecated, will be removed in future, use isExpired()"); - private final String log; - - WarnLogs(String log) { - this.log = log; - } - - public String getLog() { - return log; - } -} diff --git a/v1/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java b/v1/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java deleted file mode 100644 index a40ec2c2..00000000 --- a/v1/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.serviceaccount.util; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.skyflow.common.utils.Constants; -import com.skyflow.common.utils.Helpers; -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.LogUtil; -import com.skyflow.entities.ResponseToken; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import com.skyflow.logs.InfoLogs; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.net.URL; -import java.security.PrivateKey; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -public class BearerToken { - private final File credentialsFile; - private final String credentialsString; - private final String ctx; - - private final String[] roles; - - private final String credentialsType; - - private BearerToken(BearerTokenBuilder builder) { - this.credentialsFile = builder.credentialsFile; - this.credentialsString = builder.credentialsString; - this.ctx = builder.ctx; - this.roles = builder.roles; - this.credentialsType = builder.credentialsType; - } - - // Builder class - public static class BearerTokenBuilder { - private File credentialsFile; - private String credentialsString; - private String ctx; - private String[] roles; - - private String credentialsType; - - private void setCredentialsType(String credentialsType) { - this.credentialsType = credentialsType; - } - - public BearerTokenBuilder setCredentials(File credentialsFile) { - setCredentialsType("FILE"); - this.credentialsFile = credentialsFile; - return this; - } - - public BearerTokenBuilder setCredentials(String credentialsString) { - setCredentialsType("STRING"); - this.credentialsString = credentialsString; - return this; - } - - public BearerTokenBuilder setCtx(String ctx) { - this.ctx = ctx; - return this; - } - - public BearerTokenBuilder setRoles(String[] roles) { - this.roles = roles; - return this; - } - - public BearerToken build() { - return new BearerToken(this); - } - } - - public synchronized String getBearerToken() throws SkyflowException { - // Make API call in generateBearerToken function to get the token - ResponseToken response; - String accessToken = null; - - try { - if (this.credentialsFile != null && Objects.equals(this.credentialsType, "FILE")) { - response = generateBearerTokenFromCredentials(this.credentialsFile, this.ctx, this.roles); - accessToken = response.getAccessToken(); - - } else if (this.credentialsString != null && Objects.equals(this.credentialsType, "STRING")) { - response = generateBearerTokenFromCredentialString(this.credentialsString, this.ctx, this.roles); - accessToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - return accessToken; - } - - private static ResponseToken generateBearerTokenFromCredentials(File credentialsPath, String context, - String[] roles) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.GenerateBearerTokenFromCredsCalled.getLog()); - JSONParser parser = new JSONParser(); - ResponseToken responseToken; - try { - if (credentialsPath == null || !credentialsPath.isFile()) { - LogUtil.printErrorLog(ErrorLogs.EmptyJSONString.getLog()); - throw new SkyflowException(ErrorCode.EmptyJSONString); - } - - Object obj = parser.parse(new FileReader(String.valueOf(credentialsPath))); - JSONObject saCreds = (JSONObject) obj; - - responseToken = getBearerTokenFromCreds(saCreds, context, roles); - - } catch (ParseException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidJSONStringFormat.getLog()); - throw new SkyflowException(ErrorCode.InvalidJSONStringFormat, e); - } catch (IOException e) { - throw new RuntimeException(e); - } - - return responseToken; - } - - private static ResponseToken generateBearerTokenFromCredentialString(String credentials, String context, - String[] roles) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.GenerateBearerTokenFromCredsCalled.getLog()); - JSONParser parser = new JSONParser(); - ResponseToken responseToken; - try { - if (credentials == null || credentials.isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.EmptyJSONString.getLog()); - throw new SkyflowException(ErrorCode.EmptyJSONString); - } - - Object obj = parser.parse(credentials); - JSONObject saCreds = (JSONObject) obj; - - responseToken = getBearerTokenFromCreds(saCreds, context, roles); - - } catch (ParseException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidJSONStringFormat.getLog()); - throw new SkyflowException(ErrorCode.InvalidJSONStringFormat, e); - } - return responseToken; - } - - private static ResponseToken getBearerTokenFromCreds(JSONObject creds, String context, String[] roles) - throws SkyflowException { - ResponseToken responseToken; - try { - String clientID = (String) creds.get("clientID"); - if (clientID == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidClientID.getLog()); - throw new SkyflowException(ErrorCode.InvalidClientID); - } - String keyID = (String) creds.get("keyID"); - if (keyID == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidKeyID.getLog()); - throw new SkyflowException(ErrorCode.InvalidKeyID); - } - String tokenURI = (String) creds.get("tokenURI"); - if (tokenURI == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidTokenURI.getLog()); - throw new SkyflowException(ErrorCode.InvalidTokenURI); - } - - PrivateKey pvtKey = Helpers.getPrivateKeyFromPem((String) creds.get("privateKey")); - - String signedUserJWT = getSignedToken(clientID, keyID, tokenURI, pvtKey, context); - - Map headers = new HashMap<>(); - headers.put(Constants.SDK_METRICS_HEADER_KEY, Helpers.getMetrics().toJSONString()); - - JSONObject parameters = new JSONObject(); - parameters.put("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer"); - parameters.put("assertion", signedUserJWT); - if (roles != null) { - String scopedRoles = getScopeUsingRoles(roles); - parameters.put("scope", scopedRoles); - } - - String response = HttpUtility.sendRequest("POST", new URL(tokenURI), parameters, headers); - - responseToken = new ObjectMapper().readValue(response, ResponseToken.class); - - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.UnableToReadResponse.getLog()); - throw new SkyflowException(ErrorCode.UnableToReadResponse, e); - } - - return responseToken; - } - - private static String getSignedToken(String clientID, String keyID, String tokenURI, PrivateKey pvtKey, - String context) { - final Date createdDate = new Date(); - final Date expirationDate = new Date(createdDate.getTime() + (3600 * 1000)); - - return Jwts.builder() - .claim("iss", clientID) - .claim("key", keyID) - .claim("aud", tokenURI) - .claim("sub", clientID) - .claim("ctx", context) - .setExpiration(expirationDate) - .signWith(SignatureAlgorithm.RS256, pvtKey) - .compact(); - } - - private static String getScopeUsingRoles(String[] roles) { - StringBuilder scope = new StringBuilder(); - if (roles != null) { - for (String role : roles) { - scope.append(" role:").append(role); - } - } - return scope.toString(); - } -} diff --git a/v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java b/v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java deleted file mode 100644 index ed05e541..00000000 --- a/v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokenResponse.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.serviceaccount.util; - -public class SignedDataTokenResponse { - String dataToken; - String signedDataToken; - - public SignedDataTokenResponse(String dataToken, String signedDataToken) { - this.dataToken = dataToken; - this.signedDataToken = signedDataToken; - } - - @Override - public String toString() { - return "{" + "dataToken: " + dataToken + "," + "signedDataToken: " + signedDataToken + "}"; - - } -} diff --git a/v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java b/v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java deleted file mode 100644 index d31c5b85..00000000 --- a/v1/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java +++ /dev/null @@ -1,224 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.serviceaccount.util; - -import com.skyflow.common.utils.Helpers; -import com.skyflow.common.utils.LogUtil; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import com.skyflow.logs.InfoLogs; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.security.PrivateKey; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; - -public class SignedDataTokens { - private final File credentialsFile; - private final String credentialsString; - private final String ctx; - - private final String[] dataTokens; - private final Integer timeToLive; - - private final String credentialsType; - - private SignedDataTokens(SignedDataTokensBuilder builder) { - this.credentialsFile = builder.credentialsFile; - this.credentialsString = builder.credentialsString; - this.ctx = builder.ctx; - this.timeToLive = builder.timeToLive; - this.dataTokens = builder.dataTokens; - this.credentialsType = builder.credentialsType; - } - - // Builder class - public static class SignedDataTokensBuilder { - private File credentialsFile; - private String credentialsString; - private String ctx; - - private String[] dataTokens; - private Integer timeToLive; - - private String credentialsType; - - private void setCredentialsType(String credentialsType) { - this.credentialsType = credentialsType; - } - - public SignedDataTokensBuilder setCredentials(File credentialsFile) { - setCredentialsType("FILE"); - this.credentialsFile = credentialsFile; - return this; - } - - public SignedDataTokensBuilder setCredentials(String credentialsString) { - setCredentialsType("STRING"); - this.credentialsString = credentialsString; - return this; - } - - public SignedDataTokensBuilder setCtx(String ctx) { - this.ctx = ctx; - return this; - } - - public SignedDataTokensBuilder setDataTokens(String[] dataTokens) { - this.dataTokens = dataTokens; - return this; - } - - public SignedDataTokensBuilder setTimeToLive(Integer timeToLive) { - this.timeToLive = timeToLive; - return this; - } - - public SignedDataTokens build() { - return new SignedDataTokens(this); - } - } - - public synchronized List getSignedDataTokens() throws SkyflowException { - List signedToken = new ArrayList<>(); - - try { - if (this.credentialsFile != null && Objects.equals(this.credentialsType, "FILE")) { - signedToken = generateSignedTokens(this.credentialsFile, this.dataTokens, this.timeToLive, - this.ctx); - } else if (this.credentialsString != null && Objects.equals(this.credentialsType, "STRING")) { - signedToken = generateSignedTokensFromCredentialsString(this.credentialsString, this.dataTokens, - this.timeToLive, this.ctx); - - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - return signedToken; - } - - private static List generateSignedTokens(File credentialsPath, String[] dataTokens, - Integer timeToLive, String context) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.GenerateBearerTokenFromCredsCalled.getLog()); - JSONParser parser = new JSONParser(); - List responseToken; - - try { - if (credentialsPath == null || !credentialsPath.isFile()) { - LogUtil.printErrorLog(ErrorLogs.EmptyJSONString.getLog()); - throw new SkyflowException(ErrorCode.EmptyJSONString); - } - - Object obj = parser.parse(new FileReader(String.valueOf(credentialsPath))); - JSONObject saCreds = (JSONObject) obj; - - responseToken = getSignedTokenFromCredsFile(saCreds, dataTokens, timeToLive, context); - - } catch (ParseException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidJSONStringFormat.getLog()); - throw new SkyflowException(ErrorCode.InvalidJSONStringFormat, e); - } catch (IOException e) { - throw new RuntimeException(e); - } - - return responseToken; - } - - private static List generateSignedTokensFromCredentialsString(String credentials, - String[] dataTokens, Integer timeToLive, String context) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.GenerateBearerTokenFromCredsCalled.getLog()); - JSONParser parser = new JSONParser(); - List responseToken; - LogUtil.printInfoLog(InfoLogs.GenerateBearerTokenFromCredsCalled.getLog()); - - try { - if (credentials == null || credentials.isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.EmptyJSONString.getLog()); - throw new SkyflowException(ErrorCode.EmptyJSONString); - } - - Object obj = parser.parse(credentials); - JSONObject saCreds = (JSONObject) obj; - - responseToken = getSignedTokenFromCredsFile(saCreds, dataTokens, timeToLive, context); - - } catch (ParseException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidJSONStringFormat.getLog()); - throw new SkyflowException(ErrorCode.InvalidJSONStringFormat, e); - } - - return responseToken; - } - - private static List getSignedTokenFromCredsFile(JSONObject creds, String[] dataTokens, - Integer timeToLive, String context) throws SkyflowException { - List responseToken; - - try { - String clientID = (String) creds.get("clientID"); - if (clientID == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidClientID.getLog()); - throw new SkyflowException(ErrorCode.InvalidClientID); - } - String keyID = (String) creds.get("keyID"); - if (keyID == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidKeyID.getLog()); - throw new SkyflowException(ErrorCode.InvalidKeyID); - } - - PrivateKey pvtKey = Helpers.getPrivateKeyFromPem((String) creds.get("privateKey")); - - responseToken = getSignedToken(clientID, keyID, pvtKey, dataTokens, timeToLive, context); - - } catch (RuntimeException e) { - throw new SkyflowException(ErrorCode.IncorrectCredentials, e); - } - - return responseToken; - } - - private static List getSignedToken(String clientID, String keyID, PrivateKey pvtKey, - String[] dataTokens, Integer timeToLive, String context) { - final Date createdDate = new Date(); - final Date expirationDate; - - if (timeToLive != null) { - expirationDate = new Date(createdDate.getTime() + (timeToLive * 1000)); - } else { - expirationDate = new Date(createdDate.getTime() + 60000); // Valid for 60 seconds - } - - List list = new ArrayList<>(); - String prefix = "signed_token_"; - for (String dataToken : dataTokens) { - - String eachSignedDataToken = Jwts.builder() - .claim("iss", "sdk") - .claim("iat", (createdDate.getTime()/1000)) - .claim("key", keyID) - .claim("sub", clientID) - .claim("ctx", context) - .claim("tok", dataToken) - .setExpiration(expirationDate) - .signWith(SignatureAlgorithm.RS256, pvtKey) - .compact(); - - SignedDataTokenResponse responseObject = new SignedDataTokenResponse(dataToken, - prefix + eachSignedDataToken); - - list.add(responseObject); - } - return list; - } -} diff --git a/v1/src/main/java/com/skyflow/serviceaccount/util/Token.java b/v1/src/main/java/com/skyflow/serviceaccount/util/Token.java deleted file mode 100644 index 42155e27..00000000 --- a/v1/src/main/java/com/skyflow/serviceaccount/util/Token.java +++ /dev/null @@ -1,231 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.serviceaccount.util; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.skyflow.common.utils.*; -import com.skyflow.entities.ResponseToken; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import com.skyflow.logs.InfoLogs; -import com.skyflow.logs.WarnLogs; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.net.URL; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.security.PrivateKey; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -public final class Token { - - /** - * @param filepath - * @deprecated use generateBearerToken(string filepath), GenerateToken will be removed in future - */ - @Deprecated - public static ResponseToken GenerateToken(String filepath) throws SkyflowException { - LogUtil.printWarningLog(WarnLogs.GetTokenDeprecated.getLog()); - return generateBearerToken(filepath); - } - - /** - * Generates a Bearer Token from the given Service Account Credential file with a default timeout of 60minutes. - * - * @param filepath - */ - public static ResponseToken generateBearerToken(String filepath) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.GenerateBearerTokenCalled.getLog()); - JSONParser parser = new JSONParser(); - ResponseToken responseToken = null; - Path path = null; - try { - if (filepath == null || filepath.isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.EmptyFilePath.getLog()); - throw new SkyflowException(ErrorCode.EmptyFilePath); - } - path = Paths.get((filepath)); - Object obj = parser.parse(new FileReader(String.valueOf(path))); - JSONObject saCreds = (JSONObject) obj; - - responseToken = getSATokenFromCredsFile(saCreds); - - } catch (FileNotFoundException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.InvalidCredentialsPath.getLog(), String.valueOf(path))); - throw new SkyflowException(ErrorCode.InvalidCredentialsPath.getCode(), Helpers.parameterizedString(ErrorCode.InvalidCredentialsPath.getDescription(), String.valueOf(path)), e); - } catch (IOException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.InvalidCredentialsPath.getLog(), String.valueOf(path))); - throw new SkyflowException(ErrorCode.InvalidCredentialsPath.getCode(), Helpers.parameterizedString(ErrorCode.InvalidCredentialsPath.getDescription(), String.valueOf(path)), e); - } catch (ParseException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.InvalidJsonFormat.getLog(), String.valueOf(path))); - throw new SkyflowException(ErrorCode.InvalidJsonFormat.getCode(), Helpers.parameterizedString(ErrorCode.InvalidJsonFormat.getDescription(), String.valueOf(path)), e); - } - - return responseToken; - } - - /** - * Generates a Bearer Token from the given Service Account Credential json string with a default timeout of 60minutes. - * - * @param credentials JSON string of credentials file - */ - - public static ResponseToken generateBearerTokenFromCreds(String credentials) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.GenerateBearerTokenFromCredsCalled.getLog()); - JSONParser parser = new JSONParser(); - ResponseToken responseToken = null; - try { - if (credentials == null || credentials.isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.EmptyJSONString.getLog()); - throw new SkyflowException(ErrorCode.EmptyJSONString); - } - - Object obj = parser.parse(credentials); - JSONObject saCreds = (JSONObject) obj; - - responseToken = getSATokenFromCredsFile(saCreds); - - } catch (ParseException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidJSONStringFormat.getLog()); - throw new SkyflowException(ErrorCode.InvalidJSONStringFormat, e); - } - - return responseToken; - } - - /** - * getSATokenFromCredsFile gets bearer token from service account endpoint - * - * @param creds - */ - private static ResponseToken getSATokenFromCredsFile(JSONObject creds) throws SkyflowException { - ResponseToken responseToken = null; - try { - String clientID = (String) creds.get("clientID"); - if (clientID == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidClientID.getLog()); - throw new SkyflowException(ErrorCode.InvalidClientID); - } - String keyID = (String) creds.get("keyID"); - if (keyID == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidKeyID.getLog()); - throw new SkyflowException(ErrorCode.InvalidKeyID); - } - String tokenURI = (String) creds.get("tokenURI"); - if (tokenURI == null) { - LogUtil.printErrorLog(ErrorLogs.InvalidTokenURI.getLog()); - throw new SkyflowException(ErrorCode.InvalidTokenURI); - } - Map headers = new HashMap<>(); - headers.put(Constants.SDK_METRICS_HEADER_KEY, Helpers.getMetrics().toJSONString()); - - PrivateKey pvtKey = Helpers.getPrivateKeyFromPem((String) creds.get("privateKey")); - - String signedUserJWT = getSignedUserToken(clientID, keyID, tokenURI, pvtKey); - - JSONObject parameters = new JSONObject(); - parameters.put("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer"); - parameters.put("assertion", signedUserJWT); - - String response = HttpUtility.sendRequest("POST", new URL(tokenURI), parameters, headers); - - responseToken = new ObjectMapper().readValue(response, ResponseToken.class); - - } catch (JsonMappingException e) { - LogUtil.printErrorLog(ErrorLogs.UnableToReadResponse.getLog()); - throw new SkyflowException(ErrorCode.UnableToReadResponse, e); - } catch (JsonParseException e) { - LogUtil.printErrorLog(ErrorLogs.UnableToReadResponse.getLog()); - throw new SkyflowException(ErrorCode.UnableToReadResponse, e); - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.UnableToReadResponse.getLog()); - throw new SkyflowException(ErrorCode.UnableToReadResponse, e); - } - - return responseToken; - } -// /** -// * Create a PrivateKey instance from raw PKCS#1 bytes. -// */ -// private static PrivateKey parsePkcs1PrivateKey(byte[] pkcs1Bytes) throws SkyflowException { -// int pkcs1Length = pkcs1Bytes.length; -// int totalLength = pkcs1Length + 22; -// byte[] pkcs8Header = new byte[]{ -// 0x30, (byte) 0x82, (byte) ((totalLength >> 8) & 0xff), (byte) (totalLength & 0xff), // Sequence + total length -// 0x2, 0x1, 0x0, // Integer (0) -// 0x30, 0xD, 0x6, 0x9, 0x2A, (byte) 0x86, 0x48, (byte) 0x86, (byte) 0xF7, 0xD, 0x1, 0x1, 0x1, 0x5, 0x0, // Sequence: 1.2.840.113549.1.1.1, NULL -// 0x4, (byte) 0x82, (byte) ((pkcs1Length >> 8) & 0xff), (byte) (pkcs1Length & 0xff) // Octet string + length -// }; -// byte[] pkcs8bytes = joinBytes(pkcs8Header, pkcs1Bytes); -// return parsePkcs8PrivateKey(pkcs8bytes); -// } -// -// private static byte[] joinBytes(byte[] a, byte[] b) { -// byte[] bytes = new byte[a.length + b.length]; -// System.arraycopy(a, 0, bytes, 0, a.length); -// System.arraycopy(b, 0, bytes, a.length, b.length); -// return bytes; -// } - - private static String getSignedUserToken(String clientID, String keyID, String tokenURI, PrivateKey pvtKey) { - final Date createdDate = new Date(); - final Date expirationDate = new Date(createdDate.getTime() + (3600 * 1000)); - String signedToken = Jwts.builder() - .claim("iss", clientID) - .claim("key", keyID) - .claim("aud", tokenURI) - .claim("sub", clientID) - .setExpiration(expirationDate) - .signWith(SignatureAlgorithm.RS256, pvtKey) - .compact(); - - return signedToken; - } - - /** - * @param token - * @deprecated use isExpired(String token), isValid will be removed in future - */ - @Deprecated - public static boolean isValid(String token) { - LogUtil.printWarningLog(WarnLogs.IsValidDeprecated.getLog()); - return !isExpired(token); - } - - public static boolean isExpired(String token) { - - long expiryTime; - long currentTime; - try { - if (token == null || token.isEmpty()) { - LogUtil.printInfoLog(InfoLogs.EmptyBearerToken.getLog()); - return true; - } - - currentTime = new Date().getTime() / 1000; - expiryTime = (long) TokenUtils.decoded(token).get("exp"); - - } catch (ParseException e) { - LogUtil.printInfoLog(ErrorLogs.InvalidBearerToken.getLog()); - return true; - } catch (SkyflowException e) { - LogUtil.printInfoLog(ErrorLogs.InvalidBearerToken.getLog()); - return true; - } - return currentTime > expiryTime; - } -} - diff --git a/v1/src/main/java/com/skyflow/vault/DeleteBySkyflowId.java b/v1/src/main/java/com/skyflow/vault/DeleteBySkyflowId.java deleted file mode 100644 index 3d38787f..00000000 --- a/v1/src/main/java/com/skyflow/vault/DeleteBySkyflowId.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.skyflow.vault; - -import com.skyflow.common.utils.Helpers; -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.LogUtil; -import com.skyflow.common.utils.Validators; -import com.skyflow.entities.DeleteOptions; -import com.skyflow.entities.DeleteRecordInput; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -import java.io.IOException; -import java.net.URL; -import java.util.Map; -import java.util.concurrent.Callable; - -public class DeleteBySkyflowId implements Callable { - private final DeleteRecordInput recordInput; - private final String vaultID; - private final String vaultURL; - private final Map headers; - private final DeleteOptions deleteOptions; - - public DeleteBySkyflowId(DeleteRecordInput recordInput, String vaultID, String vaultURL, Map headers, DeleteOptions deleteOptions) { - this.recordInput = recordInput; - this.vaultID = vaultID; - this.vaultURL = vaultURL; - this.headers = headers; - this.deleteOptions = deleteOptions; - } - - - @Override - public String call() throws SkyflowException { - String response = null; - try { - Validators.validateDeleteBySkyflowId(recordInput); - String url = vaultURL+ "/v1/vaults/"+ vaultID + "/" + recordInput.getTable() + "/" + recordInput.getId(); - response = HttpUtility.sendRequest("DELETE", new URL(url), null,headers); - JSONObject formattedResponse = new JSONObject(); - JSONArray formattedRecords = new JSONArray(); - - JSONObject responseRecords = ((JSONObject) (new JSONParser().parse(response))); - if (responseRecords != null && responseRecords.size() > 0) { - String id = (String) responseRecords.get("skyflow_id"); - JSONObject formattedRecord = new JSONObject(); - formattedRecord.put("skyflow_id", responseRecords.get("skyflow_id")); - formattedRecord.put("deleted", responseRecords.get("deleted")); - formattedRecords.add(formattedRecord); - } - formattedResponse.put("records", formattedRecords); - response = formattedResponse.toJSONString(); - - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.Server.getLog()); - throw new SkyflowException(ErrorCode.Server, e); - } catch (ParseException e) { - LogUtil.printErrorLog(ErrorLogs.ResponseParsingError.getLog()); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } catch (SkyflowException e) { - response = constructDeleteByIdErrorObject(e, recordInput.getId()); - } - return response; - } - private String constructDeleteByIdErrorObject(SkyflowException skyflowException, String id){ - String deleteByIdResponse = null; - JSONObject finalResponseError = new JSONObject(); - finalResponseError.put("id", id); - try{ - JSONObject errorObject = (JSONObject) ((JSONObject) new JSONParser().parse(skyflowException.getMessage())).get("error"); - if (errorObject != null) { - JSONObject responseError = new JSONObject(); - responseError.put("code", errorObject.get("http_code")); - responseError.put("description", errorObject.get("message")); - finalResponseError.put("error", responseError); - - deleteByIdResponse = finalResponseError.toString(); - } - - } catch (ParseException e){ - JSONObject responseError = new JSONObject(); - responseError.put("code", skyflowException.getCode()); - responseError.put("description", skyflowException.getMessage()); - finalResponseError.put("error", responseError); - deleteByIdResponse = finalResponseError.toString(); - } - return deleteByIdResponse; - } -} diff --git a/v1/src/main/java/com/skyflow/vault/Detokenize.java b/v1/src/main/java/com/skyflow/vault/Detokenize.java deleted file mode 100644 index da0baec4..00000000 --- a/v1/src/main/java/com/skyflow/vault/Detokenize.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.vault; - -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.LogUtil; -import com.skyflow.entities.DetokenizeRecord; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -import java.io.IOException; -import java.net.URL; -import java.util.Map; -import java.util.concurrent.Callable; - -final class Detokenize implements Callable { - private final DetokenizeRecord record; - private final String endPointURL; - private final Map headers; - - public Detokenize(DetokenizeRecord record, String endPointURL, Map headers) { - this.record = record; - this.endPointURL = endPointURL; - this.headers = headers; - } - - @Override - public String call() throws SkyflowException { - String response = null; - - try { - if (record.getToken() == null || record.getToken().isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.InvalidToken.getLog()); - throw new SkyflowException(ErrorCode.InvalidToken); - } else if (record.getRedaction() == null || record.getRedaction().toString().isEmpty()) { - LogUtil.printErrorLog(ErrorLogs.InvalidDetokenizeInput.getLog()); - throw new SkyflowException(ErrorCode.InvalidDetokenizeInput); - } - - JSONObject bodyJson = new JSONObject(); - JSONArray detokenizationParameters = new JSONArray(); - JSONObject parameterObject = new JSONObject(); - parameterObject.put("token", record.getToken()); - parameterObject.put("redaction", record.getRedaction().toString()); - detokenizationParameters.add(parameterObject); - bodyJson.put("detokenizationParameters", detokenizationParameters); - - String apiResponse = HttpUtility.sendRequest("POST", new URL(endPointURL), bodyJson, headers); - JSONParser parser = new JSONParser(); - JSONObject responseJson = (JSONObject) parser.parse(apiResponse); - JSONArray responseRecords = (JSONArray) responseJson.get("records"); - JSONObject responseObject = (JSONObject) responseRecords.get(0); - JSONObject formattedResponseJson = new JSONObject(); - formattedResponseJson.put("value", responseObject.get("value")); - formattedResponseJson.put("token", responseObject.get("token")); - response = formattedResponseJson.toJSONString(); - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.Server.getLog()); - throw new SkyflowException(ErrorCode.Server, e); - } catch (ParseException e) { - LogUtil.printErrorLog(ErrorLogs.ResponseParsingError.getLog()); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } catch (SkyflowException exception) { - response = parseDetokenizeError(exception); - } - return response; - } - - private String parseDetokenizeError(SkyflowException exception) { - String errorResponse = null; - String exceptionMessage = exception.getMessage(); - int exceptionCode = exception.getCode(); - JSONObject errorObject = new JSONObject(); - errorObject.put("token", record.getToken()); - JSONObject errorData = new JSONObject(); - - try { - JSONParser parser = new JSONParser(); - JSONObject errorJson = (JSONObject) parser.parse(exceptionMessage); - JSONObject error = (JSONObject) errorJson.get("error"); - if (error != null) { - errorData.put("code", error.get("http_code")); - errorData.put("description", error.get("message")); - errorObject.put("error", errorData); - errorResponse = errorObject.toJSONString(); - } - } catch (ParseException e) { - errorData.put("code", exceptionCode); - errorData.put("description", exceptionMessage); - errorObject.put("error", errorData); - errorResponse = errorObject.toJSONString(); - } - - return errorResponse; - } -} diff --git a/v1/src/main/java/com/skyflow/vault/Get.java b/v1/src/main/java/com/skyflow/vault/Get.java deleted file mode 100644 index 5951c275..00000000 --- a/v1/src/main/java/com/skyflow/vault/Get.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.skyflow.vault; - -import com.skyflow.common.utils.Helpers; -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.LogUtil; -import com.skyflow.common.utils.Validators; -import com.skyflow.entities.GetOptions; -import com.skyflow.entities.GetRecordInput; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -import java.io.IOException; -import java.net.URL; -import java.util.Collections; -import java.util.Map; -import java.util.concurrent.Callable; - -public final class Get implements Callable { - private final GetRecordInput record; - private final String vaultID; - private final String vaultURL; - private final Map headers; - - private final GetOptions getOptions; - - public Get(GetRecordInput record, String vaultID, String vaultURL, Map headers, GetOptions getOptions) { - this.record = record; - this.vaultID = vaultID; - this.vaultURL = vaultURL; - this.headers = headers; - this.getOptions = getOptions; - } - - @Override - public String call() throws Exception { - String response = null; - try { - Validators.validateGetRequestRecord(record, getOptions); - StringBuilder paramsList = Helpers.constructGetRequestURLParams(record, getOptions); - - String url = vaultURL + "/v1/vaults/" + vaultID + "/" + record.getTable() + "?" + paramsList; - - response = HttpUtility.sendRequest("GET", new URL(url), null, headers); - - JSONObject formattedResponse = new JSONObject(); - JSONArray formattedRecords = new JSONArray(); - - JSONArray responseRecords = (JSONArray) ((JSONObject) (new JSONParser().parse(response))).get("records"); - if (responseRecords != null && responseRecords.size() > 0) { - for (Object responseRecord : responseRecords) { - JSONObject fields = (JSONObject) ((JSONObject) responseRecord).get("fields"); - String id = (String) fields.get("skyflow_id"); - fields.remove("skyflow_id"); - fields.put("id", id); - - JSONObject formattedRecord = new JSONObject(); - formattedRecord.put("fields", fields); - formattedRecord.put("table", record.getTable()); - formattedRecords.add(formattedRecord); - } - formattedResponse.put("records", formattedRecords); - - response = formattedResponse.toJSONString(); - } - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.Server.getLog()); - throw new SkyflowException(ErrorCode.Server, e); - } - catch (ParseException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ResponseParsingError.getLog(), "get")); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } catch (SkyflowException e) { - response = record.getIds() == null - ? constructGetErrorObject(e, record.getColumnName()) - : constructGetErrorObject(e, record.getIds()); - } - - return response; - } - - private String constructGetErrorObject(SkyflowException skyflowException, String[] ids) { - String getResponse = null; - JSONObject finalResponseError = new JSONObject(); - - try { - JSONObject errorObject = (JSONObject) ((JSONObject) new JSONParser().parse(skyflowException.getMessage())).get("error"); - if (errorObject != null) { - JSONObject responseError = new JSONObject(); - responseError.put("code", errorObject.get("http_code")); - responseError.put("description", errorObject.get("message")); - finalResponseError.put("error", responseError); - - JSONArray idsArray = new JSONArray(); - Collections.addAll(idsArray, ids); - finalResponseError.put("ids", idsArray); - - getResponse = finalResponseError.toString(); - } - } catch (ParseException e) { - JSONObject responseError = new JSONObject(); - responseError.put("code", skyflowException.getCode()); - responseError.put("description", skyflowException.getMessage()); - finalResponseError.put("error", responseError); - getResponse = finalResponseError.toString(); - } - return getResponse; - } - - private String constructGetErrorObject(SkyflowException skyflowException, String columnName) { - String getResponse = null; - JSONObject finalResponseError = new JSONObject(); - - try { - JSONObject errorObject = (JSONObject) ((JSONObject) new JSONParser().parse(skyflowException.getMessage())).get("error"); - if (errorObject != null) { - JSONObject responseError = new JSONObject(); - responseError.put("code", errorObject.get("http_code")); - responseError.put("description", errorObject.get("message")); - finalResponseError.put("error", responseError); - finalResponseError.put("columnName", columnName); - - getResponse = finalResponseError.toString(); - } - } catch (ParseException e) { - JSONObject responseError = new JSONObject(); - responseError.put("code", skyflowException.getCode()); - responseError.put("description", skyflowException.getMessage()); - finalResponseError.put("error", responseError); - getResponse = finalResponseError.toString(); - } - return getResponse; - } -} diff --git a/v1/src/main/java/com/skyflow/vault/GetBySkyflowId.java b/v1/src/main/java/com/skyflow/vault/GetBySkyflowId.java deleted file mode 100644 index 370d1f8f..00000000 --- a/v1/src/main/java/com/skyflow/vault/GetBySkyflowId.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.vault; - -import com.skyflow.common.utils.Helpers; -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.LogUtil; -import com.skyflow.common.utils.Validators; -import com.skyflow.entities.GetByIdRecordInput; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -import java.io.IOException; -import java.net.URL; -import java.util.Collections; -import java.util.Map; -import java.util.concurrent.Callable; - -final class GetBySkyflowId implements Callable { - - private final GetByIdRecordInput record; - private final Map headers; - private final String vaultID; - private final String vaultURL; - - GetBySkyflowId(GetByIdRecordInput record, String vaultID, String vaultURL, Map headers) { - this.record = record; - this.vaultID = vaultID; - this.vaultURL = vaultURL; - this.headers = headers; - } - - @Override - public String call() throws SkyflowException { - String response = null; - try { - Validators.validateGetByIdRequestRecord(record); - StringBuilder paramsList = Helpers.constructGetByIdRequestURLParams(record); - - String url = vaultURL + "/v1/vaults/" + vaultID + "/" + record.getTable() + "?" + paramsList; - - response = HttpUtility.sendRequest("GET", new URL(url), null, headers); - - JSONObject formattedResponse = new JSONObject(); - JSONArray formattedRecords = new JSONArray(); - - JSONArray responseRecords = (JSONArray) ((JSONObject) (new JSONParser().parse(response))).get("records"); - if (responseRecords != null && responseRecords.size() > 0) { - for (Object responseRecord : responseRecords) { - JSONObject fields = (JSONObject) ((JSONObject) responseRecord).get("fields"); - String id = (String) fields.get("skyflow_id"); - fields.remove("skyflow_id"); - fields.put("id", id); - - JSONObject formattedRecord = new JSONObject(); - formattedRecord.put("fields", fields); - formattedRecord.put("table", record.getTable()); - formattedRecords.add(formattedRecord); - } - formattedResponse.put("records", formattedRecords); - - response = formattedResponse.toJSONString(); - } - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.Server.getLog()); - throw new SkyflowException(ErrorCode.Server, e); - } catch (ParseException e) { - LogUtil.printErrorLog(ErrorLogs.ResponseParsingError.getLog()); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } catch (SkyflowException e) { - response = constructGetByIdErrorObject(e, record.getIds()); - } - - return response; - } - - private String constructGetByIdErrorObject(SkyflowException skyflowException, String[] ids) { - String getByIdResponse = null; - JSONObject finalResponseError = new JSONObject(); - - try { - JSONArray idsArray = new JSONArray(); - Collections.addAll(idsArray, ids); - finalResponseError.put("ids", idsArray); - - JSONObject errorObject = (JSONObject) ((JSONObject) new JSONParser().parse(skyflowException.getMessage())).get("error"); - if (errorObject != null) { - JSONObject responseError = new JSONObject(); - responseError.put("code", errorObject.get("http_code")); - responseError.put("description", errorObject.get("message")); - finalResponseError.put("error", responseError); - - getByIdResponse = finalResponseError.toString(); - } - } catch (ParseException e) { - JSONObject responseError = new JSONObject(); - responseError.put("code", skyflowException.getCode()); - responseError.put("description", skyflowException.getMessage()); - finalResponseError.put("error", responseError); - getByIdResponse = finalResponseError.toString(); - } - return getByIdResponse; - } -} diff --git a/v1/src/main/java/com/skyflow/vault/Insert.java b/v1/src/main/java/com/skyflow/vault/Insert.java deleted file mode 100644 index 94435ee9..00000000 --- a/v1/src/main/java/com/skyflow/vault/Insert.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.skyflow.vault; - -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.LogUtil; -import com.skyflow.entities.InsertBulkOptions; -import com.skyflow.entities.InsertRecordInput; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -import java.io.IOException; -import java.net.URL; -import java.util.Map; -import java.util.concurrent.Callable; - -import static com.skyflow.common.utils.Helpers.getUpsertColumn; - -public final class Insert implements Callable { - private final InsertRecordInput record; - private final String vaultID; - private final String vaultURL; - private final Map headers; - - private final InsertBulkOptions insertOptions; - private final int requestIndex; - - public Insert(InsertRecordInput record, String vaultID, String vaultURL, Map headers, InsertBulkOptions insertOptions, int requestIndex) { - this.record = record; - this.vaultID = vaultID; - this.vaultURL = vaultURL; - this.headers = headers; - this.insertOptions = insertOptions; - this.requestIndex = requestIndex; - } - - @Override - public String call() throws Exception{ - String response = null; - try { - String url = vaultURL+ "/v1/vaults/" +vaultID+"/"+ record.getTable(); - - JSONObject jsonBody = new JSONObject(); - JSONArray insertArray = new JSONArray(); - JSONObject recordObject = new JSONObject(); - recordObject.put("fields", record.getFields()); - - if (insertOptions.getUpsertOptions() != null) - jsonBody.put("upsert", getUpsertColumn(record.getTable(), insertOptions.getUpsertOptions())); - - insertArray.add(recordObject); - jsonBody.put("records", insertArray); - jsonBody.put("tokenization", insertOptions.isTokens()); - response = HttpUtility.sendRequest("POST", new URL(url), jsonBody, headers); - - JSONParser parser = new JSONParser(); - JSONObject responseJson = (JSONObject) parser.parse(response); - JSONArray responseRecords = (JSONArray) responseJson.get("records"); - JSONObject responseObject = (JSONObject) responseRecords.get(0); - JSONObject formattedResponseJson = new JSONObject(); - formattedResponseJson.put("table", record.getTable()); - formattedResponseJson.put("request_index", requestIndex); - if (insertOptions.isTokens()) { - JSONObject responseTokens = (JSONObject) responseObject.get("tokens"); - responseTokens.remove("*"); - responseTokens.put("skyflow_id", responseObject.get("skyflow_id")); - formattedResponseJson.put("fields", responseTokens); - - } else { - formattedResponseJson.put("skyflow_id", responseObject.get("skyflow_id")); - } - - JSONObject resRecords = new JSONObject(); - JSONArray responseArray = new JSONArray(); - responseArray.add(formattedResponseJson); - resRecords.put("records", responseArray); - - response = resRecords.toJSONString(); - - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.Server.getLog()); - throw new SkyflowException(ErrorCode.Server, e); - } catch (SkyflowException exception){ - response = parseInsertError(exception, requestIndex); - } - return response; - } - private String parseInsertError(SkyflowException exception, int requestIndex) { - String errorResponse = null; - String exceptionMessage = exception.getMessage(); - int exceptionCode = exception.getCode(); - JSONObject errorObject = new JSONObject(); - JSONObject errorData = new JSONObject(); - - try { - JSONParser parser = new JSONParser(); - JSONObject errorJson = (JSONObject) parser.parse(exceptionMessage); - JSONObject error = (JSONObject) errorJson.get("error"); - if (error != null) { - errorData.put("code", error.get("http_code")); - errorData.put("description", error.get("message")); - errorData.put("request_index", requestIndex); - errorObject.put("error", errorData); - errorResponse = errorObject.toJSONString(); - } - } catch (ParseException e) { - errorData.put("code", exceptionCode); - errorData.put("description", exceptionMessage); - errorData.put("request_index", requestIndex); - errorObject.put("error", errorData); - errorResponse = errorObject.toJSONString(); - } - - return errorResponse; - } - - } diff --git a/v1/src/main/java/com/skyflow/vault/Skyflow.java b/v1/src/main/java/com/skyflow/vault/Skyflow.java deleted file mode 100644 index b444dc4d..00000000 --- a/v1/src/main/java/com/skyflow/vault/Skyflow.java +++ /dev/null @@ -1,565 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.vault; - - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.skyflow.common.utils.*; -import com.skyflow.entities.*; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import com.skyflow.logs.InfoLogs; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -import java.io.IOException; -import java.net.URL; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.FutureTask; - -public final class Skyflow { - private final SkyflowConfiguration configuration; - private final TokenUtils tokenUtils; - - private Skyflow(SkyflowConfiguration config) { - this.configuration = config; - this.tokenUtils = new TokenUtils(); - LogUtil.printInfoLog(InfoLogs.InitializedClient.getLog()); - } - - public static Skyflow init(SkyflowConfiguration clientConfig) throws SkyflowException { - return new Skyflow(clientConfig); - } - - public JSONObject insert(JSONObject records) throws SkyflowException { - return insert(records, new InsertOptions(true)); - } - - public JSONObject insertBulk(JSONObject records) throws SkyflowException { - return insertBulk(records, new InsertBulkOptions(true)); - } - - public JSONObject query(JSONObject queryObject) throws SkyflowException { - return query(queryObject, new QueryOptions()); - } - - public JSONObject update(JSONObject records) throws SkyflowException { - return update(records, new UpdateOptions(true)); - } - public JSONObject delete(JSONObject records) throws SkyflowException { - return delete(records, new DeleteOptions()); - } - - public JSONObject insert(JSONObject records, InsertOptions insertOptions) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.InsertMethodCalled.getLog()); - Validators.validateConfiguration(configuration); - LogUtil.printInfoLog(Helpers.parameterizedString(InfoLogs.ValidatedSkyflowConfiguration.getLog(), "insert")); - - if (insertOptions.getUpsertOptions() != null) - Validators.validateUpsertOptions(insertOptions.getUpsertOptions()); - JSONObject insertResponse = null; - try { - InsertInput insertInput = new ObjectMapper().readValue(records.toString(), InsertInput.class); - JSONObject requestBody = Helpers.constructInsertRequest(insertInput, insertOptions); - - String url = configuration.getVaultURL() + "/v1/vaults/" + configuration.getVaultID(); - - Map headers = new HashMap<>(); - headers.put("Authorization", "Bearer " + tokenUtils.getBearerToken(configuration.getTokenProvider())); - headers.put(Constants.SDK_METRICS_HEADER_KEY, Helpers.getMetrics().toJSONString()); - String response = HttpUtility.sendRequest("POST", new URL(url), requestBody, headers); - insertResponse = (JSONObject) new JSONParser().parse(response); - LogUtil.printInfoLog(InfoLogs.ConstructInsertResponse.getLog()); - insertResponse = Helpers.constructInsertResponse(insertResponse, (List) requestBody.get("records"), insertOptions); - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidInsertInput.getLog()); - throw new SkyflowException(ErrorCode.InvalidInsertInput, e); - } catch (ParseException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ResponseParsingError.getLog(), "insert")); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } - - return insertResponse; - } - - public JSONObject detokenize(JSONObject records) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.DetokenizeMethodCalled.getLog()); - Validators.validateConfiguration(configuration); - LogUtil.printInfoLog(Helpers.parameterizedString(InfoLogs.ValidatedSkyflowConfiguration.getLog(), "detokenize")); - - JSONObject finalResponse = new JSONObject(); - JSONArray successRecordsArray = new JSONArray(); - JSONArray errorRecordsArray = new JSONArray(); - try { - DetokenizeInput detokenizeInput = new ObjectMapper().readValue(records.toJSONString(), DetokenizeInput.class); - DetokenizeRecord[] inputRecords = detokenizeInput.getRecords(); - if (inputRecords == null || inputRecords.length == 0) { - throw new SkyflowException(ErrorCode.EmptyRecords); - } - String apiEndpointURL = this.configuration.getVaultURL() + "/v1/vaults/" + this.configuration.getVaultID() + "/detokenize"; - Map headers = new HashMap<>(); - headers.put("Authorization", "Bearer " + tokenUtils.getBearerToken(configuration.getTokenProvider())); - headers.put(Constants.SDK_METRICS_HEADER_KEY, Helpers.getMetrics().toJSONString()); - - FutureTask[] futureTasks = new FutureTask[inputRecords.length]; - for (int index = 0; index < inputRecords.length; index++) { - Callable callable = new Detokenize(inputRecords[index], apiEndpointURL, headers); - futureTasks[index] = new FutureTask(callable); - Thread thread = new Thread(futureTasks[index]); - thread.start(); - } - for (FutureTask task : futureTasks) { - String taskData = (String) task.get(); - JSONParser parser = new JSONParser(); - JSONObject responseJson = (JSONObject) parser.parse(taskData); - if (responseJson.containsKey("error")) { - errorRecordsArray.add(responseJson); - } else if (responseJson.containsKey("value")) { - successRecordsArray.add(responseJson); - } - } - if (errorRecordsArray.isEmpty()) { - finalResponse.put("records", successRecordsArray); - } else if (successRecordsArray.isEmpty()) { - finalResponse.put("errors", errorRecordsArray); - throw new SkyflowException(500, "Server returned errors, check SkyflowException.getData() for more", finalResponse); - } else { - finalResponse.put("records", successRecordsArray); - finalResponse.put("errors", errorRecordsArray); - throw new SkyflowException(500, "Server returned errors, check SkyflowException.getData() for more", finalResponse); - } - } catch (IOException exception) { - LogUtil.printErrorLog(ErrorLogs.InvalidDetokenizeInput.getLog()); - throw new SkyflowException(ErrorCode.InvalidDetokenizeInput, exception); - } catch (InterruptedException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadInterruptedException.getLog(), "detokenize")); - throw new SkyflowException(ErrorCode.ThreadInterruptedException, e); - } catch (ExecutionException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadExecutionException.getLog(), "detokenize")); - throw new SkyflowException(ErrorCode.ThreadExecutionException, e); - } catch (ParseException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ResponseParsingError.getLog(), "detokenize")); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } - return finalResponse; - } - - public JSONObject getById(JSONObject getByIdInput) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.GetByIdMethodCalled.getLog()); - Validators.validateConfiguration(configuration); - LogUtil.printInfoLog(Helpers.parameterizedString(InfoLogs.ValidatedSkyflowConfiguration.getLog(), "getById")); - - JSONObject finalResponse = new JSONObject(); - JSONArray successRecordsArray = new JSONArray(); - JSONArray errorRecordsArray = new JSONArray(); - try { - GetByIdInput input = new ObjectMapper().readValue(getByIdInput.toString(), GetByIdInput.class); - GetByIdRecordInput[] recordInputs = input.getRecords(); - - if (recordInputs == null || recordInputs.length == 0) { - throw new SkyflowException(ErrorCode.EmptyRecords); - } - - Map headers = new HashMap<>(); - headers.put("Authorization", "Bearer " + tokenUtils.getBearerToken(configuration.getTokenProvider())); - headers.put(Constants.SDK_METRICS_HEADER_KEY, Helpers.getMetrics().toJSONString()); - - FutureTask[] futureTasks = new FutureTask[recordInputs.length]; - for (int i = 0; i < recordInputs.length; i++) { - Callable callable = new GetBySkyflowId(recordInputs[i], configuration.getVaultID(), configuration.getVaultURL(), headers); - futureTasks[i] = new FutureTask(callable); - - Thread t = new Thread(futureTasks[i]); - t.start(); - } - - for (FutureTask task : futureTasks) { - String taskData = (String) task.get(); - JSONObject responseJson = (JSONObject) new JSONParser().parse(taskData); - if (responseJson.containsKey("error")) { - errorRecordsArray.add(responseJson); - } else if (responseJson.containsKey("records")) { - successRecordsArray.addAll((Collection) responseJson.get("records")); - } - } - - if (errorRecordsArray.isEmpty()) { - finalResponse.put("records", successRecordsArray); - } else if (successRecordsArray.isEmpty()) { - finalResponse.put("errors", errorRecordsArray); - ErrorCode serverError = ErrorCode.ServerReturnedErrors; - throw new SkyflowException(serverError.getCode(), serverError.getDescription(), finalResponse); - } else { - finalResponse.put("records", successRecordsArray); - finalResponse.put("errors", errorRecordsArray); - ErrorCode serverError = ErrorCode.ServerReturnedErrors; - throw new SkyflowException(serverError.getCode(), serverError.getDescription(), finalResponse); - } - - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidGetByIdInput.getLog()); - throw new SkyflowException(ErrorCode.InvalidGetByIdInput, e); - } catch (InterruptedException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadInterruptedException.getLog(), "getById")); - throw new SkyflowException(ErrorCode.ThreadInterruptedException, e); - } catch (ExecutionException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadExecutionException.getLog(), "getById")); - throw new SkyflowException(ErrorCode.ThreadExecutionException, e); - } catch (ParseException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ResponseParsingError.getLog(), "getById")); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } - - return finalResponse; - } - public JSONObject get(JSONObject getInput) throws SkyflowException { - return get(getInput, new GetOptions(false)); - } - public JSONObject get(JSONObject getInput, GetOptions getOptions ) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.GetMethodCalled.getLog()); - Validators.validateConfiguration(configuration); - LogUtil.printInfoLog(Helpers.parameterizedString(InfoLogs.ValidatedSkyflowConfiguration.getLog(), "get")); - - JSONObject finalResponse = new JSONObject(); - JSONArray successRecordsArray = new JSONArray(); - JSONArray errorRecordsArray = new JSONArray(); - try { - GetInput input = new ObjectMapper().readValue(getInput.toJSONString(), GetInput.class); - GetRecordInput[] recordInputs = input.getRecords(); - - if (recordInputs == null || recordInputs.length == 0) { - throw new SkyflowException(ErrorCode.EmptyRecords); - } - - Map headers = new HashMap<>(); - headers.put("Authorization", "Bearer " + tokenUtils.getBearerToken(configuration.getTokenProvider())); - headers.put(Constants.SDK_METRICS_HEADER_KEY, Helpers.getMetrics().toJSONString()); - - FutureTask[] futureTasks = new FutureTask[recordInputs.length]; - for (int i = 0; i < recordInputs.length; i++) { - Callable callable = new Get(recordInputs[i], configuration.getVaultID(), configuration.getVaultURL(), headers, getOptions); - futureTasks[i] = new FutureTask(callable); - - Thread t = new Thread(futureTasks[i]); - t.start(); - } - - for (FutureTask task : futureTasks) { - String taskData = (String) task.get(); - JSONObject responseJson = (JSONObject) new JSONParser().parse(taskData); - if (responseJson.containsKey("error")) { - errorRecordsArray.add(responseJson); - } else if (responseJson.containsKey("records")) { - successRecordsArray.addAll((Collection) responseJson.get("records")); - } - } - - if (errorRecordsArray.isEmpty()) { - finalResponse.put("records", successRecordsArray); - } else if (successRecordsArray.isEmpty()) { - finalResponse.put("errors", errorRecordsArray); - ErrorCode serverError = ErrorCode.ServerReturnedErrors; - throw new SkyflowException(serverError.getCode(), serverError.getDescription(), finalResponse); - } else { - finalResponse.put("records", successRecordsArray); - finalResponse.put("errors", errorRecordsArray); - ErrorCode serverError = ErrorCode.ServerReturnedErrors; - throw new SkyflowException(serverError.getCode(), serverError.getDescription(), finalResponse); - } - - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidGetInput.getLog()); - throw new SkyflowException(ErrorCode.InvalidGetInput, e); - } catch (InterruptedException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadInterruptedException.getLog(), "get")); - throw new SkyflowException(ErrorCode.ThreadInterruptedException, e); - } catch (ExecutionException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadExecutionException.getLog(), "get")); - throw new SkyflowException(ErrorCode.ThreadExecutionException, e); - } catch (ParseException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ResponseParsingError.getLog(), "get")); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } - - return finalResponse; - } - - public JSONObject update(JSONObject records, UpdateOptions updateOptions) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.UpdateMethodCalled.getLog()); - Validators.validateConfiguration(configuration); - LogUtil.printInfoLog(Helpers.parameterizedString(InfoLogs.ValidatedSkyflowConfiguration.getLog(), "update")); - - JSONArray successRecordsArray = new JSONArray(); - JSONArray errorRecordsArray = new JSONArray(); - - JSONObject updateResponse = new JSONObject(); - - try { - UpdateInput updateInput = new ObjectMapper().readValue(records.toString(), UpdateInput.class); - UpdateRecordInput[] recordInputs = updateInput.getRecords(); - if (recordInputs == null || recordInputs.length == 0) { - throw new SkyflowException(ErrorCode.EmptyRecords); - } - - Map headers = new HashMap<>(); - headers.put("Authorization", "Bearer " + tokenUtils.getBearerToken(configuration.getTokenProvider())); - headers.put(Constants.SDK_METRICS_HEADER_KEY, Helpers.getMetrics().toJSONString()); - - FutureTask[] futureTasks = new FutureTask[recordInputs.length]; - for (int i = 0; i < recordInputs.length; i++) { - Callable callable = new UpdateBySkyflowId(recordInputs[i], configuration.getVaultID(), configuration.getVaultURL(), headers, updateOptions); - futureTasks[i] = new FutureTask(callable); - Thread t = new Thread(futureTasks[i]); - t.start(); - } - - for (FutureTask task : futureTasks) { - String taskData = (String) task.get(); - JSONObject responseJson = (JSONObject) new JSONParser().parse(taskData); - if (responseJson.containsKey("error")) { - errorRecordsArray.add(responseJson); - } else if (responseJson.containsKey("records")) { - successRecordsArray.add(responseJson.get("records")); - } - } - if (errorRecordsArray.isEmpty()) { - updateResponse.put("records", successRecordsArray); - } else if (successRecordsArray.isEmpty()) { - updateResponse.put("error", errorRecordsArray); - throw new SkyflowException(500, "Server returned errors, check SkyflowException.Update() for more", updateResponse); - } else { - updateResponse.put("records", successRecordsArray); - updateResponse.put("error", errorRecordsArray); - throw new SkyflowException(500, "Server returned errors, check SkyflowException.Update() for more", updateResponse); - } - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidUpdateInput.getLog()); - throw new SkyflowException(ErrorCode.InvalidUpdateInput, e); - } catch (InterruptedException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadInterruptedException.getLog(), "updateById")); - throw new SkyflowException(ErrorCode.ThreadInterruptedException, e); - } catch (ExecutionException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadExecutionException.getLog(), "updateById")); - throw new SkyflowException(ErrorCode.ThreadExecutionException, e); - } catch (ParseException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ResponseParsingError.getLog(), "updateById")); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } - return updateResponse; - - } - - public JSONObject delete(JSONObject records, DeleteOptions deleteOptions) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.deleteMethodCalled.getLog()); - Validators.validateConfiguration(configuration); - LogUtil.printInfoLog(Helpers.parameterizedString(InfoLogs.ValidatedSkyflowConfiguration.getLog(), "delete")); - - JSONObject deleteResponse = new JSONObject(); - JSONArray successRecordsArray = new JSONArray(); - JSONArray errorRecordsArray = new JSONArray(); - - try { - DeleteInput deleteInput = new ObjectMapper().readValue(records.toString(), DeleteInput.class); - DeleteRecordInput[] recordInputs = deleteInput.getRecords(); - if (recordInputs == null || recordInputs.length == 0) { - throw new SkyflowException(ErrorCode.EmptyRecords); - } - Map headers = new HashMap<>(); - headers.put("Authorization", "Bearer " + tokenUtils.getBearerToken(configuration.getTokenProvider())); - headers.put(Constants.SDK_METRICS_HEADER_KEY, Helpers.getMetrics().toJSONString()); - FutureTask[] futureTasks = new FutureTask[recordInputs.length]; - - - for (int i = 0; i < recordInputs.length; i++) { - Callable callable = new DeleteBySkyflowId(recordInputs[i], configuration.getVaultID(), configuration.getVaultURL(), headers, deleteOptions); - futureTasks[i] = new FutureTask(callable); - Thread t = new Thread(futureTasks[i]); - t.start(); - } - for (FutureTask task : futureTasks) { - String taskData = (String) task.get(); - JSONObject responseJson = (JSONObject) new JSONParser().parse(taskData); - if (responseJson.containsKey("error")) { - errorRecordsArray.add(responseJson); - } else if (responseJson.containsKey("records")) { - JSONArray resp = (JSONArray) new JSONParser().parse(responseJson.get("records").toString()) ; - successRecordsArray.add(resp.get(0)); - } - } - if (errorRecordsArray.isEmpty()) { - deleteResponse.put("records", successRecordsArray); - } else if (successRecordsArray.isEmpty()) { - deleteResponse.put("errors", errorRecordsArray); - ErrorCode serverError = ErrorCode.ServerReturnedErrors; - throw new SkyflowException(serverError.getCode(), serverError.getDescription(), deleteResponse); - } else { - deleteResponse.put("records", successRecordsArray); - deleteResponse.put("errors", errorRecordsArray); - ErrorCode serverError = ErrorCode.ServerReturnedErrors; - throw new SkyflowException(serverError.getCode(), serverError.getDescription(), deleteResponse); - } - - }catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidDeleteInput.getLog()); - throw new SkyflowException(ErrorCode.InvalidDeleteInput, e); - } catch (InterruptedException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadInterruptedException.getLog(), "deleteById")); - throw new SkyflowException(ErrorCode.ThreadInterruptedException, e); - } catch (ExecutionException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadExecutionException.getLog(), "deleteById")); - throw new SkyflowException(ErrorCode.ThreadExecutionException, e); - } catch (ParseException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ResponseParsingError.getLog(), "deleteById")); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } - return deleteResponse; - } - public JSONObject invokeConnection(JSONObject connectionConfig) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.InvokeConnectionCalled.getLog()); - JSONObject connectionResponse; - try { - Validators.validateConnectionConfiguration(connectionConfig, configuration); - String filledURL = Helpers.constructConnectionURL(connectionConfig); - - Map headers = new HashMap<>(); - - if (connectionConfig.containsKey("requestHeader")) { - headers = Helpers.constructConnectionHeadersMap((JSONObject) connectionConfig.get("requestHeader")); - } - if (!headers.containsKey("x-skyflow-authorization")) { - headers.put("x-skyflow-authorization", tokenUtils.getBearerToken(configuration.getTokenProvider())); - } - headers.put(Constants.SDK_METRICS_HEADER_KEY, Helpers.getMetrics().toJSONString()); - String requestMethod = connectionConfig.get("methodName").toString(); - JSONObject requestBody = null; - if (connectionConfig.containsKey("requestBody")) { - requestBody = (JSONObject) connectionConfig.get("requestBody"); - } - - String response = HttpUtility.sendRequest(requestMethod, new URL(filledURL), requestBody, headers); - connectionResponse = (JSONObject) new JSONParser().parse(response); - - } catch (IOException exception) { - LogUtil.printErrorLog(ErrorLogs.InvalidInvokeConnectionInput.getLog()); - throw new SkyflowException(ErrorCode.InvalidConnectionInput, exception); - } catch (ParseException exception) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ResponseParsingError.getLog(), "invokeConnection")); - throw new SkyflowException(ErrorCode.ResponseParsingError, exception); - } - return connectionResponse; - } - - public JSONObject query(JSONObject queryObject,QueryOptions queryOptions) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.QuerySupportCalled.getLog()); - Validators.validateConfiguration(configuration); - LogUtil.printInfoLog(Helpers.parameterizedString(InfoLogs.ValidatedSkyflowConfiguration.getLog(), "query")); - JSONObject queryResponse = null; - try { - JSONObject queryJsonbject = (JSONObject) queryObject; - - QueryRecordInput queryInput = new ObjectMapper().readValue(queryJsonbject.toString(), QueryRecordInput.class); - - JSONObject requestBody = Helpers.constructQueryRequest(queryInput, queryOptions); - - String url = configuration.getVaultURL() + "/v1/vaults/" + configuration.getVaultID() + "/query"; - Map headers = new HashMap<>(); - headers.put("Authorization", "Bearer " + tokenUtils.getBearerToken(configuration.getTokenProvider())); - headers.put(Constants.SDK_METRICS_HEADER_KEY, Helpers.getMetrics().toJSONString()); - String response = HttpUtility.sendRequest("POST", new URL(url), requestBody, headers); - queryResponse = (JSONObject) new JSONParser().parse(response); - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.InvalidQueryInput.getLog()); - throw new SkyflowException(ErrorCode.InvalidQueryInput,e); - } catch (ParseException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ResponseParsingError.getLog(), "query")); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } - catch (SkyflowException e) { - JSONObject queryErrorResponse = Helpers.constructQueryErrorObject(e); - throw new SkyflowException(400, "Query is missing", queryErrorResponse); - } - return queryResponse; - } - public JSONObject insertBulk(JSONObject records, InsertBulkOptions insertOptions) throws SkyflowException { - LogUtil.printInfoLog(InfoLogs.InsertBulkMethodCalled.getLog()); - Validators.validateConfiguration(configuration); - LogUtil.printInfoLog(Helpers.parameterizedString(InfoLogs.ValidatedSkyflowConfiguration.getLog(), "insert")); - JSONObject finalResponse = new JSONObject(); - JSONArray successRecordsArray = new JSONArray(); - JSONArray errorRecordsArray = new JSONArray(); - - if (insertOptions.getUpsertOptions() != null) - Validators.validateUpsertOptions(insertOptions.getUpsertOptions()); - try { - InsertInput insertInput = new ObjectMapper().readValue(records.toString(), InsertInput.class); - - Map headers = new HashMap<>(); - headers.put("Authorization", "Bearer " + tokenUtils.getBearerToken(configuration.getTokenProvider())); - headers.put(Constants.SDK_METRICS_HEADER_KEY, Helpers.getMetrics().toJSONString()); - - InsertRecordInput[] inputRecords = insertInput.getRecords(); - - if (inputRecords == null || insertInput.getRecords().length == 0) { - throw new SkyflowException(ErrorCode.EmptyRecords); - } - - for (int i = 0; i < inputRecords.length; i++) { - Validators.validateInsertRecord(inputRecords[i]); - } - FutureTask[] futureTasks = new FutureTask[inputRecords.length]; - for (int index = 0; index < inputRecords.length; index++) { - Callable callable = new Insert(inputRecords[index], configuration.getVaultID(), configuration.getVaultURL(), headers, insertOptions, index); - futureTasks[index] = new FutureTask(callable); - - Thread thread = new Thread(futureTasks[index]); - thread.start(); - } - for (FutureTask task : futureTasks) { - String taskData = (String) task.get(); - JSONParser parser = new JSONParser(); - JSONObject responseJson = (JSONObject) parser.parse(taskData); - if (responseJson.containsKey("error")) { - errorRecordsArray.add(responseJson); - } else if (responseJson.containsKey("records")) { - JSONArray successRes = (JSONArray) responseJson.get("records"); - successRecordsArray.add(successRes.get(0)); - } - } - if (errorRecordsArray.isEmpty()) { - finalResponse.put("records", successRecordsArray); - } else if (successRecordsArray.isEmpty()) { - finalResponse.put("errors", errorRecordsArray); - throw new SkyflowException(ErrorCode.ServerReturnedErrors.getCode(), ErrorLogs.ServerReturnedErrors.getLog(), finalResponse); - } else { - finalResponse.put("records", successRecordsArray); - finalResponse.put("errors", errorRecordsArray); - throw new SkyflowException(ErrorCode.ServerReturnedErrors.getCode(), ErrorLogs.ServerReturnedErrors.getLog(), finalResponse); - } - - } catch (IOException var9) { - LogUtil.printErrorLog(ErrorLogs.InvalidInsertInput.getLog()); - throw new SkyflowException(ErrorCode.InvalidInsertInput, var9); - } catch (ParseException var10) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ResponseParsingError.getLog(), new String[]{"Insert"})); - throw new SkyflowException(ErrorCode.ResponseParsingError, var10); - } catch (InterruptedException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadInterruptedException.getLog(), "Insert")); - throw new SkyflowException(ErrorCode.ThreadInterruptedException, e); - } catch (ExecutionException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ThreadExecutionException.getLog(), "Insert")); - throw new SkyflowException(ErrorCode.ThreadExecutionException, e); - } - - return finalResponse; - - } -} diff --git a/v1/src/main/java/com/skyflow/vault/UpdateBySkyflowId.java b/v1/src/main/java/com/skyflow/vault/UpdateBySkyflowId.java deleted file mode 100644 index e26299a0..00000000 --- a/v1/src/main/java/com/skyflow/vault/UpdateBySkyflowId.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.skyflow.vault; - -import com.skyflow.common.utils.Helpers; -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.LogUtil; -import com.skyflow.entities.UpdateOptions; -import com.skyflow.entities.UpdateRecordInput; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import com.skyflow.logs.ErrorLogs; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - -import java.io.IOException; -import java.net.URL; -import java.util.Collections; -import java.util.Map; -import java.util.concurrent.Callable; - -final class UpdateBySkyflowId implements Callable { - - public final UpdateOptions options; - private final UpdateRecordInput record; - private final Map headers; - private final String vaultID; - private final String vaultURL; - - UpdateBySkyflowId(UpdateRecordInput record, String vaultID, String vaultURL, Map headers, UpdateOptions updateOptions) { - this.record = record; - this.vaultID = vaultID; - this.vaultURL = vaultURL; - this.headers = headers; - this.options = updateOptions; - } - - - @Override - public String call() throws Exception { - String response = null; - try { - JSONObject requestBody = Helpers.constructUpdateRequest(record, options); - JSONObject finalBody = new JSONObject(); - - finalBody.put("record", requestBody); - finalBody.put("tokenization", options.isTokens()); - - String url = vaultURL + "/v1/vaults/" + vaultID + "/" + record.getTable() + "/" + record.getId(); - response = HttpUtility.sendRequest("PUT", new URL(url), finalBody, headers); - JSONObject formattedRecords = new JSONObject(); - JSONObject responseRecords = (JSONObject) (new JSONParser().parse(response)); - - - if (responseRecords != null && responseRecords.size() > 0) { - JSONObject fields = (JSONObject) responseRecords.get("tokens"); - String id = (String) responseRecords.get("skyflow_id"); - - JSONObject formattedRecord = new JSONObject(); - formattedRecord.put("id", id); - formattedRecord.put("table", record.getTable()); - formattedRecord.put("fields", fields); - formattedRecords.put("records", formattedRecord); - } - response = formattedRecords.toJSONString(); - } catch (IOException e) { - LogUtil.printErrorLog(ErrorLogs.Server.getLog()); - throw new SkyflowException(ErrorCode.Server, e); - } catch (ParseException e) { - LogUtil.printErrorLog(Helpers.parameterizedString(ErrorLogs.ResponseParsingError.getLog(), "updateById")); - throw new SkyflowException(ErrorCode.ResponseParsingError, e); - } catch (SkyflowException e) { - response = constructUpdateByIdErrorObject(e, record.getId()); - } - return response; - } - - private String constructUpdateByIdErrorObject(SkyflowException skyflowException, String ids) { - - String updateByIdResponse = null; - JSONObject finalResponseError = new JSONObject(); - - try { - JSONArray idsArray = new JSONArray(); - Collections.addAll(idsArray, ids); - finalResponseError.put("ids", idsArray); - - JSONObject errorObject = (JSONObject) ((JSONObject) new JSONParser().parse(skyflowException.getMessage())).get("error"); - if (errorObject != null) { - JSONObject responseError = new JSONObject(); - responseError.put("code", errorObject.get("http_code")); - responseError.put("description", errorObject.get("message")); - finalResponseError.put("error", responseError); - - updateByIdResponse = finalResponseError.toString(); - } - } catch (ParseException e) { - JSONObject responseError = new JSONObject(); - responseError.put("code", skyflowException.getCode()); - responseError.put("description", skyflowException.getMessage()); - finalResponseError.put("error", responseError); - updateByIdResponse = finalResponseError.toString(); - } - return updateByIdResponse; - } -} diff --git a/v1/src/test/java/com/skyflow/common/utils/HelpersTest.java b/v1/src/test/java/com/skyflow/common/utils/HelpersTest.java deleted file mode 100644 index fea055d2..00000000 --- a/v1/src/test/java/com/skyflow/common/utils/HelpersTest.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.common.utils; - -import com.skyflow.Configuration; -import com.skyflow.entities.GetOptions; -import com.skyflow.entities.GetRecordInput; -import com.skyflow.entities.LogLevel; -import com.skyflow.entities.RedactionType; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; - -import static com.skyflow.common.utils.Helpers.constructGetRequestURLParams; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.powermock.api.mockito.PowerMockito.mock; -import static org.powermock.api.mockito.PowerMockito.when; - -import java.security.PrivateKey; -import org.json.simple.JSONObject; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - - -@RunWith(PowerMockRunner.class) -@PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.TokenUtils", "com.skyflow.common.utils.HttpUtility"}) -public class HelpersTest { - - private static String tableName = null; - private static String columnName = null; - private static String reqId = null; - private static String[] columnValue = new String[1]; - private static String[] ids = new String[1]; - private static String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; - - @BeforeClass - public static void setup() throws SkyflowException { - PowerMockito.mockStatic(TokenUtils.class); - PowerMockito.when(TokenUtils.isTokenValid("valid_token")).thenReturn(true); - PowerMockito.when(TokenUtils.isTokenValid("not_a_valid_token")).thenReturn(false); - - PowerMockito.mockStatic(HttpUtility.class); - PowerMockito.when(HttpUtility.getRequestID()).thenReturn("abc"); - reqId = HttpUtility.getRequestID(); - tableName = "account_details"; - columnName = "card_number"; - columnValue[0] = "123451234554321"; - ids[0] = "123451234554321"; - } - - @Test - public void testMessageWithRequestID(){ - String message = Helpers.appendRequestId("message", reqId); - String expectedMessage = "message" + " - requestId: " + "abc"; - assertEquals(expectedMessage, message); - } - - @Test - public void testFormatJsonToFormEncodedString(){ - Configuration.setLogLevel(LogLevel.DEBUG); - JSONObject testJson = new JSONObject(); - testJson.put("key1","value1"); - JSONObject nestedObj = new JSONObject(); - nestedObj.put("key2","value2"); - testJson.put("nest",nestedObj); - - String testResponse = Helpers.formatJsonToFormEncodedString(testJson); - assert testResponse.contains("key1=value1"); - assert testResponse.contains("nest[key2]=value2"); - } - - @Test - public void testFormatJsonToMultiPartFormDataString(){ - JSONObject testJson = new JSONObject(); - testJson.put("key1","value1"); - JSONObject nestedObj = new JSONObject(); - nestedObj.put("key2","value2"); - testJson.put("nest",nestedObj); - String testBoundary = "123"; - String testResponse = Helpers.formatJsonToMultiPartFormDataString(testJson,testBoundary); - assert testResponse.contains("--"+testBoundary); - assert testResponse.contains("--"+testBoundary+"--"); - assert testResponse.contains("Content-Disposition: form-data; name=\"key1\""); - assert testResponse.contains("value1"); - assert testResponse.contains("Content-Disposition: form-data; name=\"nest[key2]\""); - assert testResponse.contains("value2"); - } - - @Test - public void testInvalidPrivateKey(){ - String pemKey = "abc"; - - try{ - PrivateKey key = Helpers.getPrivateKeyFromPem(pemKey); - }catch (SkyflowException exception) { - assertEquals(exception.getMessage(), ErrorCode.UnableToRetrieveRSA.getDescription()); - } - } - @Test - public void testInvalidKeySpec(){ - byte[] pkcs8Bytes = {}; - try{ - Helpers.parsePkcs8PrivateKey(pkcs8Bytes); - }catch (SkyflowException exception) { - assertEquals(exception.getMessage(), ErrorCode.InvalidKeySpec.getDescription()); - } - } - @Test - public void constructGetRequestURLParamsColumnValueTest(){ - GetRecordInput recordInput = new GetRecordInput(); - - recordInput.setTable(tableName); - recordInput.setColumnValues(columnValue); - recordInput.setColumnName(columnName); - recordInput.setRedaction(RedactionType.PLAIN_TEXT); - StringBuilder paramsList = constructGetRequestURLParams(recordInput, new GetOptions(false)); - - Assert.assertTrue(paramsList.toString().contains("&")); - - Assert.assertTrue(paramsList.toString().contains("column_name="+ columnName)); - Assert.assertTrue(paramsList.toString().contains("column_values="+ columnValue[0])); - Assert.assertTrue(paramsList.toString().contains("redaction="+ RedactionType.PLAIN_TEXT.toString())); - } - @Test - public void constructGetRequestURLParamsIdTest(){ - GetRecordInput recordInput = new GetRecordInput(); - - recordInput.setTable(tableName); - recordInput.setIds(ids); - recordInput.setRedaction(RedactionType.PLAIN_TEXT); - StringBuilder paramsList = constructGetRequestURLParams(recordInput, new GetOptions(false)); - Assert.assertTrue(paramsList.toString().contains("&")); - - Assert.assertTrue(paramsList.toString().contains("skyflow_ids="+ ids[0])); - Assert.assertTrue(paramsList.toString().contains("redaction="+"PLAIN_TEXT")); - - } - @Test - public void constructGetRequestURLParamsIdTokenTrueTest(){ - GetRecordInput recordInput = new GetRecordInput(); - - recordInput.setTable(tableName); - recordInput.setIds(ids); - StringBuilder paramsList = constructGetRequestURLParams(recordInput, new GetOptions(true)); - - Assert.assertTrue(paramsList.toString().contains("&")); - Assert.assertFalse(paramsList.toString().contains("redaction=PLAIN_TEXT")); - - Assert.assertTrue(paramsList.toString().contains("skyflow_ids="+ ids[0])); - Assert.assertTrue(paramsList.toString().contains("tokenization="+"true")); - - } - @Test - public void testGetMetrics() { - JSONObject metrics = Helpers.getMetrics(); - assertEquals(true, metrics.containsKey("sdk_name_version")); - assertEquals(true, metrics.containsKey("sdk_client_device_model")); - assertEquals(true, metrics.containsKey("sdk_client_os_details")); - assertEquals(true, metrics.containsKey("sdk_runtime_details")); - - assertEquals("skyflow-java@"+ Constants.SDK_VERSION, metrics.get("sdk_name_version")); - assertNotNull(metrics.get("sdk_client_device_model")); - - assertNotNull(metrics.get("sdk_client_os_details")); - assertNotNull(metrics.get("sdk_runtime_details")); - assertNotNull(metrics.get("sdk_client_device_model")); - - String runtimeDetails = (String) metrics.get("sdk_runtime_details"); - assertEquals(true, runtimeDetails.startsWith("Java@")); - - } - @Test - public void testGetMetricsWithException() { - // Arrange - String expectedSdkVersion = Constants.SDK_VERSION; - String expectedDeviceModel = ""; - String expectedOsDetails = ""; - String expectedJavaVersion = ""; - - // Mocking the System.getProperty() method to throw an exception - System.setProperty("os.name", ""); - System.setProperty("os.version", ""); - System.setProperty("java.version", ""); - - // Act - JSONObject metrics = Helpers.getMetrics(); - assertEquals(true, metrics.containsKey("sdk_name_version")); - assertEquals(true, metrics.containsKey("sdk_client_device_model")); - assertEquals(true, metrics.containsKey("sdk_client_os_details")); - assertEquals(true, metrics.containsKey("sdk_runtime_details")); - // Assert - assertEquals("skyflow-java@" + expectedSdkVersion, metrics.get("sdk_name_version")); - assertEquals(expectedDeviceModel, metrics.get("sdk_client_device_model")); - assertEquals(expectedOsDetails, metrics.get("sdk_client_os_details")); - assertEquals("Java@" + expectedJavaVersion, metrics.get("sdk_runtime_details")); - } -} - diff --git a/v1/src/test/java/com/skyflow/common/utils/HttpUtilityTest.java b/v1/src/test/java/com/skyflow/common/utils/HttpUtilityTest.java deleted file mode 100644 index e473ee1f..00000000 --- a/v1/src/test/java/com/skyflow/common/utils/HttpUtilityTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.common.utils; - -import com.skyflow.errors.SkyflowException; -import org.json.simple.JSONObject; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLStreamHandler; - -import static org.junit.Assert.fail; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.BDDMockito.given; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({ URL.class, HttpURLConnection.class }) -public class HttpUtilityTest { - - @InjectMocks - HttpUtility httpUtility; - - @Mock - OutputStream outputStream; - - private String expected; - - private String expectedError; - private URL url; - - private HttpURLConnection mockConnection; - private static String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; - - @Before - public void setup() throws IOException { - expected = "{\"status\":\"success\"}"; - expectedError = "{\"status\":\"something went wrong\"}"; - mockConnection = Mockito.mock(HttpURLConnection.class); - given(mockConnection.getInputStream()).willReturn(new ByteArrayInputStream(expected.getBytes())); - given(mockConnection.getErrorStream()).willReturn(new ByteArrayInputStream(expectedError.getBytes())); - given(mockConnection.getOutputStream()).willReturn(outputStream); - given(mockConnection.getResponseCode()).willReturn(200); - given(mockConnection.getHeaderField(anyString())).willReturn("id"); - final URLStreamHandler handler = new URLStreamHandler() { - @Override - protected URLConnection openConnection(final URL arg0) throws IOException { - return mockConnection; - } - }; - url = new URL("https://google.com", "google.com", 80, "", handler); - } - - @Test - @PrepareForTest({ URL.class, HttpURLConnection.class }) - public void testSendRequest() { - try { - given(mockConnection.getRequestProperty("content-type")).willReturn("application/json"); - - JSONObject headers = new JSONObject(); - headers.put("content-type", "application/json"); - - JSONObject params = new JSONObject(); - params.put("key", "value"); - - String response = httpUtility.sendRequest("GET", url, params, headers); - - Assert.assertEquals(expected, response); - } catch (IOException e) { - fail(INVALID_EXCEPTION_THROWN); - } catch (SkyflowException e) { - fail(INVALID_EXCEPTION_THROWN); - } catch (Exception e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - - @Test - @PrepareForTest({ URL.class, HttpURLConnection.class }) - public void testSendRequestFormData() { - try { - given(mockConnection.getRequestProperty("content-type")).willReturn("multipart/form-data"); - - JSONObject headers = new JSONObject(); - headers.put("content-type", "multipart/form-data"); - - JSONObject params = new JSONObject(); - params.put("key", "value"); - - String response = httpUtility.sendRequest("GET", url, params, headers); - Assert.assertEquals(expected, response); - } catch (IOException e) { - fail(INVALID_EXCEPTION_THROWN); - } catch (SkyflowException e) { - fail(INVALID_EXCEPTION_THROWN); - } catch (Exception e) { - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest({ URL.class, HttpURLConnection.class }) - public void testSendRequestFormURLEncoded() { - try { - given(mockConnection.getRequestProperty("content-type")).willReturn("application/x-www-form-urlencoded"); - - JSONObject headers = new JSONObject(); - headers.put("content-type", "application/x-www-form-urlencoded"); - - JSONObject params = new JSONObject(); - params.put("key", "value"); - - String response = httpUtility.sendRequest("GET", url, params, headers); - Assert.assertEquals(expected, response); - } catch (IOException e) { - fail(INVALID_EXCEPTION_THROWN); - } catch (SkyflowException e) { - fail(INVALID_EXCEPTION_THROWN); - } catch (Exception e) { - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest({ URL.class, HttpURLConnection.class }) - public void testSendRequestError() { - try { - given(mockConnection.getResponseCode()).willReturn(500); - - String response = httpUtility.sendRequest("GET", url, null, null); - } catch (IOException e) { - fail(INVALID_EXCEPTION_THROWN); - } catch (SkyflowException e) { - Assert.assertEquals(expectedError, e.getMessage()); - } catch (Exception e) { - fail(INVALID_EXCEPTION_THROWN); - } - } -} diff --git a/v1/src/test/java/com/skyflow/common/utils/TokenUtilsTest.java b/v1/src/test/java/com/skyflow/common/utils/TokenUtilsTest.java deleted file mode 100644 index 1e242cfb..00000000 --- a/v1/src/test/java/com/skyflow/common/utils/TokenUtilsTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.common.utils; - -import com.skyflow.entities.TokenProvider; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import static org.junit.Assert.assertEquals; - -class InvalidTokenProvider implements TokenProvider { - - private final boolean isException; - - public InvalidTokenProvider() { - this.isException = false; - } - - public InvalidTokenProvider(boolean isException) { - this.isException = isException; - } - - @Override - public String getBearerToken() throws Exception { - if (!isException) - return "invalid_token"; - else - throw new Exception("EXCEPTION THROWN!!"); - } -} - -class InvalidTokenProvider2 implements TokenProvider { - @Override - public String getBearerToken() throws Exception { - return "a.b.c"; - } -} - -@RunWith(PowerMockRunner.class) -@PrepareForTest -public class TokenUtilsTest { - - TokenUtils tokenUtils = new TokenUtils(); - - @Test - public void testInvalidGetBearerToken() { - try { - String token = tokenUtils.getBearerToken(new InvalidTokenProvider()); - } catch (SkyflowException e) { - assertEquals(e.getMessage(), ErrorCode.InvalidBearerToken.getDescription()); - } - } - - @Test - @PrepareForTest - public void testInvalidGetBearerToken2() { - try { - String token = tokenUtils.getBearerToken(new InvalidTokenProvider2()); - } catch (SkyflowException e) { - assertEquals(e.getMessage(), ErrorCode.InvalidBearerToken.getDescription()); - } - } - - @Test - public void testIsTokenValid() { - try { - String token = System.getProperty("TEST_EXPIRED_TOKEN"); - assertEquals(false, TokenUtils.isTokenValid(token)); - } catch (SkyflowException e) { - throw new RuntimeException(e); - } - } - - @Test - public void testGetBearerTokenException() { - try { - String token = tokenUtils.getBearerToken(new InvalidTokenProvider(true)); - } catch (SkyflowException e) { - assertEquals(e.getMessage(), "EXCEPTION THROWN!!"); - } - } -} diff --git a/v1/src/test/java/com/skyflow/common/utils/TokenUtilsValidTokenTest.java b/v1/src/test/java/com/skyflow/common/utils/TokenUtilsValidTokenTest.java deleted file mode 100644 index 75623fb7..00000000 --- a/v1/src/test/java/com/skyflow/common/utils/TokenUtilsValidTokenTest.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.skyflow.common.utils; - -import com.skyflow.entities.TokenProvider; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import org.apache.commons.codec.binary.Base64; -import org.json.simple.JSONObject; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import static org.junit.Assert.assertEquals; - -class ValidTokenProvider implements TokenProvider { - - @Override - public String getBearerToken() throws Exception { - return "aa.valid_token.dd"; - } -} -class InvalidBearerTokenProvider implements TokenProvider { - - @Override - public String getBearerToken() throws Exception { - return "aa.invalid_token.dd"; - } -} - -class MockDataProvider { - - public byte[] returnValidDecodeBytes(){ - JSONObject validJson = new JSONObject(); - validJson.put("exp", (System.currentTimeMillis()+3000) / 1000); - byte[] encodedBytes = Base64.encodeBase64(validJson.toJSONString().getBytes()); - return Base64.decodeBase64(encodedBytes); - - } - public byte[] returnInValidDecodeBytes(){ - JSONObject expiredJson = new JSONObject(); - expiredJson.put("exp", (System.currentTimeMillis()-3000) / 1000); - byte[] encodedByte = Base64.encodeBase64(expiredJson.toJSONString().getBytes()); - return Base64.decodeBase64(encodedByte); - - } -} - - -@RunWith(PowerMockRunner.class) -@PrepareForTest(fullyQualifiedNames = "org.apache.commons.codec.binary.Base64") -public class TokenUtilsValidTokenTest { - - @Before - public void init(){ - MockDataProvider dd = new MockDataProvider(); - byte[] validDecodeBytes = dd.returnValidDecodeBytes(); - byte[] inValidDecodeBytes = dd.returnInValidDecodeBytes(); - PowerMockito.mockStatic(Base64.class); - PowerMockito.when(Base64.decodeBase64("valid_token")).thenReturn(validDecodeBytes); - PowerMockito.when(Base64.decodeBase64("invalid_token")).thenReturn(inValidDecodeBytes); - } - @Test - public void testValidToken() { - try { - TokenUtils tokenUtils = new TokenUtils(); - String token = tokenUtils.getBearerToken(new ValidTokenProvider()); - assertEquals(token,"aa.valid_token.dd"); - String secondToken = tokenUtils.getBearerToken(new ValidTokenProvider()); - assertEquals(secondToken,"aa.valid_token.dd"); - } catch (SkyflowException e) { - Assert.fail("Should not throw EXCEPTION !!"); - } - } - - @Test - public void testInValidToken() { - try { - TokenUtils tokenUtils = new TokenUtils(); - String token = tokenUtils.getBearerToken(new InvalidBearerTokenProvider()); - Assert.fail("should throw execution"); - } catch (SkyflowException e) { - assertEquals(e.getMessage(), ErrorCode.BearerTokenExpired.getDescription()); - - } - } -} diff --git a/v1/src/test/java/com/skyflow/common/utils/ValidatorsTest.java b/v1/src/test/java/com/skyflow/common/utils/ValidatorsTest.java deleted file mode 100644 index 52abcc15..00000000 --- a/v1/src/test/java/com/skyflow/common/utils/ValidatorsTest.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.skyflow.common.utils; - - -import com.skyflow.entities.GetOptions; -import com.skyflow.entities.GetRecordInput; -import com.skyflow.entities.RedactionType; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -@RunWith(PowerMockRunner.class) -@PrepareForTest(fullyQualifiedNames = "com.skyflow.common.utils.TokenUtils") -public class ValidatorsTest { - private static String tableName = null; - private static String columnName = null; - private static String[] columnValue = new String[1]; - private static String[] ids = new String[1]; - private static String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; - - @BeforeClass - public static void setup() throws SkyflowException { - PowerMockito.mockStatic(TokenUtils.class); - PowerMockito.when(TokenUtils.isTokenValid("valid_token")).thenReturn(true); - PowerMockito.when(TokenUtils.isTokenValid("not_a_valid_token")).thenReturn(false); - - tableName = "account_details"; - columnName = "card_number"; - columnValue[0] = "123451234554321"; - ids[0] = "123451234554321"; - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void validateGetRequestRecordValidTest() { - //column values with redaction - GetRecordInput recordInput = new GetRecordInput(); - - recordInput.setTable(tableName); - recordInput.setColumnValues(columnValue); - recordInput.setColumnName(columnName); - recordInput.setRedaction(RedactionType.PLAIN_TEXT); - try { - Validators.validateGetRequestRecord(recordInput, new GetOptions(false)); - } catch (SkyflowException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void validateGetRequestRecordValidIdTest() { - //Id values with redaction - - GetRecordInput recordInput = new GetRecordInput(); - recordInput.setTable(tableName); - recordInput.setIds(ids); - recordInput.setRedaction(RedactionType.PLAIN_TEXT); - try { - Validators.validateGetRequestRecord(recordInput, new GetOptions(false)); - } catch (SkyflowException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - // missing redaction when token is false - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void validateGetRequestRecordMisiingRedaction() { - //Id values with redaction - - GetRecordInput recordInput = new GetRecordInput(); - recordInput.setTable(tableName); - recordInput.setIds(ids); - try { - Validators.validateGetRequestRecord(recordInput, new GetOptions(false)); - } catch (SkyflowException exception) { - Assert.assertTrue(ErrorCode.MissingRedaction.getDescription().contains(exception.getMessage())); - exception.printStackTrace(); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void validateGetRequestRecordValidIdTokenTrueTest() throws SkyflowException { - //Id values with redaction - - GetRecordInput recordInput = new GetRecordInput(); - recordInput.setTable(tableName); - recordInput.setIds(ids); - try { - Validators.validateGetRequestRecord(recordInput, new GetOptions(true)); - } catch (SkyflowException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void validateGetRequestRecordIdRedactionTokenTest() throws SkyflowException { - //Id values with redaction - - GetRecordInput recordInput = new GetRecordInput(); - recordInput.setTable(tableName); - recordInput.setIds(ids); - recordInput.setRedaction(RedactionType.PLAIN_TEXT); - - try { - Validators.validateGetRequestRecord(recordInput, new GetOptions(true)); - } catch (SkyflowException e) { - Assert.assertTrue(ErrorCode.RedactionWithTokenNotSupported.getDescription().contains(e.getMessage())); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void validateGetRequestRecordColumnRedactionTokenTest() { - //Id values with redaction - GetRecordInput recordInput = new GetRecordInput(); - recordInput.setTable(tableName); - recordInput.setColumnName(columnName); - recordInput.setColumnValues(columnValue); - recordInput.setRedaction(RedactionType.PLAIN_TEXT); - - try { - Validators.validateGetRequestRecord(recordInput, new GetOptions(true)); - } catch (SkyflowException e) { - Assert.assertTrue(ErrorCode.TokensGetColumnNotSupported.getDescription().contains(e.getMessage())); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void validateGetRecordColumnNameIDSBothSpecified() { - GetRecordInput recordInput = new GetRecordInput(); - recordInput.setTable(tableName); - recordInput.setIds(ids); - recordInput.setColumnName(columnName); - recordInput.setColumnValues(columnValue); - recordInput.setRedaction(RedactionType.PLAIN_TEXT); - - try { - Validators.validateGetRequestRecord(recordInput, new GetOptions(false)); - } catch (SkyflowException e) { - Assert.assertTrue(ErrorCode.SkyflowIdAndColumnNameBothSpecified.getDescription().contains(e.getMessage())); - } - } - @Test - public void getOptionsTest(){ - GetOptions options = new GetOptions(); - Assert.assertFalse(options.getOptionToken()); - } - @Test - public void getOptionsTestWhenTokenTrue(){ - GetOptions options = new GetOptions(true); - Assert.assertTrue(options.getOptionToken()); - } - -} diff --git a/v1/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTest.java b/v1/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTest.java deleted file mode 100644 index e78501e0..00000000 --- a/v1/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTest.java +++ /dev/null @@ -1,275 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.serviceaccount.util; - -import com.skyflow.Configuration; -import com.skyflow.common.utils.Helpers; -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.entities.LogLevel; -import com.skyflow.entities.ResponseToken; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; - -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import org.junit.Assert; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentMatchers; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.net.URL; -import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; - -@RunWith(PowerMockRunner.class) -@PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility"}) -public class BearerTokenTest { - - private final String VALID_CREDENTIALS_FILE_PATH = "./credentials.json"; - - @Test - public void testEmptyFilePath() { - Configuration.setLogLevel(LogLevel.DEBUG); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(new File("")) - .build(); - try { - token.getBearerToken(); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), ErrorCode.EmptyFilePath.getDescription()); - } - } - - @Test - public void testNullFile() { - Configuration.setLogLevel(LogLevel.DEBUG); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials((File) null) - .build(); - try { - token.getBearerToken(); - - } catch (SkyflowException exception) { - assertEquals(ErrorCode.EmptyJSONString.getDescription(), exception.getMessage()); - } - } - - @Test - public void testInvalidFileContent() { - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(new File("./src/test/resources/invalidCredentials.json")) - .build(); - try { - token.getBearerToken(); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), ErrorCode.InvalidClientID.getDescription()); - } - - } - - @Test - public void testFileNotFound() { - String fileNotFoundPath = "./src/test/resources/nofile.json"; - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(new File(fileNotFoundPath)) - .build(); - try { - token.getBearerToken(); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), - Helpers.parameterizedString(ErrorCode.InvalidCredentialsPath.getDescription(), fileNotFoundPath)); - } - } - - @Test - public void testFiledIsNotJsonFile() { - String notJsonFilePath = "./src/test/resources/notJson.txt"; - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(new File(notJsonFilePath)) - .build(); - try { - token.getBearerToken(); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), - Helpers.parameterizedString(ErrorCode.InvalidJsonFormat.getDescription(), notJsonFilePath)); - } - } - - @Test - public void testEmptyString() { - Configuration.setLogLevel(LogLevel.DEBUG); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials("") - .build(); - try { - token.getBearerToken(); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), ErrorCode.EmptyFilePath.getDescription()); - } - } - - @Test - public void testNullString() { - Configuration.setLogLevel(LogLevel.DEBUG); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials((String) null) - .build(); - try { - token.getBearerToken(); - - } catch (SkyflowException exception) { - assertEquals(ErrorCode.EmptyJSONString.getDescription(), exception.getMessage()); - } - } - - @Test - public void testInvalidString() { - String creds = "key:'not_a_json'"; - Configuration.setLogLevel(LogLevel.DEBUG); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(creds) - .build(); - try { - token.getBearerToken(); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.InvalidJSONStringFormat.getDescription(), exception.getMessage()); - } - } - - @Test - public void testInvalidKeyId() { - String creds = "{\"clientID\":\"test_client_ID\"}"; - Configuration.setLogLevel(LogLevel.DEBUG); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(creds) - .build(); - try { - token.getBearerToken(); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.InvalidKeyID.getDescription(), exception.getMessage()); - } - } - - @Test - public void testInvalidTokenURI() { - String creds = "{\"clientID\":\"test_client_ID\",\"keyID\":\"test_key_id\"}"; - Configuration.setLogLevel(LogLevel.DEBUG); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(creds) - .build(); - try { - token.getBearerToken(); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.InvalidTokenURI.getDescription(), exception.getMessage()); - } - } - - @Test - public void testEmptyContext() { - Configuration.setLogLevel(LogLevel.DEBUG); - String creds = System.getProperty("TEST_CREDENTIALS_FILE_STRING_WITH_CONTEXT"); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(creds) - .setCtx("") - .build(); - try { - token.getBearerToken(); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.EmptyContext.getDescription(), exception.getMessage()); - } - } - - @Test - public void testEmptyRoleProvided() { - Configuration.setLogLevel(LogLevel.DEBUG); - String creds = System.getProperty("TEST_CREDENTIALS_FILE_STRING_WITH_CONTEXT"); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(creds) - .setCtx("abcd") - .setRoles(new String[] { "" }) - .build(); - try { - token.getBearerToken(); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.IncorrectRole.getDescription(), exception.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility"}) - public void testValidWithContextString() { - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"accessToken\":\"valid.bearer.token\",\"tokenType\":\"Bearer\"}"; - try { - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(new File(VALID_CREDENTIALS_FILE_PATH)) - .setCtx("abc") - .build(); - - String bearerToken = token.getBearerToken(); - assertEquals(bearerToken,"valid.bearer.token"); - } catch (SkyflowException | IOException exception) { - assertNull(exception); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility"}) - public void testValidWithRoles() { - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"accessToken\":\"valid.bearer.token\",\"tokenType\":\"Bearer\"}"; - try { - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(new File(VALID_CREDENTIALS_FILE_PATH)) - .setCtx("abc") - .setRoles(new String[]{"role_id"}) - .build(); - - String bearerToken = token.getBearerToken(); - assertEquals(bearerToken,"valid.bearer.token"); - } catch (SkyflowException | IOException exception) { - assertNull(exception); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility"}) - public void testValidWithContextFromCreds() { - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"accessToken\":\"valid.bearer.token\",\"tokenType\":\"Bearer\"}"; - try { - JSONParser parser = new JSONParser(); - Object obj = parser.parse(new FileReader(VALID_CREDENTIALS_FILE_PATH)); - JSONObject saCreds = (JSONObject) obj; - - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(saCreds.toJSONString()) - .setCtx("abc") - .setRoles(new String[]{"role_id"}) - .build(); - - String bearerToken = token.getBearerToken(); - assertEquals(bearerToken,"valid.bearer.token"); - } catch (SkyflowException | IOException | ParseException exception) { - assertNull(exception); - } - } - - -} diff --git a/v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokenResponseTest.java b/v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokenResponseTest.java deleted file mode 100644 index b75cb031..00000000 --- a/v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokenResponseTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.skyflow.serviceaccount.util; - -import com.skyflow.errors.ErrorCode; -import org.junit.Assert; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class SignedDataTokenResponseTest { - @Test - public void testSignedDataTokenResponse() { - String response = "{dataToken: token,signedDataToken: signed_token}"; - SignedDataTokenResponse res = new SignedDataTokenResponse("token", "signed_token"); - Assert.assertNotNull(res); - assertEquals(response,res.toString()); - assertEquals(res.dataToken, "token"); - assertEquals(res.signedDataToken, "signed_token"); - } -} diff --git a/v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTest.java b/v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTest.java deleted file mode 100644 index 00e74383..00000000 --- a/v1/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTest.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.serviceaccount.util; - -import com.skyflow.Configuration; -import com.skyflow.common.utils.Helpers; -import com.skyflow.entities.LogLevel; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import org.junit.Assert; -import org.junit.Test; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.util.List; - -import static org.junit.Assert.*; - -public class SignedDataTokensTest { - - private final String VALID_CREDENTIALS_FILE_PATH = "./credentials.json"; - - @Test - public void testEmptyFilePath() { - Configuration.setLogLevel(LogLevel.DEBUG); - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials(new File("")) - .build(); - try { - token.getSignedDataTokens(); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), ErrorCode.EmptyFilePath.getDescription()); - } - } - - @Test - public void testNullFile() { - Configuration.setLogLevel(LogLevel.DEBUG); - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials((File) null) - .build(); - try { - token.getSignedDataTokens(); - - } catch (SkyflowException exception) { - assertEquals(ErrorCode.EmptyJSONString.getDescription(), exception.getMessage()); - } - } - - @Test - public void testInvalidFileContent() { - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials(new File("./src/test/resources/invalidCredentials.json")) - .build(); - try { - token.getSignedDataTokens(); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), ErrorCode.InvalidClientID.getDescription()); - } - } - - @Test - public void testFileNotFound() { - String fileNotFoundPath = "./src/test/resources/nofile.json"; - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials(new File(fileNotFoundPath)) - .build(); - try { - token.getSignedDataTokens(); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), - Helpers.parameterizedString(ErrorCode.InvalidCredentialsPath.getDescription(), fileNotFoundPath)); - } - } - - @Test - public void testFiledIsNotJsonFile() { - String notJsonFilePath = "./src/test/resources/notJson.txt"; - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials(new File(notJsonFilePath)) - .build(); - try { - token.getSignedDataTokens(); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), - Helpers.parameterizedString(ErrorCode.InvalidJsonFormat.getDescription(), notJsonFilePath)); - } - } - - @Test - public void testEmptyString() { - Configuration.setLogLevel(LogLevel.DEBUG); - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials("") - .build(); - try { - token.getSignedDataTokens(); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), ErrorCode.EmptyFilePath.getDescription()); - } - } - - @Test - public void testNullString() { - Configuration.setLogLevel(LogLevel.DEBUG); - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials((String) null) - .build(); - try { - token.getSignedDataTokens(); - - } catch (SkyflowException exception) { - assertEquals(ErrorCode.EmptyJSONString.getDescription(), exception.getMessage()); - } - } - - @Test - public void testInvalidString() { - String creds = "key:'not_a_json'"; - Configuration.setLogLevel(LogLevel.DEBUG); - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials(creds) - .build(); - try { - token.getSignedDataTokens(); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.InvalidJSONStringFormat.getDescription(), exception.getMessage()); - } - } - - @Test - public void testInvalidKeyId() { - String creds = "{\"clientID\":\"test_client_ID\"}"; - Configuration.setLogLevel(LogLevel.DEBUG); - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials(creds) - .build(); - try { - token.getSignedDataTokens(); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.InvalidKeyID.getDescription(), exception.getMessage()); - } - } - - @Test - public void testNoDataTokenProvided() { - String creds = System.getProperty("TEST_CREDENTIALS_FILE_STRING"); - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials(creds) - .setDataTokens(new String[] {}).build(); - try { - assertTrue(token.getSignedDataTokens().isEmpty()); - - } catch (SkyflowException exception) { - System.out.println(exception); - } - } - - @Test - public void testValidSignedTokenWithTTL() { - try { - JSONParser parser = new JSONParser(); - Object obj = parser.parse(new FileReader(VALID_CREDENTIALS_FILE_PATH)); - JSONObject saCreds = (JSONObject) obj; - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials(saCreds.toJSONString()) - .setCtx("abc") - .setTimeToLive(30) - .setDataTokens(new String[] { "5230-0316-0674-5728" }).build(); - List signedToken = token.getSignedDataTokens(); - Assert.assertNotNull(signedToken); - - } catch (SkyflowException | IOException | ParseException exception) { - assertNull(exception); - } - } - - @Test - public void testValidSignedToken() { - try { - SignedDataTokens token = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials(new File(VALID_CREDENTIALS_FILE_PATH)) - .setCtx("abc") - .setDataTokens(new String[] { "5230-0316-0674-5728" }).build(); - List signedToken = token.getSignedDataTokens(); - Assert.assertNotNull(signedToken); - - } catch (SkyflowException exception) { - assertNull(exception); - } - } - -} diff --git a/v1/src/test/java/com/skyflow/serviceaccount/util/TokenTest.java b/v1/src/test/java/com/skyflow/serviceaccount/util/TokenTest.java deleted file mode 100644 index 19eee9e1..00000000 --- a/v1/src/test/java/com/skyflow/serviceaccount/util/TokenTest.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.serviceaccount.util; - -import com.skyflow.Configuration; -import com.skyflow.common.utils.Helpers; -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.TokenUtils; -import com.skyflow.entities.LogLevel; -import com.skyflow.entities.ResponseToken; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentMatchers; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import java.io.FileReader; -import java.io.IOException; -import java.net.URL; -import java.nio.file.Paths; -import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; -import static org.mockito.ArgumentMatchers.anyString; - -@RunWith(PowerMockRunner.class) -@PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) -public class TokenTest { - // replace the path, when running local, do not commit - private final String VALID_CREDENTIALS_FILE_PATH = "./credentials.json"; - - private static String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; - @Test - public void testInvalidFilePath() { - try { - Configuration.setLogLevel(LogLevel.DEBUG); - Token.GenerateToken(""); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), ErrorCode.EmptyFilePath.getDescription()); - } - - } - - @Test - public void testNullFilePath() { - try { - Token.generateBearerToken(""); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), ErrorCode.EmptyFilePath.getDescription()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInvalidFileContent() { - try { - Token.generateBearerToken(Paths.get("./src/test/resources/invalidCredentials.json").toString()); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), ErrorCode.InvalidClientID.getDescription()); - } - - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testFileNotFoundPath() { - String fileNotFoundPath = "./src/test/resources/nofile.json"; - try { - Token.generateBearerToken(Paths.get(fileNotFoundPath).toString()); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), Helpers.parameterizedString(ErrorCode.InvalidCredentialsPath.getDescription(), fileNotFoundPath)); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testFiledNotJsonFile() { - String notJsonFilePath = "./src/test/resources/notJson.txt"; - try { - Token.generateBearerToken(Paths.get(notJsonFilePath).toString()); - } catch (SkyflowException exception) { - assertEquals(exception.getMessage(), Helpers.parameterizedString(ErrorCode.InvalidJsonFormat.getDescription(), notJsonFilePath)); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testCallingDeprecatedMethod() { - try { - PowerMockito.mockStatic(TokenUtils.class); - PowerMockito.when(TokenUtils.isTokenValid("a.b.c")).thenReturn(true); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"accessToken\":\"a.b.c\",\"tokenType\":\"Bearer\"}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - ResponseToken token = Token.GenerateToken(VALID_CREDENTIALS_FILE_PATH); - Assert.assertNotNull(token.getAccessToken()); - Assert.assertEquals("Bearer", token.getTokenType()); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - Assert.assertNull(skyflowException); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testValidFileContent() { - try { - PowerMockito.mockStatic(TokenUtils.class); - PowerMockito.when(TokenUtils.isTokenValid("a.b.c")).thenReturn(true); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"accessToken\":\"a.b.c\",\"tokenType\":\"Bearer\"}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - ResponseToken token = Token.generateBearerToken(VALID_CREDENTIALS_FILE_PATH); - Assert.assertNotNull(token.getAccessToken()); - Assert.assertEquals("Bearer", token.getTokenType()); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - Assert.assertNull(skyflowException); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testValidString() { - try { - JSONParser parser = new JSONParser(); - Object obj = parser.parse(new FileReader(VALID_CREDENTIALS_FILE_PATH)); - JSONObject saCreds = (JSONObject) obj; - - PowerMockito.mockStatic(TokenUtils.class); - PowerMockito.when(TokenUtils.isTokenValid("a.b.c")).thenReturn(true); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"accessToken\":\"a.b.c\",\"tokenType\":\"Bearer\"}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - ResponseToken token = Token.generateBearerTokenFromCreds(saCreds.toJSONString()); - Assert.assertNotNull(token.getAccessToken()); - Assert.assertEquals("Bearer", token.getTokenType()); - } catch (SkyflowException | IOException | ParseException skyflowException) { - skyflowException.printStackTrace(); - Assert.assertNull(skyflowException); - } - } - - @Test - public void testEmptyString() { - try { - ResponseToken token = Token.generateBearerTokenFromCreds(""); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.EmptyJSONString.getDescription(), exception.getMessage()); - } - } - - @Test - public void testNullString() { - try { - ResponseToken token = Token.generateBearerTokenFromCreds(null); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.EmptyJSONString.getDescription(), exception.getMessage()); - } - } - - @Test - public void testInvalidString() { - String creds = "key:'not_a_json'"; - try { - ResponseToken token = Token.generateBearerTokenFromCreds(creds); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.InvalidJSONStringFormat.getDescription(), exception.getMessage()); - } - } - - @Test - public void testInvalidKeyId() { - String creds = "{\"clientID\":\"test_client_ID\"}"; - try { - ResponseToken token = Token.generateBearerTokenFromCreds(creds); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.InvalidKeyID.getDescription(), exception.getMessage()); - } - } - - @Test - public void testInvalidTokenURI() { - String creds = "{\"clientID\":\"test_client_ID\",\"keyID\":\"test_key_id\"}"; - try { - ResponseToken token = Token.generateBearerTokenFromCreds(creds); - } catch (SkyflowException exception) { - assertEquals(ErrorCode.InvalidTokenURI.getDescription(), exception.getMessage()); - } - } - - @Test - public void testIsValidForEmptyToken() { - String token = ""; - assertEquals(false, Token.isValid(token)); - } - - @Test - public void testIsValidForInvalidToken() { - String token = "invalidToken"; - assertEquals(false, Token.isValid(token)); - } - - @Test - public void testIsExpiredForExpiredToken() { - String token = System.getProperty("TEST_EXPIRED_TOKEN"); - assertEquals(true, Token.isExpired(token)); - } - -} \ No newline at end of file diff --git a/v1/src/test/java/com/skyflow/vault/DeleteMethodTest.java b/v1/src/test/java/com/skyflow/vault/DeleteMethodTest.java deleted file mode 100644 index 9ad439e8..00000000 --- a/v1/src/test/java/com/skyflow/vault/DeleteMethodTest.java +++ /dev/null @@ -1,421 +0,0 @@ -package com.skyflow.vault; - -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.TokenUtils; -import com.skyflow.common.utils.Validators; -import com.skyflow.entities.DeleteRecordInput; -import com.skyflow.entities.RedactionType; -import com.skyflow.entities.SkyflowConfiguration; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentMatchers; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import java.io.IOException; -import java.net.URL; - -import static org.junit.Assert.*; - -@RunWith(PowerMockRunner.class) -@PrepareForTest(fullyQualifiedNames = "com.skyflow.common.utils.TokenUtils") -public class DeleteMethodTest { - private static String vaultID = null; - private static String vaultURL = null; - private static String skyflowId = null; - private static String token = null; - private static String tableName = null; - private static String columnName = null; - private static String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; - - - @BeforeClass - public static void setup() throws SkyflowException { - PowerMockito.mockStatic(TokenUtils.class); - PowerMockito.when(TokenUtils.isTokenValid("valid_token")).thenReturn(true); - PowerMockito.when(TokenUtils.isTokenValid("not_a_valid_token")).thenReturn(false); - - vaultID = "vault123"; - vaultURL = "https://test.com"; - skyflowId = "skyflowId123"; - token = "token123"; - tableName = "pii_fields"; - columnName = "first_name"; - } - @Test - public void testValidInput() { - DeleteRecordInput validInput = new DeleteRecordInput(); - validInput.setTable("users"); - validInput.setId("12345"); - - try { - Validators.validateDeleteBySkyflowId(validInput); - } catch (SkyflowException e) { - fail("Unexpected exception thrown"); - } - } - @Test - public void testValidInputCase2() { - DeleteRecordInput validInput = new DeleteRecordInput(); - validInput.setTable(""); - validInput.setId("12345"); - - try { - Validators.validateDeleteBySkyflowId(validInput); - } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.InvalidTable.getDescription(), e.getMessage()); - } - } - @Test - public void testValidInputCase3() { - DeleteRecordInput validInput = new DeleteRecordInput(); - validInput.setTable(null); - validInput.setId("12345"); - - try { - Validators.validateDeleteBySkyflowId(validInput); - } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.InvalidTable.getDescription(), e.getMessage()); - } - } - @Test - public void testValidInputCase4() { - DeleteRecordInput validInput = new DeleteRecordInput(); - validInput.setTable("table"); - validInput.setId(null); - - try { - Validators.validateDeleteBySkyflowId(validInput); - } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.InvalidId.getDescription(), e.getMessage()); - } - } - @Test - public void testValidInputInvalidInput() { - DeleteRecordInput validInput = new DeleteRecordInput(); - validInput.setTable("table"); - validInput.setId(""); - - try { - Validators.validateDeleteBySkyflowId(validInput); - } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.InvalidId.getDescription(), e.getMessage()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testDeleteEmptyRecords() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - records.put("records", recordsArray); - JSONObject response = skyflowClient.delete(records); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.EmptyRecords.getDescription(), skyflowException.getMessage()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testDeleteEmptyRecordsCase2() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - records.put("", recordsArray); - JSONObject response = skyflowClient.delete(records); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidDeleteInput.getDescription(), skyflowException.getMessage()); - } - } - @Test - public void testDeleteMethodErrorWhenNullRecordsArePassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - records.put("records", null); - - JSONObject response = skyflowClient.delete(records); - - } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.EmptyRecords.getDescription(), e.getMessage()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.TokenUtils"}) - public void testDeleteMethodErrorWhenNullTableNameIsPassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - record.put("table", null); - - recordsArray.add(record); - records.put("records", recordsArray); - - JSONObject response = skyflowClient.delete(records); - - } catch (SkyflowException skyflowException) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) skyflowException.getData().get("errors")).get(0))).get("error"); - Assert.assertEquals(ErrorCode.InvalidTable.getDescription(), error.get("description")); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testDeleteEmptyRecordsCase3() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONObject record = new JSONObject(); - - JSONArray recordsArray = new JSONArray(); - recordsArray.add(record); - record.put("table", "name"); - records.put("records", recordsArray); - JSONObject response = skyflowClient.delete(records); - } catch (SkyflowException skyflowException) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) skyflowException.getData().get("errors")).get(0))).get("error"); - Assert.assertEquals(ErrorCode.InvalidId.getDescription(), error.get("description")); - } - - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testDeleteMethodErrorWhenWrongTableNameIsPassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - record.put("id", "skyflowid"); - record.put("table", "invalidTable"); - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"error\":{\"grpc_code\":13,\"http_code\":500,\"message\":\"Couldn't load data\",\"http_status\":\"Internal Server Error\"}}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new SkyflowException(500, mockResponse)); - - JSONObject response = skyflowClient.delete(records); - - } catch (SkyflowException e) { - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testDeleteMethodPartialError() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject firstRecord = new JSONObject(); - firstRecord.put("id", "id1"); - firstRecord.put("table", "table1"); - - - JSONObject secondRecord = new JSONObject(); - secondRecord.put("id", "id2"); - secondRecord.put("table", "invalidTable1"); - - JSONObject thirdRecord = new JSONObject(); - thirdRecord.put("id", "id3"); - thirdRecord.put("table", "invalidTable2"); - - - recordsArray.add(firstRecord); - recordsArray.add(secondRecord); - recordsArray.add(thirdRecord); - records.put("records", recordsArray); - - String firstRequestUrl = "https://test.com/v1/vaults/vault123/table1/id1"; - String secondRequestUrl = "https://test.com/v1/vaults/vault123/invalidTable1/id2"; - String thirdRequestUrl = "https://test.com/v1/vaults/vault123/invalidTable2/id3"; - - PowerMockito.mockStatic(HttpUtility.class); - String mockValidResponse = "{\"skyflow_id\":\"id1\",\"deleted\":\"true\"}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.eq(new URL(firstRequestUrl)), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenReturn(mockValidResponse); - - String mockInvalidResponse1 = "{\"error\":{\"http_code\":404,\"http_status\":\"Not Found\",\"details\":[],\"message\":\"No Records Found - requestId: 968fc4a8-53ef-92fb-9c0d-3393d3361790\",\"grpc_code\":5}}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.eq(new URL(secondRequestUrl)), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new SkyflowException(500, mockInvalidResponse1)); - - String mockInvalidResponse2 = "{\"error\":{\"http_code\":404,\"http_status\":\"Not Found\",\"details\":[],\"message\":\"No Records Found - requestId: 968fc4a8-53ef-92fb-9c0d-3393d3361790\",\"grpc_code\":5}}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.eq(new URL(thirdRequestUrl)), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new SkyflowException(500, mockInvalidResponse2)); - - JSONObject response = skyflowClient.delete(records); - - } catch (SkyflowException e) { - JSONObject partialError = e.getData(); - Assert.assertTrue(partialError.containsKey("records")); - Assert.assertTrue(partialError.containsKey("errors")); - - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(2, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testDeleteMethodSuccess() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - record.put("table", tableName); - record.put("id", "id1"); - - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"skyflow_id\":\"id1\",\"deleted\":\"true\"}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenReturn(mockResponse); - JSONObject response = skyflowClient.delete(records); - JSONArray responseRecords = (JSONArray) response.get("records"); - Assert.assertEquals(1, responseRecords.size()); - Assert.assertEquals("id1", ((JSONObject) responseRecords.get(0)).get("skyflow_id")); - Assert.assertEquals("true", ((JSONObject) responseRecords.get(0)).get("deleted")); - - } catch (SkyflowException | IOException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testDeleteMethodParseException() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - record.put("table", tableName); - record.put("id", "id1"); - - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"skyflow_id\":\"id1\",\"deleted\":\"true\"}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenReturn(mockResponse); - JSONObject response = skyflowClient.delete(records); - - } catch (SkyflowException e) { - String error = e.getMessage(); - assertEquals(ErrorCode.ThreadExecutionException.getDescription(), error); - } catch (IOException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodIOException() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - record.put("table", tableName); - record.put("id", "id1"); - - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"skyflow_id\":\"id1\",\"deleted\":\"true\"}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new IOException()); - - JSONObject response = skyflowClient.delete(records); - } catch (SkyflowException e) { - String error = e.getMessage(); - assertEquals(ErrorCode.ThreadExecutionException.getDescription(), error); - } catch (IOException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } -} diff --git a/v1/src/test/java/com/skyflow/vault/GetMethodTest.java b/v1/src/test/java/com/skyflow/vault/GetMethodTest.java deleted file mode 100644 index 2477cbbf..00000000 --- a/v1/src/test/java/com/skyflow/vault/GetMethodTest.java +++ /dev/null @@ -1,870 +0,0 @@ -package com.skyflow.vault; - -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.TokenUtils; -import com.skyflow.entities.GetOptions; -import com.skyflow.entities.GetRecordInput; -import com.skyflow.entities.RedactionType; -import com.skyflow.entities.SkyflowConfiguration; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentMatchers; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import java.io.IOException; -import java.net.URL; - -import static org.junit.Assert.assertEquals; - -@RunWith(PowerMockRunner.class) -@PrepareForTest(fullyQualifiedNames = "com.skyflow.common.utils.TokenUtils") -public class GetMethodTest { - private static String vaultID = null; - private static String vaultURL = null; - private static String skyflowId = null; - private static String token = null; - private static String tableName = null; - private static String columnName = null; - private static String columnValue = null; - private static String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; - - @BeforeClass - public static void setup() throws SkyflowException { - PowerMockito.mockStatic(TokenUtils.class); - PowerMockito.when(TokenUtils.isTokenValid("valid_token")).thenReturn(true); - PowerMockito.when(TokenUtils.isTokenValid("not_a_valid_token")).thenReturn(false); - - vaultID = "vault123"; - vaultURL = "https://test.com"; - skyflowId = "skyflowId123"; - token = "token123"; - tableName = "account_details"; - columnName = "bank_account_number"; - columnValue = "123451234554321"; - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodSuccess() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray values = new JSONArray(); - values.add(columnValue); - - record.put("table", tableName); - record.put("columnName", columnName); - record.put("columnValues", values); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"records\":[{\"fields\":{\"bank_account_number\":\"123451234554321\",\"pin_code\":\"121342\",\"name\":\"vivek jain\",\"skyflow_id\":\"skyflowId123\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenReturn(mockResponse); - JSONObject response = skyflowClient.get(records); - JSONArray responseRecords = (JSONArray) response.get("records"); - - Assert.assertEquals(1, responseRecords.size()); - Assert.assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - Assert.assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - - } catch (SkyflowException | IOException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - public void testGetMethodErrorWhenInvalidInputIsPassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - records.put("invalidRecordsKey", recordsArray); - - JSONObject response = skyflowClient.get(records); - } catch (SkyflowException skyflowException) { - Assert.assertEquals(ErrorCode.InvalidGetInput.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testGetMethodErrorWhenEmptyRecordsArePassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - records.put("records", recordsArray); - - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.EmptyRecords.getDescription(), e.getMessage()); - } - } - - @Test - public void testGetMethodErrorWhenNullRecordsArePassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - records.put("records", null); - - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.EmptyRecords.getDescription(), e.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodErrorWhenNullTableNameIsPassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - record.put("table", null); - - recordsArray.add(record); - records.put("records", recordsArray); - - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException skyflowException) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) skyflowException.getData().get("errors")).get(0))).get("error"); - Assert.assertEquals(ErrorCode.InvalidTable.getDescription(), error.get("description")); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodErrorWhenEmptyTableNameIsPassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - record.put("table", " "); - - recordsArray.add(record); - records.put("records", recordsArray); - - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException skyflowException) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) skyflowException.getData().get("errors")).get(0))).get("error"); - Assert.assertEquals(ErrorCode.InvalidTable.getDescription(), error.get("description")); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodErrorWhenWrongTableNameIsPassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray ids = new JSONArray(); - ids.add(skyflowId); - - record.put("ids", ids); - record.put("table", "invalidTable"); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"error\":{\"grpc_code\":13,\"http_code\":500,\"message\":\"Couldn't load data\",\"http_status\":\"Internal Server Error\"}}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new SkyflowException(500, mockResponse)); - - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException e) { - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodPartialError() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject firstRecord = new JSONObject(); - JSONArray firstRecordColumnValues = new JSONArray(); - firstRecordColumnValues.add(columnValue); - firstRecord.put("table", tableName); - firstRecord.put("columnName", columnName); - firstRecord.put("columnValues", firstRecordColumnValues); - firstRecord.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - JSONObject secondRecord = new JSONObject(); - JSONArray ids = new JSONArray(); - ids.add(skyflowId); - secondRecord.put("ids", ids); - secondRecord.put("table", "invalidTable"); - secondRecord.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - JSONObject thirdRecord = new JSONObject(); - JSONArray thirdRecordColumnValues = new JSONArray(); - thirdRecordColumnValues.add(columnValue); - thirdRecord.put("table", "invalidTable"); - thirdRecord.put("columnName", columnName); - thirdRecord.put("columnValues", thirdRecordColumnValues); - thirdRecord.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(firstRecord); - recordsArray.add(secondRecord); - recordsArray.add(thirdRecord); - records.put("records", recordsArray); - - String firstRequestUrl = "https://test.com/v1/vaults/vault123/account_details?column_name=bank_account_number&column_values=123451234554321&redaction=PLAIN_TEXT"; - String secondRequestUrl = "https://test.com/v1/vaults/vault123/invalidTable?skyflow_ids=skyflowId123&redaction=PLAIN_TEXT"; - String thirdRequestUrl = "https://test.com/v1/vaults/vault123/invalidTable?column_name=bank_account_number&column_values=123451234554321&redaction=PLAIN_TEXT"; - - PowerMockito.mockStatic(HttpUtility.class); - String mockValidResponse = "{\"records\":[{\"fields\":{\"bank_account_number\":\"123455432112345\",\"pin_code\":\"123123\",\"name\":\"vivek jain\",\"id\":\"492c21a1-107f-4d10-ba2c-3482a411827d\"},\"table\":\"account_details\"}]}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.eq(new URL(firstRequestUrl)), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenReturn(mockValidResponse); - - String mockInvalidResponse1 = "{\"error\":{\"code\":500,\"description\":\"Couldn't load data - requestId: 496c3a0b-3d24-9052-bbba-28bf3f04b97d\"},\"ids\":[\"skyflowId123\"]}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.eq(new URL(secondRequestUrl)), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new SkyflowException(500, mockInvalidResponse1)); - - String mockInvalidResponse2 = "{\"error\":{\"code\":500,\"description\":\"Couldn't load data - requestId: 496c3a0b-3d24-9052-bbba-28bf3f04b97d\"},\"columnName\":\"bank_account_number\"}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.eq(new URL(thirdRequestUrl)), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new SkyflowException(500, mockInvalidResponse2)); - - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException e) { - JSONObject partialError = e.getData(); - Assert.assertTrue(partialError.containsKey("records")); - Assert.assertTrue(partialError.containsKey("errors")); - - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(2, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodErrorWhenBothSkyflowIDsAndColumnDetailsArePassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray values = new JSONArray(); - values.add(columnValue); - - JSONArray ids = new JSONArray(); - ids.add(skyflowId); - - record.put("ids", ids); - record.put("table", tableName); - record.put("columnName", columnName); - record.put("columnValues", values); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"error\":{\"grpc_code\":13,\"http_code\":500,\"message\":\"Couldn't load data\",\"http_status\":\"Internal Server Error\"}}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new SkyflowException(500, mockResponse)); - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException e) { - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodErrorWhenNeitherSkyflowIDsNorColumnDetailsArePassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - record.put("table", tableName); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"errors\":[{\"error\":{\"code\":400,\"description\":\"Provide either Ids or column name to get records.\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new SkyflowException(400, mockResponse)); - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException e) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("errors")).get(0))).get("error"); - Assert.assertEquals(ErrorCode.MissingIdAndColumnName.getDescription(), error.get("description")); - } catch (IOException e) { - e.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodErrorWhenColumnNameIsPassedWithoutColumnValues() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - record.put("table", tableName); - record.put("columnName", columnName); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"errors\":[{\"error\":{\"code\":400,\"description\":\"Column Values can not be empty when Column Name is specified.\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new SkyflowException(500, mockResponse)); - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException e) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("errors")).get(0))).get("error"); - Assert.assertEquals(ErrorCode.MissingRecordColumnValue.getDescription(), error.get("description")); - } catch (IOException e) { - e.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodErrorWhenColumnValuesArePassedWithoutColumnName() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray values = new JSONArray(); - values.add(columnValue); - - record.put("table", tableName); - record.put("columnValues", values); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"errors\":[{\"error\":{\"code\":400,\"description\":\"Column Name can not be empty when Column Values are specified.\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new SkyflowException(500, mockResponse)); - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException e) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("errors")).get(0))).get("error"); - Assert.assertEquals(ErrorCode.MissingRecordColumnName.getDescription(), error.get("description")); - } catch (IOException e) { - e.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodIOException() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray values = new JSONArray(); - values.add(columnValue); - - record.put("table", tableName); - record.put("columnName", columnName); - record.put("columnValues", values); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "a{\"records\":[{\"fields\":{\"bank_account_number\":\"123451234554321\",\"pin_code\":\"121342\",\"name\":\"vivek jain\",\"skyflow_id\":\"skyflowId123\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new IOException()); - - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException e) { - String error = e.getMessage(); - assertEquals(ErrorCode.ThreadExecutionException.getDescription(), error); - } catch (IOException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodParseException() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray values = new JSONArray(); - values.add(columnValue); - - record.put("table", tableName); - record.put("columnName", columnName); - record.put("columnValues", values); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "a{\"records\":[{\"fields\":{\"bank_account_number\":\"123451234554321\",\"pin_code\":\"121342\",\"name\":\"vivek jain\",\"skyflow_id\":\"skyflowId123\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenReturn(mockResponse); - JSONObject response = skyflowClient.get(records); - - } catch (SkyflowException e) { - String error = e.getMessage(); - assertEquals(ErrorCode.ThreadExecutionException.getDescription(), error); - } catch (IOException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodWithNoRedactionNoToken() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray ids = new JSONArray(); - ids.add(skyflowId); - - record.put("ids", ids); - record.put("table", tableName); - - recordsArray.add(record); - records.put("records", recordsArray); - - skyflowClient.get(records); - - } catch (SkyflowException e) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("errors")).get(0))).get("error"); - - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(error.get("description"), ErrorCode.MissingRedaction.getDescription()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodWithRedactionToken() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray ids = new JSONArray(); - ids.add(skyflowId); - - record.put("ids", ids); - record.put("table", tableName); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - recordsArray.add(record); - records.put("records", recordsArray); - - skyflowClient.get(records, new GetOptions(true)); - - } catch (SkyflowException e) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("errors")).get(0))).get("error"); - - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(error.get("description"), ErrorCode.RedactionWithTokenNotSupported.getDescription()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodWithNoRedactionTokenForColumnValues() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray values = new JSONArray(); - values.add(columnValue); - - record.put("table", tableName); - record.put("columnName", columnName); - record.put("columnValues", values); - - recordsArray.add(record); - records.put("records", recordsArray); - - skyflowClient.get(records, new GetOptions(true)); - - } catch (SkyflowException e) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("errors")).get(0))).get("error"); - - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(error.get("description"), ErrorCode.TokensGetColumnNotSupported.getDescription()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodWithRedactionWithTokenForColumnValues() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray values = new JSONArray(); - values.add(columnValue); - - record.put("table", tableName); - record.put("columnName", columnName); - record.put("columnValues", values); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(record); - records.put("records", recordsArray); - - - skyflowClient.get(records, new GetOptions(true)); - - } catch (SkyflowException e) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("errors")).get(0))).get("error"); - - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(error.get("description"), ErrorCode.TokensGetColumnNotSupported.getDescription()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodWithNoRedactionNoTokenForColumnValues() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray values = new JSONArray(); - values.add(columnValue); - - record.put("table", tableName); - record.put("columnName", columnName); - record.put("columnValues", values); - - recordsArray.add(record); - records.put("records", recordsArray); - - skyflowClient.get(records); - - } catch (SkyflowException e) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("errors")).get(0))).get("error"); - - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(error.get("description"), ErrorCode.MissingRedaction.getDescription()); - } - - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodWithNoRedactionFalseTokenForColumnValues() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray values = new JSONArray(); - values.add(columnValue); - - record.put("table", tableName); - record.put("columnName", columnName); - record.put("columnValues", values); - - recordsArray.add(record); - records.put("records", recordsArray); - - skyflowClient.get(records, new GetOptions(false)); - - } catch (SkyflowException e) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("errors")).get(0))).get("error"); - - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(error.get("description"), ErrorCode.MissingRedaction.getDescription()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodWithNoRedactionFalseToken() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray ids = new JSONArray(); - ids.add(skyflowId); - - record.put("ids", ids); - record.put("table", tableName); - recordsArray.add(record); - records.put("records", recordsArray); - - skyflowClient.get(records, new GetOptions(false)); - - } catch (SkyflowException e) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("errors")).get(0))).get("error"); - - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(error.get("description"), ErrorCode.MissingRedaction.getDescription()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodWithRedactionFalseTokenSuccess() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray ids = new JSONArray(); - ids.add(skyflowId); - - record.put("ids", ids); - record.put("table", tableName); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"records\":[{\"fields\":{\"bank_account_number\":\"123451234554321\",\"pin_code\":\"121342\",\"name\":\"demo\",\"skyflow_id\":\"skyflowId123\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenReturn(mockResponse); - JSONObject response = skyflowClient.get(records, new GetOptions(false)); - JSONArray responseRecords = (JSONArray) response.get("records"); - - Assert.assertEquals(1, responseRecords.size()); - Assert.assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - Assert.assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - - } catch (SkyflowException | IOException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetMethodWithRedactionFalseTokenSuccess2() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - JSONArray values = new JSONArray(); - values.add(columnValue); - - record.put("table", tableName); - record.put("columnName", columnName); - record.put("columnValues", values); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"records\":[{\"fields\":{\"bank_account_number\":\"123451234554321\",\"pin_code\":\"121342\",\"name\":\"demo\",\"skyflow_id\":\"skyflowId123\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenReturn(mockResponse); - JSONObject response = skyflowClient.get(records, new GetOptions(false)); - JSONArray responseRecords = (JSONArray) response.get("records"); - - Assert.assertEquals(1, responseRecords.size()); - Assert.assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - Assert.assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - - } catch (SkyflowException | IOException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } - } - -} diff --git a/v1/src/test/java/com/skyflow/vault/InvokeConnectionTest.java b/v1/src/test/java/com/skyflow/vault/InvokeConnectionTest.java deleted file mode 100644 index 70319cc3..00000000 --- a/v1/src/test/java/com/skyflow/vault/InvokeConnectionTest.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.vault; - -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.TokenUtils; -import com.skyflow.entities.RequestMethod; -import com.skyflow.entities.SkyflowConfiguration; -import com.skyflow.entities.TokenProvider; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import org.json.simple.JSONObject; -import org.junit.Assert; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentMatchers; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import java.io.IOException; -import java.net.URL; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; -import static org.mockito.ArgumentMatchers.anyString; - - -class TestTokenProvider implements TokenProvider { - @Override - public String getBearerToken() throws Exception { - return "test_auth_token"; - } -} - - -@RunWith(PowerMockRunner.class) -@PrepareForTest(fullyQualifiedNames = "com.skyflow.common.utils.TokenUtils") -public class InvokeConnectionTest { - private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; - private JSONObject testConfig; - private static Skyflow skyflowClient; - - @BeforeClass - public static void init() throws Exception { - SkyflowConfiguration config = new SkyflowConfiguration(new TestTokenProvider()); - skyflowClient = Skyflow.init(config); - - PowerMockito.mockStatic(TokenUtils.class); - PowerMockito.when(TokenUtils.isTokenValid("test_auth_token")).thenReturn(true); - } - - @Before - public void setup() { - testConfig = new JSONObject(); - testConfig.put("connectionURL", "https://testgatewayurl.com/{card_number}/pay"); - testConfig.put("methodName", RequestMethod.POST); - - JSONObject pathParamsJson = new JSONObject(); - pathParamsJson.put("card_number", "1234"); - testConfig.put("pathParams", pathParamsJson); - - JSONObject queryParamsJson = new JSONObject(); - queryParamsJson.put("id", "1"); - testConfig.put("queryParams", queryParamsJson); - - JSONObject requestHeadersJson = new JSONObject(); - requestHeadersJson.put("content-type", "application/json"); - testConfig.put("requestHeader", requestHeadersJson); - - JSONObject requestBodyJson = new JSONObject(); - requestBodyJson.put("userName", "testUser"); - requestBodyJson.put("itemName", "item1"); - testConfig.put("requestBody", requestBodyJson); - - } - - @Test - public void testInvokeConnectionWithInvalidSkyflowConfig() { - try{ - SkyflowConfiguration config = new SkyflowConfiguration(null); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject request = new JSONObject(); - - JSONObject res = skyflowClient.invokeConnection(request); - } catch (SkyflowException e) { - assertEquals(ErrorCode.InvalidTokenProvider.getDescription(), e.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInvokeConnectionValidInput() { - try { - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"processingTimeinMs\":\"116\"}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject gatewayResponse = skyflowClient.invokeConnection(testConfig); - - Assert.assertNotNull(gatewayResponse); - Assert.assertEquals(gatewayResponse.toJSONString(), mockResponse); - } catch (SkyflowException exception) { - Assert.assertNull(exception); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException exception) { - exception.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - - - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInvokeConnectionThrowsErrorResponse() { - String mockErrorResponse = "{\"error\":{\"code\":\"400\",\"message\":\"missing required field\"}}"; - try { - PowerMockito.mockStatic(HttpUtility.class); - PowerMockito.when(HttpUtility.sendRequest(anyString(),ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenThrow(new SkyflowException(400, mockErrorResponse)); - JSONObject gatewayResponse = skyflowClient.invokeConnection(testConfig); - Assert.assertNull(gatewayResponse); - } catch (SkyflowException exception) { - Assert.assertEquals(exception.getCode(), 400); - Assert.assertEquals(exception.getMessage(), mockErrorResponse); - } catch (IOException exception) { - exception.printStackTrace(); - } - } - - - @Test - public void testInvokeConnectionInvalidConnectionURL() { - JSONObject testConnectionConfig = new JSONObject(); - testConnectionConfig.put("connectionURL", "INVALID_CONNECTION_URL"); - try { - skyflowClient.invokeConnection(testConnectionConfig); - } catch (SkyflowException exception) { - Assert.assertEquals(exception.getCode(), ErrorCode.InvalidConnectionURL.getCode()); - Assert.assertEquals(exception.getMessage(), ErrorCode.InvalidConnectionURL.getDescription()); - } - - } - - @Test - public void testInvokeConnectionMissingConnectionURL() { - JSONObject testConnectionConfig = new JSONObject(); - try { - skyflowClient.invokeConnection(testConnectionConfig); - } catch (SkyflowException exception) { - Assert.assertEquals(exception.getCode(), ErrorCode.ConnectionURLMissing.getCode()); - Assert.assertEquals(exception.getMessage(), ErrorCode.ConnectionURLMissing.getDescription()); - } - } - - @Test - public void testInvokeConnectionMissingMethodName() { - JSONObject testConnectionConfig = new JSONObject(); - testConnectionConfig.put("connectionURL", "https://testgatewayurl.com/{card_number}/pay"); - try { - skyflowClient.invokeConnection(testConnectionConfig); - } catch (SkyflowException exception) { - Assert.assertEquals(exception.getCode(), ErrorCode.MethodNameMissing.getCode()); - Assert.assertEquals(exception.getMessage(), ErrorCode.MethodNameMissing.getDescription()); - } - } - - @Test - public void testInvokeConnectionInvalidMethodName() { - JSONObject testConnectionConfig = new JSONObject(); - testConnectionConfig.put("connectionURL", "https://testgatewayurl.com/{card_number}/pay"); - testConnectionConfig.put("methodName", "INVALID_METHOD_NAME"); - try { - Skyflow.init(new SkyflowConfiguration(new TestTokenProvider())).invokeConnection(testConnectionConfig); - } catch (SkyflowException exception) { - Assert.assertEquals(exception.getCode(), ErrorCode.InvalidMethodName.getCode()); - Assert.assertEquals(exception.getMessage(), ErrorCode.InvalidMethodName.getDescription()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInvokeConnectionWithFormEncoded() { - JSONObject testConfig = new JSONObject(); - testConfig.put("connectionURL", "https://testgatewayurl.com/"); - testConfig.put("methodName", RequestMethod.POST); - - JSONObject requestHeadersJson = new JSONObject(); - requestHeadersJson.put("content-type", "application/x-www-form-urlencoded"); - testConfig.put("requestHeader", requestHeadersJson); - - JSONObject testJson = new JSONObject(); - testJson.put("key1","value1"); - JSONObject nestedObj = new JSONObject(); - nestedObj.put("key2","value2"); - testJson.put("nest",nestedObj); - - testConfig.put("requestBody", testJson); - - try { - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"id\":\"12345\"}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject gatewayResponse = skyflowClient.invokeConnection(testConfig); - - Assert.assertNotNull(gatewayResponse); - Assert.assertEquals(gatewayResponse.toJSONString(), mockResponse); - } catch (SkyflowException exception) { - Assert.assertNull(exception); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException exception) { - exception.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInvokeConnectionWithMultipartFormData() { - JSONObject testConfig = new JSONObject(); - testConfig.put("connectionURL", "https://testgatewayurl.com/"); - testConfig.put("methodName", RequestMethod.POST); - - JSONObject requestHeadersJson = new JSONObject(); - requestHeadersJson.put("content-type", "multipart/form-data"); - testConfig.put("requestHeader", requestHeadersJson); - - JSONObject testJson = new JSONObject(); - testJson.put("key1","value1"); - JSONObject nestedObj = new JSONObject(); - nestedObj.put("key2","value2"); - testJson.put("nest",nestedObj); - - testConfig.put("requestBody", testJson); - - try { - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"id\":\"12345\"}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject gatewayResponse = skyflowClient.invokeConnection(testConfig); - - Assert.assertNotNull(gatewayResponse); - Assert.assertEquals(gatewayResponse.toJSONString(), mockResponse); - } catch (SkyflowException exception) { - Assert.assertNull(exception); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException exception) { - exception.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - - } - -} diff --git a/v1/src/test/java/com/skyflow/vault/SkyflowTest.java b/v1/src/test/java/com/skyflow/vault/SkyflowTest.java deleted file mode 100644 index 70dd193f..00000000 --- a/v1/src/test/java/com/skyflow/vault/SkyflowTest.java +++ /dev/null @@ -1,2485 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.skyflow.vault; - -import com.skyflow.Configuration; -import com.skyflow.common.utils.Helpers; -import com.skyflow.common.utils.HttpUtility; -import com.skyflow.common.utils.TokenUtils; -import com.skyflow.entities.*; -import com.skyflow.errors.ErrorCode; -import com.skyflow.errors.SkyflowException; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentMatchers; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import java.io.IOException; -import java.net.URL; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.FutureTask; - -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -class DemoTokenProvider implements TokenProvider { - @Override - public String getBearerToken() throws Exception { - return "valid_token"; - } -} - -class InvalidTokenProvider implements TokenProvider { - @Override - public String getBearerToken() throws Exception { - return "not_a_valid_token"; - } -} - -@RunWith(PowerMockRunner.class) -@PrepareForTest(fullyQualifiedNames = "com.skyflow.common.utils.TokenUtils") -public class SkyflowTest { - - private static String vaultID = null; - private static String vaultURL = null; - private static String skyflowId = null; - private static String token = null; - private static String tableName = null; - private static String columnName = null; - private static String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; - private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; - - - @BeforeClass - public static void setup() throws SkyflowException { - PowerMockito.mockStatic(TokenUtils.class); - PowerMockito.when(TokenUtils.isTokenValid("valid_token")).thenReturn(true); - PowerMockito.when(TokenUtils.isTokenValid("not_a_valid_token")).thenReturn(false); - - vaultID = "vault123"; - vaultURL = "https://test.com"; - skyflowId = "skyflowId123"; - token = "token123"; - tableName = "pii_fields"; - columnName = "first_name"; - } - - @Test - public void testValidConfig() { - Configuration.setLogLevel(LogLevel.INFO); - SkyflowConfiguration testConfig = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - try { - Skyflow skyflow = Skyflow.init(testConfig); - assert (skyflow instanceof Skyflow); - } catch (SkyflowException e) { - assertNotNull(e); - } - } - - - @Test - public void testInValidConfigWithNullValues() { - Configuration.setLogLevel(LogLevel.ERROR); - SkyflowConfiguration testConfig = new SkyflowConfiguration(null, null, new DemoTokenProvider()); - try { - Skyflow skyflow = Skyflow.init(testConfig); - skyflow.detokenize(new JSONObject()); - - } catch (SkyflowException e) { - assertEquals(e.getCode(), ErrorCode.EmptyVaultID.getCode()); - assertEquals(e.getMessage(), ErrorCode.EmptyVaultID.getDescription()); - } - } - - @Test - public void testInValidConfigWithNullValues2() { - Configuration.setLogLevel(LogLevel.DEBUG); - SkyflowConfiguration testConfig = new SkyflowConfiguration(vaultID, null, new DemoTokenProvider()); - try { - Skyflow skyflow = Skyflow.init(testConfig); - skyflow.detokenize(new JSONObject()); - - } catch (SkyflowException e) { - assertEquals(e.getCode(), ErrorCode.InvalidVaultURL.getCode()); - assertEquals(e.getMessage(), ErrorCode.InvalidVaultURL.getDescription()); - } - } - - @Test - public void testInvalidConfigWithEmptyVaultID() { - Configuration.setLogLevel(LogLevel.WARN); - SkyflowConfiguration testConfig = new SkyflowConfiguration("", vaultURL, new DemoTokenProvider()); - try { - Skyflow skyflow = Skyflow.init(testConfig); - skyflow.insert(new JSONObject(), new InsertOptions()); - } catch (SkyflowException e) { - assertEquals(e.getCode(), ErrorCode.EmptyVaultID.getCode()); - assertEquals(e.getMessage(), ErrorCode.EmptyVaultID.getDescription()); - } - } - - @Test - public void testInvalidConfigWithInvalidVaultURL() { - Configuration.setLogLevel(LogLevel.OFF); - SkyflowConfiguration testConfig = new SkyflowConfiguration(vaultID, "//valid.url.com", new DemoTokenProvider()); - try { - Skyflow skyflow = Skyflow.init(testConfig); - skyflow.insert(new JSONObject(), new InsertOptions()); - } catch (SkyflowException e) { - assertEquals(e.getCode(), ErrorCode.InvalidVaultURL.getCode()); - assertEquals(e.getMessage(), ErrorCode.InvalidVaultURL.getDescription()); - } - } - - @Test - public void testInvalidConfigWithHttpVaultURL() { - SkyflowConfiguration testConfig = new SkyflowConfiguration(vaultID, "http://valid.url.com", new DemoTokenProvider()); - try { - Skyflow skyflow = Skyflow.init(testConfig); - } catch (SkyflowException e) { - assertEquals(e.getCode(), ErrorCode.InvalidVaultURL.getCode()); - assertEquals(e.getMessage(), ErrorCode.InvalidVaultURL.getDescription()); - } - } - - @Test - public void testInsertWithInvalidSkyflowConfig() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, null); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - - JSONObject res = skyflowClient.insert(records); - } catch (SkyflowException e) { - assertEquals(ErrorCode.InvalidTokenProvider.getDescription(), e.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertSuccessWithTokens() { - try { - SkyflowConfiguration config = new SkyflowConfiguration("vaultID", "https://vaulturl.com", new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = - "{\"vaultID\":\"vault123\",\"responses\":[{\"records\":[{\"skyflow_id\":\"id1\", \"tokens\":{\"first_name\":\"token1\"}}]}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - JSONObject res = skyflowClient.insert(records, insertOptions); - JSONArray responseRecords = (JSONArray) res.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertSuccessWithoutInsertOptions() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = - "{\"vaultID\":\"vault123\",\"responses\":[{\"records\":[{\"skyflow_id\":\"id1\", \"tokens\":{\"first_name\":\"token1\"}}]}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject res = skyflowClient.insert(records); - JSONArray responseRecords = (JSONArray) res.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertSuccessWithUpsertOptions() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - UpsertOption upsertOption = new UpsertOption(tableName, columnName); - InsertOptions insertOptions = new InsertOptions(new UpsertOption[]{upsertOption}); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = - "{\"vaultID\":\"vault123\",\"responses\":[{\"records\":[{\"skyflow_id\":\"id1\", \"tokens\":{\"first_name\":\"token1\"}}]}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - JSONObject res = skyflowClient.insert(records, insertOptions); - JSONArray responseRecords = (JSONArray) res.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertSuccessWithoutTokens() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(false); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"vaultID\":\"vault123\",\"responses\":[{\"records\":[{\"skyflow_id\":\"id1\"}]}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject res = skyflowClient.insert(records, insertOptions); - JSONArray responseRecords = (JSONArray) res.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNotNull(((JSONObject) responseRecords.get(0)).get("skyflow_id")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertWithContinueOnErrorAsTrueWithTokens() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record1 = new JSONObject(); - record1.put("table", tableName); - JSONObject fields1 = new JSONObject(); - fields1.put(columnName, "john"); - record1.put("fields", fields1); - - JSONObject record2 = new JSONObject(); - record2.put("table", tableName); - JSONObject fields2 = new JSONObject(); - fields2.put(columnName, "jane"); - record2.put("fields", fields2); - - recordsArray.add(record1); - recordsArray.add(record2); - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(true, true); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"vaultID\":\"vault123\",\"responses\":[{\"Status\":400,\"Body\":{\"error\":\"Error Inserting Records due to unique constraint violation\"}},{\"Status\":200,\"Body\":{\"records\":[{\"skyflow_id\":\"id1\",\"tokens\":{\"first_name\":\"token1\"}}]}}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject res = skyflowClient.insert(records, insertOptions); - JSONArray responseSuccessRecords = (JSONArray) res.get("records"); - JSONArray responseErrorRecords = (JSONArray) res.get("errors"); - - assertEquals(1, responseSuccessRecords.size()); - assertEquals(tableName, ((JSONObject) responseSuccessRecords.get(0)).get("table")); - assertEquals(1, ((JSONObject) responseSuccessRecords.get(0)).get("request_index")); - assertNotNull(((JSONObject) responseSuccessRecords.get(0)).get("fields")); - - assertEquals(1, responseErrorRecords.size()); - assertEquals(0, ((JSONObject) ((JSONObject) responseErrorRecords.get(0)).get("error")).get("request_index")); - assertNotNull(((JSONObject) ((JSONObject) responseErrorRecords.get(0)).get("error")).get("description")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertWithContinueOnErrorAsTrueWithoutTokens() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record1 = new JSONObject(); - record1.put("table", tableName); - JSONObject fields1 = new JSONObject(); - fields1.put(columnName, "first"); - record1.put("fields", fields1); - - JSONObject record2 = new JSONObject(); - record2.put("table", tableName); - JSONObject fields2 = new JSONObject(); - fields2.put(columnName, "second"); - record2.put("fields", fields2); - - recordsArray.add(record1); - recordsArray.add(record2); - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(false, true); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"vaultID\":\"vault123\",\"responses\":[{\"Status\":400,\"Body\":{\"error\":\"Error Inserting Records due to unique constraint violation\"}},{\"Status\":200,\"Body\":{\"records\":[{\"skyflow_id\":\"id1\"}]}}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject res = skyflowClient.insert(records, insertOptions); - JSONArray responseSuccessRecords = (JSONArray) res.get("records"); - JSONArray responseErrorRecords = (JSONArray) res.get("errors"); - - assertEquals(1, responseSuccessRecords.size()); - assertEquals(tableName, ((JSONObject) responseSuccessRecords.get(0)).get("table")); - assertEquals(1, ((JSONObject) responseSuccessRecords.get(0)).get("request_index")); - assertNotNull(((JSONObject) responseSuccessRecords.get(0)).get("skyflow_id")); - assertNull(((JSONObject) responseSuccessRecords.get(0)).get("tokens")); - - assertEquals(1, responseErrorRecords.size()); - assertEquals(0, ((JSONObject) ((JSONObject) responseErrorRecords.get(0)).get("error")).get("request_index")); - assertNotNull(((JSONObject) ((JSONObject) responseErrorRecords.get(0)).get("error")).get("description")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertWithContinueOnErrorAsTrueWithUpsert() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record1 = new JSONObject(); - record1.put("table", tableName); - JSONObject fields1 = new JSONObject(); - fields1.put(columnName, "first"); - record1.put("fields", fields1); - - JSONObject record2 = new JSONObject(); - record2.put("table", tableName); - JSONObject fields2 = new JSONObject(); - fields2.put(columnName, "second"); - record2.put("fields", fields2); - - recordsArray.add(record1); - recordsArray.add(record2); - records.put("records", recordsArray); - - UpsertOption upsertOption = new UpsertOption(tableName, columnName); - InsertOptions insertOptions = new InsertOptions(new UpsertOption[]{upsertOption}, true); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"vaultID\":\"vault123\",\"responses\":[{\"Status\":400,\"Body\":{\"error\":\"Error Inserting Records due to unique constraint violation\"}},{\"Status\":200,\"Body\":{\"records\":[{\"skyflow_id\":\"id1\"}]}}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject res = skyflowClient.insert(records, insertOptions); - JSONArray responseSuccessRecords = (JSONArray) res.get("records"); - JSONArray responseErrorRecords = (JSONArray) res.get("errors"); - - assertEquals(1, responseSuccessRecords.size()); - assertEquals(tableName, ((JSONObject) responseSuccessRecords.get(0)).get("table")); - assertEquals(1, ((JSONObject) responseSuccessRecords.get(0)).get("request_index")); - assertNotNull(((JSONObject) responseSuccessRecords.get(0)).get("skyflow_id")); - assertNull(((JSONObject) responseSuccessRecords.get(0)).get("tokens")); - - assertEquals(1, responseErrorRecords.size()); - assertEquals(0, ((JSONObject) ((JSONObject) responseErrorRecords.get(0)).get("error")).get("request_index")); - assertNotNull(((JSONObject) ((JSONObject) responseErrorRecords.get(0)).get("error")).get("description")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertWithContinueOnErrorWithUpsertAndTokens() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record1 = new JSONObject(); - record1.put("table", tableName); - JSONObject fields1 = new JSONObject(); - fields1.put(columnName, "first"); - record1.put("fields", fields1); - - JSONObject record2 = new JSONObject(); - record2.put("table", tableName); - JSONObject fields2 = new JSONObject(); - fields2.put(columnName, "second"); - record2.put("fields", fields2); - - recordsArray.add(record1); - recordsArray.add(record2); - records.put("records", recordsArray); - - UpsertOption upsertOption = new UpsertOption(tableName, columnName); - InsertOptions insertOptions = new InsertOptions(false, new UpsertOption[]{upsertOption}, true); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"vaultID\":\"vault123\",\"responses\":[{\"Status\":400,\"Body\":{\"error\":\"Error Inserting Records due to unique constraint violation\"}},{\"Status\":200,\"Body\":{\"records\":[{\"skyflow_id\":\"id1\"}]}}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject res = skyflowClient.insert(records, insertOptions); - JSONArray responseSuccessRecords = (JSONArray) res.get("records"); - JSONArray responseErrorRecords = (JSONArray) res.get("errors"); - - assertEquals(1, responseSuccessRecords.size()); - assertEquals(tableName, ((JSONObject) responseSuccessRecords.get(0)).get("table")); - assertEquals(1, ((JSONObject) responseSuccessRecords.get(0)).get("request_index")); - assertNotNull(((JSONObject) responseSuccessRecords.get(0)).get("skyflow_id")); - assertNull(((JSONObject) responseSuccessRecords.get(0)).get("tokens")); - - assertEquals(1, responseErrorRecords.size()); - assertEquals(0, ((JSONObject) ((JSONObject) responseErrorRecords.get(0)).get("error")).get("request_index")); - assertNotNull(((JSONObject) ((JSONObject) responseErrorRecords.get(0)).get("error")).get("description")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertParseException() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record1 = new JSONObject(); - record1.put("table", tableName); - JSONObject fields1 = new JSONObject(); - fields1.put(columnName, "first"); - record1.put("fields", fields1); - - recordsArray.add(record1); - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(false, true); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"vaultID\":\"vault123\",\"responses\":[{\"Status\":200,\"Body\":{\"records\":[{\"skyflow_id\":\"id1\"]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject res = skyflowClient.insert(records, insertOptions); - fail(EXCEPTION_NOT_THROWN); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.ResponseParsingError.getDescription(), skyflowException.getMessage()); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - public void testInsertEmptyRecords() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(false); - JSONObject res = skyflowClient.insert(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.EmptyRecords.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testInsertEmptyTable() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(false); - JSONObject res = skyflowClient.insert(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidTable.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testInsertEmptyFields() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(true); - JSONObject res = skyflowClient.insert(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidFields.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testInsertInvalidInput() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("invalidTableKey", tableName); - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(true); - JSONObject res = skyflowClient.insert(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidInsertInput.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testInsertWithEmptyArrayUpsertOptions() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - UpsertOption[] upsertOptions = new UpsertOption[]{}; - InsertOptions insertOptions = new InsertOptions(true, upsertOptions); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insert(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidUpsertOptionType.getDescription(), skyflowException.getMessage()); - } - - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - UpsertOption[] upsertOptions = new UpsertOption[3]; - InsertOptions insertOptions = new InsertOptions(true, upsertOptions); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insert(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidUpsertObjectType.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testInsertWithInvalidTableInUpsertOptions() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - InsertOptions insertOptions = new InsertOptions(true, new UpsertOption[]{new UpsertOption(null, "column")}); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insert(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidTableInUpsertOption.getDescription(), skyflowException.getMessage()); - } - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - InsertOptions insertOptions = new InsertOptions(true, new UpsertOption[]{new UpsertOption("", "column")}); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insert(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidTableInUpsertOption.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testInsertWithInvalidColumnInUpsertOptions() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - InsertOptions insertOptions = new InsertOptions(true, new UpsertOption[]{new UpsertOption("table1", null)}); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insert(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidColumnInUpsertOption.getDescription(), skyflowException.getMessage()); - } - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - InsertOptions insertOptions = new InsertOptions(true, new UpsertOption[]{new UpsertOption("table2", "")}); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insert(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidColumnInUpsertOption.getDescription(), skyflowException.getMessage()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testQuerySuccess() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject queryInput = new JSONObject(); - queryInput.put("query", "SELECT * FROM users"); - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"response_key\":\"response_value\"}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject response = skyflowClient.query(queryInput, new QueryOptions()); - assertNotNull(response); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - public void testQueryMissing() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject queryInput = new JSONObject(); - queryInput.put("query", ""); - QueryOptions queryOptions = new QueryOptions(); - boolean exceptionThrown = false; - try { - JSONObject res = skyflowClient.query(queryInput, queryOptions); - } catch (SkyflowException skyflowException) { - exceptionThrown = true; - assertEquals(ErrorCode.InvalidQuery.getCode(), skyflowException.getCode()); - assertEquals("Query is missing", skyflowException.getMessage()); - } - assertTrue(exceptionThrown); - } catch (Exception e) { - fail("Caught unexpected exception: " + e.getMessage()); - } - } - @Test - public void testInvalidQueryInput() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject queryInput = new JSONObject(); - queryInput.put("invalidQueryKey", "select * from cards"); - QueryOptions queryOptions = new QueryOptions(); - boolean exceptionThrown = false; - try { - JSONObject res = skyflowClient.query(queryInput, queryOptions); - } catch (SkyflowException skyflowException) { - exceptionThrown = true; - assertEquals("Invalid query input", skyflowException.getMessage()); - } - assertTrue(exceptionThrown); - } catch (Exception e) { - } - } - @Test - public void testValidJsonParsing() { - String jsonMessage = "{\"error\":{\"http_code\":404,\"message\":\"Not Found\"}}"; - SkyflowException skyflowException = new SkyflowException( - ErrorCode.InvalidVaultURL.getCode(), - jsonMessage - ); - JSONObject result = Helpers.constructQueryErrorObject(skyflowException); - } - - @Test - public void testValidSkyflowExceptionWithoutJson() { - SkyflowException skyflowException = new SkyflowException( - ErrorCode.EmptyVaultID.getCode(), - "Empty vaultID" - ); - JSONObject result = Helpers.constructQueryErrorObject(skyflowException); - } - @Test - public void testInvalidJsonParsing() { - String invalidJsonMessage = "Invalid JSON"; - SkyflowException skyflowException = new SkyflowException( - ErrorCode.InvalidVaultURL.getCode(), - invalidJsonMessage - ); - JSONObject result = Helpers.constructQueryErrorObject(skyflowException); - } - @Test - public void testMissingErrorKeyInJson() { - String jsonMessage = "{\"status\":\"error\",\"http_code\":404,\"message\":\"Not Found\"}"; - SkyflowException skyflowException = new SkyflowException( - ErrorCode.InvalidVaultURL.getCode(), - jsonMessage - ); - JSONObject result = Helpers.constructQueryErrorObject(skyflowException); - } - @Test - public void testMissingHttpCodeInErrorJson() { - String jsonMessage = "{\"error\":{\"message\":\"Not Found\"}}"; - SkyflowException skyflowException = new SkyflowException( - ErrorCode.InvalidVaultURL.getCode(), - jsonMessage - ); - JSONObject result = Helpers.constructQueryErrorObject(skyflowException); - } - @Test - public void testMissingMessageInErrorJson() { - String jsonMessage = "{\"error\":{\"http_code\":404}}"; - SkyflowException skyflowException = new SkyflowException( - ErrorCode.InvalidVaultURL.getCode(), - jsonMessage - ); - JSONObject result = Helpers.constructQueryErrorObject(skyflowException); - } - @Test - public void testEmptyErrorObjectInJson() { - String jsonMessage = "{\"error\":{}}"; - SkyflowException skyflowException = new SkyflowException( - ErrorCode.InvalidVaultURL.getCode(), - jsonMessage - ); - JSONObject result = Helpers.constructQueryErrorObject(skyflowException); - } - @Test - public void testConstructQueryRequest() throws SkyflowException { - QueryRecordInput record = new QueryRecordInput(); - record.setQuery("SELECT * FROM users"); - QueryOptions options = new QueryOptions(); - - JSONObject result = Helpers.constructQueryRequest(record, options); - assertTrue(result.containsKey("query")); - assertEquals("SELECT * FROM users", result.get("query")); - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testQueryIOException() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject queryInput = new JSONObject(); - queryInput.put("query", "SELECT * FROM table"); - QueryOptions queryOptions = new QueryOptions(); - PowerMockito.mockStatic(HttpUtility.class); - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenThrow(new IOException()); - - try { - skyflowClient.query(queryInput, queryOptions); - fail("Expected SkyflowException to be thrown"); - } catch (SkyflowException e) { - assertEquals(ErrorCode.InvalidQueryInput.getCode(), e.getCode()); - } - } catch (SkyflowException e) { - fail("Caught unexpected SkyflowException: " + e.getMessage()); - } catch (IOException ioException) { - fail("Caught unexpected IOException: " + ioException.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testQueryParseException() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject queryInput = new JSONObject(); - queryInput.put("query", "SELECT * FROM table"); - QueryOptions queryOptions = new QueryOptions(); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "Invalid JSON"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - try { - skyflowClient.query(queryInput, queryOptions); - fail("Expected SkyflowException to be thrown"); - } catch (SkyflowException e) { - assertEquals(ErrorCode.ResponseParsingError.getCode(), e.getCode()); - } - } catch (SkyflowException e) { - fail("Caught unexpected SkyflowException: " + e.getMessage()); - } catch (IOException e) { - fail("Caught unexpected IOException: " + e.getMessage()); - } - } - @Test - public void testGetAndSetRecords() { - QueryRecordInput inputRecord = new QueryRecordInput(); - QueryInput queryInput = new QueryInput(); - - assertNull(queryInput.getQueryInput()); - - queryInput.setQueryInput(inputRecord); - assertEquals(inputRecord, queryInput.getQueryInput()); - } - @Test - public void testGetAndSetQuery() { - QueryRecordInput queryRecordInput = new QueryRecordInput(); - assertNull(queryRecordInput.getQuery()); - - String testQuery = "SELECT * FROM table"; - queryRecordInput.setQuery(testQuery); - assertEquals(testQuery, queryRecordInput.getQuery()); - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testDetokenizeSuccess() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("token", token); - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"records\":[{\"token\":\"token123\",\"valueType\":\"INTEGER\",\"value\":\"10\"}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - JSONObject res = skyflowClient.detokenize(records); - JSONArray responseRecords = (JSONArray) res.get("records"); - assertEquals(1, responseRecords.size()); - assertEquals(token, ((JSONObject) responseRecords.get(0)).get("token")); - assertTrue(((JSONObject) responseRecords.get(0)).containsKey("value")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testFormattedDetokenizeSuccess() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("token", token); - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"records\":[{\"token\":\"token123\",\"valueType\":\"INTEGER\",\"value\":\"10\",\"test\":\"test123\"}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - JSONObject res = skyflowClient.detokenize(records); - JSONArray responseRecords = (JSONArray) res.get("records"); - assertEquals(1, responseRecords.size()); - assertEquals(token, ((JSONObject) responseRecords.get(0)).get("token")); - assertEquals(null, ((JSONObject) responseRecords.get(0)).get("test")); - assertTrue(((JSONObject) responseRecords.get(0)).containsKey("value")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testDetokenizeError() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("token", "invalidToken"); - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = - "{\"error\":{\"grpc_code\":5,\"http_code\":404,\"message\":\"Token not found for invalidToken\",\"http_status\":\"Not Found\",\"details\":[]}}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenThrow(new SkyflowException(404, mockResponse)); - - JSONObject res = skyflowClient.detokenize(records); - } catch (SkyflowException skyflowException) { - JSONArray errors = (JSONArray) skyflowException.getData().get("errors"); - assertEquals(1, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testDetokenizePartialError() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("token", "invalidToken1"); - JSONObject validRecord = new JSONObject(); - validRecord.put("token", token); - recordsArray.add(record); - recordsArray.add(validRecord); - records.put("records", recordsArray); - - JSONParser jsonParser = new JSONParser(); - JSONObject validRequest = (JSONObject) - jsonParser.parse("{\"detokenizationParameters\":[{\"token\":\"token123\",\"redaction\":\"PLAIN_TEXT\"}]}"); - PowerMockito.mockStatic(HttpUtility.class); - String mockValidResponse = "{\"records\":[{\"token\":\"token123\",\"valueType\":\"INTEGER\",\"value\":\"10\"}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), eq(validRequest), ArgumentMatchers.anyMap())).thenReturn(mockValidResponse); - - JSONObject invalidRequest = (JSONObject) - jsonParser.parse("{\"detokenizationParameters\":[{\"token\":\"invalidToken1\",\"redaction\":\"PLAIN_TEXT\"}]}"); - String mockInvalidResponse = - "{\"error\":{\"grpc_code\":5,\"http_code\":404,\"message\":\"Token not found for invalidToken1\",\"http_status\":\"Not Found\",\"details\":[]}}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), eq(invalidRequest), ArgumentMatchers.anyMap())).thenThrow(new SkyflowException(404, mockInvalidResponse)); - - - JSONObject res = skyflowClient.detokenize(records); - } catch (SkyflowException skyflowException) { - JSONArray responseRecords = (JSONArray) skyflowException.getData().get("records"); - JSONArray errors = (JSONArray) skyflowException.getData().get("errors"); - assertEquals(1, errors.size()); - assertEquals(1, responseRecords.size()); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (ParseException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - public void testDetokenizeInvalidInput() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - records.put("invalidRecordsKey", recordsArray); - - JSONObject res = skyflowClient.detokenize(records); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidDetokenizeInput.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testDetokenizeEmptyRecords() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - records.put("records", recordsArray); - - JSONObject res = skyflowClient.detokenize(records); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.EmptyRecords.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testDetokenizeEmptyRecords2() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - records.put("records", null); - - JSONObject res = skyflowClient.detokenize(records); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.EmptyRecords.getDescription(), skyflowException.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.TokenUtils"}) - public void testDetokenizeInvalidToken() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("token", ""); - recordsArray.add(record); - records.put("records", recordsArray); - - JSONObject res = skyflowClient.detokenize(records); - } catch (SkyflowException skyflowException) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) skyflowException.getData().get("errors")).get(0))).get("error"); - assertEquals(ErrorCode.InvalidToken.getDescription(), error.get("description")); - } - } - - @Test - public void testDetokenizeInvalidRedaction() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("token", "3423-4671-5420-2425"); - record.put("redaction", "invalid"); - recordsArray.add(record); - records.put("records", recordsArray); - - JSONObject res = skyflowClient.detokenize(records); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidDetokenizeInput.getDescription(), skyflowException.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testDetokenizeWhenNullRedactionIsPassed() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("token", "3423-4671-5420-2425"); - record.put("redaction", null); - recordsArray.add(record); - records.put("records", recordsArray); - - JSONObject res = skyflowClient.detokenize(records); - } catch (SkyflowException skyflowException) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) skyflowException.getData().get("errors")).get(0))).get("error"); - assertEquals(ErrorCode.InvalidDetokenizeInput.getDescription(), error.get("description")); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetByIdSuccess() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - JSONArray ids = new JSONArray(); - ids.add(skyflowId); - record.put("ids", ids); - record.put("table", tableName); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - recordsArray.add(record); - - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"records\":[{\"fields\":{\"age\":10,\"skyflow_id\":\"skyflowId123\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject response = skyflowClient.getById(records); - JSONArray responseRecords = (JSONArray) response.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetByIdError() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - JSONArray ids = new JSONArray(); - ids.add(skyflowId); - record.put("ids", ids); - record.put("table", "invalidTable"); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - recordsArray.add(record); - - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"error\":{\"grpc_code\":13,\"http_code\":500,\"message\":\"Couldn't load data\",\"http_status\":\"Internal Server Error\"}}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenThrow(new SkyflowException(500, mockResponse)); - JSONObject response = skyflowClient.getById(records); - - } catch (SkyflowException e) { - JSONArray errors = (JSONArray) e.getData().get("errors"); - assertEquals(1, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testGetByIdPartialError() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - JSONArray ids = new JSONArray(); - ids.add(skyflowId); - record.put("ids", ids); - record.put("table", tableName); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - recordsArray.add(record); - - JSONObject record2 = new JSONObject(); - JSONArray id2 = new JSONArray(); - id2.add("invalidId"); - record2.put("ids", id2); - record2.put("table", "invalidTable2"); - record2.put("redaction", RedactionType.PLAIN_TEXT.toString()); - recordsArray.add(record2); - - records.put("records", recordsArray); - - String validRequestUrl = "https://test.com/v1/vaults/vault123/pii_fields?skyflow_ids=skyflowId123&redaction=PLAIN_TEXT"; - String invalidRequestUrl = "https://test.com/v1/vaults/vault123/invalidTable2?skyflow_ids=invalidId&redaction=PLAIN_TEXT"; - - PowerMockito.mockStatic(HttpUtility.class); - String mockValidResponse = "{\"records\":[{\"fields\":{\"age\":10,\"skyflow_id\":\"skyflowId123\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), eq(new URL(validRequestUrl)), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockValidResponse); - - String mockInvalidResponse = "{\"error\":{\"grpc_code\":13,\"http_code\":500,\"message\":\"Couldn't load data\",\"http_status\":\"Internal Server Error\"}}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), eq(new URL(invalidRequestUrl)), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenThrow(new SkyflowException(500, mockInvalidResponse)); - - JSONObject response = skyflowClient.getById(records); - - } catch (SkyflowException e) { - JSONObject partialError = e.getData(); - assertTrue(partialError.containsKey("records")); - assertTrue(partialError.containsKey("errors")); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - public void testGetByIdInvalidInput() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - records.put("invalidRecordsKey", recordsArray); - - JSONObject response = skyflowClient.getById(records); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidGetByIdInput.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testGetByIdEmptyRecords() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - records.put("records", recordsArray); - - JSONObject response = skyflowClient.getById(records); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.EmptyRecords.getDescription(), skyflowException.getMessage()); - } - } - - - @Test - public void testGetByIdEmptyRecords2() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - records.put("records", null); - - JSONObject response = skyflowClient.getById(records); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.EmptyRecords.getDescription(), skyflowException.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.TokenUtils"}) - public void testGetByIdEmptyTable() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - JSONArray ids = new JSONArray(); - ids.add(skyflowId); - record.put("ids", ids); - record.put("table", ""); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - recordsArray.add(record); - - records.put("records", recordsArray); - - JSONObject response = skyflowClient.getById(records); - } catch (SkyflowException skyflowException) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) skyflowException.getData().get("errors")).get(0))).get("error"); - assertEquals(ErrorCode.InvalidTable.getDescription(), error.get("description")); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testUpdateSuccessWithToken() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", tableName); - record.put("id", skyflowId); - JSONObject fields = new JSONObject(); - fields.put(columnName, "name"); - record.put("fields", fields); - recordsArray.add(record); - records.put("records", recordsArray); - - UpdateOptions updateOptions = new UpdateOptions(true); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"skyflow_id\":\"skyflowId123\",\"tokens\":{\"first_name\":\"token2\"}}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - JSONObject res = skyflowClient.update(records, updateOptions); - JSONArray responseRecords = (JSONArray) res.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - } catch (SkyflowException e) { - JSONArray errors = (JSONArray) e.getData().get("errors"); - assertEquals(1, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testUpdateSuccessWithOutToken() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", tableName); - record.put("id", skyflowId); - JSONObject fields = new JSONObject(); - fields.put(columnName, "name"); - record.put("fields", fields); - recordsArray.add(record); - records.put("records", recordsArray); - - UpdateOptions updateOptions = new UpdateOptions(false); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"skyflow_id\":\"skyflowId123\",\"tokens\":null}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - JSONObject res = skyflowClient.update(records, updateOptions); - JSONArray responseRecords = (JSONArray) res.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNull(((JSONObject) responseRecords.get(0)).get("fields")); - } catch (SkyflowException e) { - JSONArray errors = (JSONArray) e.getData().get("errors"); - assertEquals(1, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testUpdateSuccessWithOutUpdateOptions() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", tableName); - record.put("id", skyflowId); - JSONObject fields = new JSONObject(); - fields.put(columnName, "name"); - record.put("fields", fields); - recordsArray.add(record); - records.put("records", recordsArray); - - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"skyflow_id\":\"skyflowId123\",\"tokens\":{\"first_name\":\"token2\"}}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - JSONObject res = skyflowClient.update(records); - JSONArray responseRecords = (JSONArray) res.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - } catch (SkyflowException e) { - JSONArray errors = (JSONArray) e.getData().get("errors"); - assertEquals(1, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - - } - - @Test - public void testUpdateEmptyRecords() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - records.put("records", recordsArray); - UpdateOptions updateOptions = new UpdateOptions(); - JSONObject response = skyflowClient.update(records, updateOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.EmptyRecords.getDescription(), skyflowException.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.TokenUtils"}) - public void testUpdateEmptyFields() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - JSONObject fields = new JSONObject(); - record.put("table", tableName); - record.put("id", skyflowId); - record.put("fields", fields); - recordsArray.add(record); - - records.put("records", recordsArray); - UpdateOptions updateOptions = new UpdateOptions(); - JSONObject response = skyflowClient.update(records, updateOptions); - } catch (SkyflowException skyflowException) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) skyflowException.getData().get("error")).get(0))).get("error"); - assertEquals(ErrorCode.InvalidFields.getDescription(), error.get("description")); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.TokenUtils"}) - public void testUpdateInvalidTable() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - JSONObject fields = new JSONObject(); - record.put("table", null); - record.put("id", skyflowId); - record.put("fields", fields); - recordsArray.add(record); - - records.put("records", recordsArray); - UpdateOptions updateOptions = new UpdateOptions(); - JSONObject response = skyflowClient.update(records, updateOptions); - } catch (SkyflowException skyflowException) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) skyflowException.getData().get("error")).get(0))).get("error"); - assertEquals(ErrorCode.InvalidTable.getDescription(), error.get("description")); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.TokenUtils"}) - public void testUpdateEmptySkyflowId() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - JSONObject fields = new JSONObject(); - record.put("table", tableName); - record.put("id", ""); - record.put("fields", fields); - recordsArray.add(record); - - records.put("records", recordsArray); - UpdateOptions updateOptions = new UpdateOptions(); - JSONObject response = skyflowClient.update(records, updateOptions); - } catch (SkyflowException skyflowException) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) skyflowException.getData().get("error")).get(0))).get("error"); - assertEquals(ErrorCode.InvalidSkyflowId.getDescription(), error.get("description")); - } - } - - @Test - public void testUpdateEmptyRecords2() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - records.put("records", null); - - JSONObject response = skyflowClient.getById(records); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.EmptyRecords.getDescription(), skyflowException.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.TokenUtils"}) - public void testUpdateEmptyTable() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", ""); - record.put("id", skyflowId); - JSONObject fields = new JSONObject(); - fields.put(columnName, "name"); - record.put("fields", fields); - recordsArray.add(record); - records.put("records", recordsArray); - - UpdateOptions updateOptions = new UpdateOptions(true); - - JSONObject res = skyflowClient.update(records, updateOptions); - } catch (SkyflowException e) { - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("error")).get(0))).get("error"); - assertEquals(ErrorCode.InvalidTable.getDescription(), error.get("description")); - } - - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testUpdateError() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", "invalid_table"); - record.put("id", skyflowId); - JSONObject fields = new JSONObject(); - fields.put(columnName, "name"); - record.put("fields", fields); - recordsArray.add(record); - records.put("records", recordsArray); - - UpdateOptions updateOptions = new UpdateOptions(true); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"error\":{\"grpc_code\":3,\"http_code\":400,\"message\":\"Object Name table was not found for Vault vault123\",\"http_status\":\"Bad Request\",\"details\":[]}}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - JSONObject res = skyflowClient.update(records, updateOptions); - - } catch (SkyflowException e) { - JSONArray errors = (JSONArray) e.getData().get("error"); - assertEquals(1, errors.size()); - JSONObject error = (JSONObject) ((JSONObject) (((JSONArray) e.getData().get("error")).get(0))).get("error"); - assertEquals(ErrorCode.InvalidTable.getDescription(), error.get("description")); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - - } - - @Test - public void testUpdateInvalidInput() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - records.put("invalidRecordsKey", recordsArray); - - UpdateOptions updateOptions = new UpdateOptions(true); - JSONObject response = skyflowClient.update(records, updateOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidUpdateInput.getDescription(), skyflowException.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testUpdatePartialError() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", tableName); - record.put("id", skyflowId); - JSONObject fields = new JSONObject(); - fields.put(columnName, "name"); - record.put("fields", fields); - recordsArray.add(record); - - JSONObject record2 = new JSONObject(); - record2.put("table", "invalidTable"); - record2.put("id", "invalidId"); - JSONObject fields2 = new JSONObject(); - fields2.put(columnName, "name"); - record2.put("fields", fields2); - recordsArray.add(record2); - records.put("records", recordsArray); - - String validRequestUrl = "https://test.com/v1/vaults/vault123/pii_fields/skyflowId123"; - String invalidRequestUrl = "https://test.com/v1/vaults/vault123/invalidTable/invalidId"; - - PowerMockito.mockStatic(HttpUtility.class); - - String mockInvalidResponse = "{\"error\":{\"grpc_code\":3,\"http_code\":400,\"message\":\"Object Name table was not found for Vault vault123\",\"http_status\":\"Bad Request\",\"details\":[]}}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), eq(new URL(invalidRequestUrl)), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenThrow(new SkyflowException(400, mockInvalidResponse)); - - String mockValidResponse = "{\"skyflow_id\":\"skyflowId123\",\"tokens\":{\"first_name\":\"token2\"}}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), eq(new URL(validRequestUrl)), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockValidResponse); - - JSONObject response = skyflowClient.update(records, new UpdateOptions(true)); - - } catch (SkyflowException e) { - JSONObject partialError = e.getData(); - assertTrue(partialError.containsKey("records")); - assertTrue(partialError.containsKey("error")); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testUpdateWrongVaultError() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", tableName); - record.put("id", skyflowId); - JSONObject fields = new JSONObject(); - fields.put(columnName, "name"); - record.put("fields", fields); - recordsArray.add(record); - records.put("records", recordsArray); - - String invalidRequestUrl = "https://test.com/v1/vaults/vault1234/invalidTable/vault123/invalidId"; - - PowerMockito.mockStatic(HttpUtility.class); - - String mockInvalidResponse = "ThreadExecution exception"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), eq(new URL(invalidRequestUrl)), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenThrow(new SkyflowException(500, mockInvalidResponse)); - - JSONObject response = skyflowClient.update(records, new UpdateOptions(true)); - - } catch (SkyflowException e) { - String error = e.getMessage(); - assertEquals(ErrorCode.ThreadExecutionException.getDescription(), error); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testUpdateIOException() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", tableName); - record.put("id", skyflowId); - JSONObject fields = new JSONObject(); - fields.put(columnName, "name"); - record.put("fields", fields); - recordsArray.add(record); - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - PowerMockito.when(HttpUtility.sendRequest(anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new IOException()); - - JSONObject response = skyflowClient.update(records, new UpdateOptions(true)); - - } catch (SkyflowException e) { - String error = e.getMessage(); - assertEquals(ErrorCode.ThreadExecutionException.getDescription(), error); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testUpdateParseException() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", tableName); - record.put("id", skyflowId); - JSONObject fields = new JSONObject(); - fields.put(columnName, "name"); - record.put("fields", fields); - recordsArray.add(record); - records.put("records", recordsArray); - - String invalidMockResponse = "a{\"skyflow_id\":\"skyflowId123\",\"tokens\":{\"first_name\":\"token2\"}}"; - - PowerMockito.mockStatic(HttpUtility.class); - PowerMockito.when(HttpUtility.sendRequest(anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenReturn(invalidMockResponse); - - JSONObject response = skyflowClient.update(records, new UpdateOptions(true)); - - } catch (SkyflowException e) { - String error = e.getMessage(); - assertEquals(ErrorCode.ThreadExecutionException.getDescription(), error); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkEmptyTable() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertBulkOptions insertOptions = new InsertBulkOptions(false); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidTable.getDescription(), skyflowException.getMessage()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkEmptyTableCase2() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("table", null); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertBulkOptions insertOptions = new InsertBulkOptions(false); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidTable.getDescription(), skyflowException.getMessage()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkEmptyTableCase3() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("table", ""); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertBulkOptions insertOptions = new InsertBulkOptions(false); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidTable.getDescription(), skyflowException.getMessage()); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkEmptyFields() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertBulkOptions insertOptions = new InsertBulkOptions(true); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidFields.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testInsertBulkInvalidInput() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("invalidTableKey", tableName); - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertBulkOptions insertOptions = new InsertBulkOptions(true); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidInsertInput.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testInsertBulkWithEmptyArrayUpsertOptions() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - UpsertOption[] upsertOptions = new UpsertOption[]{}; - InsertBulkOptions insertOptions = new InsertBulkOptions(true, upsertOptions); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidUpsertOptionType.getDescription(), skyflowException.getMessage()); - } - - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - UpsertOption[] upsertOptions = new UpsertOption[3]; - InsertBulkOptions insertOptions = new InsertBulkOptions(true, upsertOptions); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidUpsertObjectType.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testInsertBulkWithInvalidTableInUpsertOptions() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - InsertBulkOptions insertOptions = new InsertBulkOptions(true, new UpsertOption[]{new UpsertOption(null, "column")}); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidTableInUpsertOption.getDescription(), skyflowException.getMessage()); - } - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - InsertBulkOptions insertOptions = new InsertBulkOptions(true, new UpsertOption[]{new UpsertOption("", "column")}); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidTableInUpsertOption.getDescription(), skyflowException.getMessage()); - } - } - - @Test - public void testInsertBulkWithInvalidColumnInUpsertOptions() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - InsertBulkOptions insertOptions = new InsertBulkOptions(true, new UpsertOption[]{new UpsertOption("table1", null)}); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidColumnInUpsertOption.getDescription(), skyflowException.getMessage()); - } - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - InsertBulkOptions insertOptions = new InsertBulkOptions(true, new UpsertOption[]{new UpsertOption("table2", "")}); - JSONObject records = new JSONObject(); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.InvalidColumnInUpsertOption.getDescription(), skyflowException.getMessage()); - } - } - - - @Test - public void testInvalidConfigWithEmptyVaultIDIninsertBulk() { - Configuration.setLogLevel(LogLevel.WARN); - SkyflowConfiguration testConfig = new SkyflowConfiguration("", vaultURL, new DemoTokenProvider()); - try { - Skyflow skyflow = Skyflow.init(testConfig); - skyflow.insertBulk(new JSONObject(), new InsertBulkOptions()); - } catch (SkyflowException e) { - assertEquals(e.getCode(), ErrorCode.EmptyVaultID.getCode()); - assertEquals(e.getMessage(), ErrorCode.EmptyVaultID.getDescription()); - } - } - - @Test - public void testInvalidConfigWithInvalidVaultURLIninsertBulk() { - Configuration.setLogLevel(LogLevel.OFF); - SkyflowConfiguration testConfig = new SkyflowConfiguration(vaultID, "//valid.url.com", new DemoTokenProvider()); - try { - Skyflow skyflow = Skyflow.init(testConfig); - skyflow.insertBulk(new JSONObject(), new InsertBulkOptions()); - } catch (SkyflowException e) { - assertEquals(e.getCode(), ErrorCode.InvalidVaultURL.getCode()); - assertEquals(e.getMessage(), ErrorCode.InvalidVaultURL.getDescription()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkSuccessWithUpsertOptions() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - UpsertOption upsertOption = new UpsertOption(tableName, columnName); - InsertBulkOptions insertOptions = new InsertBulkOptions(new UpsertOption[]{upsertOption}); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = - "{\"records\":[{\"skyflow_id\":\"id1\", \"tokens\":{\"first_name\":\"token1\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - JSONArray responseRecords = (JSONArray) res.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkSuccessWithoutTokens() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertBulkOptions insertOptions = new InsertBulkOptions(false); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = "{\"records\":[{\"skyflow_id\":\"id1\"}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - JSONArray responseRecords = (JSONArray) res.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNotNull(((JSONObject) responseRecords.get(0)).get("skyflow_id")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - public void testInsertBulkWithInvalidSkyflowConfig() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, null); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - - JSONObject res = skyflowClient.insertBulk(records); - } catch (SkyflowException e) { - assertEquals(ErrorCode.InvalidTokenProvider.getDescription(), e.getMessage()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkSuccessWithTokens() { - try { - SkyflowConfiguration config = new SkyflowConfiguration("vaultID", "https://vaulturl.com", new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertBulkOptions insertOptions = new InsertBulkOptions(); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = - "{\"records\":[{\"skyflow_id\":\"id1\", \"tokens\":{\"first_name\":\"token1\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - JSONArray responseRecords = (JSONArray) res.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkErrorsWithTokens() { - try { - SkyflowConfiguration config = new SkyflowConfiguration("vaultID", "https://vaulturl.com", new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertBulkOptions insertOptions = new InsertBulkOptions(); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = - "{\"error\":{\"grpc_code\":3,\"http_code\":400,\"message\":\"Invalid field present in JSON cardholder_nam\",\"http_status\":\"Bad Request\",\"details\":[]}}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenThrow(new SkyflowException(500, mockResponse)); - - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - JSONArray errors = (JSONArray) skyflowException.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - skyflowException.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkSuccessWithoutInsertOptions() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = - "{\"records\":[{\"skyflow_id\":\"id1\", \"tokens\":{\"first_name\":\"token1\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse); - JSONObject res = skyflowClient.insertBulk(records); - JSONArray responseRecords = (JSONArray) res.get("records"); - - assertEquals(1, responseRecords.size()); - assertEquals(tableName, ((JSONObject) responseRecords.get(0)).get("table")); - assertNotNull(((JSONObject) responseRecords.get(0)).get("fields")); - } catch (SkyflowException skyflowException) { - skyflowException.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkErrorsWithTokensParseException() { - try { - SkyflowConfiguration config = new SkyflowConfiguration("vaultID", "https://vaulturl.com", new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - - InsertBulkOptions insertOptions = new InsertBulkOptions(); - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse = - "{\"grpc_code\":3,\"http_code\":400,\"message\":\"Invalid field present in JSON cardholder_nam\",\"http_status\":\"Bad Request\",\"details\":"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenThrow(new SkyflowException(500, mockResponse)); - - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - JSONArray errors = (JSONArray) skyflowException.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkPartialSuccess() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", "pii_fields"); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - JSONObject record2 = new JSONObject(); - record2.put("table", "cards"); - JSONObject fields2 = new JSONObject(); - fields.put(columnName, "first"); - record2.put("fields", fields2); - recordsArray.add(record2); - - - records.put("records", recordsArray); - String firstRequestUrl = "https://test.com/v1/vaults/vault123/pii_fields"; - String secondRequestUrl = "https://test.com/v1/vaults/vault123/cards"; - - - PowerMockito.mockStatic(HttpUtility.class); - String mockResponse2 = - "{\"records\":[{\"skyflow_id\":\"id1\", \"tokens\":{\"first_name\":\"token1\"}}]}"; - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.eq(new URL(firstRequestUrl)), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenReturn(mockResponse2); - - String mockResponse = - "{\"error\":{\"grpc_code\":3,\"http_code\":400,\"message\":\"Invalid field present in JSON cardholder_nam\",\"http_status\":\"Bad Request\",\"details\":[]}}"; - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.eq(new URL(secondRequestUrl)), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new SkyflowException(500, mockResponse - )); - - JSONObject res = skyflowClient.insertBulk(records); - - } catch (SkyflowException e) { - JSONObject partialError = e.getData(); - Assert.assertTrue(partialError.containsKey("records")); - Assert.assertTrue(partialError.containsKey("errors")); - JSONArray records = (JSONArray) e.getData().get("records"); - - Assert.assertEquals(1, records.size()); - - JSONArray errors = (JSONArray) e.getData().get("errors"); - Assert.assertEquals(1, errors.size()); - } catch (IOException e) { - e.printStackTrace(); - fail(INVALID_EXCEPTION_THROWN); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkInterruptedException() { - try { - SkyflowConfiguration config = new SkyflowConfiguration("vaultID", "https://demo.com", new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - record.put("table", tableName); - JSONObject fields = new JSONObject(); - fields.put(columnName, "first"); - record.put("fields", fields); - - recordsArray.add(record); - - records.put("records", recordsArray); - PowerMockito.mockStatic(HttpUtility.class); - - InsertBulkOptions insertOptions = new InsertBulkOptions(true); - PowerMockito.when(HttpUtility.sendRequest(ArgumentMatchers.anyString(), - ArgumentMatchers.any(), - ArgumentMatchers.any(), - ArgumentMatchers.anyMap())) - .thenThrow(new IOException("Exception occurred")); - Callable mockCallable = mock(Callable.class); - when(mockCallable.call()).thenThrow(new InterruptedException("Thread was interrupted")); - - FutureTask mockFutureTask = new FutureTask<>(mockCallable); - mockFutureTask.run(); - - when(mockFutureTask.get()).thenThrow(new InterruptedException("Thread was interrupted")); - - PowerMockito.mockStatic(HttpUtility.class); - PowerMockito.when(HttpUtility.sendRequest(anyString(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyMap())).thenThrow(new InterruptedException("Thread was interrupted")); - - - JSONObject response = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException e) { - String error = e.getMessage(); - assertEquals(ErrorCode.ThreadExecutionException.getDescription(), error); - } catch (IOException exception) { - exception.printStackTrace(); - Assert.fail(INVALID_EXCEPTION_THROWN); - } catch (Exception e) { - Assert.assertTrue((e.toString()).contains(ErrorCode.ThreadInterruptedException.getDescription())); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkEmptyRecords() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - records.put("records", recordsArray); - - InsertBulkOptions insertOptions = new InsertBulkOptions(false); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.EmptyRecords.getDescription(), skyflowException.getMessage()); - } - } - @Test - @PrepareForTest(fullyQualifiedNames = {"com.skyflow.common.utils.HttpUtility", "com.skyflow.common.utils.TokenUtils"}) - public void testInsertBulkEmptyRecordsCase2() { - try { - SkyflowConfiguration config = new SkyflowConfiguration(vaultID, vaultURL, new DemoTokenProvider()); - - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - - records.put("records", null); - - InsertBulkOptions insertOptions = new InsertBulkOptions(false); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - } catch (SkyflowException skyflowException) { - assertEquals(ErrorCode.EmptyRecords.getDescription(), skyflowException.getMessage()); - } - } -} - diff --git a/v1/src/test/resources/invalidCredentials.json b/v1/src/test/resources/invalidCredentials.json deleted file mode 100644 index 9e26dfee..00000000 --- a/v1/src/test/resources/invalidCredentials.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/v1/src/test/resources/notJson.txt b/v1/src/test/resources/notJson.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/v2/pom.xml b/v2/pom.xml deleted file mode 100644 index bddf1ae2..00000000 --- a/v2/pom.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - 4.0.0 - - com.skyflow - skyflow-java - 1.15.0 - - - v2 - - - 8 - 8 - UTF-8 - 4.12.0 - 2.10.1 - 1.9.0 - 5.10.3 - 1.10.0 - - - - - io.github.cdimascio - dotenv-java - 3.0.0 - - - com.google.code.findbugs - jsr305 - 3.0.2 - - - io.gsonfire - gson-fire - ${gson-fire-version} - - - com.google.code.gson - gson - ${gson-version} - - - com.squareup.okhttp3 - okhttp - ${okhttp-version} - - - com.squareup.okhttp3 - logging-interceptor - ${okhttp-version} - - - - org.junit.jupiter - junit-jupiter-engine - ${junit-version} - test - - - org.junit.platform - junit-platform-runner - ${junit-platform-runner.version} - test - - - \ No newline at end of file From 60279729bc72e2bc54b05dd019aaa98895b0b738 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 15 Nov 2024 19:18:17 +0530 Subject: [PATCH 44/68] SK-1623 Downgrade dotenv to work with java 8 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 12533834..b719865b 100644 --- a/pom.xml +++ b/pom.xml @@ -60,7 +60,7 @@ io.github.cdimascio dotenv-java - 3.0.0 + 2.2.0 com.google.code.findbugs From f4affdf383001e4a9eb58b85e91d6a43dfb1e55b Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Mon, 18 Nov 2024 12:15:09 +0530 Subject: [PATCH 45/68] SK-1767 Fix unit tests not running in CI pipeline --- pom.xml | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index b719865b..8b8452dc 100644 --- a/pom.xml +++ b/pom.xml @@ -39,8 +39,8 @@ 1.9.0 UTF-8 4.12.0 - 5.10.3 - 1.10.0 + 4.13.2 + 2.3.1 1.3.5 @@ -104,20 +104,18 @@ ${jakarta-annotation-version} provided - - org.junit.jupiter - junit-jupiter-engine - ${junit-version} - test + javax.xml.bind + jaxb-api + ${javax-xml-bind-version} + - org.junit.platform - junit-platform-runner - ${junit-platform-runner.version} + junit + junit + ${junit-version} test - org.powermock powermock-module-junit4 From 8fa94f7ea79c79bbd2e6ac6421aa561fb8b92ebd Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Mon, 18 Nov 2024 12:45:34 +0530 Subject: [PATCH 46/68] SK-1767 Add new secret for Java SDK v2 tests --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c3a33dc8..3e8586a2 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -32,7 +32,7 @@ jobs: json: ${{ secrets.TEST_CREDENTIALS_FILE_STRING }} - name: Build & Run tests with Maven - run: mvn -B package -DTEST_EXPIRED_TOKEN=${{ secrets.TEST_EXPIRED_TOKEN }} -DTEST_DATA_CREDENTIALS_FILE=${{ secrets.TEST_DATA_CREDENTIALS_FILE }} -f pom.xml + run: mvn -B package -DTEST_EXPIRED_TOKEN=${{ secrets.TEST_EXPIRED_TOKEN }} -DTEST_DATA_CREDENTIALS_FILE=${{ secrets.TEST_DATA_CREDENTIALS_FILE }} -DSKYFLOW_CREDENTIALS=${{ secrets.SKYFLOW_CREDENTIALS }} -f pom.xml - name: Codecov uses: codecov/codecov-action@v2.1.0 From 8e9193ea9d23d9e9cfaeebd3b96e024e55dea38d Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Mon, 18 Nov 2024 15:03:23 +0530 Subject: [PATCH 47/68] SK-1767 Fix issues in CI pipeline --- .github/workflows/pr.yml | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 3e8586a2..a2d39562 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -1,6 +1,6 @@ name: PR CI Checks -on: [ pull_request ] +on: [pull_request] jobs: check-commit-message: @@ -11,18 +11,18 @@ jobs: uses: gsactions/commit-message-checker@v1 with: pattern: '\[?[A-Z]{1,5}-[1-9][0-9]*.+$' - flags: 'gm' - excludeDescription: 'true' - checkAllCommitMessages: 'true' + flags: "gm" + excludeDescription: "true" + checkAllCommitMessages: "true" accessToken: ${{ secrets.PAT_ACTIONS }} - error: 'One of your your commit messages is not matching the format with JIRA ID Ex: ( SDK-123 commit message )' + error: "One of your your commit messages is not matching the format with JIRA ID Ex: ( SDK-123 commit message )" Test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-java@v1 with: - java-version: '1.8' + java-version: "1.8" - name: create-json id: create-json @@ -31,8 +31,15 @@ jobs: name: "credentials.json" json: ${{ secrets.TEST_CREDENTIALS_FILE_STRING }} + - name: create env + id: create-env + run: | + touch .env + echo SKYFLOW_CREDENTIALS=${{ secrets.SKYFLOW_CREDENTIALS }} >> .env + echo TEST_EXPIRED_TOKEN=${{ secrets.TEST_EXPIRED_TOKEN }} >> .env + - name: Build & Run tests with Maven - run: mvn -B package -DTEST_EXPIRED_TOKEN=${{ secrets.TEST_EXPIRED_TOKEN }} -DTEST_DATA_CREDENTIALS_FILE=${{ secrets.TEST_DATA_CREDENTIALS_FILE }} -DSKYFLOW_CREDENTIALS=${{ secrets.SKYFLOW_CREDENTIALS }} -f pom.xml + run: mvn -B package -DTEST_EXPIRED_TOKEN=${{ secrets.TEST_EXPIRED_TOKEN }} -DTEST_DATA_CREDENTIALS_FILE=${{ secrets.TEST_DATA_CREDENTIALS_FILE }} -f pom.xml - name: Codecov uses: codecov/codecov-action@v2.1.0 From f63b903c2421e678a98d7800c3fd6ac9c3dc38e1 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Mon, 18 Nov 2024 15:10:16 +0530 Subject: [PATCH 48/68] SK-1767 Fix compilation issues in CI pipeline - Excluding generating code from javadoc generation --- pom.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pom.xml b/pom.xml index 8b8452dc..ea4cbd29 100644 --- a/pom.xml +++ b/pom.xml @@ -160,6 +160,14 @@ org.apache.maven.plugins maven-javadoc-plugin 3.2.0 + + + :com.skyflow.generated.rest + :com.skyflow.generated.rest.api + :com.skyflow.generated.rest.auth + :com.skyflow.generated.rest.models + + attach-javadocs From f092e787b06badb443fe358128a165cb8802cdf7 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Tue, 19 Nov 2024 11:37:45 +0530 Subject: [PATCH 49/68] SK-1682 Modified the structure of Skyflow error --- .../com/skyflow/errors/SkyflowException.java | 46 ++++++++++++++----- src/test/java/com/skyflow/SkyflowTests.java | 30 ++++++------ .../skyflow/config/ConnectionConfigTests.java | 12 ++--- .../com/skyflow/config/CredentialsTests.java | 20 ++++---- .../com/skyflow/config/VaultConfigTests.java | 8 ++-- .../serviceaccount/util/BearerTokenTests.java | 24 +++++----- .../util/SignedDataTokensTests.java | 20 ++++---- .../java/com/skyflow/utils/UtilsTests.java | 4 +- .../connection/InvokeConnectionTests.java | 32 ++++++------- .../controller/ConnectionControllerTests.java | 2 +- .../controller/VaultControllerTests.java | 18 +++++--- .../com/skyflow/vault/data/DeleteTests.java | 10 ++-- .../java/com/skyflow/vault/data/GetTests.java | 40 ++++++++-------- .../com/skyflow/vault/data/InsertTests.java | 34 +++++++------- .../com/skyflow/vault/data/QueryTests.java | 4 +- .../com/skyflow/vault/data/UpdateTests.java | 32 ++++++------- .../skyflow/vault/tokens/DetokenizeTests.java | 6 +-- .../skyflow/vault/tokens/TokenizeTests.java | 8 ++-- 18 files changed, 187 insertions(+), 163 deletions(-) diff --git a/src/main/java/com/skyflow/errors/SkyflowException.java b/src/main/java/com/skyflow/errors/SkyflowException.java index 625b0d2e..6cff3cdd 100644 --- a/src/main/java/com/skyflow/errors/SkyflowException.java +++ b/src/main/java/com/skyflow/errors/SkyflowException.java @@ -11,8 +11,10 @@ public class SkyflowException extends Exception { private String requestId; - private int code; + private Integer grpcCode; + private Integer httpCode; private String message; + private String httpStatus; private JsonArray details; private JsonObject responseBody; @@ -23,21 +25,23 @@ public SkyflowException(String message) { public SkyflowException(Throwable cause) { super(cause); + this.message = cause.getMessage(); } public SkyflowException(String message, Throwable cause) { super(message, cause); + this.message = message; } public SkyflowException(int code, String message) { super(message); - this.code = code; + this.httpCode = code; this.message = message; } - public SkyflowException(int code, Throwable cause, Map> responseHeaders, String responseBody) { + public SkyflowException(int httpCode, Throwable cause, Map> responseHeaders, String responseBody) { this(cause); - this.code = code; + this.httpCode = httpCode; String contentType = responseHeaders.get("content-type").get(0); setRequestId(responseHeaders); if (Objects.equals(contentType, "application/json")) { @@ -51,6 +55,8 @@ private void setResponseBody(String responseBody) { try { if (responseBody != null) { this.responseBody = JsonParser.parseString(responseBody).getAsJsonObject(); + setGrpcCode(); + setHttpStatus(); setMessage(); setDetails(); } @@ -74,12 +80,32 @@ private void setMessage() { this.message = ((JsonObject) responseBody.get("error")).get("message").getAsString(); } + private void setGrpcCode() { + this.grpcCode = ((JsonObject) responseBody.get("error")).get("grpc_code").getAsInt(); + } + + private void setHttpStatus() { + this.httpStatus = ((JsonObject) responseBody.get("error")).get("http_status").getAsString(); + } + private void setDetails() { this.details = ((JsonObject) responseBody.get("error")).get("details").getAsJsonArray(); } - public int getCode() { - return code; + public int getHttpCode() { + return httpCode; + } + + public JsonArray getDetails() { + return details; + } + + public Integer getGrpcCode() { + return grpcCode; + } + + public String getHttpStatus() { + return httpStatus; } @Override @@ -90,12 +116,8 @@ public String getMessage() { @Override public String toString() { return String.format( - "%n requestId: %s%n code: %s%n message: %s", - this.requestId, this.code, this.message + "%n requestId: %s%n grpcCode: %s%n httpCode: %s%n httpStatus: %s%n message: %s%n details: %s", + this.requestId, this.grpcCode, this.httpCode, this.httpStatus, this.message, this.details ); } - - public JsonArray getDetails() { - return details; - } } diff --git a/src/test/java/com/skyflow/SkyflowTests.java b/src/test/java/com/skyflow/SkyflowTests.java index efdc54dc..041969a7 100644 --- a/src/test/java/com/skyflow/SkyflowTests.java +++ b/src/test/java/com/skyflow/SkyflowTests.java @@ -44,7 +44,7 @@ public void testAddingInvalidVaultConfigInSkyflowBuilder() { Skyflow.builder().addVaultConfig(config).build(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyVaultId.getMessage(), e.getMessage()); } } @@ -60,7 +60,7 @@ public void testAddingInvalidVaultConfigInSkyflowClient() { skyflowClient.addVaultConfig(config); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyVaultId.getMessage(), e.getMessage()); } } @@ -90,7 +90,7 @@ public void testAddingExistingVaultConfigInSkyflowClient() { skyflowClient.addVaultConfig(config).addVaultConfig(config); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.VaultIdAlreadyInConfigList.getMessage(), e.getMessage()); } } @@ -105,7 +105,7 @@ public void testUpdatingNonExistentVaultConfigInSkyflowBuilder() { Skyflow.builder().updateVaultConfig(config).build(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage()); } } @@ -121,7 +121,7 @@ public void testUpdatingNonExistentVaultConfigInSkyflowClient() { skyflowClient.updateVaultConfig(config); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage()); } catch (Exception e) { Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage()); @@ -158,7 +158,7 @@ public void testRemovingNonExistentVaultConfigInSkyflowBuilder() { Skyflow.builder().removeVaultConfig(vaultID).build(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage()); } } @@ -184,7 +184,7 @@ public void testRemovingValidVaultConfigInSkyflowClient() { skyflowClient.removeVaultConfig(vaultID); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.VaultIdNotInConfigList.getMessage(), e.getMessage()); } } @@ -210,7 +210,7 @@ public void testAddingInvalidConnectionConfigInSkyflowBuilder() { Skyflow.builder().addConnectionConfig(config).build(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyConnectionId.getMessage(), e.getMessage()); } } @@ -225,7 +225,7 @@ public void testAddingInvalidConnectionConfigInSkyflowClient() { skyflowClient.addConnectionConfig(config); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyConnectionId.getMessage(), e.getMessage()); } } @@ -253,7 +253,7 @@ public void testAddingExistingConnectionConfigInSkyflowClient() { skyflowClient.addConnectionConfig(config); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.ConnectionIdAlreadyInConfigList.getMessage(), e.getMessage()); } } @@ -267,7 +267,7 @@ public void testUpdatingNonExistentConnectionConfigInSkyflowBuilder() { Skyflow.builder().updateConnectionConfig(config).build(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.ConnectionIdNotInConfigList.getMessage(), e.getMessage()); } } @@ -282,7 +282,7 @@ public void testUpdatingNonExistentConnectionConfigInSkyflowClient() { skyflowClient.updateConnectionConfig(config); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.ConnectionIdNotInConfigList.getMessage(), e.getMessage()); } } @@ -313,7 +313,7 @@ public void testRemovingNonExistentConnectionConfigInSkyflowBuilder() { Skyflow.builder().removeConnectionConfig(connectionID).build(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.ConnectionIdNotInConfigList.getMessage(), e.getMessage()); } } @@ -325,7 +325,7 @@ public void testRemovingNonExistentConnectionConfigInSkyflowClient() { skyflowClient.removeConnectionConfig(connectionID); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.ConnectionIdNotInConfigList.getMessage(), e.getMessage()); } } @@ -361,7 +361,7 @@ public void testAddingInvalidSkyflowCredentialsInSkyflowBuilder() { Skyflow.builder().addSkyflowCredentials(credentials).build(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.NoTokenGenerationMeansPassed.getMessage(), e.getMessage()); } } diff --git a/src/test/java/com/skyflow/config/ConnectionConfigTests.java b/src/test/java/com/skyflow/config/ConnectionConfigTests.java index 03b1021e..5ff32ca5 100644 --- a/src/test/java/com/skyflow/config/ConnectionConfigTests.java +++ b/src/test/java/com/skyflow/config/ConnectionConfigTests.java @@ -1,7 +1,5 @@ package com.skyflow.config; -import com.skyflow.config.ConnectionConfig; -import com.skyflow.config.Credentials; import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; @@ -82,7 +80,7 @@ public void testNoConnectionIdInConnectionConfig() { Validations.validateConnectionConfig(connectionConfig); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidConnectionId.getMessage(), e.getMessage()); } } @@ -96,7 +94,7 @@ public void testEmptyConnectionIdInConnectionConfig() { Validations.validateConnectionConfig(connectionConfig); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyConnectionId.getMessage(), e.getMessage()); } } @@ -109,7 +107,7 @@ public void testNoConnectionURLInConnectionConfig() { Validations.validateConnectionConfig(connectionConfig); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidConnectionUrl.getMessage(), e.getMessage()); } } @@ -123,7 +121,7 @@ public void testEmptyConnectionURLInConnectionConfig() { Validations.validateConnectionConfig(connectionConfig); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyConnectionUrl.getMessage(), e.getMessage()); } } @@ -137,7 +135,7 @@ public void testInvalidConnectionURLInConnectionConfig() { Validations.validateConnectionConfig(connectionConfig); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidConnectionUrlFormat.getMessage(), e.getMessage()); } } diff --git a/src/test/java/com/skyflow/config/CredentialsTests.java b/src/test/java/com/skyflow/config/CredentialsTests.java index 1b7f6e64..cfc61de6 100644 --- a/src/test/java/com/skyflow/config/CredentialsTests.java +++ b/src/test/java/com/skyflow/config/CredentialsTests.java @@ -136,7 +136,7 @@ public void testEmptyPathInCredentials() { Validations.validateCredentials(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyCredentialFilePath.getMessage(), e.getMessage()); } } @@ -149,7 +149,7 @@ public void testEmptyCredentialsStringInCredentials() { Validations.validateCredentials(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyCredentialsString.getMessage(), e.getMessage()); } } @@ -162,7 +162,7 @@ public void testEmptyTokenInCredentials() { Validations.validateCredentials(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyToken.getMessage(), e.getMessage()); } } @@ -175,7 +175,7 @@ public void testEmptyApikeyInCredentials() { Validations.validateCredentials(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyApikey.getMessage(), e.getMessage()); } } @@ -188,7 +188,7 @@ public void testInvalidApikeyInCredentials() { Validations.validateCredentials(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidApikey.getMessage(), e.getMessage()); } } @@ -202,7 +202,7 @@ public void testBothTokenAndPathInCredentials() { Validations.validateCredentials(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.MultipleTokenGenerationMeansPassed.getMessage(), e.getMessage()); } } @@ -214,7 +214,7 @@ public void testNothingPassedInCredentials() { Validations.validateCredentials(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.NoTokenGenerationMeansPassed.getMessage(), e.getMessage()); } } @@ -228,7 +228,7 @@ public void testEmptyRolesInCredentials() { Validations.validateCredentials(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyRoles.getMessage(), e.getMessage()); } } @@ -244,7 +244,7 @@ public void testEmptyRoleInRolesInCredentials() { Validations.validateCredentials(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyRoleInRoles.getMessage(), e.getMessage()); } } @@ -258,7 +258,7 @@ public void testEmptyContextInCredentials() { Validations.validateCredentials(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyContext.getMessage(), e.getMessage()); } } diff --git a/src/test/java/com/skyflow/config/VaultConfigTests.java b/src/test/java/com/skyflow/config/VaultConfigTests.java index 478f8cf0..1a5ca703 100644 --- a/src/test/java/com/skyflow/config/VaultConfigTests.java +++ b/src/test/java/com/skyflow/config/VaultConfigTests.java @@ -121,7 +121,7 @@ public void testNoVaultIdInVaultConfigInValidations() { Validations.validateVaultConfig(vaultConfig); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidVaultId.getMessage(), e.getMessage()); } } @@ -136,7 +136,7 @@ public void testEmptyVaultIdInVaultConfigInValidations() { Validations.validateVaultConfig(vaultConfig); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyVaultId.getMessage(), e.getMessage()); } } @@ -150,7 +150,7 @@ public void testNoClusterIdInVaultConfigInValidations() { Validations.validateVaultConfig(vaultConfig); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidClusterId.getMessage(), e.getMessage()); } } @@ -165,7 +165,7 @@ public void testEmptyClusterIdInVaultConfigInValidations() { Validations.validateVaultConfig(vaultConfig); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyClusterId.getMessage(), e.getMessage()); } } diff --git a/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java b/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java index 3993e476..52272933 100644 --- a/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java +++ b/src/test/java/com/skyflow/serviceaccount/util/BearerTokenTests.java @@ -62,7 +62,7 @@ public void testEmptyCredentialsFilePath() { bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); } } @@ -75,7 +75,7 @@ public void testInvalidFilePath() { bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); } } @@ -88,7 +88,7 @@ public void testInvalidCredentialsFile() { bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.FileInvalidJson.getMessage(), invalidJsonFilePath), e.getMessage() @@ -103,7 +103,7 @@ public void testEmptyCredentialsString() { bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); } } @@ -115,7 +115,7 @@ public void testInvalidCredentialsString() { bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.CredentialsStringInvalidJson.getMessage(), e.getMessage()); } } @@ -130,7 +130,7 @@ public void testNoPrivateKeyInCredentialsForCredentials() { bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.MissingPrivateKey.getMessage(), e.getMessage()); } } @@ -144,7 +144,7 @@ public void testNoClientIDInCredentialsForCredentials() { bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.MissingClientId.getMessage(), e.getMessage()); } } @@ -158,7 +158,7 @@ public void testNoKeyIDInCredentialsForCredentials() { bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.MissingKeyId.getMessage(), e.getMessage()); } } @@ -172,7 +172,7 @@ public void testNoTokenURIInCredentialsForCredentials() { bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.MissingTokenUri.getMessage(), e.getMessage()); } } @@ -186,7 +186,7 @@ public void testInvalidPrivateKeyInCredentialsForCredentials() { bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.JwtInvalidFormat.getMessage(), e.getMessage()); } } @@ -199,7 +199,7 @@ public void testInvalidKeySpecInCredentialsForCredentials() { bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidKeySpec.getMessage(), e.getMessage()); } } @@ -213,7 +213,7 @@ public void testInvalidTokenURIInCredentialsForCredentials() throws SkyflowExcep bearerToken.getBearerToken(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidTokenUri.getMessage(), e.getMessage()); } } diff --git a/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java b/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java index e5ce56b1..5e631995 100644 --- a/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java +++ b/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java @@ -68,7 +68,7 @@ public void testEmptyCredentialsFilePath() { signedTokens.getSignedDataTokens(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); } } @@ -81,7 +81,7 @@ public void testInvalidFilePath() { signedTokens.getSignedDataTokens(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); } } @@ -94,7 +94,7 @@ public void testInvalidCredentialsFile() { signedTokens.getSignedDataTokens(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.FileInvalidJson.getMessage(), invalidJsonFilePath), e.getMessage() @@ -112,7 +112,7 @@ public void testEmptyCredentialsString() { } catch (SkyflowException e) { System.out.println("caught skyflow exception"); System.out.println(e); - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.InvalidCredentials.getMessage(), invalidJsonFilePath), e.getMessage() @@ -130,7 +130,7 @@ public void testInvalidCredentialsString() { signedTokens.getSignedDataTokens(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.CredentialsStringInvalidJson.getMessage(), invalidJsonFilePath), e.getMessage() @@ -147,7 +147,7 @@ public void testNoPrivateKeyInCredentials() { signedTokens.getSignedDataTokens(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.MissingPrivateKey.getMessage(), e.getMessage()); } } @@ -161,7 +161,7 @@ public void testNoClientIDInCredentials() { signedTokens.getSignedDataTokens(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.MissingClientId.getMessage(), e.getMessage()); } } @@ -175,7 +175,7 @@ public void testNoKeyIDInCredentials() { signedTokens.getSignedDataTokens(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.MissingKeyId.getMessage(), e.getMessage()); } } @@ -189,7 +189,7 @@ public void testInvalidPrivateKeyInCredentials() { signedTokens.getSignedDataTokens(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.JwtInvalidFormat.getMessage(), e.getMessage()); } } @@ -202,7 +202,7 @@ public void testInvalidKeySpecInCredentials() { signedTokens.getSignedDataTokens(); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidKeySpec.getMessage(), e.getMessage()); } } diff --git a/src/test/java/com/skyflow/utils/UtilsTests.java b/src/test/java/com/skyflow/utils/UtilsTests.java index 5a1b9de7..79817bc5 100644 --- a/src/test/java/com/skyflow/utils/UtilsTests.java +++ b/src/test/java/com/skyflow/utils/UtilsTests.java @@ -115,7 +115,7 @@ public void testGenerateBearerTokenWithCredentialsFile() { Utils.generateBearerToken(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidCredentials.getMessage(), e.getMessage()); } } @@ -130,7 +130,7 @@ public void testGenerateBearerTokenWithCredentialsString() { Utils.generateBearerToken(credentials); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.CredentialsStringInvalidJson.getMessage(), e.getMessage()); } } diff --git a/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java b/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java index db23e010..8d950279 100644 --- a/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java +++ b/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java @@ -76,7 +76,7 @@ public void testEmptyRequestHeadersInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyRequestHeaders.getMessage(), e.getMessage()); } } @@ -96,7 +96,7 @@ public void testNullRequestHeaderKeyInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidRequestHeaders.getMessage(), e.getMessage()); } } @@ -116,7 +116,7 @@ public void testEmptyRequestHeaderKeyInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidRequestHeaders.getMessage(), e.getMessage()); } } @@ -136,7 +136,7 @@ public void testNullRequestHeaderValueInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidRequestHeaders.getMessage(), e.getMessage()); } } @@ -156,7 +156,7 @@ public void testEmptyRequestHeaderValueInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidRequestHeaders.getMessage(), e.getMessage()); } } @@ -175,7 +175,7 @@ public void testEmptyPathParamsInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyPathParams.getMessage(), e.getMessage()); } } @@ -196,7 +196,7 @@ public void testNullPathParamKeyInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidPathParams.getMessage(), e.getMessage()); } } @@ -217,7 +217,7 @@ public void testEmptyPathParamKeyInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidPathParams.getMessage(), e.getMessage()); } } @@ -238,7 +238,7 @@ public void testNullPathParamValueInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidPathParams.getMessage(), e.getMessage()); } } @@ -259,7 +259,7 @@ public void testEmptyPathParamValueInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidPathParams.getMessage(), e.getMessage()); } } @@ -279,7 +279,7 @@ public void testEmptyQueryParamsInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyQueryParams.getMessage(), e.getMessage()); } } @@ -301,7 +301,7 @@ public void testNullQueryParamKeyInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidQueryParams.getMessage(), e.getMessage()); } } @@ -323,7 +323,7 @@ public void testEmptyQueryParamKeyInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidQueryParams.getMessage(), e.getMessage()); } } @@ -345,7 +345,7 @@ public void testNullQueryParamValueInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidQueryParams.getMessage(), e.getMessage()); } } @@ -367,7 +367,7 @@ public void testEmptyQueryParamValueInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InvalidQueryParams.getMessage(), e.getMessage()); } } @@ -388,7 +388,7 @@ public void testEmptyRequestBodyInInvokeConnectionRequestValidations() { Validations.validateInvokeConnectionRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyRequestBody.getMessage(), e.getMessage()); } } diff --git a/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java b/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java index 0b933b4a..036dfdcd 100644 --- a/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java +++ b/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java @@ -42,7 +42,7 @@ public void testInvalidRequestInInvokeConnectionMethod() { skyflowClient.connection().invoke(connectionRequest); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyRequestHeaders.getMessage(), e.getMessage()); } } diff --git a/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java b/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java index ecfca480..ca2e85d9 100644 --- a/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java +++ b/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java @@ -52,7 +52,7 @@ public void testInvalidRequestInInsertMethod() { skyflowClient.vault().insert(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -68,7 +68,7 @@ public void testInvalidRequestInDetokenizeMethod() { skyflowClient.vault().detokenize(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.InvalidDataTokens.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -84,7 +84,7 @@ public void testInvalidRequestInGetMethod() { skyflowClient.vault().get(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -100,7 +100,7 @@ public void testInvalidRequestInUpdateMethod() { skyflowClient.vault().update(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -116,7 +116,7 @@ public void testInvalidRequestInDeleteMethod() { skyflowClient.vault().delete(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -132,7 +132,7 @@ public void testInvalidRequestInQueryMethod() { skyflowClient.vault().query(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.QueryKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -148,11 +148,15 @@ public void testInvalidRequestInTokenizeMethod() { skyflowClient.vault().tokenize(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.ColumnValuesKeyErrorTokenize.getMessage(), Constants.SDK_PREFIX), e.getMessage() ); + Assert.assertNull(e.getRequestId()); + Assert.assertNull(e.getGrpcCode()); + Assert.assertNull(e.getHttpStatus()); + Assert.assertNull(e.getDetails()); } } diff --git a/src/test/java/com/skyflow/vault/data/DeleteTests.java b/src/test/java/com/skyflow/vault/data/DeleteTests.java index 5f2eefc7..8cb43880 100644 --- a/src/test/java/com/skyflow/vault/data/DeleteTests.java +++ b/src/test/java/com/skyflow/vault/data/DeleteTests.java @@ -84,7 +84,7 @@ public void testNoIdsInDeleteRequestValidations() { Validations.validateDeleteRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.IdsKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -100,7 +100,7 @@ public void testEmptyIdsInDeleteRequestValidations() { Validations.validateDeleteRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyIds.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -117,7 +117,7 @@ public void testEmptyIdInIdsInDeleteRequestValidations() { Validations.validateDeleteRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyIdInIds.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -134,7 +134,7 @@ public void testNoTableInDeleteRequestValidations() { Validations.validateDeleteRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -151,7 +151,7 @@ public void testEmptyTableInDeleteRequestValidations() { Validations.validateDeleteRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyTable.getMessage(), Constants.SDK_PREFIX), e.getMessage() diff --git a/src/test/java/com/skyflow/vault/data/GetTests.java b/src/test/java/com/skyflow/vault/data/GetTests.java index 140990a7..f9fa98d9 100644 --- a/src/test/java/com/skyflow/vault/data/GetTests.java +++ b/src/test/java/com/skyflow/vault/data/GetTests.java @@ -148,7 +148,7 @@ public void testNoTableInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -164,7 +164,7 @@ public void testEmptyTableInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyTable.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -179,7 +179,7 @@ public void testEmptyIdsInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyIds.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -196,7 +196,7 @@ public void testEmptyIdInIdsInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyIdInIds.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -212,7 +212,7 @@ public void testEmptyFieldsInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyFields.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -230,7 +230,7 @@ public void testEmptyFieldInFieldsInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyFieldInFields.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -245,7 +245,7 @@ public void testNoRedactionInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.RedactionKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -262,7 +262,7 @@ public void testReturnTokensWithRedactionInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.RedactionWithTokensNotSupported.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -277,7 +277,7 @@ public void testReturnTokensWithColumnNameInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TokensGetColumnNotSupported.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -292,7 +292,7 @@ public void testReturnTokensWithColumnValuesInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TokensGetColumnNotSupported.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -309,7 +309,7 @@ public void testEmptyOffsetInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyOffset.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -326,7 +326,7 @@ public void testEmptyLimitInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyLimit.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -341,7 +341,7 @@ public void testNoIdsOrColumnNameInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.UniqueColumnOrIdsKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -359,7 +359,7 @@ public void testBothIdsAndColumnNameInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.BothIdsAndColumnDetailsSpecified.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -377,7 +377,7 @@ public void testBothIdsAndColumnValuesInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.BothIdsAndColumnDetailsSpecified.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -394,7 +394,7 @@ public void testColumnNameWithoutColumnValuesInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.ColumnValuesKeyErrorGet.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -411,7 +411,7 @@ public void testColumnValuesWithoutColumnNameInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.ColumnNameKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -428,7 +428,7 @@ public void testEmptyColumnNameInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyColumnName.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -445,7 +445,7 @@ public void testEmptyColumnValuesInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyColumnValues.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -464,7 +464,7 @@ public void testEmptyValueInColumnValuesInGetRequestValidations() { Validations.validateGetRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyValueInColumnValues.getMessage(), Constants.SDK_PREFIX), e.getMessage() diff --git a/src/test/java/com/skyflow/vault/data/InsertTests.java b/src/test/java/com/skyflow/vault/data/InsertTests.java index 50b1e5fc..87057d7c 100644 --- a/src/test/java/com/skyflow/vault/data/InsertTests.java +++ b/src/test/java/com/skyflow/vault/data/InsertTests.java @@ -117,7 +117,7 @@ public void testNoTableInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -132,7 +132,7 @@ public void testEmptyTableInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyTable.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -147,7 +147,7 @@ public void testNoValuesInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.ValuesKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -162,7 +162,7 @@ public void testEmptyValuesInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyValues.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -179,7 +179,7 @@ public void testEmptyKeyInValuesInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyKeyInValues.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -196,7 +196,7 @@ public void testEmptyValueInValuesInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyValueInValues.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -212,7 +212,7 @@ public void testEmptyUpsertInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyUpsert.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -230,7 +230,7 @@ public void testUpsertWithHomogenousInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.HomogenousNotSupportedWithUpsert.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -246,7 +246,7 @@ public void testTokensWithTokenStrictDisableInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TokensPassedForByotDisable.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -264,7 +264,7 @@ public void testNoTokensWithTokenStrictEnableInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE.toString()), e.getMessage() @@ -282,7 +282,7 @@ public void testNoTokensWithTokenStrictEnableStrictInInsertRequestValidations() Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE_STRICT.toString()), e.getMessage() @@ -300,7 +300,7 @@ public void testEmptyTokensWithTokenStrictEnableInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyTokens.getMessage(), e.getMessage()); } } @@ -316,7 +316,7 @@ public void testInsufficientTokensWithTokenStrictEnableStrictInInsertRequestVali Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage(), e.getMessage()); } } @@ -333,7 +333,7 @@ public void testInsufficientTokensWithTokenStrictEnableStrictInInsertRequestVali Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage(), e.getMessage()); } } @@ -350,7 +350,7 @@ public void testTokenValueMismatchInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.MismatchOfFieldsAndTokens.getMessage(), e.getMessage()); } } @@ -367,7 +367,7 @@ public void testEmptyKeyInTokensInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyKeyInTokens.getMessage(), e.getMessage()); } } @@ -384,7 +384,7 @@ public void testEmptyValueInTokensInInsertRequestValidations() { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyValueInTokens.getMessage(), e.getMessage()); } } diff --git a/src/test/java/com/skyflow/vault/data/QueryTests.java b/src/test/java/com/skyflow/vault/data/QueryTests.java index a84c9113..82b8499a 100644 --- a/src/test/java/com/skyflow/vault/data/QueryTests.java +++ b/src/test/java/com/skyflow/vault/data/QueryTests.java @@ -77,7 +77,7 @@ public void testNoQueryInQueryRequestValidations() { Validations.validateQueryRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.QueryKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -92,7 +92,7 @@ public void testEmptyQueryInQueryRequestValidations() { Validations.validateQueryRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyQuery.getMessage(), Constants.SDK_PREFIX), e.getMessage() diff --git a/src/test/java/com/skyflow/vault/data/UpdateTests.java b/src/test/java/com/skyflow/vault/data/UpdateTests.java index 22417257..e6c41db9 100644 --- a/src/test/java/com/skyflow/vault/data/UpdateTests.java +++ b/src/test/java/com/skyflow/vault/data/UpdateTests.java @@ -98,7 +98,7 @@ public void testNoSkyflowIdInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.SkyflowIdKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -113,7 +113,7 @@ public void testEmptySkyflowIdInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptySkyflowId.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -128,7 +128,7 @@ public void testNoTableInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -143,7 +143,7 @@ public void testEmptyTableInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyTable.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -158,7 +158,7 @@ public void testNoValuesInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.ValuesKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -173,7 +173,7 @@ public void testEmptyValuesInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyValues.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -191,7 +191,7 @@ public void testEmptyKeyInValuesInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyKeyInValues.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -209,7 +209,7 @@ public void testEmptyValueInValuesInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyValueInValues.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -229,7 +229,7 @@ public void testTokensWithTokenStrictDisableInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.TokensPassedForByotDisable.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -248,7 +248,7 @@ public void testNoTokensWithTokenStrictEnableInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE.toString()), e.getMessage() @@ -267,7 +267,7 @@ public void testNoTokensWithTokenStrictEnableStrictInUpdateRequestValidations() Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE_STRICT.toString()), e.getMessage() @@ -286,7 +286,7 @@ public void testEmptyTokensWithTokenStrictEnableInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyTokens.getMessage(), e.getMessage()); } } @@ -303,7 +303,7 @@ public void testInsufficientTokensWithTokenStrictEnableStrictInUpdateRequestVali Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage(), e.getMessage()); } } @@ -321,7 +321,7 @@ public void testTokenValueMismatchInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.MismatchOfFieldsAndTokens.getMessage(), e.getMessage()); } } @@ -339,7 +339,7 @@ public void testEmptyKeyInTokensInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyKeyInTokens.getMessage(), e.getMessage()); } } @@ -357,7 +357,7 @@ public void testEmptyValueInTokensInUpdateRequestValidations() { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyValueInTokens.getMessage(), e.getMessage()); } } diff --git a/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java b/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java index d569cbc9..3fe57faa 100644 --- a/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java +++ b/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java @@ -53,7 +53,7 @@ public void testNoTokensInDetokenizeRequestValidations() { Validations.validateDetokenizeRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.InvalidDataTokens.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -70,7 +70,7 @@ public void testEmptyTokensInDetokenizeRequestValidations() { Validations.validateDetokenizeRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyDataTokens.getMessage(), Constants.SDK_PREFIX), e.getMessage() @@ -89,7 +89,7 @@ public void testEmptyTokenInTokensInDetokenizeRequestValidations() { Validations.validateDetokenizeRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( Utils.parameterizedString(ErrorMessage.EmptyTokenInDataTokens.getMessage(), Constants.SDK_PREFIX), e.getMessage() diff --git a/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java b/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java index 1f4360b2..850553f4 100644 --- a/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java +++ b/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java @@ -76,7 +76,7 @@ public void testNoColumnValuesInTokenizeRequestValidations() { Validations.validateTokenizeRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.ColumnValuesKeyErrorTokenize.getMessage(), e.getMessage()); } } @@ -88,7 +88,7 @@ public void testEmptyColumnValuesInTokenizeRequestValidations() { Validations.validateTokenizeRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyColumnValues.getMessage(), e.getMessage()); } } @@ -102,7 +102,7 @@ public void testEmptyColumnValueInColumnValuesInTokenizeRequestValidations() { Validations.validateTokenizeRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyValueInColumnValues.getMessage(), e.getMessage()); } } @@ -116,7 +116,7 @@ public void testEmptyColumnGroupInColumnValuesInTokenizeRequestValidations() { Validations.validateTokenizeRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { - Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getCode()); + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals(ErrorMessage.EmptyColumnGroupInColumnValue.getMessage(), e.getMessage()); } } From 9ec99b4b7b235f0cea6438e42598b4b7eb976eee Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Tue, 19 Nov 2024 18:38:53 +0530 Subject: [PATCH 50/68] SK-1623 Fix minor issues in Java SDK v2 --- .../java/com/skyflow/ConnectionClient.java | 4 +- src/main/java/com/skyflow/VaultClient.java | 4 +- .../java/com/skyflow/errors/ErrorMessage.java | 191 +++++++++--------- 3 files changed, 99 insertions(+), 100 deletions(-) diff --git a/src/main/java/com/skyflow/ConnectionClient.java b/src/main/java/com/skyflow/ConnectionClient.java index 40fd741a..72a70fef 100644 --- a/src/main/java/com/skyflow/ConnectionClient.java +++ b/src/main/java/com/skyflow/ConnectionClient.java @@ -24,7 +24,6 @@ protected ConnectionClient(ConnectionConfig connectionConfig, Credentials creden super(); this.connectionConfig = connectionConfig; this.commonCredentials = credentials; - prioritiseCredentials(); } protected ConnectionConfig getConnectionConfig() { @@ -41,11 +40,12 @@ protected void updateConnectionConfig(ConnectionConfig connectionConfig) { } protected void setBearerToken() throws SkyflowException { + prioritiseCredentials(); Validations.validateCredentials(this.finalCredentials); if (this.finalCredentials.getApiKey() != null) { setApiKey(); return; - } else if (token == null || Token.isExpired(token)) { + } else if (Token.isExpired(token)) { LogUtil.printInfoLog(InfoLogs.BEARER_TOKEN_EXPIRED.getLog()); token = Utils.generateBearerToken(this.finalCredentials); } else { diff --git a/src/main/java/com/skyflow/VaultClient.java b/src/main/java/com/skyflow/VaultClient.java index b1acbdad..55a16024 100644 --- a/src/main/java/com/skyflow/VaultClient.java +++ b/src/main/java/com/skyflow/VaultClient.java @@ -48,7 +48,6 @@ protected VaultClient(VaultConfig vaultConfig, Credentials credentials) { this.tokensApi = new TokensApi(this.apiClient); this.queryApi = new QueryApi(this.apiClient); updateVaultURL(); - prioritiseCredentials(); } protected RecordsApi getRecordsApi() { @@ -168,11 +167,12 @@ protected V1TokenizePayload getTokenizePayload(TokenizeRequest request) { } protected void setBearerToken() throws SkyflowException { + prioritiseCredentials(); Validations.validateCredentials(this.finalCredentials); if (this.finalCredentials.getApiKey() != null) { setApiKey(); return; - } else if (token == null || Token.isExpired(token)) { + } else if (Token.isExpired(token)) { LogUtil.printInfoLog(InfoLogs.BEARER_TOKEN_EXPIRED.getLog()); token = Utils.generateBearerToken(this.finalCredentials); } else { diff --git a/src/main/java/com/skyflow/errors/ErrorMessage.java b/src/main/java/com/skyflow/errors/ErrorMessage.java index f44427fb..c7ac207a 100644 --- a/src/main/java/com/skyflow/errors/ErrorMessage.java +++ b/src/main/java/com/skyflow/errors/ErrorMessage.java @@ -1,132 +1,131 @@ package com.skyflow.errors; import com.skyflow.utils.Constants; -import com.skyflow.utils.Utils; public enum ErrorMessage { // client initialization - VaultIdAlreadyInConfigList("%s1 Validation error. VaultId is present in an existing config. Specify a new vaultId in config."), - VaultIdNotInConfigList("%s1 Validation error. VaultId is missing from the config. Specify the vaultIds from configs."), - ConnectionIdAlreadyInConfigList("%s1 Validation error. ConnectionId is present in an existing config. Specify a connectionId in config."), - ConnectionIdNotInConfigList("%s1 Validation error. ConnectionId is missing from the config. Specify the connectionIds from configs."), - EmptyCredentials("%s1 Validation error. Invalid credentials. Specify a valid credentials."), + VaultIdAlreadyInConfigList("%s0 Validation error. VaultId is present in an existing config. Specify a new vaultId in config."), + VaultIdNotInConfigList("%s0 Validation error. VaultId is missing from the config. Specify the vaultIds from configs."), + ConnectionIdAlreadyInConfigList("%s0 Validation error. ConnectionId is present in an existing config. Specify a connectionId in config."), + ConnectionIdNotInConfigList("%s0 Validation error. ConnectionId is missing from the config. Specify the connectionIds from configs."), + EmptyCredentials("%s0 Validation error. Invalid credentials. Specify a valid credentials."), // vault config - InvalidVaultId("%s1 Initialization failed. Invalid vault ID. Specify a valid vault ID."), - EmptyVaultId("%s1 Initialization failed. Invalid vault ID. Vault ID must not be empty."), - InvalidClusterId("%s1 Initialization failed. Invalid cluster ID. Specify cluster ID."), - EmptyClusterId("%s1 Initialization failed. Invalid cluster ID. Specify a valid cluster ID."), + InvalidVaultId("%s0 Initialization failed. Invalid vault ID. Specify a valid vault ID."), + EmptyVaultId("%s0 Initialization failed. Invalid vault ID. Vault ID must not be empty."), + InvalidClusterId("%s0 Initialization failed. Invalid cluster ID. Specify cluster ID."), + EmptyClusterId("%s0 Initialization failed. Invalid cluster ID. Specify a valid cluster ID."), // connection config - InvalidConnectionId("%s1 Initialization failed. Invalid connection ID. Specify a valid connection ID."), - EmptyConnectionId("%s1 Initialization failed. Invalid connection ID. Connection ID must not be empty."), - InvalidConnectionUrl("%s1 Initialization failed. Invalid connection URL. Specify a valid connection URL."), - EmptyConnectionUrl("%s1 Initialization failed. Invalid connection URL. Connection URL must not be empty."), - InvalidConnectionUrlFormat("%s1 Initialization failed. Connection URL is not a valid URL. Specify a valid connection URL."), + InvalidConnectionId("%s0 Initialization failed. Invalid connection ID. Specify a valid connection ID."), + EmptyConnectionId("%s0 Initialization failed. Invalid connection ID. Connection ID must not be empty."), + InvalidConnectionUrl("%s0 Initialization failed. Invalid connection URL. Specify a valid connection URL."), + EmptyConnectionUrl("%s0 Initialization failed. Invalid connection URL. Connection URL must not be empty."), + InvalidConnectionUrlFormat("%s0 Initialization failed. Connection URL is not a valid URL. Specify a valid connection URL."), // credentials - MultipleTokenGenerationMeansPassed("%s1 Initialization failed. Invalid credentials. Specify only one from 'path', 'credentialsString', 'token' or 'apiKey'."), - NoTokenGenerationMeansPassed("%s1 Initialization failed. Invalid credentials. Specify any one from 'path', 'credentialsString', 'token' or 'apiKey'."), - EmptyCredentialFilePath("%s1 Initialization failed. Invalid credentials. Credentials file path must not be empty."), - EmptyCredentialsString("%s1 Initialization failed. Invalid credentials. Credentials string must not be empty."), - EmptyToken("%s1 Initialization failed. Invalid credentials. Token mut not be empty."), - EmptyApikey("%s1 Initialization failed. Invalid credentials. Api key must not be empty."), - InvalidApikey("%s1 Initialization failed. Invalid credentials. Specify valid api key."), - EmptyRoles("%s1 Initialization failed. Invalid roles. Specify at least one role."), - EmptyRoleInRoles("%s1 Initialization failed. Invalid role. Specify a valid role."), - EmptyContext("%s1 Initialization failed. Invalid context. Specify a valid context."), + MultipleTokenGenerationMeansPassed("%s0 Initialization failed. Invalid credentials. Specify only one from 'path', 'credentialsString', 'token' or 'apiKey'."), + NoTokenGenerationMeansPassed("%s0 Initialization failed. Invalid credentials. Specify any one from 'path', 'credentialsString', 'token' or 'apiKey'."), + EmptyCredentialFilePath("%s0 Initialization failed. Invalid credentials. Credentials file path must not be empty."), + EmptyCredentialsString("%s0 Initialization failed. Invalid credentials. Credentials string must not be empty."), + EmptyToken("%s0 Initialization failed. Invalid credentials. Token mut not be empty."), + EmptyApikey("%s0 Initialization failed. Invalid credentials. Api key must not be empty."), + InvalidApikey("%s0 Initialization failed. Invalid credentials. Specify valid api key."), + EmptyRoles("%s0 Initialization failed. Invalid roles. Specify at least one role."), + EmptyRoleInRoles("%s0 Initialization failed. Invalid role. Specify a valid role."), + EmptyContext("%s0 Initialization failed. Invalid context. Specify a valid context."), // bearer token generation - FileNotFound("%s1 Initialization failed. Credential file not found at %s2. Verify the file path."), - FileInvalidJson("%s1 Initialization failed. File at %s2 is not in valid JSON format. Verify the file contents."), - CredentialsStringInvalidJson("%s1 Initialization failed. Credentials string is not in valid JSON format. Verify the credentials string contents."), - InvalidCredentials("%s1 Initialization failed. Invalid credentials provided. Specify valid credentials."), - MissingPrivateKey("%s1 Initialization failed. Unable to read private key in credentials. Verify your private key."), - MissingClientId("%s1 Initialization failed. Unable to read client ID in credentials. Verify your client ID."), - MissingKeyId("%s1 Initialization failed. Unable to read key ID in credentials. Verify your key ID."), - MissingTokenUri("%s1 Initialization failed. Unable to read token URI in credentials. Verify your token URI."), - InvalidTokenUri("%s1 Initialization failed. Token URI in not a valid URL in credentials. Verify your token URI."), - JwtInvalidFormat("%s1 Initialization failed. Invalid private key format. Verify your credentials."), - InvalidAlgorithm("%s1 Initialization failed. Invalid algorithm to parse private key. Specify valid algorithm."), - InvalidKeySpec("%s1 Initialization failed. Unable to parse RSA private key. Verify your credentials."), - JwtDecodeError("%s1 Validation error. Invalid access token. Verify your credentials."), - MissingAccessToken("%s1 Validation error. Access token not present in the response from bearer token generation. Verify your credentials."), - MissingTokenType("%s1 Validation error. Token type not present in the response from bearer token generation. Verify your credentials."), + FileNotFound("%s0 Initialization failed. Credential file not found at %s1. Verify the file path."), + FileInvalidJson("%s0 Initialization failed. File at %s1 is not in valid JSON format. Verify the file contents."), + CredentialsStringInvalidJson("%s0 Initialization failed. Credentials string is not in valid JSON format. Verify the credentials string contents."), + InvalidCredentials("%s0 Initialization failed. Invalid credentials provided. Specify valid credentials."), + MissingPrivateKey("%s0 Initialization failed. Unable to read private key in credentials. Verify your private key."), + MissingClientId("%s0 Initialization failed. Unable to read client ID in credentials. Verify your client ID."), + MissingKeyId("%s0 Initialization failed. Unable to read key ID in credentials. Verify your key ID."), + MissingTokenUri("%s0 Initialization failed. Unable to read token URI in credentials. Verify your token URI."), + InvalidTokenUri("%s0 Initialization failed. Token URI in not a valid URL in credentials. Verify your token URI."), + JwtInvalidFormat("%s0 Initialization failed. Invalid private key format. Verify your credentials."), + InvalidAlgorithm("%s0 Initialization failed. Invalid algorithm to parse private key. Specify valid algorithm."), + InvalidKeySpec("%s0 Initialization failed. Unable to parse RSA private key. Verify your credentials."), + JwtDecodeError("%s0 Validation error. Invalid access token. Verify your credentials."), + MissingAccessToken("%s0 Validation error. Access token not present in the response from bearer token generation. Verify your credentials."), + MissingTokenType("%s0 Validation error. Token type not present in the response from bearer token generation. Verify your credentials."), // insert - TableKeyError("%s1 Validation error. 'table' key is missing from the payload. Specify a 'table' key."), - EmptyTable("%s1 Validation error. 'table' can't be empty. Specify a table."), - ValuesKeyError("%s1 Validation error. 'values' key is missing from the payload. Specify a 'values' key."), - EmptyValues("%s1 Validation error. 'values' can't be empty. Specify values."), - EmptyKeyInValues("%s1 Validation error. Invalid key in values. Specify a valid key."), - EmptyValueInValues("%s1 Validation error. Invalid value in values. Specify a valid value."), - TokensKeyError("%s1 Validation error. 'tokens' key is missing from the payload. Specify a 'tokens' key."), - EmptyTokens("%s1 Validation error. The 'tokens' field is empty. Specify tokens for one or more fields."), - EmptyKeyInTokens("%s1 Validation error. Invalid key tokens. Specify a valid key."), - EmptyValueInTokens("%s1 Validation error. Invalid value in tokens. Specify a valid value."), - EmptyUpsert("%s1 Validation error. 'upsert' key can't be empty. Specify an upsert column."), - HomogenousNotSupportedWithUpsert("%s1 Validation error. 'homogenous' is not supported with 'upsert'. Specify either 'homogenous' or 'upsert'."), - TokensPassedForByotDisable("%s1 Validation error. 'tokenStrict' wasn't specified. Set 'tokenStrict' to 'ENABLE' to insert tokens."), - NoTokensWithByot("%s1 Validation error. Tokens weren't specified for records while 'tokenStrict' was %s2. Specify tokens."), - MismatchOfFieldsAndTokens("%s1 Validation error. 'fields' and 'tokens' have different columns names. Verify that 'fields' and 'tokens' columns match."), - InsufficientTokensPassedForByotEnableStrict("%s1 Validation error. 'tokenStrict' is set to 'ENABLE_STRICT', but some fields are missing tokens. Specify tokens for all fields."), - BatchInsertPartialSuccess("%s1 Insert operation completed with partial success."), - BatchInsertFailure("%s1 Insert operation failed."), + TableKeyError("%s0 Validation error. 'table' key is missing from the payload. Specify a 'table' key."), + EmptyTable("%s0 Validation error. 'table' can't be empty. Specify a table."), + ValuesKeyError("%s0 Validation error. 'values' key is missing from the payload. Specify a 'values' key."), + EmptyValues("%s0 Validation error. 'values' can't be empty. Specify values."), + EmptyKeyInValues("%s0 Validation error. Invalid key in values. Specify a valid key."), + EmptyValueInValues("%s0 Validation error. Invalid value in values. Specify a valid value."), + TokensKeyError("%s0 Validation error. 'tokens' key is missing from the payload. Specify a 'tokens' key."), + EmptyTokens("%s0 Validation error. The 'tokens' field is empty. Specify tokens for one or more fields."), + EmptyKeyInTokens("%s0 Validation error. Invalid key tokens. Specify a valid key."), + EmptyValueInTokens("%s0 Validation error. Invalid value in tokens. Specify a valid value."), + EmptyUpsert("%s0 Validation error. 'upsert' key can't be empty. Specify an upsert column."), + HomogenousNotSupportedWithUpsert("%s0 Validation error. 'homogenous' is not supported with 'upsert'. Specify either 'homogenous' or 'upsert'."), + TokensPassedForByotDisable("%s0 Validation error. 'tokenStrict' wasn't specified. Set 'tokenStrict' to 'ENABLE' to insert tokens."), + NoTokensWithByot("%s0 Validation error. Tokens weren't specified for records while 'tokenStrict' was %s1. Specify tokens."), + MismatchOfFieldsAndTokens("%s0 Validation error. 'fields' and 'tokens' have different columns names. Verify that 'fields' and 'tokens' columns match."), + InsufficientTokensPassedForByotEnableStrict("%s0 Validation error. 'tokenStrict' is set to 'ENABLE_STRICT', but some fields are missing tokens. Specify tokens for all fields."), + BatchInsertPartialSuccess("%s0 Insert operation completed with partial success."), + BatchInsertFailure("%s0 Insert operation failed."), // detokenize - InvalidDataTokens("%s1 Validation error. Invalid data tokens. Specify valid data tokens."), - EmptyDataTokens("%s1 Validation error. Invalid data tokens. Specify at least one data token."), - EmptyTokenInDataTokens("%s1 Validation error. Invalid data tokens. Specify a valid data token."), + InvalidDataTokens("%s0 Validation error. Invalid data tokens. Specify valid data tokens."), + EmptyDataTokens("%s0 Validation error. Invalid data tokens. Specify at least one data token."), + EmptyTokenInDataTokens("%s0 Validation error. Invalid data tokens. Specify a valid data token."), // get interface - IdsKeyError("%s1 Validation error. 'ids' key is missing from the payload. Specify an 'ids' key."), - EmptyIds("%s1 Validation error. 'ids' can't be empty. Specify at least one id."), - EmptyIdInIds("%s1 Validation error. Invalid id in 'ids'. Specify a valid id."), - EmptyFields("%s1 Validation error. Fields are empty in get payload. Specify at least one field."), - EmptyFieldInFields("%s1 Validation error. Invalid field in 'fields'. Specify a valid field."), - RedactionKeyError("%s1 Validation error. 'redaction' key is missing from the payload. Specify a 'redaction' key."), - RedactionWithTokensNotSupported("%s1 Validation error. 'redaction' can't be used when 'returnTokens' is specified. Remove 'redaction' from payload if 'returnTokens' is specified."), - TokensGetColumnNotSupported("%s1 Validation error. Column name and/or column values can't be used when 'returnTokens' is specified. Remove unique column values or 'returnTokens' from the payload."), - EmptyOffset("%s1 Validation error. 'offset' can't be empty. Specify an offset."), - EmptyLimit("%s1 Validation error. 'limit' can't be empty. Specify a limit."), - UniqueColumnOrIdsKeyError("%s1 Validation error. 'ids' or 'columnName' key is missing from the payload. Specify the ids or unique 'columnName' in payload."), - BothIdsAndColumnDetailsSpecified("%s1 Validation error. Both Skyflow IDs and column details can't be specified. Either specify Skyflow IDs or unique column details."), - ColumnNameKeyError("%s1 Validation error. 'columnName' isn't specified whereas 'columnValues' are specified. Either add 'columnName' or remove 'columnValues'."), - EmptyColumnName("%s1 Validation error. 'columnName' can't be empty. Specify a column name."), - ColumnValuesKeyErrorGet("%s1 Validation error. 'columnValues' aren't specified whereas 'columnName' is specified. Either add 'columnValues' or remove 'columnName'."), - EmptyColumnValues("%s1 Validation error. 'columnValues' can't be empty. Specify at least one column value"), - EmptyValueInColumnValues("%s1 Validation error. Invalid value in column values. Specify a valid column value."), - - TokenKeyError("%s1 Validation error. 'token' key is missing from the payload. Specify a 'token' key."), - PartialSuccess("%s1 Validation error. Check 'SkyflowError.data' for details."), + IdsKeyError("%s0 Validation error. 'ids' key is missing from the payload. Specify an 'ids' key."), + EmptyIds("%s0 Validation error. 'ids' can't be empty. Specify at least one id."), + EmptyIdInIds("%s0 Validation error. Invalid id in 'ids'. Specify a valid id."), + EmptyFields("%s0 Validation error. Fields are empty in get payload. Specify at least one field."), + EmptyFieldInFields("%s0 Validation error. Invalid field in 'fields'. Specify a valid field."), + RedactionKeyError("%s0 Validation error. 'redaction' key is missing from the payload. Specify a 'redaction' key."), + RedactionWithTokensNotSupported("%s0 Validation error. 'redaction' can't be used when 'returnTokens' is specified. Remove 'redaction' from payload if 'returnTokens' is specified."), + TokensGetColumnNotSupported("%s0 Validation error. Column name and/or column values can't be used when 'returnTokens' is specified. Remove unique column values or 'returnTokens' from the payload."), + EmptyOffset("%s0 Validation error. 'offset' can't be empty. Specify an offset."), + EmptyLimit("%s0 Validation error. 'limit' can't be empty. Specify a limit."), + UniqueColumnOrIdsKeyError("%s0 Validation error. 'ids' or 'columnName' key is missing from the payload. Specify the ids or unique 'columnName' in payload."), + BothIdsAndColumnDetailsSpecified("%s0 Validation error. Both Skyflow IDs and column details can't be specified. Either specify Skyflow IDs or unique column details."), + ColumnNameKeyError("%s0 Validation error. 'columnName' isn't specified whereas 'columnValues' are specified. Either add 'columnName' or remove 'columnValues'."), + EmptyColumnName("%s0 Validation error. 'columnName' can't be empty. Specify a column name."), + ColumnValuesKeyErrorGet("%s0 Validation error. 'columnValues' aren't specified whereas 'columnName' is specified. Either add 'columnValues' or remove 'columnName'."), + EmptyColumnValues("%s0 Validation error. 'columnValues' can't be empty. Specify at least one column value"), + EmptyValueInColumnValues("%s0 Validation error. Invalid value in column values. Specify a valid column value."), + + TokenKeyError("%s0 Validation error. 'token' key is missing from the payload. Specify a 'token' key."), + PartialSuccess("%s0 Validation error. Check 'SkyflowError.data' for details."), // update - SkyflowIdKeyError("%s1 Validation error. 'id' key is missing from the payload. Specify an 'id' key."), - EmptySkyflowId("%s1 Validation error. 'id' can't be empty. Specify an id."), + SkyflowIdKeyError("%s0 Validation error. 'id' key is missing from the payload. Specify an 'id' key."), + EmptySkyflowId("%s0 Validation error. 'id' can't be empty. Specify an id."), // query - QueryKeyError("%s1 Validation error. 'query' key is missing from the payload. Specify a 'query' key."), - EmptyQuery("%s1 Validation error. 'query' can't be empty. Specify a query"), + QueryKeyError("%s0 Validation error. 'query' key is missing from the payload. Specify a 'query' key."), + EmptyQuery("%s0 Validation error. 'query' can't be empty. Specify a query"), // tokenize - ColumnValuesKeyErrorTokenize("%s1 Validation error. 'columnValues' key is missing from the payload. Specify a 'columnValues' key."), - EmptyColumnGroupInColumnValue("%s1 Validation error. Invalid column group in column value. Specify a valid column group."), + ColumnValuesKeyErrorTokenize("%s0 Validation error. 'columnValues' key is missing from the payload. Specify a 'columnValues' key."), + EmptyColumnGroupInColumnValue("%s0 Validation error. Invalid column group in column value. Specify a valid column group."), // connection - InvalidRequestHeaders("%s1 Validation error. Request headers aren't valid. Specify valid request headers."), - EmptyRequestHeaders("%s1 Validation error. Request headers are empty. Specify valid ."), - InvalidPathParams("%s1 Validation error. Path parameters aren't valid. Specify valid path parameters."), - EmptyPathParams("%s1 Validation error. Path parameters are empty. Specify valid path parameters."), - InvalidQueryParams("%s1 Validation error. Query parameters aren't valid. Specify valid query parameters."), - EmptyQueryParams("%s1 Validation error. Query parameters are empty. Specify valid query parameters."), - InvalidRequestBody("%s1 Validation error. Invalid request body. Specify the request body as an object."), - EmptyRequestBody("%s1 Validation error. Request body can't be empty. Specify a valid request body."), + InvalidRequestHeaders("%s0 Validation error. Request headers aren't valid. Specify valid request headers."), + EmptyRequestHeaders("%s0 Validation error. Request headers are empty. Specify valid ."), + InvalidPathParams("%s0 Validation error. Path parameters aren't valid. Specify valid path parameters."), + EmptyPathParams("%s0 Validation error. Path parameters are empty. Specify valid path parameters."), + InvalidQueryParams("%s0 Validation error. Query parameters aren't valid. Specify valid query parameters."), + EmptyQueryParams("%s0 Validation error. Query parameters are empty. Specify valid query parameters."), + InvalidRequestBody("%s0 Validation error. Invalid request body. Specify the request body as an object."), + EmptyRequestBody("%s0 Validation error. Request body can't be empty. Specify a valid request body."), ; private final String message; ErrorMessage(String message) { - this.message = Utils.parameterizedString(message, Constants.SDK_PREFIX); + this.message = message.replace("%s0", Constants.SDK_PREFIX); } public String getMessage() { From b2b06c1936b78acffc0e5607a3297948eb7a0acb Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Tue, 19 Nov 2024 19:15:29 +0530 Subject: [PATCH 51/68] SK-1685 Add samples for Java SDK v2 - Added samples for vault API interfaces - Added sample for invoke connection interface --- ...rerTokenGenerationUsingThreadsExample.java | 48 ----------- ...arerTokenWithContextGenerationExample.java | 46 ----------- .../main/java/com/example/DeleteExample.java | 72 ----------------- .../java/com/example/DetokenizeExample.java | 71 ---------------- .../main/java/com/example/GetByIdExample.java | 66 --------------- .../src/main/java/com/example/GetExample.java | 74 ----------------- .../java/com/example/InsertBulkExample.java | 58 ------------- .../example/InsertBulkWithUpsertExample.java | 69 ---------------- .../main/java/com/example/InsertExample.java | 66 --------------- .../InsertWithContinueOnErrorExample.java | 69 ---------------- .../com/example/InsertWithUpsertExample.java | 71 ---------------- .../com/example/InvokeConnectionExample.java | 65 --------------- .../main/java/com/example/QueryExample.java | 57 ------------- .../example/ScopedTokenGenerationExample.java | 28 ------- .../example/SignedTokenGenerationExample.java | 53 ------------ .../com/example/TokenGenerationExample.java | 40 --------- .../main/java/com/example/UpdateExample.java | 59 -------------- .../connection/InvokeConnectionExample.java | 68 ++++++++++++++++ .../java/com/example/vault/DeleteExample.java | 52 ++++++++++++ .../com/example/vault/DetokenizeExample.java | 59 ++++++++++++++ .../java/com/example/vault/GetExample.java | 58 +++++++++++++ .../java/com/example/vault/InsertExample.java | 81 +++++++++++++++++++ .../java/com/example/vault/QueryExample.java | 49 +++++++++++ .../com/example/vault/TokenizeExample.java | 60 ++++++++++++++ .../java/com/example/vault/UpdateExample.java | 73 +++++++++++++++++ 25 files changed, 500 insertions(+), 1012 deletions(-) delete mode 100644 samples/src/main/java/com/example/BearerTokenGenerationUsingThreadsExample.java delete mode 100644 samples/src/main/java/com/example/BearerTokenWithContextGenerationExample.java delete mode 100644 samples/src/main/java/com/example/DeleteExample.java delete mode 100644 samples/src/main/java/com/example/DetokenizeExample.java delete mode 100644 samples/src/main/java/com/example/GetByIdExample.java delete mode 100644 samples/src/main/java/com/example/GetExample.java delete mode 100644 samples/src/main/java/com/example/InsertBulkExample.java delete mode 100644 samples/src/main/java/com/example/InsertBulkWithUpsertExample.java delete mode 100644 samples/src/main/java/com/example/InsertExample.java delete mode 100644 samples/src/main/java/com/example/InsertWithContinueOnErrorExample.java delete mode 100644 samples/src/main/java/com/example/InsertWithUpsertExample.java delete mode 100644 samples/src/main/java/com/example/InvokeConnectionExample.java delete mode 100644 samples/src/main/java/com/example/QueryExample.java delete mode 100644 samples/src/main/java/com/example/ScopedTokenGenerationExample.java delete mode 100644 samples/src/main/java/com/example/SignedTokenGenerationExample.java delete mode 100644 samples/src/main/java/com/example/TokenGenerationExample.java delete mode 100644 samples/src/main/java/com/example/UpdateExample.java create mode 100644 samples/src/main/java/com/example/connection/InvokeConnectionExample.java create mode 100644 samples/src/main/java/com/example/vault/DeleteExample.java create mode 100644 samples/src/main/java/com/example/vault/DetokenizeExample.java create mode 100644 samples/src/main/java/com/example/vault/GetExample.java create mode 100644 samples/src/main/java/com/example/vault/InsertExample.java create mode 100644 samples/src/main/java/com/example/vault/QueryExample.java create mode 100644 samples/src/main/java/com/example/vault/TokenizeExample.java create mode 100644 samples/src/main/java/com/example/vault/UpdateExample.java diff --git a/samples/src/main/java/com/example/BearerTokenGenerationUsingThreadsExample.java b/samples/src/main/java/com/example/BearerTokenGenerationUsingThreadsExample.java deleted file mode 100644 index 718aa21e..00000000 --- a/samples/src/main/java/com/example/BearerTokenGenerationUsingThreadsExample.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.example; - -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.BearerToken; - -import java.io.File; - -public class BearerTokenGenerationUsingThreadsExample { - public static void main(String args[]) { - - String bearerToken = null; - - // Generate BearerToken with context by specifying credentials.json file path - try { - String filePath = ""; - final BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(new File(filePath)) - .setCtx("abc") - .build(); - - Thread t = new Thread(new Runnable() { - @Override - public void run() { - - for (int i = 0; i < 5; i++) { - try { - System.out.println(token.getBearerToken()); - } catch (SkyflowException e) { - Thread.currentThread().interrupt(); - throw new RuntimeException(e); - - } - - } - } - }); - - t.start(); - - } catch (Exception e) { - e.printStackTrace(); - } - - } -} diff --git a/samples/src/main/java/com/example/BearerTokenWithContextGenerationExample.java b/samples/src/main/java/com/example/BearerTokenWithContextGenerationExample.java deleted file mode 100644 index 668b7c81..00000000 --- a/samples/src/main/java/com/example/BearerTokenWithContextGenerationExample.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.example; - -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.BearerToken; - -import java.io.File; - -public class BearerTokenWithContextGenerationExample { - public static void main(String args[]) { - - String bearerToken = null; - - // Generate BearerToken with context by specifying credentials.json file path - try { - String filePath = ""; - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(new File(filePath)) - .setCtx("abc") - .build(); - - bearerToken = token.getBearerToken(); - System.out.println(bearerToken); - } catch (Exception e) { - e.printStackTrace(); - } - - // Generate BearerToken with context by specifying credentials.json as string - try { - String fileContents = ""; - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(fileContents) - .setCtx("abc") - .build(); - - bearerToken = token.getBearerToken(); - System.out.println(bearerToken); - - } catch (SkyflowException e) { - e.printStackTrace(); - } - - } -} diff --git a/samples/src/main/java/com/example/DeleteExample.java b/samples/src/main/java/com/example/DeleteExample.java deleted file mode 100644 index 9ee0fc28..00000000 --- a/samples/src/main/java/com/example/DeleteExample.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright (c) 2023 Skyflow, Inc. -*/ -package com.example; - -import com.skyflow.entities.ResponseToken; -import com.skyflow.entities.SkyflowConfiguration; -import com.skyflow.entities.TokenProvider; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - - -public class DeleteExample { - - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration( - "", - "", - new DemoTokenProvider() - ); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - - record.put("id", ""); - record.put("table", ""); - recordsArray.add(record); - JSONObject record2 = new JSONObject(); - - record2.put("id", ""); - record2.put("table", ""); - recordsArray.add(record2); - - records.put("records", recordsArray); - - JSONObject response = skyflowClient.delete(records); - System.out.println(response); - } catch (SkyflowException e) { - e.printStackTrace(); - System.out.println("error" + e.getData()); - } - - } - - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if (Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } -} diff --git a/samples/src/main/java/com/example/DetokenizeExample.java b/samples/src/main/java/com/example/DetokenizeExample.java deleted file mode 100644 index acc29287..00000000 --- a/samples/src/main/java/com/example/DetokenizeExample.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.example; - -import com.skyflow.entities.RedactionType; -import com.skyflow.entities.ResponseToken; -import com.skyflow.entities.SkyflowConfiguration; -import com.skyflow.entities.TokenProvider; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - - -public class DetokenizeExample { - - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration( - "", - "", - new DemoTokenProvider() - ); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record1 = new JSONObject(); - record1.put("token", ""); - record1.put("redaction", RedactionType.MASKED.toString()); - - JSONObject record2 = new JSONObject(); - record2.put("token", ""); // default Redaction "PLAIN_TEXT" will be applied for record2 - - recordsArray.add(record1); - recordsArray.add(record2); - records.put("records", recordsArray); - - JSONObject response = skyflowClient.detokenize(records); - System.out.println(response); - } catch (SkyflowException e) { - e.printStackTrace(); - System.out.println(e.getData()); - } - - } - - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if(Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } -} diff --git a/samples/src/main/java/com/example/GetByIdExample.java b/samples/src/main/java/com/example/GetByIdExample.java deleted file mode 100644 index b3576fb3..00000000 --- a/samples/src/main/java/com/example/GetByIdExample.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.example; - -import com.skyflow.entities.RedactionType; -import com.skyflow.entities.ResponseToken; -import com.skyflow.entities.SkyflowConfiguration; -import com.skyflow.entities.TokenProvider; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - - -public class GetByIdExample { - - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration("", - "", new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - JSONArray ids = new JSONArray(); - ids.add(""); - - record.put("ids", ids); - record.put("table", ""); - record.put("redaction", RedactionType.PLAIN_TEXT.toString()); - recordsArray.add(record); - records.put("records", recordsArray); - - JSONObject response = skyflowClient.getById(records); - } catch (SkyflowException e) { - e.printStackTrace(); - System.out.println(e.getData()); - } - - } - - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if(Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } -} diff --git a/samples/src/main/java/com/example/GetExample.java b/samples/src/main/java/com/example/GetExample.java deleted file mode 100644 index 76cf826a..00000000 --- a/samples/src/main/java/com/example/GetExample.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.example; - -import com.skyflow.entities.RedactionType; -import com.skyflow.entities.ResponseToken; -import com.skyflow.entities.SkyflowConfiguration; -import com.skyflow.entities.TokenProvider; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -public class GetExample { - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration("", - "", new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject firstRecord = new JSONObject(); - - JSONArray ids = new JSONArray(); - ids.add(""); - - firstRecord.put("ids", ids); - firstRecord.put("table", ""); - firstRecord.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - JSONObject secondRecord = new JSONObject(); - - JSONArray valuesArray = new JSONArray(); - valuesArray.add(""); - - secondRecord.put("table", ""); - secondRecord.put("columnName", ""); - secondRecord.put("columnValues", valuesArray); - secondRecord.put("redaction", RedactionType.PLAIN_TEXT.toString()); - - recordsArray.add(firstRecord); - recordsArray.add(secondRecord); - records.put("records", recordsArray); - - JSONObject response = skyflowClient.get(records); - } catch (SkyflowException e) { - e.printStackTrace(); - System.out.println(e.getData()); - } - - } - - static class DemoTokenProvider implements TokenProvider { - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if (Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } -} \ No newline at end of file diff --git a/samples/src/main/java/com/example/InsertBulkExample.java b/samples/src/main/java/com/example/InsertBulkExample.java deleted file mode 100644 index bb191c7c..00000000 --- a/samples/src/main/java/com/example/InsertBulkExample.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.example; - -import com.skyflow.entities.*; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -public class InsertBulkExample { - - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration("", - "", new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", ""); - - JSONObject fields = new JSONObject(); - fields.put("", ""); - record.put("fields", fields); - recordsArray.add(record); - records.put("records", recordsArray); - - JSONObject res = skyflowClient.insertBulk(records); - - System.out.println(res); - } catch (SkyflowException e) { - e.printStackTrace(); - } - - } - - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if(Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } -} \ No newline at end of file diff --git a/samples/src/main/java/com/example/InsertBulkWithUpsertExample.java b/samples/src/main/java/com/example/InsertBulkWithUpsertExample.java deleted file mode 100644 index 57272e15..00000000 --- a/samples/src/main/java/com/example/InsertBulkWithUpsertExample.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.example; - -import com.skyflow.entities.*; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - - -public class InsertBulkWithUpsertExample { - - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration("", - "", new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", ""); - - JSONObject fields = new JSONObject(); - fields.put(""); - - record.put("fields", fields); - recordsArray.add(record); - - records.put("records", recordsArray); - - // create an upsert option and insert in UpsertOptions array. - UpsertOption[] upsertOptions = new UpsertOption[1]; - upsertOptions[0] = new UpsertOption("", ""); - - // pass upsert options in insert method options. - InsertBulkOptions insertOptions = new InsertBulkOptions(true, upsertOptions); - JSONObject res = skyflowClient.insertBulk(records, insertOptions); - - System.out.println(res); - } catch (SkyflowException e) { - e.printStackTrace(); - } - - } - - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if (Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } -} diff --git a/samples/src/main/java/com/example/InsertExample.java b/samples/src/main/java/com/example/InsertExample.java deleted file mode 100644 index faada157..00000000 --- a/samples/src/main/java/com/example/InsertExample.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.example; - -import com.skyflow.entities.InsertOptions; -import com.skyflow.entities.ResponseToken; -import com.skyflow.entities.SkyflowConfiguration; -import com.skyflow.entities.TokenProvider; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -public class InsertExample { - - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration("", - "", new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", ""); - - JSONObject fields = new JSONObject(); - fields.put("", ""); - record.put("fields", fields); - recordsArray.add(record); - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(); - JSONObject res = skyflowClient.insert(records, insertOptions); - - System.out.println(res); - } catch (SkyflowException e) { - e.printStackTrace(); - } - - } - - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if(Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } -} diff --git a/samples/src/main/java/com/example/InsertWithContinueOnErrorExample.java b/samples/src/main/java/com/example/InsertWithContinueOnErrorExample.java deleted file mode 100644 index 21e7df2f..00000000 --- a/samples/src/main/java/com/example/InsertWithContinueOnErrorExample.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright (c) 2024 Skyflow, Inc. -*/ -import com.skyflow.entities.*; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -public class InsertWithContinueOnErrorExample { - - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration( - "", - "", - new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record1 = new JSONObject(); - record1.put("table", ""); - JSONObject fields = new JSONObject(); - fields.put("", ""); - record1.put("fields", fields); - - JSONObject record2 = new JSONObject(); - record2.put("table", ""); - JSONObject fields2 = new JSONObject(); - fields2.put("", ""); - record2.put("fields", fields2); - - recordsArray.add(record1); - recordsArray.add(record2); - records.put("records", recordsArray); - - InsertOptions insertOptions = new InsertOptions(true,true); - JSONObject insertResponse = skyflowClient.insert(records, insertOptions); - System.out.println(insertResponse); - } catch (SkyflowException e) { - System.out.println(e); - e.printStackTrace(); - } - } - - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if (Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } -} diff --git a/samples/src/main/java/com/example/InsertWithUpsertExample.java b/samples/src/main/java/com/example/InsertWithUpsertExample.java deleted file mode 100644 index 3ae13357..00000000 --- a/samples/src/main/java/com/example/InsertWithUpsertExample.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.example; - -import com.skyflow.entities.*; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -public class InsertWithUpsertExample { - - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration("", - "", new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - - JSONObject record = new JSONObject(); - record.put("table", ""); - - JSONObject fields = new JSONObject(); - fields.put(""); - - record.put("fields", fields); - recordsArray.add(record); - - records.put("records", recordsArray); - - // create an upsert option and insert in UpsertOptions array. - UpsertOption[] upsertOptions = new UpsertOption[1]; - upsertOptions[0] = new UpsertOption("", ""); - - // pass upsert options in insert method options. - InsertOptions insertOptions = new InsertOptions(true, upsertOptions); - JSONObject res = skyflowClient.insert(records, insertOptions); - - System.out.println(res); - } catch (SkyflowException e) { - e.printStackTrace(); - } - - } - - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if (Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } -} diff --git a/samples/src/main/java/com/example/InvokeConnectionExample.java b/samples/src/main/java/com/example/InvokeConnectionExample.java deleted file mode 100644 index 8f5eac28..00000000 --- a/samples/src/main/java/com/example/InvokeConnectionExample.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -import com.skyflow.entities.*; -import com.skyflow.vault.Skyflow; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -public class InvokeConnectionExample { - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if(Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } - - public static void main(String[] args) { - try { - SkyflowConfiguration config = new SkyflowConfiguration("", - "", new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - JSONObject testConfig = new JSONObject(); - testConfig.put("connectionURL", ""); - testConfig.put("methodName", RequestMethod.POST); - - JSONObject pathParamsJson = new JSONObject(); - pathParamsJson.put("", ""); - testConfig.put("pathParams", pathParamsJson); - - JSONObject queryParamsJson = new JSONObject(); - queryParamsJson.put("", ""); - testConfig.put("queryParams", queryParamsJson); - - JSONObject requestHeadersJson = new JSONObject(); - requestHeadersJson.put("", ""); - testConfig.put("requestHeader", requestHeadersJson); - - JSONObject requestBodyJson = new JSONObject(); - requestBodyJson.put("", ""); - testConfig.put("requestBody", requestBodyJson); - - JSONObject gatewayResponse = skyflowClient.invokeConnection(testConfig); - System.out.println(gatewayResponse); - - } catch (SkyflowException exception) { - exception.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/samples/src/main/java/com/example/QueryExample.java b/samples/src/main/java/com/example/QueryExample.java deleted file mode 100644 index 31d577c7..00000000 --- a/samples/src/main/java/com/example/QueryExample.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.example; - -import com.skyflow.entities.ResponseToken; -import com.skyflow.entities.SkyflowConfiguration; -import com.skyflow.entities.TokenProvider; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONObject; - -public class QueryExample { - - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration("", - "", new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject queryInput = new JSONObject(); - - queryInput.put("query", ""); - - JSONObject res = skyflowClient.query(queryInput); - - System.out.println(res); - } catch (SkyflowException e) { - System.out.println(e.getData()); - e.printStackTrace(); - } - - } - - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if(Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } -} \ No newline at end of file diff --git a/samples/src/main/java/com/example/ScopedTokenGenerationExample.java b/samples/src/main/java/com/example/ScopedTokenGenerationExample.java deleted file mode 100644 index ed4dda5f..00000000 --- a/samples/src/main/java/com/example/ScopedTokenGenerationExample.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.example; - -import com.skyflow.serviceaccount.util.BearerToken; -import java.io.File; - -public class ScopedTokenGenerationExample { - public static void main(String args[]) { - - String scopedToken = null; - - // Generate Scoped Token by specifying credentials.json file path - try { - String filePath = ""; - BearerToken token = new BearerToken.BearerTokenBuilder() - .setCredentials(new File(filePath)) - .setRoles(new String[]{"roleID"}) - .build(); - - scopedToken = token.getBearerToken(); - System.out.println(scopedToken); - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/samples/src/main/java/com/example/SignedTokenGenerationExample.java b/samples/src/main/java/com/example/SignedTokenGenerationExample.java deleted file mode 100644 index 1fde4236..00000000 --- a/samples/src/main/java/com/example/SignedTokenGenerationExample.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.example; - -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.SignedDataTokenResponse; -import com.skyflow.serviceaccount.util.SignedDataTokens; - -import java.io.File; -import java.util.List; - -public class SignedTokenGenerationExample { - public static void main(String args[]) { - - List signedTokenValue; - - // Generate Signed data token with context by specifying credentials.json file path - try { - String filePath = ""; - String context = "abc"; - SignedDataTokens signedToken = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials(new File(filePath)) - .setCtx(context) - .setTimeToLive(30) // in seconds - .setDataTokens(new String[]{"dataToken1"}).build(); - - signedTokenValue = signedToken.getSignedDataTokens(); - System.out.println(signedTokenValue); - } catch (Exception e) { - e.printStackTrace(); - } - - // Generate Signed data token with context by specifying credentials.json as string - try { - String fileContents = ""; - String context = "abc"; - SignedDataTokens signedToken = new SignedDataTokens.SignedDataTokensBuilder() - .setCredentials(fileContents) - .setCtx(context) - .setTimeToLive(30) // in seconds - .setDataTokens(new String[]{"dataToken1"}).build(); - - signedTokenValue = signedToken.getSignedDataTokens(); - System.out.println(signedTokenValue); - - } catch (SkyflowException e) { - e.printStackTrace(); - } - - - } -} diff --git a/samples/src/main/java/com/example/TokenGenerationExample.java b/samples/src/main/java/com/example/TokenGenerationExample.java deleted file mode 100644 index b4de6b87..00000000 --- a/samples/src/main/java/com/example/TokenGenerationExample.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - Copyright (c) 2022 Skyflow, Inc. -*/ -package com.example; - -import com.skyflow.entities.ResponseToken; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; - -public class TokenGenerationExample { - public static void main(String args[]) { - - String bearerToken = null; - - // Generate BearerToken by specifying credentials.json file path - try { - String filePath = ""; - if(Token.isExpired(bearerToken)) { - ResponseToken res = Token.generateBearerToken(filePath); - bearerToken = res.getAccessToken(); - } - System.out.println(bearerToken); - } catch (Exception e) { - e.printStackTrace(); - } - - // Generate BearerToken by specifying credentials.json as string - try { - String fileContents = ""; - if(Token.isExpired(bearerToken)) { - ResponseToken res = Token.generateBearerTokenFromCreds(fileContents); - bearerToken = res.getAccessToken(); - } - System.out.println(bearerToken); - } catch (SkyflowException e) { - e.printStackTrace(); - } - - } -} diff --git a/samples/src/main/java/com/example/UpdateExample.java b/samples/src/main/java/com/example/UpdateExample.java deleted file mode 100644 index 5e67d7ec..00000000 --- a/samples/src/main/java/com/example/UpdateExample.java +++ /dev/null @@ -1,59 +0,0 @@ -import com.skyflow.entities.*; -import com.skyflow.errors.SkyflowException; -import com.skyflow.serviceaccount.util.Token; -import com.skyflow.vault.Skyflow; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -public class UpdateExample { - public static void main(String[] args) { - - try { - SkyflowConfiguration config = new SkyflowConfiguration("", - "", new DemoTokenProvider()); - Skyflow skyflowClient = Skyflow.init(config); - - JSONObject records = new JSONObject(); - JSONArray recordsArray = new JSONArray(); - JSONObject record = new JSONObject(); - - record.put("table", ""); - record.put("id", ""); - - JSONObject fields = new JSONObject(); - fields.put("", ""); - record.put("fields", fields); - recordsArray.add(record); - records.put("records", recordsArray); - - UpdateOptions updateOptions = new UpdateOptions(true); - JSONObject res = skyflowClient.update(records, updateOptions); - - } - catch (SkyflowException e) { - System.out.println(e.getData()); - e.printStackTrace(); - } - } - static class DemoTokenProvider implements TokenProvider { - - private String bearerToken = null; - - @Override - public String getBearerToken() throws Exception { - ResponseToken response = null; - try { - String filePath = ""; - if(Token.isExpired(bearerToken)) { - response = Token.generateBearerToken(filePath); - bearerToken = response.getAccessToken(); - } - } catch (SkyflowException e) { - e.printStackTrace(); - } - - return bearerToken; - } - } -} - diff --git a/samples/src/main/java/com/example/connection/InvokeConnectionExample.java b/samples/src/main/java/com/example/connection/InvokeConnectionExample.java new file mode 100644 index 00000000..1c1ee12f --- /dev/null +++ b/samples/src/main/java/com/example/connection/InvokeConnectionExample.java @@ -0,0 +1,68 @@ +package com.example.connection; + +import com.skyflow.Skyflow; +import com.skyflow.config.ConnectionConfig; +import com.skyflow.config.Credentials; +import com.skyflow.enums.LogLevel; +import com.skyflow.enums.RequestMethod; +import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.connection.InvokeConnectionRequest; +import com.skyflow.vault.connection.InvokeConnectionResponse; + +import java.util.HashMap; +import java.util.Map; + +public class InvokeConnectionExample { + public static void main(String[] args) throws SkyflowException { + Credentials credentials = new Credentials(); + credentials.setPath(""); + + ConnectionConfig connectionConfig1 = new ConnectionConfig(); + connectionConfig1.setConnectionId(""); + connectionConfig1.setConnectionUrl(""); + connectionConfig1.setCredentials(credentials); + + ConnectionConfig connectionConfig2 = new ConnectionConfig(); + connectionConfig2.setConnectionId(""); + connectionConfig2.setConnectionUrl(""); + + Credentials skyflowCredentials = new Credentials(); + credentials.setPath(""); + + Skyflow skyflowClient = Skyflow.builder() + .setLogLevel(LogLevel.DEBUG) + .addConnectionConfig(connectionConfig1) + .addConnectionConfig(connectionConfig2) + .addSkyflowCredentials(skyflowCredentials) + .build(); + + Map requestBody = new HashMap<>(); + requestBody.put("", ""); + requestBody.put("", ""); + Map requestHeaders = new HashMap<>(); + requestHeaders.put("", ""); + requestHeaders.put("", ""); + InvokeConnectionRequest invokeConnectionRequest1 = InvokeConnectionRequest.builder() + .methodName(RequestMethod.POST) + .requestBody(requestBody) + .requestHeaders(requestHeaders) + .build(); + InvokeConnectionResponse invokeConnectionResponse1 = skyflowClient.connection().invoke(invokeConnectionRequest1); + System.out.println(invokeConnectionResponse1); + + Map pathParams = new HashMap<>(); + pathParams.put("", ""); + pathParams.put("", ""); + Map queryParams = new HashMap<>(); + queryParams.put("", ""); + queryParams.put("", ""); + InvokeConnectionRequest invokeConnectionRequest2 = InvokeConnectionRequest.builder() + .methodName(RequestMethod.GET) + .pathParams(pathParams) + .queryParams(queryParams) + .build(); + InvokeConnectionResponse invokeConnectionResponse2 = skyflowClient + .connection("").invoke(invokeConnectionRequest2); + System.out.println(invokeConnectionResponse2); + } +} diff --git a/samples/src/main/java/com/example/vault/DeleteExample.java b/samples/src/main/java/com/example/vault/DeleteExample.java new file mode 100644 index 00000000..fa00e015 --- /dev/null +++ b/samples/src/main/java/com/example/vault/DeleteExample.java @@ -0,0 +1,52 @@ +package com.example.vault; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.enums.LogLevel; +import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.data.DeleteRequest; +import com.skyflow.vault.data.DeleteResponse; + +import java.util.ArrayList; + +public class DeleteExample { + public static void main(String[] args) throws SkyflowException { + Credentials credentials = new Credentials(); + credentials.setPath(""); + + VaultConfig blitzConfig = new VaultConfig(); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); + blitzConfig.setEnv(Env.DEV); + blitzConfig.setCredentials(credentials); + + VaultConfig stageConfig = new VaultConfig(); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); + stageConfig.setEnv(Env.STAGE); + + Credentials skyflowCredentials = new Credentials(); + credentials.setPath(""); + + Skyflow skyflowClient = Skyflow.builder() + .setLogLevel(LogLevel.DEBUG) + .addVaultConfig(blitzConfig) + .addVaultConfig(stageConfig) + .addSkyflowCredentials(skyflowCredentials) + .build(); + + ArrayList ids1 = new ArrayList<>(); + ids1.add(""); + DeleteRequest deleteRequest1 = DeleteRequest.builder().ids(ids1).table("").build(); + DeleteResponse deleteResponse1 = skyflowClient.vault().delete(deleteRequest1); + System.out.println(deleteResponse1); + + ArrayList ids2 = new ArrayList<>(); + ids2.add(""); + DeleteRequest deleteRequest2 = DeleteRequest.builder().ids(ids2).table("").build(); + DeleteResponse deleteResponse2 = skyflowClient.vault("").delete(deleteRequest2); + System.out.println(deleteResponse2); + } +} diff --git a/samples/src/main/java/com/example/vault/DetokenizeExample.java b/samples/src/main/java/com/example/vault/DetokenizeExample.java new file mode 100644 index 00000000..4fde3fe7 --- /dev/null +++ b/samples/src/main/java/com/example/vault/DetokenizeExample.java @@ -0,0 +1,59 @@ +package com.example.vault; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.enums.LogLevel; +import com.skyflow.enums.RedactionType; +import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.data.GetRequest; +import com.skyflow.vault.data.GetResponse; +import com.skyflow.vault.tokens.DetokenizeRequest; +import com.skyflow.vault.tokens.DetokenizeResponse; + +import java.util.ArrayList; + +public class DetokenizeExample { + public static void main(String[] args) throws SkyflowException { + Credentials credentials = new Credentials(); + credentials.setPath(""); + + VaultConfig blitzConfig = new VaultConfig(); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); + blitzConfig.setEnv(Env.DEV); + blitzConfig.setCredentials(credentials); + + VaultConfig stageConfig = new VaultConfig(); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); + stageConfig.setEnv(Env.STAGE); + + Credentials skyflowCredentials = new Credentials(); + credentials.setPath(""); + + Skyflow skyflowClient = Skyflow.builder() + .setLogLevel(LogLevel.DEBUG) + .addVaultConfig(blitzConfig) + .addVaultConfig(stageConfig) + .addSkyflowCredentials(skyflowCredentials) + .build(); + + ArrayList tokens1 = new ArrayList<>(); + tokens1.add(""); + tokens1.add(""); + DetokenizeRequest detokenizeRequest1 = DetokenizeRequest.builder().tokens(tokens1).continueOnError(true).build(); + DetokenizeResponse detokenizeResponse1 = skyflowClient.vault().detokenize(detokenizeRequest1); + System.out.println(detokenizeResponse1); + + ArrayList tokens2 = new ArrayList<>(); + tokens2.add(""); + tokens2.add(""); + + DetokenizeRequest detokenizeRequest2 = DetokenizeRequest.builder() + .tokens(tokens2).continueOnError(false).redactionType(RedactionType.DEFAULT).build(); + DetokenizeResponse detokenizeResponse2 = skyflowClient.vault("").detokenize(detokenizeRequest2); + System.out.println(detokenizeResponse2); + } +} diff --git a/samples/src/main/java/com/example/vault/GetExample.java b/samples/src/main/java/com/example/vault/GetExample.java new file mode 100644 index 00000000..afcb0021 --- /dev/null +++ b/samples/src/main/java/com/example/vault/GetExample.java @@ -0,0 +1,58 @@ +package com.example.vault; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.enums.LogLevel; +import com.skyflow.enums.RedactionType; +import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.data.GetRequest; +import com.skyflow.vault.data.GetResponse; + +import java.util.ArrayList; + +public class GetExample { + public static void main(String[] args) throws SkyflowException { + Credentials credentials = new Credentials(); + credentials.setPath(""); + + VaultConfig blitzConfig = new VaultConfig(); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); + blitzConfig.setEnv(Env.DEV); + blitzConfig.setCredentials(credentials); + + VaultConfig stageConfig = new VaultConfig(); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); + stageConfig.setEnv(Env.STAGE); + + Credentials skyflowCredentials = new Credentials(); + credentials.setPath(""); + + Skyflow skyflowClient = Skyflow.builder() + .setLogLevel(LogLevel.DEBUG) + .addVaultConfig(blitzConfig) + .addVaultConfig(stageConfig) + .addSkyflowCredentials(skyflowCredentials) + .build(); + + ArrayList ids = new ArrayList<>(); + ids.add(""); + GetRequest getByIdRequest = GetRequest.builder().returnTokens(true).ids(ids).table("").build(); + GetResponse getByIdResponse = skyflowClient.vault().get(getByIdRequest); + System.out.println(getByIdResponse); + + ArrayList columnValues = new ArrayList<>(); + columnValues.add(""); + GetRequest getByColumnRequest = GetRequest.builder() + .table("") + .columnName("") + .columnValues(columnValues) + .redactionType(RedactionType.PLAIN_TEXT) + .build(); + GetResponse getByColumnResponse = skyflowClient.vault("").get(getByColumnRequest); + System.out.println(getByColumnResponse); + } +} diff --git a/samples/src/main/java/com/example/vault/InsertExample.java b/samples/src/main/java/com/example/vault/InsertExample.java new file mode 100644 index 00000000..d0bdec24 --- /dev/null +++ b/samples/src/main/java/com/example/vault/InsertExample.java @@ -0,0 +1,81 @@ +package com.example.vault; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Byot; +import com.skyflow.enums.Env; +import com.skyflow.enums.LogLevel; +import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.data.InsertRequest; +import com.skyflow.vault.data.InsertResponse; + +import java.util.ArrayList; +import java.util.HashMap; + +public class InsertExample { + public static void main(String[] args) throws SkyflowException { + Credentials credentials = new Credentials(); + credentials.setPath(""); + + VaultConfig blitzConfig = new VaultConfig(); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); + blitzConfig.setEnv(Env.DEV); + blitzConfig.setCredentials(credentials); + + VaultConfig stageConfig = new VaultConfig(); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); + stageConfig.setEnv(Env.STAGE); + + Credentials skyflowCredentials = new Credentials(); + skyflowCredentials.setPath(""); + + Skyflow skyflowClient = Skyflow.builder() + .setLogLevel(LogLevel.DEBUG) + .addVaultConfig(blitzConfig) + .addVaultConfig(stageConfig) + .addSkyflowCredentials(skyflowCredentials) + .build(); + + ArrayList> values1 = new ArrayList<>(); + HashMap value1 = new HashMap<>(); + value1.put("", ""); + value1.put("", ""); + values1.add(value1); + + ArrayList> tokens = new ArrayList<>(); + HashMap token = new HashMap<>(); + token.put("", ""); + tokens.add(token); + + InsertRequest insertRequest = InsertRequest.builder() + .table("") + .continueOnError(true) + .tokenStrict(Byot.ENABLE) + .values(values1) + .tokens(tokens) + .returnTokens(true) + .build(); + InsertResponse insertResponse = skyflowClient.vault().insert(insertRequest); + System.out.println(insertResponse); + + ArrayList> values2 = new ArrayList<>(); + HashMap value2 = new HashMap<>(); + value2.put("", ""); + value2.put("", ""); + values2.add(value2); + + InsertRequest upsertRequest = InsertRequest.builder() + .table("") + .continueOnError(false) + .tokenStrict(Byot.DISABLE) + .values(values2) + .returnTokens(false) + .upsert("") + .build(); + InsertResponse upsertResponse = skyflowClient.vault("").insert(upsertRequest); + System.out.println(upsertResponse); + } +} diff --git a/samples/src/main/java/com/example/vault/QueryExample.java b/samples/src/main/java/com/example/vault/QueryExample.java new file mode 100644 index 00000000..98805b93 --- /dev/null +++ b/samples/src/main/java/com/example/vault/QueryExample.java @@ -0,0 +1,49 @@ +package com.example.vault; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.enums.LogLevel; +import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.data.QueryRequest; +import com.skyflow.vault.data.QueryResponse; + +public class QueryExample { + public static void main(String[] args) throws SkyflowException { + Credentials credentials = new Credentials(); + credentials.setPath(""); + + VaultConfig blitzConfig = new VaultConfig(); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); + blitzConfig.setEnv(Env.DEV); + blitzConfig.setCredentials(credentials); + + VaultConfig stageConfig = new VaultConfig(); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); + stageConfig.setEnv(Env.STAGE); + + Credentials skyflowCredentials = new Credentials(); + credentials.setPath(""); + + Skyflow skyflowClient = Skyflow.builder() + .setLogLevel(LogLevel.DEBUG) + .addVaultConfig(blitzConfig) + .addVaultConfig(stageConfig) + .addSkyflowCredentials(skyflowCredentials) + .build(); + + String query1 = ""; + QueryRequest queryRequest1 = QueryRequest.builder().query(query1).build(); + QueryResponse queryResponse1 = skyflowClient.vault().query(queryRequest1); + System.out.println(queryResponse1); + + String query2 = ""; + QueryRequest queryRequest2 = QueryRequest.builder().query(query2).build(); + QueryResponse queryResponse2 = skyflowClient.vault("").query(queryRequest2); + System.out.println(queryResponse2); + + } +} diff --git a/samples/src/main/java/com/example/vault/TokenizeExample.java b/samples/src/main/java/com/example/vault/TokenizeExample.java new file mode 100644 index 00000000..ef6881b6 --- /dev/null +++ b/samples/src/main/java/com/example/vault/TokenizeExample.java @@ -0,0 +1,60 @@ +package com.example.vault; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.enums.LogLevel; +import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.tokens.ColumnValue; +import com.skyflow.vault.tokens.TokenizeRequest; +import com.skyflow.vault.tokens.TokenizeResponse; + +import java.util.ArrayList; +import java.util.List; + +public class TokenizeExample { + public static void main(String[] args) throws SkyflowException { + Credentials credentials = new Credentials(); + credentials.setPath(""); + + VaultConfig blitzConfig = new VaultConfig(); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); + blitzConfig.setEnv(Env.DEV); + blitzConfig.setCredentials(credentials); + + VaultConfig stageConfig = new VaultConfig(); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); + stageConfig.setEnv(Env.STAGE); + + Credentials skyflowCredentials = new Credentials(); + credentials.setPath(""); + + Skyflow skyflowClient = Skyflow.builder() + .setLogLevel(LogLevel.DEBUG) + .addVaultConfig(blitzConfig) + .addVaultConfig(stageConfig) + .addSkyflowCredentials(skyflowCredentials) + .build(); + + List columnValues1 = new ArrayList<>(); + ColumnValue value1 = ColumnValue.builder().value("").columnGroup("").build(); + ColumnValue value2 = ColumnValue.builder().value("").columnGroup("").build(); + columnValues1.add(value1); + columnValues1.add(value2); + TokenizeRequest tokenizeRequest1 = TokenizeRequest.builder().values(columnValues1).build(); + TokenizeResponse tokenizeResponse1 = skyflowClient.vault().tokenize(tokenizeRequest1); + System.out.println(tokenizeResponse1); + + List columnValues2 = new ArrayList<>(); + ColumnValue value3 = ColumnValue.builder().value("").columnGroup("").build(); + ColumnValue value4 = ColumnValue.builder().value("").columnGroup("").build(); + columnValues2.add(value3); + columnValues2.add(value4); + TokenizeRequest tokenizeRequest2 = TokenizeRequest.builder().values(columnValues2).build(); + TokenizeResponse tokenizeResponse2 = skyflowClient.vault("").tokenize(tokenizeRequest2); + System.out.println(tokenizeResponse2); + } +} diff --git a/samples/src/main/java/com/example/vault/UpdateExample.java b/samples/src/main/java/com/example/vault/UpdateExample.java new file mode 100644 index 00000000..7dd18570 --- /dev/null +++ b/samples/src/main/java/com/example/vault/UpdateExample.java @@ -0,0 +1,73 @@ +package com.example.vault; + +import com.skyflow.Skyflow; +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Byot; +import com.skyflow.enums.Env; +import com.skyflow.enums.LogLevel; +import com.skyflow.errors.SkyflowException; +import com.skyflow.vault.data.UpdateRequest; +import com.skyflow.vault.data.UpdateResponse; + +import java.util.HashMap; + +public class UpdateExample { + public static void main(String[] args) throws SkyflowException { + Credentials credentials = new Credentials(); + credentials.setPath(""); + + VaultConfig blitzConfig = new VaultConfig(); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); + blitzConfig.setEnv(Env.DEV); + blitzConfig.setCredentials(credentials); + + VaultConfig stageConfig = new VaultConfig(); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); + stageConfig.setEnv(Env.STAGE); + + Credentials skyflowCredentials = new Credentials(); + credentials.setPath(""); + + Skyflow skyflowClient = Skyflow.builder() + .setLogLevel(LogLevel.DEBUG) + .addVaultConfig(blitzConfig) + .addVaultConfig(stageConfig) + .addSkyflowCredentials(skyflowCredentials) + .build(); + + HashMap values1 = new HashMap<>(); + values1.put("", ""); + values1.put("", ""); + + HashMap tokens = new HashMap<>(); + tokens.put("", ""); + + UpdateRequest updateRequest1 = UpdateRequest.builder() + .id("") + .tokenStrict(Byot.ENABLE) + .values(values1) + .tokens(tokens) + .returnTokens(true) + .build(); + UpdateResponse updateResponse1 = skyflowClient.vault().update(updateRequest1); + System.out.println(updateResponse1); + + HashMap values2 = new HashMap<>(); + values2.put("", ""); + values2.put("", ""); + + UpdateRequest updateRequest2 = UpdateRequest.builder() + .id("") + .tokenStrict(Byot.DISABLE) + .values(values2) + .returnTokens(false) + .build(); + UpdateResponse updateResponse2 = skyflowClient.vault("").update(updateRequest2); + System.out.println(updateResponse2); + } +} From a1d64ce3d58e21e05ebd328623c0786a50f385ea Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Tue, 19 Nov 2024 19:43:03 +0530 Subject: [PATCH 52/68] SK-1685 Add samples for Bearer token utilities --- .../BearerTokenGenerationExample.java | 37 ++++++++++++ ...rerTokenGenerationUsingThreadsExample.java | 60 +++++++++++++++++++ ...arerTokenGenerationWithContextExample.java | 40 +++++++++++++ .../ScopedTokenGenerationExample.java | 45 ++++++++++++++ .../SignedTokenGenerationExample.java | 55 +++++++++++++++++ .../java/com/example/vault/DeleteExample.java | 12 ++-- .../com/example/vault/DetokenizeExample.java | 14 ++--- .../java/com/example/vault/GetExample.java | 12 ++-- .../java/com/example/vault/InsertExample.java | 12 ++-- .../java/com/example/vault/QueryExample.java | 12 ++-- .../com/example/vault/TokenizeExample.java | 12 ++-- .../java/com/example/vault/UpdateExample.java | 12 ++-- 12 files changed, 279 insertions(+), 44 deletions(-) create mode 100644 samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java create mode 100644 samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java create mode 100644 samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java create mode 100644 samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java create mode 100644 samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java diff --git a/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java new file mode 100644 index 00000000..ae1bce1b --- /dev/null +++ b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java @@ -0,0 +1,37 @@ +package com.example.serviceaccount; + +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.BearerToken; +import com.skyflow.serviceaccount.util.Token; + +import java.io.File; + +public class BearerTokenGenerationExample { + public static void main(String[] args) { + String token = null; + + // Generate BearerToken by specifying credentials.json file path + try { + String filePath = ""; + if (Token.isExpired(token)) { + BearerToken bearerToken = BearerToken.builder().setCredentials(new File(filePath)).build(); + token = bearerToken.getBearerToken(); + } + System.out.println(token); + } catch (Exception e) { + e.printStackTrace(); + } + + // Generate BearerToken by specifying credentials.json as string + try { + String fileContents = ""; + if (Token.isExpired(token)) { + BearerToken bearerToken = BearerToken.builder().setCredentials(fileContents).build(); + token = bearerToken.getBearerToken(); + } + System.out.println(token); + } catch (SkyflowException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java new file mode 100644 index 00000000..1d750ade --- /dev/null +++ b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java @@ -0,0 +1,60 @@ +package com.example.serviceaccount; + +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.BearerToken; + +import java.io.File; + +public class BearerTokenGenerationUsingThreadsExample { + public static void main(String[] args) { + // Generate BearerToken with context by specifying credentials.json file path + try { + String filePath = ""; + final BearerToken bearerToken = new BearerToken.BearerTokenBuilder() + .setCredentials(new File(filePath)) + .setCtx("abc") + .build(); + + Thread t = new Thread(() -> { + for (int i = 0; i < 5; i++) { + try { + System.out.println(bearerToken.getBearerToken()); + } catch (SkyflowException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException(e); + + } + + } + }); + t.start(); + } catch (Exception e) { + e.printStackTrace(); + } + + // Generate BearerToken with context by specifying credentials.json as string + try { + String fileContents = ""; + final BearerToken bearerToken = new BearerToken.BearerTokenBuilder() + .setCredentials(fileContents) + .setCtx("abc") + .build(); + + Thread t = new Thread(() -> { + for (int i = 0; i < 5; i++) { + try { + System.out.println(bearerToken.getBearerToken()); + } catch (SkyflowException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException(e); + + } + + } + }); + t.start(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java new file mode 100644 index 00000000..69e6ff14 --- /dev/null +++ b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java @@ -0,0 +1,40 @@ +package com.example.serviceaccount; + +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.BearerToken; + +import java.io.File; + +public class BearerTokenGenerationWithContextExample { + public static void main(String[] args) { + String bearerToken = null; + + // Generate BearerToken with context by specifying credentials.json file path + try { + String filePath = ""; + BearerToken token = new BearerToken.BearerTokenBuilder() + .setCredentials(new File(filePath)) + .setCtx("abc") + .build(); + + bearerToken = token.getBearerToken(); + System.out.println(bearerToken); + } catch (Exception e) { + e.printStackTrace(); + } + + // Generate BearerToken with context by specifying credentials.json as string + try { + String fileContents = ""; + BearerToken token = new BearerToken.BearerTokenBuilder() + .setCredentials(fileContents) + .setCtx("abc") + .build(); + + bearerToken = token.getBearerToken(); + System.out.println(bearerToken); + } catch (SkyflowException e) { + e.printStackTrace(); + } + } +} diff --git a/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java b/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java new file mode 100644 index 00000000..b8dfbc53 --- /dev/null +++ b/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java @@ -0,0 +1,45 @@ +package com.example.serviceaccount; + +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.BearerToken; + +import java.io.File; +import java.util.ArrayList; + +public class ScopedTokenGenerationExample { + public static void main(String[] args) { + String scopedToken = null; + + // Generate Scoped Token by specifying credentials.json file path + try { + ArrayList roles = new ArrayList<>(); + roles.add("YOUR_ROLE_ID"); + String filePath = ""; + BearerToken bearerToken = new BearerToken.BearerTokenBuilder() + .setCredentials(new File(filePath)) + .setRoles(roles) + .build(); + + scopedToken = bearerToken.getBearerToken(); + System.out.println(scopedToken); + } catch (Exception e) { + e.printStackTrace(); + } + + // Generate BearerToken with context by specifying credentials.json as string + try { + ArrayList roles = new ArrayList<>(); + roles.add("YOUR_ROLE_ID"); + String fileContents = ""; + BearerToken bearerToken = new BearerToken.BearerTokenBuilder() + .setCredentials(fileContents) + .setRoles(roles) + .build(); + + scopedToken = bearerToken.getBearerToken(); + System.out.println(scopedToken); + } catch (SkyflowException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java b/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java new file mode 100644 index 00000000..7f030838 --- /dev/null +++ b/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java @@ -0,0 +1,55 @@ +package com.example.serviceaccount; + +import com.skyflow.errors.SkyflowException; +import com.skyflow.serviceaccount.util.SignedDataTokenResponse; +import com.skyflow.serviceaccount.util.SignedDataTokens; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class SignedTokenGenerationExample { + public static void main(String[] args) { + List signedTokenValues; + + // Generate Signed data token with context by specifying credentials.json file path + try { + String filePath = ""; + String context = "abc"; + ArrayList dataTokens = new ArrayList<>(); + dataTokens.add("YOUR_DATA_TOKEN_1"); + SignedDataTokens signedToken = new SignedDataTokens.SignedDataTokensBuilder() + .setCredentials(new File(filePath)) + .setCtx(context) + .setTimeToLive(30) // in seconds + .setDataTokens(dataTokens) + .build(); + + signedTokenValues = signedToken.getSignedDataTokens(); + System.out.println(signedTokenValues); + } catch (Exception e) { + e.printStackTrace(); + } + + // Generate Signed data token with context by specifying credentials.json as string + try { + String fileContents = ""; + String context = "abc"; + ArrayList dataTokens = new ArrayList<>(); + dataTokens.add("YOUR_DATA_TOKEN_1"); + SignedDataTokens signedToken = new SignedDataTokens.SignedDataTokensBuilder() + .setCredentials(fileContents) + .setCtx(context) + .setTimeToLive(30) // in seconds + .setDataTokens(dataTokens) + .build(); + + signedTokenValues = signedToken.getSignedDataTokens(); + System.out.println(signedTokenValues); + + } catch (SkyflowException e) { + e.printStackTrace(); + } + } +} + diff --git a/samples/src/main/java/com/example/vault/DeleteExample.java b/samples/src/main/java/com/example/vault/DeleteExample.java index fa00e015..17887204 100644 --- a/samples/src/main/java/com/example/vault/DeleteExample.java +++ b/samples/src/main/java/com/example/vault/DeleteExample.java @@ -14,21 +14,21 @@ public class DeleteExample { public static void main(String[] args) throws SkyflowException { Credentials credentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); VaultConfig blitzConfig = new VaultConfig(); - blitzConfig.setVaultId(""); - blitzConfig.setClusterId(""); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); blitzConfig.setEnv(Env.DEV); blitzConfig.setCredentials(credentials); VaultConfig stageConfig = new VaultConfig(); - stageConfig.setVaultId(""); - stageConfig.setClusterId(""); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) diff --git a/samples/src/main/java/com/example/vault/DetokenizeExample.java b/samples/src/main/java/com/example/vault/DetokenizeExample.java index 4fde3fe7..f026e43e 100644 --- a/samples/src/main/java/com/example/vault/DetokenizeExample.java +++ b/samples/src/main/java/com/example/vault/DetokenizeExample.java @@ -7,8 +7,6 @@ import com.skyflow.enums.LogLevel; import com.skyflow.enums.RedactionType; import com.skyflow.errors.SkyflowException; -import com.skyflow.vault.data.GetRequest; -import com.skyflow.vault.data.GetResponse; import com.skyflow.vault.tokens.DetokenizeRequest; import com.skyflow.vault.tokens.DetokenizeResponse; @@ -17,21 +15,21 @@ public class DetokenizeExample { public static void main(String[] args) throws SkyflowException { Credentials credentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); VaultConfig blitzConfig = new VaultConfig(); - blitzConfig.setVaultId(""); - blitzConfig.setClusterId(""); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); blitzConfig.setEnv(Env.DEV); blitzConfig.setCredentials(credentials); VaultConfig stageConfig = new VaultConfig(); - stageConfig.setVaultId(""); - stageConfig.setClusterId(""); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) diff --git a/samples/src/main/java/com/example/vault/GetExample.java b/samples/src/main/java/com/example/vault/GetExample.java index afcb0021..357c3516 100644 --- a/samples/src/main/java/com/example/vault/GetExample.java +++ b/samples/src/main/java/com/example/vault/GetExample.java @@ -15,21 +15,21 @@ public class GetExample { public static void main(String[] args) throws SkyflowException { Credentials credentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); VaultConfig blitzConfig = new VaultConfig(); - blitzConfig.setVaultId(""); - blitzConfig.setClusterId(""); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); blitzConfig.setEnv(Env.DEV); blitzConfig.setCredentials(credentials); VaultConfig stageConfig = new VaultConfig(); - stageConfig.setVaultId(""); - stageConfig.setClusterId(""); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) diff --git a/samples/src/main/java/com/example/vault/InsertExample.java b/samples/src/main/java/com/example/vault/InsertExample.java index d0bdec24..21d9260b 100644 --- a/samples/src/main/java/com/example/vault/InsertExample.java +++ b/samples/src/main/java/com/example/vault/InsertExample.java @@ -16,21 +16,21 @@ public class InsertExample { public static void main(String[] args) throws SkyflowException { Credentials credentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); VaultConfig blitzConfig = new VaultConfig(); - blitzConfig.setVaultId(""); - blitzConfig.setClusterId(""); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); blitzConfig.setEnv(Env.DEV); blitzConfig.setCredentials(credentials); VaultConfig stageConfig = new VaultConfig(); - stageConfig.setVaultId(""); - stageConfig.setClusterId(""); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - skyflowCredentials.setPath(""); + credentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) diff --git a/samples/src/main/java/com/example/vault/QueryExample.java b/samples/src/main/java/com/example/vault/QueryExample.java index 98805b93..c80a2443 100644 --- a/samples/src/main/java/com/example/vault/QueryExample.java +++ b/samples/src/main/java/com/example/vault/QueryExample.java @@ -12,21 +12,21 @@ public class QueryExample { public static void main(String[] args) throws SkyflowException { Credentials credentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); VaultConfig blitzConfig = new VaultConfig(); - blitzConfig.setVaultId(""); - blitzConfig.setClusterId(""); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); blitzConfig.setEnv(Env.DEV); blitzConfig.setCredentials(credentials); VaultConfig stageConfig = new VaultConfig(); - stageConfig.setVaultId(""); - stageConfig.setClusterId(""); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) diff --git a/samples/src/main/java/com/example/vault/TokenizeExample.java b/samples/src/main/java/com/example/vault/TokenizeExample.java index ef6881b6..f7677670 100644 --- a/samples/src/main/java/com/example/vault/TokenizeExample.java +++ b/samples/src/main/java/com/example/vault/TokenizeExample.java @@ -16,21 +16,21 @@ public class TokenizeExample { public static void main(String[] args) throws SkyflowException { Credentials credentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); VaultConfig blitzConfig = new VaultConfig(); - blitzConfig.setVaultId(""); - blitzConfig.setClusterId(""); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); blitzConfig.setEnv(Env.DEV); blitzConfig.setCredentials(credentials); VaultConfig stageConfig = new VaultConfig(); - stageConfig.setVaultId(""); - stageConfig.setClusterId(""); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) diff --git a/samples/src/main/java/com/example/vault/UpdateExample.java b/samples/src/main/java/com/example/vault/UpdateExample.java index 7dd18570..b782d80d 100644 --- a/samples/src/main/java/com/example/vault/UpdateExample.java +++ b/samples/src/main/java/com/example/vault/UpdateExample.java @@ -15,21 +15,21 @@ public class UpdateExample { public static void main(String[] args) throws SkyflowException { Credentials credentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); VaultConfig blitzConfig = new VaultConfig(); - blitzConfig.setVaultId(""); - blitzConfig.setClusterId(""); + blitzConfig.setVaultId(""); + blitzConfig.setClusterId(""); blitzConfig.setEnv(Env.DEV); blitzConfig.setCredentials(credentials); VaultConfig stageConfig = new VaultConfig(); - stageConfig.setVaultId(""); - stageConfig.setClusterId(""); + stageConfig.setVaultId(""); + stageConfig.setClusterId(""); stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) From 6a9e5838fb3ca97414bb6dc6228a188400c053e0 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 20 Nov 2024 15:13:11 +0530 Subject: [PATCH 53/68] SK-1623 Fix minor issues in Javs SDK v2 --- pom.xml | 11 ++--- src/main/java/com/skyflow/VaultClient.java | 4 +- .../java/com/skyflow/errors/ErrorMessage.java | 2 +- .../connection/InvokeConnectionRequest.java | 3 -- .../controller/ConnectionController.java | 3 +- .../skyflow/vault/data/UpdateResponse.java | 6 ++- .../vault/tokens/DetokenizeResponse.java | 2 +- .../vault/tokens/TokenizeResponse.java | 13 +++++- .../util/SignedDataTokensTests.java | 13 ++++++ .../controller/ConnectionControllerTests.java | 7 +++- .../com/skyflow/vault/data/UpdateTests.java | 2 +- .../skyflow/vault/tokens/DetokenizeTests.java | 42 +++++++++++++++++++ .../skyflow/vault/tokens/TokenizeTests.java | 16 +++++++ 13 files changed, 104 insertions(+), 20 deletions(-) diff --git a/pom.xml b/pom.xml index ea4cbd29..1dc1b785 100644 --- a/pom.xml +++ b/pom.xml @@ -186,11 +186,6 @@ org.jacoco jacoco-maven-plugin 0.8.7 - - - **/example/* - - prepare-agent @@ -206,6 +201,12 @@ + + + **/example/* + **/generated/** + + org.apache.maven.plugins diff --git a/src/main/java/com/skyflow/VaultClient.java b/src/main/java/com/skyflow/VaultClient.java index 55a16024..08c161de 100644 --- a/src/main/java/com/skyflow/VaultClient.java +++ b/src/main/java/com/skyflow/VaultClient.java @@ -105,7 +105,7 @@ protected RecordServiceInsertRecordBody getBulkInsertRequestBody(InsertRequest r for (int index = 0; index < values.size(); index++) { V1FieldRecords record = new V1FieldRecords(); record.setFields(values.get(index)); - if (tokens != null) { + if (tokens != null && index < tokens.size()) { record.setTokens(tokens.get(index)); } records.add(record); @@ -130,7 +130,7 @@ protected RecordServiceBatchOperationBody getBatchInsertRequestBody(InsertReques record.setUpsert(request.getUpsert()); record.setTokenization(request.getReturnTokens()); record.setFields(values.get(index)); - if (tokens != null) { + if (tokens != null && index < tokens.size()) { record.setTokens(tokens.get(index)); } records.add(record); diff --git a/src/main/java/com/skyflow/errors/ErrorMessage.java b/src/main/java/com/skyflow/errors/ErrorMessage.java index c7ac207a..31648fb8 100644 --- a/src/main/java/com/skyflow/errors/ErrorMessage.java +++ b/src/main/java/com/skyflow/errors/ErrorMessage.java @@ -113,7 +113,7 @@ public enum ErrorMessage { // connection InvalidRequestHeaders("%s0 Validation error. Request headers aren't valid. Specify valid request headers."), - EmptyRequestHeaders("%s0 Validation error. Request headers are empty. Specify valid ."), + EmptyRequestHeaders("%s0 Validation error. Request headers are empty. Specify valid request headers."), InvalidPathParams("%s0 Validation error. Path parameters aren't valid. Specify valid path parameters."), EmptyPathParams("%s0 Validation error. Path parameters are empty. Specify valid path parameters."), InvalidQueryParams("%s0 Validation error. Query parameters aren't valid. Specify valid query parameters."), diff --git a/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java b/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java index 5edf4f4f..c64bedf4 100644 --- a/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java +++ b/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java @@ -46,9 +46,6 @@ public static final class InvokeConnectionRequestBuilder { private InvokeConnectionRequestBuilder() { this.methodName = RequestMethod.POST; - this.pathParams = new HashMap<>(); - this.queryParams = new HashMap<>(); - this.requestHeaders = new HashMap<>(); this.requestBody = new Object(); } diff --git a/src/main/java/com/skyflow/vault/controller/ConnectionController.java b/src/main/java/com/skyflow/vault/controller/ConnectionController.java index 7ae03a2a..890ef530 100644 --- a/src/main/java/com/skyflow/vault/controller/ConnectionController.java +++ b/src/main/java/com/skyflow/vault/controller/ConnectionController.java @@ -40,7 +40,8 @@ public InvokeConnectionResponse invoke(InvokeConnectionRequest invokeConnectionR String filledURL = Utils.constructConnectionURL(super.getConnectionConfig(), invokeConnectionRequest); Map headers = new HashMap<>(); - if (invokeConnectionRequest.getRequestHeaders().containsKey("requestHeader")) { + Map requestHeaders = invokeConnectionRequest.getRequestHeaders(); + if (requestHeaders != null && requestHeaders.containsKey("requestHeader")) { headers = Utils.constructConnectionHeadersMap(invokeConnectionRequest.getRequestHeaders()); } if (!headers.containsKey("x-skyflow-authorization")) { diff --git a/src/main/java/com/skyflow/vault/data/UpdateResponse.java b/src/main/java/com/skyflow/vault/data/UpdateResponse.java index 0f860b22..2ca52365 100644 --- a/src/main/java/com/skyflow/vault/data/UpdateResponse.java +++ b/src/main/java/com/skyflow/vault/data/UpdateResponse.java @@ -22,8 +22,10 @@ public HashMap getTokens() { @Override public String toString() { StringBuilder response = new StringBuilder("{"); - response.append("\n\t\"skyflowId\": ").append(skyflowId); - response.append("\n\t\"tokens\": ").append(formatRecords(tokens)); + response.append("\n\t\"skyflowId\": \"").append(skyflowId).append("\""); + if (!tokens.isEmpty()) { + response.append("\n\t\"tokens\": ").append(formatRecords(tokens)); + } response.append("\n}"); return response.toString(); } diff --git a/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java b/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java index beb51700..0c136e1a 100644 --- a/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java +++ b/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java @@ -23,7 +23,7 @@ public ArrayList getErrors() { public String toString() { StringBuilder response = new StringBuilder("{"); response.append("\n\t").append("\"detokenizedFields\": ").append(toIndentedString(detokenizedFields)); - response.append("\n\t").append("\"errors\": \"").append(toIndentedString(errorRecords)); + response.append("\n\t").append("\"errors\": ").append(toIndentedString(errorRecords)); response.append("\n}"); return response.toString(); } diff --git a/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java b/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java index 8f62631b..a82d081a 100644 --- a/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java +++ b/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java @@ -3,11 +3,20 @@ import java.util.List; public class TokenizeResponse { - - private List tokens; + private final List tokens; public TokenizeResponse(List tokens) { this.tokens = tokens; } + public List getTokens() { + return tokens; + } + + @Override + public String toString() { + StringBuilder response = new StringBuilder("{"); + response.append("\n\t\"tokens\": ").append(tokens); + return response.append("\n}").toString(); + } } diff --git a/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java b/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java index 5e631995..50b97e11 100644 --- a/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java +++ b/src/test/java/com/skyflow/serviceaccount/util/SignedDataTokensTests.java @@ -206,4 +206,17 @@ public void testInvalidKeySpecInCredentials() { Assert.assertEquals(ErrorMessage.InvalidKeySpec.getMessage(), e.getMessage()); } } + + @Test + public void testSignedDataTokenResponse() { + try { + String signedToken = "test_signed_data_token"; + SignedDataTokenResponse response = new SignedDataTokenResponse(dataToken, signedToken); + String responseString = "{\n\t\"dataToken\":\"" + dataToken + "\"," + + "\n\t\"signedDataToken\":\"signed_token_" + signedToken + "\",\n}"; + Assert.assertEquals(responseString, response.toString()); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } } diff --git a/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java b/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java index 036dfdcd..102eb9d7 100644 --- a/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java +++ b/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java @@ -12,6 +12,8 @@ import org.junit.BeforeClass; import org.junit.Test; +import java.util.HashMap; + public class ConnectionControllerTests { private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; private static final String EXCEPTION_NOT_THROWN = "Should have thrown an exception"; @@ -37,13 +39,14 @@ public static void setup() { @Test public void testInvalidRequestInInvokeConnectionMethod() { try { - InvokeConnectionRequest connectionRequest = InvokeConnectionRequest.builder().build(); + HashMap requestBody = new HashMap<>(); + InvokeConnectionRequest connectionRequest = InvokeConnectionRequest.builder().requestBody(requestBody).build(); Skyflow skyflowClient = Skyflow.builder().setLogLevel(LogLevel.DEBUG).addConnectionConfig(connectionConfig).build(); skyflowClient.connection().invoke(connectionRequest); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); - Assert.assertEquals(ErrorMessage.EmptyRequestHeaders.getMessage(), e.getMessage()); + Assert.assertEquals(ErrorMessage.EmptyRequestBody.getMessage(), e.getMessage()); } } } diff --git a/src/test/java/com/skyflow/vault/data/UpdateTests.java b/src/test/java/com/skyflow/vault/data/UpdateTests.java index e6c41db9..b82a0734 100644 --- a/src/test/java/com/skyflow/vault/data/UpdateTests.java +++ b/src/test/java/com/skyflow/vault/data/UpdateTests.java @@ -370,7 +370,7 @@ public void testUpdateResponse() { tokenMap.put("test_column_1", "test_token_1"); tokenMap.put("test_column_2", "test_token_2"); UpdateResponse response = new UpdateResponse(skyflowID, tokenMap); - String responseString = "{\n\t\"skyflowId\": " + skyflowID + "\n\t\"tokens\": " + String responseString = "{\n\t\"skyflowId\": \"" + skyflowID + "\"\n\t\"tokens\": " + "{\n\t\t\"test_column_1\": \"test_token_1\"," + "\n\t\t\"test_column_2\": \"test_token_2\",\n\t}\n}"; Assert.assertEquals(skyflowID, response.getSkyflowId()); diff --git a/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java b/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java index 3fe57faa..6c49bc8c 100644 --- a/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java +++ b/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java @@ -4,6 +4,8 @@ import com.skyflow.errors.ErrorCode; import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.models.DetokenizeRecordResponseValueType; +import com.skyflow.generated.rest.models.V1DetokenizeRecordResponse; import com.skyflow.utils.Constants; import com.skyflow.utils.Utils; import com.skyflow.utils.validations.Validations; @@ -112,4 +114,44 @@ public void testRedactionAndContinueOnErrorInDetokenizeRequestValidations() { Assert.fail(INVALID_EXCEPTION_THROWN); } } + + @Test + public void testDetokenizeResponse() { + try { + V1DetokenizeRecordResponse record1 = new V1DetokenizeRecordResponse(); + record1.setToken("1234-5678-9012-3456"); + record1.setValue("4111111111111111"); + record1.setValueType(DetokenizeRecordResponseValueType.STRING); + DetokenizeRecordResponse field = new DetokenizeRecordResponse(record1); + + V1DetokenizeRecordResponse record2 = new V1DetokenizeRecordResponse(); + record2.setToken("3456-7890-1234-5678"); + record2.setError("Invalid token"); + DetokenizeRecordResponse error = new DetokenizeRecordResponse(record2); + + ArrayList fields = new ArrayList<>(); + fields.add(field); + fields.add(field); + + ArrayList errors = new ArrayList<>(); + errors.add(error); + errors.add(error); + + DetokenizeResponse response = new DetokenizeResponse(fields, errors); + String responseString = "{\n\t\"detokenizedFields\": [{" + + "\n\t\t\"token\": \"1234-5678-9012-3456\",\n\t\t\"value\": \"4111111111111111\",\n\t\t\"type\": \"STRING\",\n\t}, " + + "{\n\t\t\"token\": \"1234-5678-9012-3456\",\n\t\t\"value\": \"4111111111111111\",\n\t\t\"type\": \"STRING\",\n\t}]" + + "\n\t\"errors\": [{\n\t\t\"token\": \"3456-7890-1234-5678\",\n\t\t\"error\": \"Invalid token\",\n\t}, " + + "{\n\t\t\"token\": \"3456-7890-1234-5678\",\n\t\t\"error\": \"Invalid token\",\n\t}]\n}"; + Assert.assertEquals(2, response.getDetokenizedFields().size()); + Assert.assertEquals(2, response.getErrors().size()); + Assert.assertEquals("1234-5678-9012-3456", response.getDetokenizedFields().get(0).getToken()); + Assert.assertEquals("4111111111111111", response.getDetokenizedFields().get(0).getValue()); + Assert.assertEquals("STRING", response.getDetokenizedFields().get(0).getType()); + Assert.assertEquals("Invalid token", response.getErrors().get(0).getError()); + Assert.assertEquals(responseString, response.toString()); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } } diff --git a/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java b/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java index 850553f4..18edf253 100644 --- a/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java +++ b/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java @@ -47,6 +47,8 @@ public static void setup() { columnValues = new ArrayList<>(); value = "test_value"; group = "test_group"; + + tokens = new ArrayList<>(); } @Before @@ -120,4 +122,18 @@ public void testEmptyColumnGroupInColumnValuesInTokenizeRequestValidations() { Assert.assertEquals(ErrorMessage.EmptyColumnGroupInColumnValue.getMessage(), e.getMessage()); } } + + @Test + public void testTokenizeResponse() { + try { + tokens.add("1234-5678-9012-3456"); + tokens.add("5678-9012-3456-7890"); + TokenizeResponse response = new TokenizeResponse(tokens); + String responseString = "{\n\t\"tokens\": [1234-5678-9012-3456, 5678-9012-3456-7890]\n}"; + Assert.assertEquals(2, response.getTokens().size()); + Assert.assertEquals(responseString, response.toString()); + } catch (Exception e) { + Assert.fail(INVALID_EXCEPTION_THROWN); + } + } } From b9ab36f9301f0b5fe92a3a263f940c877bff7f8b Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Tue, 19 Nov 2024 20:23:17 +0530 Subject: [PATCH 54/68] SK-1752 workflow for internal release --- .github/workflows/internal-release.yml | 39 +++++++++++++++ .github/workflows/release.yml | 2 +- pom.xml | 66 +++++++++++++++++--------- 3 files changed, 83 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/internal-release.yml diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml new file mode 100644 index 00000000..1bacef24 --- /dev/null +++ b/.github/workflows/internal-release.yml @@ -0,0 +1,39 @@ +name: Publish package to the JFROG Artifactory +on: + push: + tags: '*.*.*' + paths-ignore: + - "pom.xml" + - "*.md" + branches: + - release/* + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Set up Jfrog artifactory + uses: actions/setup-java@v1 + with: + java-version: '1.8' + distribution: 'adopt' + server-id: central + server-username: JFROG_USERNAME + server-password: JFROG_PASSWORD + gpg-private-key: ${{ secrets.JFROG_GPG_KEY }} # Value of the GPG private key to import + gpg-passphrase: JFROG_GPG_PASSPHRASE # env variable for GPG private key passphrase + + - name: create-json + id: create-json + uses: jsdaniell/create-json@1.1.2 + with: + name: "credentials.json" + json: ${{ secrets.TEST_CREDENTIALS_FILE_STRING }} + + - name: Publish package to Jfrog Artifactory + run: mvn clean deploy -P jfrog + env: + JFROG_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} + JFROG_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} + JFROG_GPG_PASSPHRASE: ${{ secrets.JFROG_GPG_PASSPHRASE }} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 02c7b612..f30dda26 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: json: ${{ secrets.TEST_CREDENTIALS_FILE_STRING }} - name: Publish package to Maven Central - run: mvn --batch-mode deploy + run: mvn --batch-mode deploy -P maven-central env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} diff --git a/pom.xml b/pom.xml index 1dc1b785..1bbca53f 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.skyflow skyflow-java - 1.15.0 + 1.15.0-v2dev1.0 jar ${project.groupId}:${project.artifactId} @@ -44,17 +44,6 @@ 1.3.5 - - - ossrh - https://s01.oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://s01.oss.sonatype.org/service/local/staging/deploy/maven2 - - - @@ -132,17 +121,17 @@ - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.7 - true - - ossrh - https://s01.oss.sonatype.org/ - true - - + + + + + + + + + + + org.apache.maven.plugins maven-source-plugin @@ -253,4 +242,35 @@ + + + maven-central + + + ossrh + https://s01.oss.sonatype.org/service/local/staging/deploy/maven2 + + + ossrh + https://s01.oss.sonatype.org/content/repositories/snapshots + + + + + jfrog + + + central + prekarilabs.jfrog.io-releases + https://prekarilabs.jfrog.io/artifactory/skyflow-java + + + snapshots + prekarilabs.jfrog.io-snapshots + https://prekarilabs.jfrog.io/artifactory/skyflow-java + + + + + \ No newline at end of file From 656272d73e1f7eb87f57e532065295b9c9e445e0 Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Tue, 19 Nov 2024 21:42:35 +0530 Subject: [PATCH 55/68] SK-1752 workflow for internal release --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1bbca53f..90f9d592 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.skyflow skyflow-java - 1.15.0-v2dev1.0 + 1.15.0-v2dev2.0 jar ${project.groupId}:${project.artifactId} From 57657d2421f468d7bbf1f454beab723a27ccf08a Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Tue, 19 Nov 2024 22:03:42 +0530 Subject: [PATCH 56/68] SK-1753 add create env step --- .github/workflows/internal-release.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index 1bacef24..38d6424f 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -24,6 +24,13 @@ jobs: gpg-private-key: ${{ secrets.JFROG_GPG_KEY }} # Value of the GPG private key to import gpg-passphrase: JFROG_GPG_PASSPHRASE # env variable for GPG private key passphrase + - name: create env + id: create-env + run: | + touch .env + echo SKYFLOW_CREDENTIALS=${{ secrets.SKYFLOW_CREDENTIALS }} >> .env + echo TEST_EXPIRED_TOKEN=${{ secrets.TEST_EXPIRED_TOKEN }} >> .env + - name: create-json id: create-json uses: jsdaniell/create-json@1.1.2 From d09ff9428f59e02b82f8c03098c5c83c326a36ce Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Wed, 20 Nov 2024 15:54:52 +0530 Subject: [PATCH 57/68] SK-1753 auto generate release version in pom.xml --- .github/workflows/internal-release.yml | 23 +++++++++++++-- pom.xml | 2 +- scripts/bump_version.sh | 40 ++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 3 deletions(-) create mode 100755 scripts/bump_version.sh diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index 38d6424f..17176e5e 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -24,14 +24,33 @@ jobs: gpg-private-key: ${{ secrets.JFROG_GPG_KEY }} # Value of the GPG private key to import gpg-passphrase: JFROG_GPG_PASSPHRASE # env variable for GPG private key passphrase - - name: create env + - name: Get Previous tag + id: previoustag + uses: WyriHaximus/github-action-get-previous-tag@v1 + with: + fallback: 1.0.0 + + - name: Bump Version + run: | + chmod +x ./scripts/bump_version.sh + ./scripts/bump_version.sh "${{ steps.previoustag.outputs.tag }}" "$(git rev-parse --short "$GITHUB_SHA")" + + - name: Commit changes + run: | + git config user.name ${{ github.actor }} + git config user.email ${{ github.actor }}@users.noreply.github.com + git add pom.xml + git commit -m "[AUTOMATED] Private Release ${{ steps.previoustag.outputs.tag }}-dev.$(git rev-parse --short $GITHUB_SHA)" + git push origin -f + + - name: Create env id: create-env run: | touch .env echo SKYFLOW_CREDENTIALS=${{ secrets.SKYFLOW_CREDENTIALS }} >> .env echo TEST_EXPIRED_TOKEN=${{ secrets.TEST_EXPIRED_TOKEN }} >> .env - - name: create-json + - name: Create credentials json id: create-json uses: jsdaniell/create-json@1.1.2 with: diff --git a/pom.xml b/pom.xml index 90f9d592..b0686004 100644 --- a/pom.xml +++ b/pom.xml @@ -273,4 +273,4 @@ - \ No newline at end of file + diff --git a/scripts/bump_version.sh b/scripts/bump_version.sh new file mode 100755 index 00000000..58ab83a5 --- /dev/null +++ b/scripts/bump_version.sh @@ -0,0 +1,40 @@ +# Input Arguments +Version=$1 +CommitHash=$2 +PomFile="../pom.xml" + +if [ -z "$Version" ]; then + echo "Error: Version argument is required." + exit 1 +fi + +# Update only the main project's +if [ -z "$CommitHash" ]; then + echo "Bumping main project version to $Version" + + awk -v version="$Version" ' + BEGIN { updated = 0 } + // && updated == 0 { + sub(/.*<\/version>/, "" version "") + updated = 1 + } + { print } + ' "$PomFile" > tempfile && cat tempfile > "$PomFile" && rm -f tempfile + + echo "--------------------------" + echo "Done. Main project version now at $Version" +else + echo "Bumping main project version to $Version-dev-$CommitHash" + + awk -v version="$Version-dev.$CommitHash" ' + BEGIN { updated = 0 } + // && updated == 0 { + sub(/.*<\/version>/, "" version "") + updated = 1 + } + { print } + ' "$PomFile" > tempfile && cat tempfile > "$PomFile" && rm -f tempfile + + echo "--------------------------" + echo "Done. Main project version now at $Version-dev.$CommitHash" +fi From b76fa831677a38f8dd572d16f9096b16c7f7aa03 Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Wed, 20 Nov 2024 16:28:00 +0530 Subject: [PATCH 58/68] SK-1753 auto generate release version in pom.xml --- .github/workflows/internal-release.yml | 7 ++++++- scripts/bump_version.sh | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index 17176e5e..959f0000 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -7,6 +7,8 @@ on: - "*.md" branches: - release/* + pull-request: + - release/* jobs: publish: @@ -30,6 +32,9 @@ jobs: with: fallback: 1.0.0 + - name: Print working directory + run: pwd + - name: Bump Version run: | chmod +x ./scripts/bump_version.sh @@ -58,7 +63,7 @@ jobs: json: ${{ secrets.TEST_CREDENTIALS_FILE_STRING }} - name: Publish package to Jfrog Artifactory - run: mvn clean deploy -P jfrog + run: mvn clean deplo -P jfrog env: JFROG_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} JFROG_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} diff --git a/scripts/bump_version.sh b/scripts/bump_version.sh index 58ab83a5..d729ea63 100755 --- a/scripts/bump_version.sh +++ b/scripts/bump_version.sh @@ -1,7 +1,7 @@ # Input Arguments Version=$1 CommitHash=$2 -PomFile="../pom.xml" +PomFile="$GITHUB_WORKSPACE/pom.xml" if [ -z "$Version" ]; then echo "Error: Version argument is required." From 92eae6ab8976d9487544a9076a163c56c913b2bd Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Wed, 20 Nov 2024 16:31:56 +0530 Subject: [PATCH 59/68] SK-1753 auto generate release version in pom.xml --- .github/workflows/internal-release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index 959f0000..829f0c29 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -6,9 +6,9 @@ on: - "pom.xml" - "*.md" branches: - - release/* - pull-request: - - release/* + branches: [ release/*, '*' ] + pull_request: + branches: [ release/* ] jobs: publish: From 167b1b41d17f3af7df16ca0524351dc9dc2bcf17 Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Wed, 20 Nov 2024 16:38:55 +0530 Subject: [PATCH 60/68] SK-1753 auto generate release version in pom.xml --- .github/workflows/internal-release.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index 829f0c29..b5d40bcc 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -5,10 +5,9 @@ on: paths-ignore: - "pom.xml" - "*.md" - branches: - branches: [ release/*, '*' ] - pull_request: - branches: [ release/* ] + branches: [ release/*, '*' ] + pull_request: + branches: [ release/* ] jobs: publish: From 953903a3ff94f1cdac3542addaf250b22f8c2671 Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Wed, 20 Nov 2024 16:45:43 +0530 Subject: [PATCH 61/68] SK-1753 auto generate release version in pom.xml --- .github/workflows/internal-release.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index b5d40bcc..4fbb156f 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -5,9 +5,8 @@ on: paths-ignore: - "pom.xml" - "*.md" - branches: [ release/*, '*' ] - pull_request: - branches: [ release/* ] + branches: + - release/* jobs: publish: @@ -31,9 +30,6 @@ jobs: with: fallback: 1.0.0 - - name: Print working directory - run: pwd - - name: Bump Version run: | chmod +x ./scripts/bump_version.sh From 817bdc4b9c447cf4bb6164d7c12c4954b9b014c3 Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Wed, 20 Nov 2024 16:48:06 +0530 Subject: [PATCH 62/68] SK-1753 auto generate release version in pom.xml --- .github/workflows/internal-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index 4fbb156f..17176e5e 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -58,7 +58,7 @@ jobs: json: ${{ secrets.TEST_CREDENTIALS_FILE_STRING }} - name: Publish package to Jfrog Artifactory - run: mvn clean deplo -P jfrog + run: mvn clean deploy -P jfrog env: JFROG_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} JFROG_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} From 5e2d385dea430fbc503f3fba86a78667032a9310 Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Wed, 20 Nov 2024 17:05:27 +0530 Subject: [PATCH 63/68] SK-1753 auto generate release version in pom.xml --- .github/workflows/internal-release.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index 17176e5e..5d82fda1 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -12,7 +12,11 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 + with: + ref: ${{ github.ref_name }} + fetch-depth: 0 + - name: Set up Jfrog artifactory uses: actions/setup-java@v1 with: From 5c482719042b8296e319110adb4cb21126b9ee7a Mon Sep 17 00:00:00 2001 From: skyflow-shravan Date: Wed, 20 Nov 2024 17:26:47 +0530 Subject: [PATCH 64/68] SK-1753 restore version in pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b0686004..36544eb5 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.skyflow skyflow-java - 1.15.0-v2dev2.0 + 1.15.0 jar ${project.groupId}:${project.artifactId} From 222e54a291d7b1684970bcd7113066a737863eb8 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Wed, 20 Nov 2024 17:39:45 +0530 Subject: [PATCH 65/68] SK-1623 Fix typos in Samples --- .../connection/InvokeConnectionExample.java | 30 +++++++++---------- .../java/com/example/vault/DeleteExample.java | 12 ++++---- .../com/example/vault/DetokenizeExample.java | 12 ++++---- .../java/com/example/vault/GetExample.java | 14 ++++----- .../java/com/example/vault/InsertExample.java | 20 ++++++------- .../java/com/example/vault/QueryExample.java | 8 ++--- .../com/example/vault/TokenizeExample.java | 12 ++++---- .../java/com/example/vault/UpdateExample.java | 22 +++++++------- 8 files changed, 65 insertions(+), 65 deletions(-) diff --git a/samples/src/main/java/com/example/connection/InvokeConnectionExample.java b/samples/src/main/java/com/example/connection/InvokeConnectionExample.java index 1c1ee12f..431fd79d 100644 --- a/samples/src/main/java/com/example/connection/InvokeConnectionExample.java +++ b/samples/src/main/java/com/example/connection/InvokeConnectionExample.java @@ -15,19 +15,19 @@ public class InvokeConnectionExample { public static void main(String[] args) throws SkyflowException { Credentials credentials = new Credentials(); - credentials.setPath(""); + credentials.setPath(""); ConnectionConfig connectionConfig1 = new ConnectionConfig(); - connectionConfig1.setConnectionId(""); - connectionConfig1.setConnectionUrl(""); + connectionConfig1.setConnectionId(""); + connectionConfig1.setConnectionUrl(""); connectionConfig1.setCredentials(credentials); ConnectionConfig connectionConfig2 = new ConnectionConfig(); - connectionConfig2.setConnectionId(""); - connectionConfig2.setConnectionUrl(""); + connectionConfig2.setConnectionId(""); + connectionConfig2.setConnectionUrl(""); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + skyflowCredentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) @@ -37,11 +37,11 @@ public static void main(String[] args) throws SkyflowException { .build(); Map requestBody = new HashMap<>(); - requestBody.put("", ""); - requestBody.put("", ""); + requestBody.put("", ""); + requestBody.put("", ""); Map requestHeaders = new HashMap<>(); - requestHeaders.put("", ""); - requestHeaders.put("", ""); + requestHeaders.put("", ""); + requestHeaders.put("", ""); InvokeConnectionRequest invokeConnectionRequest1 = InvokeConnectionRequest.builder() .methodName(RequestMethod.POST) .requestBody(requestBody) @@ -51,18 +51,18 @@ public static void main(String[] args) throws SkyflowException { System.out.println(invokeConnectionResponse1); Map pathParams = new HashMap<>(); - pathParams.put("", ""); - pathParams.put("", ""); + pathParams.put("", ""); + pathParams.put("", ""); Map queryParams = new HashMap<>(); - queryParams.put("", ""); - queryParams.put("", ""); + queryParams.put("", ""); + queryParams.put("", ""); InvokeConnectionRequest invokeConnectionRequest2 = InvokeConnectionRequest.builder() .methodName(RequestMethod.GET) .pathParams(pathParams) .queryParams(queryParams) .build(); InvokeConnectionResponse invokeConnectionResponse2 = skyflowClient - .connection("").invoke(invokeConnectionRequest2); + .connection("").invoke(invokeConnectionRequest2); System.out.println(invokeConnectionResponse2); } } diff --git a/samples/src/main/java/com/example/vault/DeleteExample.java b/samples/src/main/java/com/example/vault/DeleteExample.java index 17887204..d14554ce 100644 --- a/samples/src/main/java/com/example/vault/DeleteExample.java +++ b/samples/src/main/java/com/example/vault/DeleteExample.java @@ -28,7 +28,7 @@ public static void main(String[] args) throws SkyflowException { stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + skyflowCredentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) @@ -38,15 +38,15 @@ public static void main(String[] args) throws SkyflowException { .build(); ArrayList ids1 = new ArrayList<>(); - ids1.add(""); - DeleteRequest deleteRequest1 = DeleteRequest.builder().ids(ids1).table("").build(); + ids1.add(""); + DeleteRequest deleteRequest1 = DeleteRequest.builder().ids(ids1).table("").build(); DeleteResponse deleteResponse1 = skyflowClient.vault().delete(deleteRequest1); System.out.println(deleteResponse1); ArrayList ids2 = new ArrayList<>(); - ids2.add(""); - DeleteRequest deleteRequest2 = DeleteRequest.builder().ids(ids2).table("").build(); - DeleteResponse deleteResponse2 = skyflowClient.vault("").delete(deleteRequest2); + ids2.add(""); + DeleteRequest deleteRequest2 = DeleteRequest.builder().ids(ids2).table("").build(); + DeleteResponse deleteResponse2 = skyflowClient.vault("").delete(deleteRequest2); System.out.println(deleteResponse2); } } diff --git a/samples/src/main/java/com/example/vault/DetokenizeExample.java b/samples/src/main/java/com/example/vault/DetokenizeExample.java index f026e43e..cd6d38ad 100644 --- a/samples/src/main/java/com/example/vault/DetokenizeExample.java +++ b/samples/src/main/java/com/example/vault/DetokenizeExample.java @@ -29,7 +29,7 @@ public static void main(String[] args) throws SkyflowException { stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + skyflowCredentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) @@ -39,19 +39,19 @@ public static void main(String[] args) throws SkyflowException { .build(); ArrayList tokens1 = new ArrayList<>(); - tokens1.add(""); - tokens1.add(""); + tokens1.add(""); + tokens1.add(""); DetokenizeRequest detokenizeRequest1 = DetokenizeRequest.builder().tokens(tokens1).continueOnError(true).build(); DetokenizeResponse detokenizeResponse1 = skyflowClient.vault().detokenize(detokenizeRequest1); System.out.println(detokenizeResponse1); ArrayList tokens2 = new ArrayList<>(); - tokens2.add(""); - tokens2.add(""); + tokens2.add(""); + tokens2.add(""); DetokenizeRequest detokenizeRequest2 = DetokenizeRequest.builder() .tokens(tokens2).continueOnError(false).redactionType(RedactionType.DEFAULT).build(); - DetokenizeResponse detokenizeResponse2 = skyflowClient.vault("").detokenize(detokenizeRequest2); + DetokenizeResponse detokenizeResponse2 = skyflowClient.vault("").detokenize(detokenizeRequest2); System.out.println(detokenizeResponse2); } } diff --git a/samples/src/main/java/com/example/vault/GetExample.java b/samples/src/main/java/com/example/vault/GetExample.java index 357c3516..5dda25d3 100644 --- a/samples/src/main/java/com/example/vault/GetExample.java +++ b/samples/src/main/java/com/example/vault/GetExample.java @@ -29,7 +29,7 @@ public static void main(String[] args) throws SkyflowException { stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + skyflowCredentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) @@ -39,20 +39,20 @@ public static void main(String[] args) throws SkyflowException { .build(); ArrayList ids = new ArrayList<>(); - ids.add(""); - GetRequest getByIdRequest = GetRequest.builder().returnTokens(true).ids(ids).table("").build(); + ids.add(""); + GetRequest getByIdRequest = GetRequest.builder().returnTokens(true).ids(ids).table("").build(); GetResponse getByIdResponse = skyflowClient.vault().get(getByIdRequest); System.out.println(getByIdResponse); ArrayList columnValues = new ArrayList<>(); - columnValues.add(""); + columnValues.add(""); GetRequest getByColumnRequest = GetRequest.builder() - .table("") - .columnName("") + .table("") + .columnName("") .columnValues(columnValues) .redactionType(RedactionType.PLAIN_TEXT) .build(); - GetResponse getByColumnResponse = skyflowClient.vault("").get(getByColumnRequest); + GetResponse getByColumnResponse = skyflowClient.vault("").get(getByColumnRequest); System.out.println(getByColumnResponse); } } diff --git a/samples/src/main/java/com/example/vault/InsertExample.java b/samples/src/main/java/com/example/vault/InsertExample.java index 21d9260b..20070e83 100644 --- a/samples/src/main/java/com/example/vault/InsertExample.java +++ b/samples/src/main/java/com/example/vault/InsertExample.java @@ -30,7 +30,7 @@ public static void main(String[] args) throws SkyflowException { stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + skyflowCredentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) @@ -41,17 +41,17 @@ public static void main(String[] args) throws SkyflowException { ArrayList> values1 = new ArrayList<>(); HashMap value1 = new HashMap<>(); - value1.put("", ""); - value1.put("", ""); + value1.put("", ""); + value1.put("", ""); values1.add(value1); ArrayList> tokens = new ArrayList<>(); HashMap token = new HashMap<>(); - token.put("", ""); + token.put("", ""); tokens.add(token); InsertRequest insertRequest = InsertRequest.builder() - .table("") + .table("") .continueOnError(true) .tokenStrict(Byot.ENABLE) .values(values1) @@ -63,19 +63,19 @@ public static void main(String[] args) throws SkyflowException { ArrayList> values2 = new ArrayList<>(); HashMap value2 = new HashMap<>(); - value2.put("", ""); - value2.put("", ""); + value2.put("", ""); + value2.put("", ""); values2.add(value2); InsertRequest upsertRequest = InsertRequest.builder() - .table("") + .table("") .continueOnError(false) .tokenStrict(Byot.DISABLE) .values(values2) .returnTokens(false) - .upsert("") + .upsert("") .build(); - InsertResponse upsertResponse = skyflowClient.vault("").insert(upsertRequest); + InsertResponse upsertResponse = skyflowClient.vault("").insert(upsertRequest); System.out.println(upsertResponse); } } diff --git a/samples/src/main/java/com/example/vault/QueryExample.java b/samples/src/main/java/com/example/vault/QueryExample.java index c80a2443..d5928cd5 100644 --- a/samples/src/main/java/com/example/vault/QueryExample.java +++ b/samples/src/main/java/com/example/vault/QueryExample.java @@ -26,7 +26,7 @@ public static void main(String[] args) throws SkyflowException { stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + skyflowCredentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) @@ -35,14 +35,14 @@ public static void main(String[] args) throws SkyflowException { .addSkyflowCredentials(skyflowCredentials) .build(); - String query1 = ""; + String query1 = ""; QueryRequest queryRequest1 = QueryRequest.builder().query(query1).build(); QueryResponse queryResponse1 = skyflowClient.vault().query(queryRequest1); System.out.println(queryResponse1); - String query2 = ""; + String query2 = ""; QueryRequest queryRequest2 = QueryRequest.builder().query(query2).build(); - QueryResponse queryResponse2 = skyflowClient.vault("").query(queryRequest2); + QueryResponse queryResponse2 = skyflowClient.vault("").query(queryRequest2); System.out.println(queryResponse2); } diff --git a/samples/src/main/java/com/example/vault/TokenizeExample.java b/samples/src/main/java/com/example/vault/TokenizeExample.java index f7677670..e7db6fb2 100644 --- a/samples/src/main/java/com/example/vault/TokenizeExample.java +++ b/samples/src/main/java/com/example/vault/TokenizeExample.java @@ -30,7 +30,7 @@ public static void main(String[] args) throws SkyflowException { stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + skyflowCredentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) @@ -40,8 +40,8 @@ public static void main(String[] args) throws SkyflowException { .build(); List columnValues1 = new ArrayList<>(); - ColumnValue value1 = ColumnValue.builder().value("").columnGroup("").build(); - ColumnValue value2 = ColumnValue.builder().value("").columnGroup("").build(); + ColumnValue value1 = ColumnValue.builder().value("").columnGroup("").build(); + ColumnValue value2 = ColumnValue.builder().value("").columnGroup("").build(); columnValues1.add(value1); columnValues1.add(value2); TokenizeRequest tokenizeRequest1 = TokenizeRequest.builder().values(columnValues1).build(); @@ -49,12 +49,12 @@ public static void main(String[] args) throws SkyflowException { System.out.println(tokenizeResponse1); List columnValues2 = new ArrayList<>(); - ColumnValue value3 = ColumnValue.builder().value("").columnGroup("").build(); - ColumnValue value4 = ColumnValue.builder().value("").columnGroup("").build(); + ColumnValue value3 = ColumnValue.builder().value("").columnGroup("").build(); + ColumnValue value4 = ColumnValue.builder().value("").columnGroup("").build(); columnValues2.add(value3); columnValues2.add(value4); TokenizeRequest tokenizeRequest2 = TokenizeRequest.builder().values(columnValues2).build(); - TokenizeResponse tokenizeResponse2 = skyflowClient.vault("").tokenize(tokenizeRequest2); + TokenizeResponse tokenizeResponse2 = skyflowClient.vault("").tokenize(tokenizeRequest2); System.out.println(tokenizeResponse2); } } diff --git a/samples/src/main/java/com/example/vault/UpdateExample.java b/samples/src/main/java/com/example/vault/UpdateExample.java index b782d80d..1508fc25 100644 --- a/samples/src/main/java/com/example/vault/UpdateExample.java +++ b/samples/src/main/java/com/example/vault/UpdateExample.java @@ -29,7 +29,7 @@ public static void main(String[] args) throws SkyflowException { stageConfig.setEnv(Env.STAGE); Credentials skyflowCredentials = new Credentials(); - credentials.setPath(""); + skyflowCredentials.setPath(""); Skyflow skyflowClient = Skyflow.builder() .setLogLevel(LogLevel.DEBUG) @@ -39,15 +39,15 @@ public static void main(String[] args) throws SkyflowException { .build(); HashMap values1 = new HashMap<>(); - values1.put("", ""); - values1.put("", ""); + values1.put("", ""); + values1.put("", ""); HashMap tokens = new HashMap<>(); - tokens.put("", ""); + tokens.put("", ""); UpdateRequest updateRequest1 = UpdateRequest.builder() - .id("") + .id("") + .table("") .tokenStrict(Byot.ENABLE) .values(values1) .tokens(tokens) @@ -57,17 +57,17 @@ public static void main(String[] args) throws SkyflowException { System.out.println(updateResponse1); HashMap values2 = new HashMap<>(); - values2.put("", ""); - values2.put("", ""); + values2.put("", ""); + values2.put("", ""); UpdateRequest updateRequest2 = UpdateRequest.builder() - .id("") + .id("") + .table("") .tokenStrict(Byot.DISABLE) .values(values2) .returnTokens(false) .build(); - UpdateResponse updateResponse2 = skyflowClient.vault("").update(updateRequest2); + UpdateResponse updateResponse2 = skyflowClient.vault("").update(updateRequest2); System.out.println(updateResponse2); } } From b4f2015c2bfcc6856033afdc178ca2dc9eb56d55 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 22 Nov 2024 18:59:20 +0530 Subject: [PATCH 66/68] SK-1623 Worked on feedback for Update vault API interface --- src/main/java/com/skyflow/VaultClient.java | 2 +- .../java/com/skyflow/errors/ErrorMessage.java | 7 +- src/main/java/com/skyflow/logs/ErrorLogs.java | 3 + .../utils/validations/Validations.java | 42 +++--- .../vault/controller/VaultController.java | 2 +- .../com/skyflow/vault/data/UpdateRequest.java | 20 +-- .../skyflow/vault/data/UpdateResponse.java | 12 +- .../com/skyflow/vault/data/UpdateTests.java | 135 +++++++++++------- 8 files changed, 122 insertions(+), 101 deletions(-) diff --git a/src/main/java/com/skyflow/VaultClient.java b/src/main/java/com/skyflow/VaultClient.java index 08c161de..a6a63f64 100644 --- a/src/main/java/com/skyflow/VaultClient.java +++ b/src/main/java/com/skyflow/VaultClient.java @@ -144,7 +144,7 @@ protected RecordServiceUpdateRecordBody getUpdateRequestBody(UpdateRequest reque RecordServiceUpdateRecordBody updateRequestBody = new RecordServiceUpdateRecordBody(); updateRequestBody.byot(request.getTokenStrict().getBYOT()); updateRequestBody.setTokenization(request.getReturnTokens()); - HashMap values = request.getValues(); + HashMap values = request.getData(); HashMap tokens = request.getTokens(); V1FieldRecords record = new V1FieldRecords(); record.setFields(values); diff --git a/src/main/java/com/skyflow/errors/ErrorMessage.java b/src/main/java/com/skyflow/errors/ErrorMessage.java index 31648fb8..ac5fd0cf 100644 --- a/src/main/java/com/skyflow/errors/ErrorMessage.java +++ b/src/main/java/com/skyflow/errors/ErrorMessage.java @@ -100,8 +100,11 @@ public enum ErrorMessage { PartialSuccess("%s0 Validation error. Check 'SkyflowError.data' for details."), // update - SkyflowIdKeyError("%s0 Validation error. 'id' key is missing from the payload. Specify an 'id' key."), - EmptySkyflowId("%s0 Validation error. 'id' can't be empty. Specify an id."), + DataKeyError("%s0 Validation error. 'data' key is missing from the payload. Specify a 'data' key."), + EmptyData("%s0 Validation error. 'data' can't be empty. Specify data."), + SkyflowIdKeyError("%s0 Validation error. 'skyflow_id' is missing from the data payload. Specify a 'skyflow_id'."), + InvalidSkyflowIdType("%s0 Validation error. Invalid type for 'skyflow_id' in data payload. Specify 'skyflow_id' as a string."), + EmptySkyflowId("%s0 Validation error. 'skyflow_id' can't be empty. Specify a skyflow id."), // query QueryKeyError("%s0 Validation error. 'query' key is missing from the payload. Specify a 'query' key."), diff --git a/src/main/java/com/skyflow/logs/ErrorLogs.java b/src/main/java/com/skyflow/logs/ErrorLogs.java index 98bc3064..ad32b886 100644 --- a/src/main/java/com/skyflow/logs/ErrorLogs.java +++ b/src/main/java/com/skyflow/logs/ErrorLogs.java @@ -82,7 +82,10 @@ public enum ErrorLogs { EMPTY_COLUMN_VALUES("Invalid %s1 request. Column values can not be empty."), EMPTY_OR_NULL_COLUMN_VALUE_IN_COLUMN_VALUES("Invalid %s1 request. Column value can not by null or empty in column values at index %s2."), GET_REQUEST_REJECTED("Get request resulted in failure."), + DATA_IS_REQUIRED("Invalid %s1 request. Data is required."), + EMPTY_DATA("Invalid %s1 request. Data can not be empty."), SKYFLOW_ID_IS_REQUIRED("Invalid %s1 request. Skyflow Id is required."), + INVALID_SKYFLOW_ID_TYPE("Invalid %s1 request. Skyflow Id should of type String."), EMPTY_SKYFLOW_ID("Invalid %s1 request. Skyflow Id can not be empty."), UPDATE_REQUEST_REJECTED("Update request resulted in failure."), QUERY_IS_REQUIRED("Invalid %s1 request. Query is required."), diff --git a/src/main/java/com/skyflow/utils/validations/Validations.java b/src/main/java/com/skyflow/utils/validations/Validations.java index 5e88ec1b..77f6b823 100644 --- a/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/src/main/java/com/skyflow/utils/validations/Validations.java @@ -486,8 +486,7 @@ public static void validateGetRequest(GetRequest getRequest) throws SkyflowExcep public static void validateUpdateRequest(UpdateRequest updateRequest) throws SkyflowException { String table = updateRequest.getTable(); - String skyflowId = updateRequest.getId(); - HashMap values = updateRequest.getValues(); + HashMap data = updateRequest.getData(); HashMap tokens = updateRequest.getTokens(); Byot tokenStrict = updateRequest.getTokenStrict(); @@ -501,26 +500,31 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.UPDATE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); - } else if (skyflowId == null) { + } else if (data == null) { LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.SKYFLOW_ID_IS_REQUIRED.getLog(), InterfaceName.UPDATE.getName() + ErrorLogs.DATA_IS_REQUIRED.getLog(), InterfaceName.UPDATE.getName() )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.SkyflowIdKeyError.getMessage()); - } else if (skyflowId.trim().isEmpty()) { + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.DataKeyError.getMessage()); + } else if (data.isEmpty()) { LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.EMPTY_SKYFLOW_ID.getLog(), InterfaceName.UPDATE.getName() + ErrorLogs.EMPTY_DATA.getLog(), InterfaceName.UPDATE.getName() )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptySkyflowId.getMessage()); - } else if (values == null) { + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyData.getMessage()); + } else if (!data.containsKey("skyflow_id")) { LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.VALUES_IS_REQUIRED.getLog(), InterfaceName.UPDATE.getName() + ErrorLogs.SKYFLOW_ID_IS_REQUIRED.getLog(), InterfaceName.UPDATE.getName() )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ValuesKeyError.getMessage()); - } else if (values.isEmpty()) { + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.SkyflowIdKeyError.getMessage()); + } else if (!(data.get("skyflow_id") instanceof String)) { LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.EMPTY_VALUES.getLog(), InterfaceName.UPDATE.getName() + ErrorLogs.INVALID_SKYFLOW_ID_TYPE.getLog(), InterfaceName.UPDATE.getName() )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValues.getMessage()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidSkyflowIdType.getMessage()); + } else if (data.get("skyflow_id").toString().trim().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_SKYFLOW_ID.getLog(), InterfaceName.UPDATE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptySkyflowId.getMessage()); } else if (tokens != null && tokens.isEmpty()) { LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_TOKENS.getLog(), InterfaceName.UPDATE.getName() @@ -528,14 +532,14 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTokens.getMessage()); } - for (String key : values.keySet()) { + for (String key : data.keySet()) { if (key == null || key.trim().isEmpty()) { LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_KEY_IN_VALUES.getLog(), InterfaceName.UPDATE.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyKeyInValues.getMessage()); } else { - Object value = values.get(key); + Object value = data.get(key); if (value == null || value.toString().trim().isEmpty()) { LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_VALUE_IN_VALUES.getLog(), InterfaceName.UPDATE.getName(), key @@ -565,7 +569,7 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE.toString())); } - validateTokensMapWithTokenStrict(tokens, values); + validateTokensMapWithTokenStrict(tokens, data); break; case ENABLE_STRICT: if (tokens == null) { @@ -575,7 +579,7 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), Utils.parameterizedString( ErrorMessage.NoTokensWithByot.getMessage(), Byot.ENABLE_STRICT.toString())); - } else if (tokens.size() != values.size()) { + } else if (tokens.size() != (data.size() - 1)) { LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.INSUFFICIENT_TOKENS_PASSED_FOR_BYOT_ENABLE_STRICT.getLog(), InterfaceName.INSERT.getName() @@ -583,7 +587,7 @@ public static void validateUpdateRequest(UpdateRequest updateRequest) throws Sky throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InsufficientTokensPassedForByotEnableStrict.getMessage()); } - validateTokensMapWithTokenStrict(tokens, values); + validateTokensMapWithTokenStrict(tokens, data); break; } } diff --git a/src/main/java/com/skyflow/vault/controller/VaultController.java b/src/main/java/com/skyflow/vault/controller/VaultController.java index 3a3bc03f..2c211687 100644 --- a/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -273,7 +273,7 @@ public UpdateResponse update(UpdateRequest updateRequest) throws SkyflowExceptio result = super.getRecordsApi().recordServiceUpdateRecord( super.getVaultConfig().getVaultId(), updateRequest.getTable(), - updateRequest.getId(), + updateRequest.getData().get("skyflow_id").toString(), updateBody ); LogUtil.printInfoLog(InfoLogs.UPDATE_REQUEST_RESOLVED.getLog()); diff --git a/src/main/java/com/skyflow/vault/data/UpdateRequest.java b/src/main/java/com/skyflow/vault/data/UpdateRequest.java index 78abcd20..58e075ac 100644 --- a/src/main/java/com/skyflow/vault/data/UpdateRequest.java +++ b/src/main/java/com/skyflow/vault/data/UpdateRequest.java @@ -19,16 +19,12 @@ public String getTable() { return this.builder.table; } - public String getId() { - return this.builder.id; - } - public Boolean getReturnTokens() { return this.builder.returnTokens; } - public HashMap getValues() { - return this.builder.values; + public HashMap getData() { + return this.builder.data; } public HashMap getTokens() { @@ -41,9 +37,8 @@ public Byot getTokenStrict() { public static final class UpdateRequestBuilder { private String table; - private String id; private Boolean returnTokens; - private HashMap values; + private HashMap data; private HashMap tokens; private Byot tokenStrict; @@ -57,18 +52,13 @@ public UpdateRequestBuilder table(String table) { return this; } - public UpdateRequestBuilder id(String id) { - this.id = id; - return this; - } - public UpdateRequestBuilder returnTokens(Boolean returnTokens) { this.returnTokens = returnTokens == null || returnTokens; return this; } - public UpdateRequestBuilder values(HashMap values) { - this.values = values; + public UpdateRequestBuilder data(HashMap data) { + this.data = data; return this; } diff --git a/src/main/java/com/skyflow/vault/data/UpdateResponse.java b/src/main/java/com/skyflow/vault/data/UpdateResponse.java index 2ca52365..4567e2e1 100644 --- a/src/main/java/com/skyflow/vault/data/UpdateResponse.java +++ b/src/main/java/com/skyflow/vault/data/UpdateResponse.java @@ -24,23 +24,17 @@ public String toString() { StringBuilder response = new StringBuilder("{"); response.append("\n\t\"skyflowId\": \"").append(skyflowId).append("\""); if (!tokens.isEmpty()) { - response.append("\n\t\"tokens\": ").append(formatRecords(tokens)); + response.append(formatTokens(tokens)); } response.append("\n}"); return response.toString(); } - private String formatRecords(HashMap tokens) { + private String formatTokens(HashMap tokens) { StringBuilder sb = new StringBuilder(); - sb.append("{"); for (String key : tokens.keySet()) { sb.append("\n\t\"").append(key).append("\": \"").append(tokens.get(key)).append("\","); } - sb.append("\n}"); - return toIndentedString(sb); - } - - private String toIndentedString(Object o) { - return o.toString().replace("\n", "\n\t"); + return sb.toString(); } } diff --git a/src/test/java/com/skyflow/vault/data/UpdateTests.java b/src/test/java/com/skyflow/vault/data/UpdateTests.java index b82a0734..d323dcee 100644 --- a/src/test/java/com/skyflow/vault/data/UpdateTests.java +++ b/src/test/java/com/skyflow/vault/data/UpdateTests.java @@ -32,7 +32,7 @@ public class UpdateTests { private static String clusterID = null; private static String skyflowID = null; private static String table = null; - private static HashMap valueMap = null; + private static HashMap dataMap = null; private static HashMap tokenMap = null; private static Skyflow skyflowClient = null; @@ -56,34 +56,33 @@ public static void setup() throws SkyflowException { skyflowID = "test_update_id_1"; table = "test_table"; - valueMap = new HashMap<>(); + dataMap = new HashMap<>(); tokenMap = new HashMap<>(); } @Before public void setupTest() { - valueMap.clear(); + dataMap.clear(); tokenMap.clear(); } @Test public void testValidInputInUpdateRequestValidations() { try { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); + dataMap.put("skyflow_id", skyflowID); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); tokenMap.put("test_column_1", "test_token_1"); UpdateRequest request = UpdateRequest.builder() - .id(skyflowID) .table(table) - .values(valueMap) + .data(dataMap) .tokens(tokenMap) .returnTokens(true) .tokenStrict(Byot.ENABLE) .build(); Validations.validateUpdateRequest(request); Assert.assertEquals(table, request.getTable()); - Assert.assertEquals(skyflowID, request.getId()); - Assert.assertEquals(2, request.getValues().size()); + Assert.assertEquals(3, request.getData().size()); Assert.assertEquals(1, request.getTokens().size()); Assert.assertTrue(request.getReturnTokens()); } catch (SkyflowException e) { @@ -93,7 +92,8 @@ public void testValidInputInUpdateRequestValidations() { @Test public void testNoSkyflowIdInUpdateRequestValidations() { - UpdateRequest request = UpdateRequest.builder().table(table).build(); + dataMap.put("test_column_1", "test_value_1"); + UpdateRequest request = UpdateRequest.builder().table(table).data(dataMap).build(); try { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); @@ -106,9 +106,26 @@ public void testNoSkyflowIdInUpdateRequestValidations() { } } + @Test + public void testInvalidSkyflowIdTypeInUpdateRequestValidations() { + dataMap.put("skyflow_id", 123); + UpdateRequest request = UpdateRequest.builder().table(table).data(dataMap).build(); + try { + Validations.validateUpdateRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.InvalidSkyflowIdType.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + @Test public void testEmptySkyflowIdInUpdateRequestValidations() { - UpdateRequest request = UpdateRequest.builder().id("").table(table).build(); + dataMap.put("skyflow_id", ""); + UpdateRequest request = UpdateRequest.builder().table(table).data(dataMap).build(); try { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); @@ -123,7 +140,7 @@ public void testEmptySkyflowIdInUpdateRequestValidations() { @Test public void testNoTableInUpdateRequestValidations() { - UpdateRequest request = UpdateRequest.builder().id(skyflowID).build(); + UpdateRequest request = UpdateRequest.builder().build(); try { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); @@ -138,7 +155,7 @@ public void testNoTableInUpdateRequestValidations() { @Test public void testEmptyTableInUpdateRequestValidations() { - UpdateRequest request = UpdateRequest.builder().id(skyflowID).table("").build(); + UpdateRequest request = UpdateRequest.builder().table("").build(); try { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); @@ -153,14 +170,14 @@ public void testEmptyTableInUpdateRequestValidations() { @Test public void testNoValuesInUpdateRequestValidations() { - UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).build(); + UpdateRequest request = UpdateRequest.builder().table(table).build(); try { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( - Utils.parameterizedString(ErrorMessage.ValuesKeyError.getMessage(), Constants.SDK_PREFIX), + Utils.parameterizedString(ErrorMessage.DataKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() ); } @@ -168,14 +185,14 @@ public void testNoValuesInUpdateRequestValidations() { @Test public void testEmptyValuesInUpdateRequestValidations() { - UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).values(valueMap).build(); + UpdateRequest request = UpdateRequest.builder().table(table).data(dataMap).build(); try { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( - Utils.parameterizedString(ErrorMessage.EmptyValues.getMessage(), Constants.SDK_PREFIX), + Utils.parameterizedString(ErrorMessage.EmptyData.getMessage(), Constants.SDK_PREFIX), e.getMessage() ); } @@ -183,10 +200,11 @@ public void testEmptyValuesInUpdateRequestValidations() { @Test public void testEmptyKeyInValuesInUpdateRequestValidations() { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); - valueMap.put("", "test_value_3"); - UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).values(valueMap).build(); + dataMap.put("skyflow_id", skyflowID); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); + dataMap.put("", "test_value_3"); + UpdateRequest request = UpdateRequest.builder().table(table).data(dataMap).build(); try { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); @@ -201,10 +219,11 @@ public void testEmptyKeyInValuesInUpdateRequestValidations() { @Test public void testEmptyValueInValuesInUpdateRequestValidations() { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); - valueMap.put("test_column_3", ""); - UpdateRequest request = UpdateRequest.builder().id(skyflowID).table(table).values(valueMap).build(); + dataMap.put("skyflow_id", skyflowID); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); + dataMap.put("test_column_3", ""); + UpdateRequest request = UpdateRequest.builder().table(table).data(dataMap).build(); try { Validations.validateUpdateRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); @@ -219,11 +238,12 @@ public void testEmptyValueInValuesInUpdateRequestValidations() { @Test public void testTokensWithTokenStrictDisableInUpdateRequestValidations() { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); + dataMap.put("skyflow_id", skyflowID); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); tokenMap.put("test_column_1", "test_token_1"); UpdateRequest request = UpdateRequest.builder() - .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.DISABLE) + .table(table).data(dataMap).tokens(tokenMap).tokenStrict(Byot.DISABLE) .build(); try { Validations.validateUpdateRequest(request); @@ -239,10 +259,11 @@ public void testTokensWithTokenStrictDisableInUpdateRequestValidations() { @Test public void testNoTokensWithTokenStrictEnableInUpdateRequestValidations() { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); + dataMap.put("skyflow_id", skyflowID); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); UpdateRequest request = UpdateRequest.builder() - .id(skyflowID).table(table).values(valueMap).tokenStrict(Byot.ENABLE) + .table(table).data(dataMap).tokenStrict(Byot.ENABLE) .build(); try { Validations.validateUpdateRequest(request); @@ -258,10 +279,11 @@ public void testNoTokensWithTokenStrictEnableInUpdateRequestValidations() { @Test public void testNoTokensWithTokenStrictEnableStrictInUpdateRequestValidations() { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); + dataMap.put("skyflow_id", skyflowID); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); UpdateRequest request = UpdateRequest.builder() - .id(skyflowID).table(table).values(valueMap).tokenStrict(Byot.ENABLE_STRICT) + .table(table).data(dataMap).tokenStrict(Byot.ENABLE_STRICT) .build(); try { Validations.validateUpdateRequest(request); @@ -277,10 +299,11 @@ public void testNoTokensWithTokenStrictEnableStrictInUpdateRequestValidations() @Test public void testEmptyTokensWithTokenStrictEnableInUpdateRequestValidations() { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); + dataMap.put("skyflow_id", skyflowID); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); UpdateRequest request = UpdateRequest.builder() - .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE) + .table(table).data(dataMap).tokens(tokenMap).tokenStrict(Byot.ENABLE) .build(); try { Validations.validateUpdateRequest(request); @@ -293,11 +316,12 @@ public void testEmptyTokensWithTokenStrictEnableInUpdateRequestValidations() { @Test public void testInsufficientTokensWithTokenStrictEnableStrictInUpdateRequestValidations() { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); + dataMap.put("skyflow_id", skyflowID); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); tokenMap.put("test_column_1", "test_token_1"); UpdateRequest request = UpdateRequest.builder() - .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) + .table(table).data(dataMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) .build(); try { Validations.validateUpdateRequest(request); @@ -310,12 +334,13 @@ public void testInsufficientTokensWithTokenStrictEnableStrictInUpdateRequestVali @Test public void testTokenValueMismatchInUpdateRequestValidations() { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); + dataMap.put("skyflow_id", skyflowID); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); tokenMap.put("test_column_1", "test_token_1"); tokenMap.put("test_column_3", "test_token_3"); UpdateRequest request = UpdateRequest.builder() - .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) + .table(table).data(dataMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) .build(); try { Validations.validateUpdateRequest(request); @@ -328,12 +353,13 @@ public void testTokenValueMismatchInUpdateRequestValidations() { @Test public void testEmptyKeyInTokensInUpdateRequestValidations() { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); + dataMap.put("skyflow_id", skyflowID); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); tokenMap.put("test_column_1", "test_token_1"); tokenMap.put("", "test_token_2"); UpdateRequest request = UpdateRequest.builder() - .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) + .table(table).data(dataMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) .build(); try { Validations.validateUpdateRequest(request); @@ -346,12 +372,13 @@ public void testEmptyKeyInTokensInUpdateRequestValidations() { @Test public void testEmptyValueInTokensInUpdateRequestValidations() { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); + dataMap.put("skyflow_id", skyflowID); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); tokenMap.put("test_column_1", "test_token_1"); tokenMap.put("test_column_2", ""); UpdateRequest request = UpdateRequest.builder() - .id(skyflowID).table(table).values(valueMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) + .table(table).data(dataMap).tokens(tokenMap).tokenStrict(Byot.ENABLE_STRICT) .build(); try { Validations.validateUpdateRequest(request); @@ -365,14 +392,14 @@ public void testEmptyValueInTokensInUpdateRequestValidations() { @Test public void testUpdateResponse() { try { - valueMap.put("test_column_1", "test_value_1"); - valueMap.put("test_column_2", "test_value_2"); + dataMap.put("test_column_1", "test_value_1"); + dataMap.put("test_column_2", "test_value_2"); tokenMap.put("test_column_1", "test_token_1"); tokenMap.put("test_column_2", "test_token_2"); UpdateResponse response = new UpdateResponse(skyflowID, tokenMap); - String responseString = "{\n\t\"skyflowId\": \"" + skyflowID + "\"\n\t\"tokens\": " - + "{\n\t\t\"test_column_1\": \"test_token_1\"," - + "\n\t\t\"test_column_2\": \"test_token_2\",\n\t}\n}"; + String responseString = "{\n\t\"skyflowId\": \"" + skyflowID + "\"" + + "\n\t\"test_column_1\": \"test_token_1\"," + + "\n\t\"test_column_2\": \"test_token_2\",\n}"; Assert.assertEquals(skyflowID, response.getSkyflowId()); Assert.assertEquals(2, response.getTokens().size()); Assert.assertEquals(responseString, response.toString()); From 42bec3b7052524a17e5255ce9c9ab287a3386a78 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Mon, 25 Nov 2024 11:19:11 +0530 Subject: [PATCH 67/68] SK-1633 Upgraded dependency version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 36544eb5..08afca20 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ io.jsonwebtoken jjwt - 0.9.1 + 0.12.6 jakarta.annotation From 1eb16d7666980df8312be6025e81fda360826064 Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Mon, 25 Nov 2024 14:03:05 +0530 Subject: [PATCH 68/68] SK-1623 Made constructors for Bearer token utilities builders private --- .../serviceaccount/BearerTokenGenerationExample.java | 2 +- .../BearerTokenGenerationUsingThreadsExample.java | 4 ++-- .../BearerTokenGenerationWithContextExample.java | 6 +++--- .../serviceaccount/ScopedTokenGenerationExample.java | 6 +++--- .../serviceaccount/SignedTokenGenerationExample.java | 6 +++--- .../src/main/java/com/example/vault/TokenizeExample.java | 5 ++--- .../java/com/skyflow/serviceaccount/util/BearerToken.java | 3 +++ .../com/skyflow/serviceaccount/util/SignedDataTokens.java | 3 +++ 8 files changed, 20 insertions(+), 15 deletions(-) diff --git a/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java index ae1bce1b..5dbd6372 100644 --- a/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java +++ b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java @@ -18,7 +18,7 @@ public static void main(String[] args) { token = bearerToken.getBearerToken(); } System.out.println(token); - } catch (Exception e) { + } catch (SkyflowException e) { e.printStackTrace(); } diff --git a/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java index 1d750ade..8cfba8fa 100644 --- a/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java +++ b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java @@ -10,7 +10,7 @@ public static void main(String[] args) { // Generate BearerToken with context by specifying credentials.json file path try { String filePath = ""; - final BearerToken bearerToken = new BearerToken.BearerTokenBuilder() + final BearerToken bearerToken = BearerToken.builder() .setCredentials(new File(filePath)) .setCtx("abc") .build(); @@ -35,7 +35,7 @@ public static void main(String[] args) { // Generate BearerToken with context by specifying credentials.json as string try { String fileContents = ""; - final BearerToken bearerToken = new BearerToken.BearerTokenBuilder() + final BearerToken bearerToken = BearerToken.builder() .setCredentials(fileContents) .setCtx("abc") .build(); diff --git a/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java index 69e6ff14..b85de6df 100644 --- a/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java +++ b/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java @@ -12,21 +12,21 @@ public static void main(String[] args) { // Generate BearerToken with context by specifying credentials.json file path try { String filePath = ""; - BearerToken token = new BearerToken.BearerTokenBuilder() + BearerToken token = BearerToken.builder() .setCredentials(new File(filePath)) .setCtx("abc") .build(); bearerToken = token.getBearerToken(); System.out.println(bearerToken); - } catch (Exception e) { + } catch (SkyflowException e) { e.printStackTrace(); } // Generate BearerToken with context by specifying credentials.json as string try { String fileContents = ""; - BearerToken token = new BearerToken.BearerTokenBuilder() + BearerToken token = BearerToken.builder() .setCredentials(fileContents) .setCtx("abc") .build(); diff --git a/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java b/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java index b8dfbc53..3fda1e07 100644 --- a/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java +++ b/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java @@ -15,14 +15,14 @@ public static void main(String[] args) { ArrayList roles = new ArrayList<>(); roles.add("YOUR_ROLE_ID"); String filePath = ""; - BearerToken bearerToken = new BearerToken.BearerTokenBuilder() + BearerToken bearerToken = BearerToken.builder() .setCredentials(new File(filePath)) .setRoles(roles) .build(); scopedToken = bearerToken.getBearerToken(); System.out.println(scopedToken); - } catch (Exception e) { + } catch (SkyflowException e) { e.printStackTrace(); } @@ -31,7 +31,7 @@ public static void main(String[] args) { ArrayList roles = new ArrayList<>(); roles.add("YOUR_ROLE_ID"); String fileContents = ""; - BearerToken bearerToken = new BearerToken.BearerTokenBuilder() + BearerToken bearerToken = BearerToken.builder() .setCredentials(fileContents) .setRoles(roles) .build(); diff --git a/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java b/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java index 7f030838..0acca5fe 100644 --- a/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java +++ b/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java @@ -18,7 +18,7 @@ public static void main(String[] args) { String context = "abc"; ArrayList dataTokens = new ArrayList<>(); dataTokens.add("YOUR_DATA_TOKEN_1"); - SignedDataTokens signedToken = new SignedDataTokens.SignedDataTokensBuilder() + SignedDataTokens signedToken = SignedDataTokens.builder() .setCredentials(new File(filePath)) .setCtx(context) .setTimeToLive(30) // in seconds @@ -27,7 +27,7 @@ public static void main(String[] args) { signedTokenValues = signedToken.getSignedDataTokens(); System.out.println(signedTokenValues); - } catch (Exception e) { + } catch (SkyflowException e) { e.printStackTrace(); } @@ -37,7 +37,7 @@ public static void main(String[] args) { String context = "abc"; ArrayList dataTokens = new ArrayList<>(); dataTokens.add("YOUR_DATA_TOKEN_1"); - SignedDataTokens signedToken = new SignedDataTokens.SignedDataTokensBuilder() + SignedDataTokens signedToken = SignedDataTokens.builder() .setCredentials(fileContents) .setCtx(context) .setTimeToLive(30) // in seconds diff --git a/samples/src/main/java/com/example/vault/TokenizeExample.java b/samples/src/main/java/com/example/vault/TokenizeExample.java index e7db6fb2..578e7ced 100644 --- a/samples/src/main/java/com/example/vault/TokenizeExample.java +++ b/samples/src/main/java/com/example/vault/TokenizeExample.java @@ -11,7 +11,6 @@ import com.skyflow.vault.tokens.TokenizeResponse; import java.util.ArrayList; -import java.util.List; public class TokenizeExample { public static void main(String[] args) throws SkyflowException { @@ -39,7 +38,7 @@ public static void main(String[] args) throws SkyflowException { .addSkyflowCredentials(skyflowCredentials) .build(); - List columnValues1 = new ArrayList<>(); + ArrayList columnValues1 = new ArrayList<>(); ColumnValue value1 = ColumnValue.builder().value("").columnGroup("").build(); ColumnValue value2 = ColumnValue.builder().value("").columnGroup("").build(); columnValues1.add(value1); @@ -48,7 +47,7 @@ public static void main(String[] args) throws SkyflowException { TokenizeResponse tokenizeResponse1 = skyflowClient.vault().tokenize(tokenizeRequest1); System.out.println(tokenizeResponse1); - List columnValues2 = new ArrayList<>(); + ArrayList columnValues2 = new ArrayList<>(); ColumnValue value3 = ColumnValue.builder().value("").columnGroup("").build(); ColumnValue value4 = ColumnValue.builder().value("").columnGroup("").build(); columnValues2.add(value3); diff --git a/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java b/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java index f235da49..da221458 100644 --- a/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java +++ b/src/main/java/com/skyflow/serviceaccount/util/BearerToken.java @@ -194,6 +194,9 @@ public static class BearerTokenBuilder { private ArrayList roles; private String credentialsType; + private BearerTokenBuilder() { + } + private void setCredentialsType(String credentialsType) { this.credentialsType = credentialsType; } diff --git a/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java b/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java index 2f486c42..83fd0543 100644 --- a/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java +++ b/src/main/java/com/skyflow/serviceaccount/util/SignedDataTokens.java @@ -172,6 +172,9 @@ public static class SignedDataTokensBuilder { private String ctx; private String credentialsType; + private SignedDataTokensBuilder() { + } + private void setCredentialsType(String credentialsType) { this.credentialsType = credentialsType; }