From a90ef59c379170c4167644158fd3f4ea2fbf62bc Mon Sep 17 00:00:00 2001 From: ymarufs21 Date: Thu, 8 Sep 2022 22:03:24 +0900 Subject: [PATCH 1/5] =?UTF-8?q?Oauth=E8=AA=8D=E8=A8=BC=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../embulk/output/sf_bulk_api/AuthMethod.java | 14 +++++++++++ .../sf_bulk_api/ConnectorConfigCreater.java | 9 +++++++ .../output/sf_bulk_api/ForceClient.java | 17 +++++++------ .../OauthConnectorConfigCreater.java | 21 ++++++++++++++++ .../embulk/output/sf_bulk_api/PluginTask.java | 25 ++++++++++++++++--- .../UserPasswordConnectorConfigCreater.java | 25 +++++++++++++++++++ 6 files changed, 100 insertions(+), 11 deletions(-) create mode 100644 src/main/java/org/embulk/output/sf_bulk_api/AuthMethod.java create mode 100644 src/main/java/org/embulk/output/sf_bulk_api/ConnectorConfigCreater.java create mode 100644 src/main/java/org/embulk/output/sf_bulk_api/OauthConnectorConfigCreater.java create mode 100644 src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java diff --git a/src/main/java/org/embulk/output/sf_bulk_api/AuthMethod.java b/src/main/java/org/embulk/output/sf_bulk_api/AuthMethod.java new file mode 100644 index 0000000..e6b156d --- /dev/null +++ b/src/main/java/org/embulk/output/sf_bulk_api/AuthMethod.java @@ -0,0 +1,14 @@ +package org.embulk.output.sf_bulk_api; + +public enum AuthMethod +{ + oauth("oauth"), + user_password("user_password"); + + private final String string; + + AuthMethod(final String string) + { + this.string = string; + } +} diff --git a/src/main/java/org/embulk/output/sf_bulk_api/ConnectorConfigCreater.java b/src/main/java/org/embulk/output/sf_bulk_api/ConnectorConfigCreater.java new file mode 100644 index 0000000..c8fc6b7 --- /dev/null +++ b/src/main/java/org/embulk/output/sf_bulk_api/ConnectorConfigCreater.java @@ -0,0 +1,9 @@ +package org.embulk.output.sf_bulk_api; + +import com.sforce.ws.ConnectionException; +import com.sforce.ws.ConnectorConfig; + +public interface ConnectorConfigCreater +{ + ConnectorConfig createConnectorConfig() throws ConnectionException; +} diff --git a/src/main/java/org/embulk/output/sf_bulk_api/ForceClient.java b/src/main/java/org/embulk/output/sf_bulk_api/ForceClient.java index ad86608..84737bb 100644 --- a/src/main/java/org/embulk/output/sf_bulk_api/ForceClient.java +++ b/src/main/java/org/embulk/output/sf_bulk_api/ForceClient.java @@ -1,7 +1,9 @@ package org.embulk.output.sf_bulk_api; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import com.sforce.soap.partner.PartnerConnection; @@ -25,9 +27,13 @@ public class ForceClient private final ActionType actionType; private final String upsertKey; + private final Map connectorConfigCreaters = new HashMap<>(); + public ForceClient(final PluginTask pluginTask) throws ConnectionException { - final ConnectorConfig connectorConfig = createConnectorConfig(pluginTask); + setConnectorConfigCreaters(pluginTask); + ConnectorConfigCreater connectorConfigCreater = connectorConfigCreaters.get(pluginTask.getAuthMethod()); + ConnectorConfig connectorConfig = connectorConfigCreater.createConnectorConfig(); this.partnerConnection = Connector.newConnection(connectorConfig); this.actionType = ActionType.convertActionType(pluginTask.getActionType()); this.upsertKey = pluginTask.getUpsertKey(); @@ -55,13 +61,10 @@ public void logout() throws ConnectionException this.partnerConnection.logout(); } - private ConnectorConfig createConnectorConfig(final PluginTask pluginTask) + private void setConnectorConfigCreaters(PluginTask pluginTask) { - final ConnectorConfig config = new ConnectorConfig(); - config.setUsername(pluginTask.getUsername()); - config.setPassword(pluginTask.getPassword() + pluginTask.getSecurityToken()); - config.setAuthEndpoint(pluginTask.getAuthEndPoint() + pluginTask.getApiVersion() + "/"); - return config; + connectorConfigCreaters.put(AuthMethod.oauth, new OauthConnectorConfigCreater(pluginTask)); + connectorConfigCreaters.put(AuthMethod.user_password, new UserPasswordConnectorConfigCreater(pluginTask)); } private void insert(final List sObjects) throws ConnectionException { diff --git a/src/main/java/org/embulk/output/sf_bulk_api/OauthConnectorConfigCreater.java b/src/main/java/org/embulk/output/sf_bulk_api/OauthConnectorConfigCreater.java new file mode 100644 index 0000000..efae94c --- /dev/null +++ b/src/main/java/org/embulk/output/sf_bulk_api/OauthConnectorConfigCreater.java @@ -0,0 +1,21 @@ +package org.embulk.output.sf_bulk_api; + +import com.sforce.ws.ConnectorConfig; + +public class OauthConnectorConfigCreater implements ConnectorConfigCreater +{ + final PluginTask pluginTask; + + OauthConnectorConfigCreater(final PluginTask pluginTask) + { + this.pluginTask = pluginTask; + } + + public ConnectorConfig createConnectorConfig() + { + ConnectorConfig config = new ConnectorConfig(); + config.setSessionId(pluginTask.getAccessToken().get()); + config.setServiceEndpoint(pluginTask.getServerUrl().get()); + return config; + } +} diff --git a/src/main/java/org/embulk/output/sf_bulk_api/PluginTask.java b/src/main/java/org/embulk/output/sf_bulk_api/PluginTask.java index 0dad47a..7bb1376 100644 --- a/src/main/java/org/embulk/output/sf_bulk_api/PluginTask.java +++ b/src/main/java/org/embulk/output/sf_bulk_api/PluginTask.java @@ -4,24 +4,41 @@ import org.embulk.config.ConfigDefault; import org.embulk.config.Task; +import java.util.Optional; + interface PluginTask extends Task { + @Config("auth_method") + @ConfigDefault("\"user_password\"") + AuthMethod getAuthMethod(); + + @Config("server_url") + @ConfigDefault("null") + Optional getServerUrl(); + + @Config("access_token") + @ConfigDefault("null") + Optional getAccessToken(); + @Config("username") - String getUsername(); + @ConfigDefault("null") + Optional getUsername(); @Config("password") - String getPassword(); + @ConfigDefault("null") + Optional getPassword(); @Config("api_version") @ConfigDefault("\"46.0\"") String getApiVersion(); @Config("security_token") - String getSecurityToken(); + @ConfigDefault("null") + Optional getSecurityToken(); @Config("auth_end_point") @ConfigDefault("\"https://login.salesforce.com/services/Soap/u/\"") - String getAuthEndPoint(); + Optional getAuthEndPoint(); @Config("object") String getObject(); diff --git a/src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java b/src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java new file mode 100644 index 0000000..b786a6d --- /dev/null +++ b/src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java @@ -0,0 +1,25 @@ +package org.embulk.output.sf_bulk_api; + +import com.sforce.soap.partner.PartnerConnection; +import com.sforce.ws.ConnectionException; +import com.sforce.ws.ConnectorConfig; + +public class UserPasswordConnectorConfigCreater implements ConnectorConfigCreater +{ + final PluginTask pluginTask; + + UserPasswordConnectorConfigCreater(final PluginTask pluginTask) + { + this.pluginTask = pluginTask; + } + + public ConnectorConfig createConnectorConfig() throws ConnectionException + { + ConnectorConfig config = new ConnectorConfig(); + config.setUsername(pluginTask.getUsername().get()); + config.setPassword(pluginTask.getPassword().get() + pluginTask.getSecurityToken().get()); + config.setAuthEndpoint(pluginTask.getAuthEndPoint().get() + pluginTask.getApiVersion()); + + return config; + } +} From 3056a1783e66a87ddd6bd44ec68893cacf0badff Mon Sep 17 00:00:00 2001 From: chikamura Date: Sun, 30 Jun 2024 08:41:04 +0900 Subject: [PATCH 2/5] fix authEndpoint --- .../output/sf_bulk_api/UserPasswordConnectorConfigCreater.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java b/src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java index b786a6d..f384ccd 100644 --- a/src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java +++ b/src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java @@ -18,7 +18,7 @@ public ConnectorConfig createConnectorConfig() throws ConnectionException ConnectorConfig config = new ConnectorConfig(); config.setUsername(pluginTask.getUsername().get()); config.setPassword(pluginTask.getPassword().get() + pluginTask.getSecurityToken().get()); - config.setAuthEndpoint(pluginTask.getAuthEndPoint().get() + pluginTask.getApiVersion()); + config.setAuthEndpoint(pluginTask.getAuthEndPoint().get() + pluginTask.getApiVersion() + "/"); return config; } From 9a7d42c9a158c79db9ea10c0d571eff1c5b56375 Mon Sep 17 00:00:00 2001 From: chikamura Date: Sun, 30 Jun 2024 08:41:36 +0900 Subject: [PATCH 3/5] spotless --- .../embulk/output/sf_bulk_api/AuthMethod.java | 16 +++++------ .../sf_bulk_api/ConnectorConfigCreater.java | 5 ++-- .../output/sf_bulk_api/ForceClient.java | 13 ++++----- .../OauthConnectorConfigCreater.java | 25 ++++++++--------- .../embulk/output/sf_bulk_api/PluginTask.java | 3 +- .../UserPasswordConnectorConfigCreater.java | 28 ++++++++----------- 6 files changed, 39 insertions(+), 51 deletions(-) diff --git a/src/main/java/org/embulk/output/sf_bulk_api/AuthMethod.java b/src/main/java/org/embulk/output/sf_bulk_api/AuthMethod.java index e6b156d..9924a20 100644 --- a/src/main/java/org/embulk/output/sf_bulk_api/AuthMethod.java +++ b/src/main/java/org/embulk/output/sf_bulk_api/AuthMethod.java @@ -1,14 +1,12 @@ package org.embulk.output.sf_bulk_api; -public enum AuthMethod -{ - oauth("oauth"), - user_password("user_password"); +public enum AuthMethod { + oauth("oauth"), + user_password("user_password"); - private final String string; + private final String string; - AuthMethod(final String string) - { - this.string = string; - } + AuthMethod(final String string) { + this.string = string; + } } diff --git a/src/main/java/org/embulk/output/sf_bulk_api/ConnectorConfigCreater.java b/src/main/java/org/embulk/output/sf_bulk_api/ConnectorConfigCreater.java index c8fc6b7..ae257cc 100644 --- a/src/main/java/org/embulk/output/sf_bulk_api/ConnectorConfigCreater.java +++ b/src/main/java/org/embulk/output/sf_bulk_api/ConnectorConfigCreater.java @@ -3,7 +3,6 @@ import com.sforce.ws.ConnectionException; import com.sforce.ws.ConnectorConfig; -public interface ConnectorConfigCreater -{ - ConnectorConfig createConnectorConfig() throws ConnectionException; +public interface ConnectorConfigCreater { + ConnectorConfig createConnectorConfig() throws ConnectionException; } diff --git a/src/main/java/org/embulk/output/sf_bulk_api/ForceClient.java b/src/main/java/org/embulk/output/sf_bulk_api/ForceClient.java index 5baabe4..ec7b151 100644 --- a/src/main/java/org/embulk/output/sf_bulk_api/ForceClient.java +++ b/src/main/java/org/embulk/output/sf_bulk_api/ForceClient.java @@ -7,11 +7,9 @@ import com.sforce.soap.partner.sobject.SObject; import com.sforce.ws.ConnectionException; import com.sforce.ws.ConnectorConfig; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,7 +25,8 @@ public class ForceClient { public ForceClient(final PluginTask pluginTask, final ErrorHandler errorHandler) throws ConnectionException { setConnectorConfigCreaters(pluginTask); - ConnectorConfigCreater connectorConfigCreater = connectorConfigCreaters.get(pluginTask.getAuthMethod()); + ConnectorConfigCreater connectorConfigCreater = + connectorConfigCreaters.get(pluginTask.getAuthMethod()); ConnectorConfig connectorConfig = connectorConfigCreater.createConnectorConfig(); this.partnerConnection = Connector.newConnection(connectorConfig); this.actionType = ActionType.convertActionType(pluginTask.getActionType()); @@ -53,10 +52,10 @@ public void logout() throws ConnectionException { this.partnerConnection.logout(); } - private void setConnectorConfigCreaters(PluginTask pluginTask) - { - connectorConfigCreaters.put(AuthMethod.oauth, new OauthConnectorConfigCreater(pluginTask)); - connectorConfigCreaters.put(AuthMethod.user_password, new UserPasswordConnectorConfigCreater(pluginTask)); + private void setConnectorConfigCreaters(PluginTask pluginTask) { + connectorConfigCreaters.put(AuthMethod.oauth, new OauthConnectorConfigCreater(pluginTask)); + connectorConfigCreaters.put( + AuthMethod.user_password, new UserPasswordConnectorConfigCreater(pluginTask)); } private long insert(final List sObjects) throws ConnectionException { diff --git a/src/main/java/org/embulk/output/sf_bulk_api/OauthConnectorConfigCreater.java b/src/main/java/org/embulk/output/sf_bulk_api/OauthConnectorConfigCreater.java index efae94c..0c42226 100644 --- a/src/main/java/org/embulk/output/sf_bulk_api/OauthConnectorConfigCreater.java +++ b/src/main/java/org/embulk/output/sf_bulk_api/OauthConnectorConfigCreater.java @@ -2,20 +2,17 @@ import com.sforce.ws.ConnectorConfig; -public class OauthConnectorConfigCreater implements ConnectorConfigCreater -{ - final PluginTask pluginTask; +public class OauthConnectorConfigCreater implements ConnectorConfigCreater { + final PluginTask pluginTask; - OauthConnectorConfigCreater(final PluginTask pluginTask) - { - this.pluginTask = pluginTask; - } + OauthConnectorConfigCreater(final PluginTask pluginTask) { + this.pluginTask = pluginTask; + } - public ConnectorConfig createConnectorConfig() - { - ConnectorConfig config = new ConnectorConfig(); - config.setSessionId(pluginTask.getAccessToken().get()); - config.setServiceEndpoint(pluginTask.getServerUrl().get()); - return config; - } + public ConnectorConfig createConnectorConfig() { + ConnectorConfig config = new ConnectorConfig(); + config.setSessionId(pluginTask.getAccessToken().get()); + config.setServiceEndpoint(pluginTask.getServerUrl().get()); + return config; + } } diff --git a/src/main/java/org/embulk/output/sf_bulk_api/PluginTask.java b/src/main/java/org/embulk/output/sf_bulk_api/PluginTask.java index c22248f..30e192b 100644 --- a/src/main/java/org/embulk/output/sf_bulk_api/PluginTask.java +++ b/src/main/java/org/embulk/output/sf_bulk_api/PluginTask.java @@ -1,11 +1,10 @@ package org.embulk.output.sf_bulk_api; +import java.util.Optional; import org.embulk.config.Config; import org.embulk.config.ConfigDefault; import org.embulk.config.Task; -import java.util.Optional; - public interface PluginTask extends Task { @Config("auth_method") @ConfigDefault("\"user_password\"") diff --git a/src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java b/src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java index f384ccd..442b5d5 100644 --- a/src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java +++ b/src/main/java/org/embulk/output/sf_bulk_api/UserPasswordConnectorConfigCreater.java @@ -1,25 +1,21 @@ package org.embulk.output.sf_bulk_api; -import com.sforce.soap.partner.PartnerConnection; import com.sforce.ws.ConnectionException; import com.sforce.ws.ConnectorConfig; -public class UserPasswordConnectorConfigCreater implements ConnectorConfigCreater -{ - final PluginTask pluginTask; +public class UserPasswordConnectorConfigCreater implements ConnectorConfigCreater { + final PluginTask pluginTask; - UserPasswordConnectorConfigCreater(final PluginTask pluginTask) - { - this.pluginTask = pluginTask; - } + UserPasswordConnectorConfigCreater(final PluginTask pluginTask) { + this.pluginTask = pluginTask; + } - public ConnectorConfig createConnectorConfig() throws ConnectionException - { - ConnectorConfig config = new ConnectorConfig(); - config.setUsername(pluginTask.getUsername().get()); - config.setPassword(pluginTask.getPassword().get() + pluginTask.getSecurityToken().get()); - config.setAuthEndpoint(pluginTask.getAuthEndPoint().get() + pluginTask.getApiVersion() + "/"); + public ConnectorConfig createConnectorConfig() throws ConnectionException { + ConnectorConfig config = new ConnectorConfig(); + config.setUsername(pluginTask.getUsername().get()); + config.setPassword(pluginTask.getPassword().get() + pluginTask.getSecurityToken().get()); + config.setAuthEndpoint(pluginTask.getAuthEndPoint().get() + pluginTask.getApiVersion() + "/"); - return config; - } + return config; + } } From 5807b1d560ed3bc29db99d1dd58ac4b7455e5f59 Mon Sep 17 00:00:00 2001 From: chikamura Date: Mon, 1 Jul 2024 10:55:19 +0900 Subject: [PATCH 4/5] fix readme --- README.md | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ced12ec..137fc02 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,14 @@ Embulk output plugin for Salesforce Bulk API. ## Configuration -- **username**: Login username (string, required) -- **password**: Login password (string, required) -- **security_token**: User’s security token (string, required) +- **auth_method**: Select `user_password` or `oauth` (string, default: `user_password`) +- If auth method is `user_password` + - **username**: Login username (string, required) + - **password**: Login password (string, required) + - **security_token**: User’s security token (string, required) +- If auth method is `oauth` + - **server_url**: Oauth server url (string, required) + - **access_token**: Oauth access token (string, required) - **auth_end_point**: SOAP API authentication endpoint (string, default: `https://login.salesforce.com/services/Soap/u/`) - **api_version**: SOAP API version (string, default: `46.0`) - **object**: Salesforce object (sObject) type (string, required) @@ -23,6 +28,7 @@ Embulk output plugin for Salesforce Bulk API. ## Example +### `user_passsword` ```yaml out: type: sf_bulk_api @@ -34,6 +40,18 @@ out: upsert_key: Name ``` +### `oauth` +```yaml +out: + type: sf_bulk_api + auth_method: oauth + server_url: server_url + access_token: access_token + object: ExampleCustomObject__c + action_type: upsert + upsert_key: Name +``` + ## Build ``` From 62fe0b99f23bcf976fc264d4b78a0fe0dd7c8eef Mon Sep 17 00:00:00 2001 From: chikamura Date: Mon, 1 Jul 2024 18:17:45 +0900 Subject: [PATCH 5/5] fix README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 137fc02..5925c0c 100644 --- a/README.md +++ b/README.md @@ -15,11 +15,11 @@ Embulk output plugin for Salesforce Bulk API. - **username**: Login username (string, required) - **password**: Login password (string, required) - **security_token**: User’s security token (string, required) + - **api_version**: SOAP API version (string, default: `46.0`) + - **auth_end_point**: SOAP API authentication endpoint (string, default: `https://login.salesforce.com/services/Soap/u/`) - If auth method is `oauth` - **server_url**: Oauth server url (string, required) - **access_token**: Oauth access token (string, required) -- **auth_end_point**: SOAP API authentication endpoint (string, default: `https://login.salesforce.com/services/Soap/u/`) -- **api_version**: SOAP API version (string, default: `46.0`) - **object**: Salesforce object (sObject) type (string, required) - **action_type**: Action type (`insert`, `update`, or `upsert`, required) - **upsert_key**: Name of the external ID field (string, required when `upsert` action, default: `key`)