Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Oauth認証に対応 #7

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 23 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,16 @@ 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_end_point**: SOAP API authentication endpoint (string, default: `https://login.salesforce.com/services/Soap/u/`)
- **api_version**: SOAP API version (string, default: `46.0`)
- **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)
- **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)
- **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`)
Expand All @@ -23,6 +28,7 @@ Embulk output plugin for Salesforce Bulk API.

## Example

### `user_passsword`
```yaml
out:
type: sf_bulk_api
Expand All @@ -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

```
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/org/embulk/output/sf_bulk_api/AuthMethod.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
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;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.embulk.output.sf_bulk_api;

import com.sforce.ws.ConnectionException;
import com.sforce.ws.ConnectorConfig;

public interface ConnectorConfigCreater {
ConnectorConfig createConnectorConfig() throws ConnectionException;
}
18 changes: 11 additions & 7 deletions src/main/java/org/embulk/output/sf_bulk_api/ForceClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
import com.sforce.soap.partner.sobject.SObject;
import com.sforce.ws.ConnectionException;
import com.sforce.ws.ConnectorConfig;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -18,10 +20,14 @@ public class ForceClient {
private final ActionType actionType;
private final String upsertKey;
private final ErrorHandler errorHandler;
private final Map<AuthMethod, ConnectorConfigCreater> connectorConfigCreaters = new HashMap<>();

public ForceClient(final PluginTask pluginTask, final ErrorHandler errorHandler)
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();
Expand All @@ -46,12 +52,10 @@ public void logout() throws ConnectionException {
this.partnerConnection.logout();
}

private ConnectorConfig createConnectorConfig(final 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;
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<SObject> sObjects) throws ConnectionException {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
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;
}
}
24 changes: 20 additions & 4 deletions src/main/java/org/embulk/output/sf_bulk_api/PluginTask.java
Original file line number Diff line number Diff line change
@@ -1,26 +1,42 @@
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;

public interface PluginTask extends Task {
@Config("auth_method")
@ConfigDefault("\"user_password\"")
AuthMethod getAuthMethod();

@Config("server_url")
@ConfigDefault("null")
Optional<String> getServerUrl();

@Config("access_token")
@ConfigDefault("null")
Optional<String> getAccessToken();

@Config("username")
String getUsername();
@ConfigDefault("null")
Optional<String> getUsername();

@Config("password")
String getPassword();
@ConfigDefault("null")
Optional<String> getPassword();

@Config("api_version")
@ConfigDefault("\"46.0\"")
String getApiVersion();

@Config("security_token")
String getSecurityToken();
@ConfigDefault("null")
Optional<String> getSecurityToken();

@Config("auth_end_point")
@ConfigDefault("\"https://login.salesforce.com/services/Soap/u/\"")
String getAuthEndPoint();
Optional<String> getAuthEndPoint();

@Config("object")
String getObject();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.embulk.output.sf_bulk_api;

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;
}
}
Loading