Skip to content

Commit c5cd1c5

Browse files
authored
Merge pull request #142 from docusign/feature/added-create-account-example
Added create account code example
2 parents 8dd4ac7 + 66430da commit c5cd1c5

File tree

6 files changed

+220
-12
lines changed

6 files changed

+220
-12
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<rooms.version>1.4.3</rooms.version>
3131
<click.version>1.5.0</click.version>
3232
<monitor.version>1.4.0</monitor.version>
33-
<admin.version>1.3.0</admin.version>
33+
<admin.version>2.0.0-RC1</admin.version>
3434
<webforms.version>1.0.2-RC12</webforms.version>
3535
<maestro.version>2.0.0-RC1</maestro.version>
3636
<swagger-core-version>2.2.22</swagger-core-version>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.docusign.controller.admin.examples;
2+
3+
import com.docusign.DSConfiguration;
4+
import com.docusign.admin.api.ProvisionAssetGroupApi;
5+
import com.docusign.admin.model.OrganizationSubscriptionResponse;
6+
import com.docusign.admin.model.SubscriptionProvisionModelAssetGroupWorkResult;
7+
import com.docusign.common.WorkArguments;
8+
import com.docusign.controller.admin.services.CreateAccountService;
9+
import com.docusign.core.model.DoneExample;
10+
import com.docusign.core.model.Session;
11+
import com.docusign.core.model.User;
12+
import org.springframework.stereotype.Controller;
13+
import org.springframework.ui.ModelMap;
14+
import org.springframework.web.bind.annotation.RequestMapping;
15+
16+
import javax.servlet.http.HttpServletResponse;
17+
import java.util.UUID;
18+
19+
/**
20+
* This example demonstrates how to create the account.
21+
*/
22+
@Controller
23+
@RequestMapping("/a013")
24+
public class A013CreateAccount extends AbstractAdminController {
25+
26+
public A013CreateAccount(DSConfiguration config, Session session, User user) {
27+
super(config, "a013", user, session);
28+
}
29+
30+
@Override
31+
protected Object doWork(WorkArguments args, ModelMap model, HttpServletResponse response) throws Exception {
32+
String accessToken = this.user.getAccessToken();
33+
String basePath = this.session.getBasePath();
34+
UUID organizationId = this.getOrganizationId(accessToken, basePath);
35+
36+
ProvisionAssetGroupApi provisionAssetGroupApi = this.createProvisionAssetGroupApi(accessToken, basePath);
37+
38+
OrganizationSubscriptionResponse planItems = CreateAccountService.getFirstPlanItem(
39+
provisionAssetGroupApi,
40+
organizationId);
41+
42+
SubscriptionProvisionModelAssetGroupWorkResult createdAccount = CreateAccountService
43+
.createAccountBySubscription(
44+
provisionAssetGroupApi,
45+
organizationId,
46+
args.getEmail(),
47+
args.getFirstName(),
48+
args.getLastName(),
49+
planItems.getSubscriptionId(),
50+
planItems.getPlanId());
51+
52+
DoneExample.createDefault(getTextForCodeExampleByApiType().ExampleName)
53+
.withMessage(getTextForCodeExampleByApiType().ResultsPageText)
54+
.withJsonObject(createdAccount)
55+
.addToModel(model, config);
56+
57+
return DONE_EXAMPLE_PAGE;
58+
}
59+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.docusign.controller.admin.services;
2+
3+
import com.docusign.admin.api.ProvisionAssetGroupApi;
4+
import com.docusign.admin.client.ApiException;
5+
import com.docusign.admin.model.OrganizationSubscriptionResponse;
6+
import com.docusign.admin.model.SubAccountCreateRequest;
7+
import com.docusign.admin.model.SubAccountCreateRequestSubAccountCreationSubscription;
8+
import com.docusign.admin.model.SubAccountCreateRequestSubAccountCreationTargetAccountAdmin;
9+
import com.docusign.admin.model.SubAccountCreateRequestSubAccountCreationTargetAccountDetails;
10+
import com.docusign.admin.model.SubscriptionProvisionModelAssetGroupWorkResult;
11+
import java.util.List;
12+
import java.util.ArrayList;
13+
import java.util.UUID;
14+
15+
public class CreateAccountService {
16+
17+
private static final String DEFAULT_ACCOUNT_NAME = "CreatedThroughAPI";
18+
19+
private static final String DEFAULT_COUNTRY_CODE = "US";
20+
21+
//ds-snippet-start:Admin13Step3
22+
public static OrganizationSubscriptionResponse getFirstPlanItem(
23+
ProvisionAssetGroupApi provisionAssetGroupApi,
24+
UUID orgId) throws ApiException {
25+
return provisionAssetGroupApi.getOrganizationPlanItems(orgId).stream().findFirst().orElse(null);
26+
}
27+
//ds-snippet-end:Admin13Step3
28+
29+
//ds-snippet-start:Admin13Step5
30+
public static SubscriptionProvisionModelAssetGroupWorkResult createAccountBySubscription(
31+
ProvisionAssetGroupApi provisionAssetGroupApi,
32+
UUID orgId,
33+
String email,
34+
String firstName,
35+
String lastName,
36+
String subscriptionId,
37+
UUID planId) throws ApiException {
38+
SubAccountCreateRequest subAccountRequest = buildSubAccountRequest(email, firstName, lastName, subscriptionId,
39+
planId);
40+
41+
return provisionAssetGroupApi.createAssetGroupAccount(orgId, subAccountRequest);
42+
}
43+
//ds-snippet-end:Admin13Step5
44+
45+
//ds-snippet-start:Admin13Step4
46+
private static SubAccountCreateRequest buildSubAccountRequest(
47+
String email,
48+
String firstName,
49+
String lastName,
50+
String subscriptionId,
51+
UUID planId) {
52+
List<UUID> uuidList = new ArrayList<>();
53+
SubAccountCreateRequest subAccountRequest = new SubAccountCreateRequest();
54+
SubAccountCreateRequestSubAccountCreationSubscription subscriptionDetails = new SubAccountCreateRequestSubAccountCreationSubscription();
55+
subscriptionDetails.setId(subscriptionId);
56+
subscriptionDetails.setPlanId(planId);
57+
subscriptionDetails.setModules(uuidList);
58+
59+
SubAccountCreateRequestSubAccountCreationTargetAccountDetails targetAccount = new SubAccountCreateRequestSubAccountCreationTargetAccountDetails();
60+
targetAccount.setName(DEFAULT_ACCOUNT_NAME);
61+
targetAccount.setCountryCode(DEFAULT_COUNTRY_CODE);
62+
63+
SubAccountCreateRequestSubAccountCreationTargetAccountAdmin admin = new SubAccountCreateRequestSubAccountCreationTargetAccountAdmin();
64+
admin.setEmail(email);
65+
admin.setFirstName(firstName);
66+
admin.setLastName(lastName);
67+
admin.setLocale(SubAccountCreateRequestSubAccountCreationTargetAccountAdmin.LocaleEnum.EN);
68+
69+
targetAccount.setAdmin(admin);
70+
subAccountRequest.setSubscriptionDetails(subscriptionDetails);
71+
subAccountRequest.setTargetAccount(targetAccount);
72+
73+
return subAccountRequest;
74+
}
75+
//ds-snippet-end:Admin13Step4
76+
}

src/main/java/com/docusign/core/model/ApiType.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,20 @@
33
import java.util.Arrays;
44

55
public enum ApiType {
6-
ESIGNATURE("eSignature API", new String[]{"signature"}, "eg"),
7-
ROOMS("Rooms API", new String[]{"signature", "dtr.rooms.read", "dtr.rooms.write", "dtr.documents.read", "dtr.documents.write", "dtr.profile.read", "dtr.profile.write", "dtr.company.read", "dtr.company.write", "room_forms"}, "r"),
6+
ESIGNATURE("eSignature API", new String[] { "signature" }, "eg"),
7+
ROOMS("Rooms API", new String[] { "signature", "dtr.rooms.read", "dtr.rooms.write", "dtr.documents.read",
8+
"dtr.documents.write", "dtr.profile.read", "dtr.profile.write", "dtr.company.read",
9+
"dtr.company.write", "room_forms" }, "r"),
810
CONNECT("Connect", new String[] {}, "con"),
9-
CLICK("Click API", new String[] {"click.manage", "click.send"}, "c"),
11+
CLICK("Click API", new String[] { "click.manage", "click.send" }, "c"),
1012
MAESTRO("Maestro API", new String[] { "signature", "aow_manage" }, "mae"),
11-
MONITOR("Monitor API", new String[] {"signature", "impersonation"}, "m"),
12-
ADMIN("Admin API", new String[] {"user_write", "signature", "impersonation", "group_read", "organization_read", "permission_read", "user_read", "account_read", "domain_read", "identity_provider_read", "user_data_redact", "asset_group_account_read", "asset_group_account_clone_write", "asset_group_account_clone_read"}, "a"),
13-
WEBFORMS("WebForms API", new String[] {"signature", "webforms_read", "webforms_instance_read", "webforms_instance_write"}, "web");
13+
MONITOR("Monitor API", new String[] { "signature", "impersonation" }, "m"),
14+
ADMIN("Admin API", new String[] { "user_write", "signature", "impersonation", "group_read", "organization_read",
15+
"permission_read", "user_read", "account_read", "domain_read", "identity_provider_read", "user_data_redact",
16+
"asset_group_account_read", "asset_group_account_clone_write", "asset_group_account_clone_read",
17+
"organization_sub_account_read", "organization_sub_account_write" }, "a"),
18+
WEBFORMS("WebForms API",
19+
new String[] { "signature", "webforms_read", "webforms_instance_read", "webforms_instance_write" }, "web");
1420

1521
final String value;
1622

@@ -26,9 +32,9 @@ public enum ApiType {
2632

2733
public static ApiType giveTypeByName(String exampleName) {
2834
return Arrays.stream(ApiType.values())
29-
.filter(x -> exampleName.contains(x.getCodeName()))
30-
.findFirst()
31-
.get();
35+
.filter(x -> exampleName.contains(x.getCodeName()))
36+
.findFirst()
37+
.get();
3238
}
3339

3440
public String[] getScopes() {

src/main/resources/application.example.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"quickstart" :"{QUICKSTART_VALUE}",
2+
"quickstart": "{QUICKSTART_VALUE}",
33
"quickACG": "{QUICK_ACG_VALUE}",
44
"DS_SIGNER_NAME": "{SIGNER_NAME}",
55
"DS_SIGNER_EMAIL": "{SIGNER_EMAIL}",
@@ -31,7 +31,7 @@
3131
"client-authentication-method": "client_secret_basic",
3232
"authorization-grant-type": "authorization_code",
3333
"redirect-uri": "{baseUrl}/login/oauth2/code/acg",
34-
"scope": "user_write, signature, impersonation, group_read, organization_read, permission_read, user_read, account_read, domain_read, identity_provider_read, user_data_redact, click.manage, click.send, dtr.rooms.read, dtr.rooms.write, dtr.documents.read, dtr.documents.write, dtr.profile.read, dtr.profile.write, dtr.company.read, dtr.company.write, room_forms, asset_group_account_read, asset_group_account_clone_write, asset_group_account_clone_read, webforms_read, webforms_instance_read, webforms_instance_write, aow_manage"
34+
"scope": "user_write, signature, impersonation, group_read, organization_read, permission_read, user_read, account_read, domain_read, identity_provider_read, user_data_redact, click.manage, click.send, dtr.rooms.read, dtr.rooms.write, dtr.documents.read, dtr.documents.write, dtr.profile.read, dtr.profile.write, dtr.company.read, dtr.company.write, room_forms, asset_group_account_read, asset_group_account_clone_write, asset_group_account_clone_read, webforms_read, webforms_instance_read, webforms_instance_write, aow_manage, organization_sub_account_write, organization_sub_account_read"
3535
},
3636
"jwt": {
3737
"client-id": "{INTEGRATION_KEY_JWT}",
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
2+
<jsp:include page='../../../partials/head.jsp'/>
3+
4+
<c:set var="formNumber" value="0" scope="page" />
5+
<c:set var="emailInputNumber" value="0" scope="page" />
6+
<c:set var="firstNameInputNumber" value="1" scope="page" />
7+
<c:set var="lastNameInputNumber" value="2" scope="page" />
8+
9+
<h4>13. ${example.getExampleName()}</h4>
10+
<p>${example.getExampleDescription()}</p>
11+
12+
<c:if test='${showDoc}'>
13+
<p><a target='_blank' rel="noopener noreferrer" href='${documentation}'>Documentation</a> about this example.</p>
14+
</c:if>
15+
16+
<jsp:include page="../../links_to_api_methods.jsp" />
17+
18+
<p>
19+
${viewSourceFile}
20+
</p>
21+
22+
<form class="eg" method="post" data-busy="form">
23+
<div class="form-group">
24+
<label for="email">
25+
${example.getForms().get(formNumber).getInputs().get(emailInputNumber).getInputName()}
26+
</label>
27+
28+
<input type="email"
29+
class="form-control"
30+
id="email"
31+
name="email"
32+
aria-describedby="emailHelp"
33+
placeholder="${example.getForms().get(formNumber).getInputs().get(emailInputNumber).getInputPlaceholder()}"
34+
required>
35+
</div>
36+
37+
<div class="form-group">
38+
<label for="firstName">
39+
${example.getForms().get(formNumber).getInputs().get(firstNameInputNumber).getInputName()}
40+
</label>
41+
42+
<input type="text"
43+
class="form-control"
44+
id="firstName"
45+
placeholder="${example.getForms().get(formNumber).getInputs().get(firstNameInputNumber).getInputPlaceholder()}"
46+
name="firstName"
47+
required />
48+
</div>
49+
50+
<div class="form-group">
51+
<label for="lastName">
52+
${example.getForms().get(formNumber).getInputs().get(lastNameInputNumber).getInputName()}
53+
</label>
54+
55+
<input type="text"
56+
class="form-control"
57+
id="lastName"
58+
placeholder="${example.getForms().get(formNumber).getInputs().get(lastNameInputNumber).getInputPlaceholder()}"
59+
name="lastName"
60+
required />
61+
</div>
62+
63+
<input type="hidden" name="csrf_token" value="${csrfToken}"/>
64+
<button type="submit" class="btn btn-primary">${launcherTexts.getSubmitButton()}</button>
65+
</form>
66+
67+
<jsp:include page='../../../partials/foot.jsp'/>

0 commit comments

Comments
 (0)