Skip to content

Commit 5c7cf42

Browse files
committed
Added Navigator and Maestro examples, edited Connected Fields example
1 parent b4f3155 commit 5c7cf42

File tree

25 files changed

+820
-213
lines changed

25 files changed

+820
-213
lines changed

ExamplesAPIType.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,19 @@ public enum ExamplesApiType
5454
/// Notary API
5555
/// </summary>
5656
[Description("neg")]
57-
Notary = 7
57+
Notary = 7,
58+
59+
/// <summary>
60+
/// Navigator
61+
/// </summary>")]
62+
[Description("nav")]
63+
Navigator = 8,
64+
65+
/// <summary>
66+
/// Maestro
67+
/// </summary>")]
68+
[Description("mae")]
69+
Maestro = 9,
5870
}
5971

6072
public static class ExamplesApiTypeExtensions

ExamplesApiTypeExtensions.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,12 @@ public enum ExamplesApiType
6767
/// </summary>")]
6868
[Description("cf")]
6969
ConnectedFields = 9,
70+
71+
/// <summary>
72+
/// Navigator
73+
/// </summary>")]
74+
[Description("nav")]
75+
Navigator = 10,
7076
}
7177

7278
public static class ExamplesApiTypeExtensions

JWTAuth.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ public static OAuthToken AuthenticateWithJwt(string api, string clientId, string
5050
});
5151
}
5252

53+
if (apiType == ExamplesApiType.Maestro)
54+
{
55+
scopes.AddRange(new List<string>
56+
{
57+
"aow_manage",
58+
});
59+
}
60+
5361
if (apiType == ExamplesApiType.Monitor)
5462
{
5563
scopes.AddRange(new List<string>
@@ -87,6 +95,11 @@ public static OAuthToken AuthenticateWithJwt(string api, string clientId, string
8795
scopes.Add("webforms_instance_read");
8896
}
8997

98+
if (apiType == ExamplesApiType.Navigator)
99+
{
100+
scopes.Add("adm_store_unified_repo_read");
101+
}
102+
90103
return docuSignClient.RequestJWTUserToken(
91104
clientId,
92105
impersonatedUserId,

launcher-csharp/Common/IRequestItemsService.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
namespace DocuSign.CodeExamples
66
{
77
using System;
8+
using System.Collections.Generic;
89
using DocuSign.CodeExamples.Models;
10+
using Docusign.IAM.SDK.Models.Components;
911
using Microsoft.Extensions.Configuration;
1012

1113
public interface IRequestItemsService
@@ -24,7 +26,7 @@ public interface IRequestItemsService
2426

2527
string EnvelopeId { get; set; }
2628

27-
public string ExtensionApps { get; set; }
29+
public List<TabInfo> ExtensionApps { get; set; }
2830

2931
public string DocumentId { get; set; }
3032

launcher-csharp/Common/RequestItemsService.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,21 @@
55
namespace DocuSign.CodeExamples.Common
66
{
77
using System;
8+
using System.Collections.Generic;
89
using System.Linq;
910
using System.Security.Claims;
1011
using DocuSign.CodeExamples.Models;
1112
using DocuSign.eSign.Client;
13+
using DocuSign.eSign.Client.Auth;
14+
using Docusign.IAM.SDK.Models.Components;
1215
using Microsoft.AspNetCore.Http;
1316
using Microsoft.Extensions.Caching.Memory;
1417
using Microsoft.Extensions.Configuration;
1518
using static DocuSign.eSign.Client.Auth.OAuth;
16-
using static DocuSign.eSign.Client.Auth.OAuth.UserInfo;
1719

1820
public class RequestItemsService : IRequestItemsService
1921
{
20-
private static Account account;
22+
private static OAuth.UserInfo.Account account;
2123

2224
private static Guid? organizationId;
2325

@@ -110,7 +112,7 @@ public string AuthenticatedUserEmail
110112
if (authenticatedUserEmail == null)
111113
{
112114
DocuSignClient.SetOAuthBasePath(this.Configuration["DocuSignJWT:AuthServer"]);
113-
UserInfo userInfo = DocuSignClient.GetUserInfo(this.User?.AccessToken);
115+
OAuth.UserInfo userInfo = DocuSignClient.GetUserInfo(this.User?.AccessToken);
114116

115117
authenticatedUserEmail = userInfo.Email;
116118
}
@@ -130,9 +132,9 @@ public string EnvelopeId
130132
set => this.cache.Set(this.GetKey("EnvelopeId"), value);
131133
}
132134

133-
public string ExtensionApps
135+
public List<TabInfo> ExtensionApps
134136
{
135-
get => this.cache.Get<string>(this.GetKey("ExtensionApps"));
137+
get => this.cache.Get<List<TabInfo>>(this.GetKey("ExtensionApps"));
136138
set => this.cache.Set(this.GetKey("ExtensionApps"), value);
137139
}
138140

@@ -303,6 +305,10 @@ public string IdentifyApiOfCodeExample(string eg)
303305
{
304306
currentApiType = ExamplesApiType.ConnectedFields.ToString();
305307
}
308+
else if (eg.Contains(ExamplesApiType.Navigator.ToKeywordString()))
309+
{
310+
currentApiType = ExamplesApiType.Navigator.ToString();
311+
}
306312
else
307313
{
308314
currentApiType = ExamplesApiType.ESignature.ToString();
@@ -316,10 +322,10 @@ private string GetKey(string key)
316322
return string.Format("{0}_{1}", this.id, key);
317323
}
318324

319-
private Account GetAccountInfo(OAuthToken authToken)
325+
private OAuth.UserInfo.Account GetAccountInfo(OAuthToken authToken)
320326
{
321327
DocuSignClient.SetOAuthBasePath(this.Configuration["DocuSignJWT:AuthServer"]);
322-
UserInfo userInfo = DocuSignClient.GetUserInfo(authToken.access_token);
328+
OAuth.UserInfo userInfo = DocuSignClient.GetUserInfo(authToken.access_token);
323329
var accounts = userInfo.Accounts;
324330

325331
var targetAccountIdString = this.Configuration["DocuSign:TargetAccountId"];

launcher-csharp/ConnectedFields/Controllers/Eg001SetConnectedFieldsController.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ namespace DocuSign.CodeExamples.Controllers
99
using DocuSign.CodeExamples.Examples;
1010
using DocuSign.CodeExamples.Models;
1111
using Microsoft.AspNetCore.Mvc;
12-
using Newtonsoft.Json;
13-
using Newtonsoft.Json.Linq;
1412

1513
[Area("ConnectedFields")]
1614
[Route("cf001")]
@@ -39,13 +37,16 @@ public override IActionResult Get()
3937

4038
string accessToken = this.RequestItemsService.User.AccessToken;
4139
string accountId = this.RequestItemsService.Session.AccountId;
40+
var basePath = this.RequestItemsService.Session.IamBasePath;
4241

43-
object extensionApps = SetConnectedFields.GetConnectedFieldsTabGroupsAsync(accountId, accessToken).Result;
44-
object filteredExtensionApps = SetConnectedFields.FilterData((JArray)extensionApps);
45-
var extensionAppsString = JsonConvert.SerializeObject(filteredExtensionApps);
42+
var connectedFields = SetConnectedFields.GetConnectedFieldsTabGroupsAsync(
43+
basePath,
44+
accountId,
45+
accessToken).Result;
46+
var filteredConnectedFields = SetConnectedFields.FilterData(connectedFields);
4647

47-
this.ViewBag.ExtensionApps = extensionAppsString;
48-
this.RequestItemsService.ExtensionApps = extensionAppsString;
48+
this.ViewBag.ExtensionApps = filteredConnectedFields;
49+
this.RequestItemsService.ExtensionApps = filteredConnectedFields;
4950

5051
return this.View(this.EgName, this);
5152
}
@@ -61,8 +62,8 @@ public IActionResult Create(string signerEmail, string signerName, string appId)
6162
return this.Redirect("/ds/mustAuthenticate");
6263
}
6364

64-
JArray extensionApp = JArray.Parse(this.RequestItemsService.ExtensionApps);
65-
JObject selectedApp = extensionApp.FirstOrDefault(app => (string)app["appId"] == appId) as JObject;
65+
var extensionApp = this.RequestItemsService.ExtensionApps;
66+
var selectedApp = extensionApp.FirstOrDefault(tab => tab.AppId == appId);
6667

6768
string accessToken = this.RequestItemsService.User.AccessToken;
6869
string basePath = this.RequestItemsService.Session.BasePath + "/restapi";

launcher-csharp/ConnectedFields/Examples/SetConnectedFields.cs

Lines changed: 34 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -7,77 +7,28 @@ namespace DocuSign.CodeExamples.Examples
77
using System;
88
using System.Collections.Generic;
99
using System.Linq;
10-
using System.Net.Http;
1110
using System.Threading.Tasks;
1211
using DocuSign.eSign.Api;
1312
using DocuSign.eSign.Client;
1413
using DocuSign.eSign.Model;
15-
using Newtonsoft.Json;
16-
using Newtonsoft.Json.Linq;
14+
using Docusign.IAM.SDK;
15+
using TabInfo = Docusign.IAM.SDK.Models.Components.TabInfo;
1716

1817
public static class SetConnectedFields
1918
{
20-
private static readonly HttpClient Client = new HttpClient();
21-
22-
public static async Task<object> GetConnectedFieldsTabGroupsAsync(string accountId, string accessToken)
19+
public static async Task<List<TabInfo>> GetConnectedFieldsTabGroupsAsync(string basePath, string accountId, string accessToken)
2320
{
24-
//ds-snippet-start:ConnectedFields1Step3
25-
var url = $"https://api-d.docusign.com/v1/accounts/{accountId}/connected-fields/tab-groups";
26-
27-
var requestMessage = new HttpRequestMessage(HttpMethod.Get, url);
28-
//ds-snippet-end:ConnectedFields1Step3
29-
30-
//ds-snippet-start:ConnectedFields1Step2
31-
requestMessage.Headers.Add("Authorization", $"Bearer {accessToken}");
32-
requestMessage.Headers.Add("Accept", "application/json");
33-
//ds-snippet-end:ConnectedFields1Step2
34-
35-
try
36-
{
37-
//ds-snippet-start:ConnectedFields1Step3
38-
var response = await Client.SendAsync(requestMessage);
39-
response.EnsureSuccessStatusCode();
40-
41-
var body = await response.Content.ReadAsStringAsync();
42-
var data = JsonConvert.DeserializeObject<object>(body);
43-
44-
return data;
45-
//ds-snippet-end:ConnectedFields1Step3
46-
}
47-
catch (HttpRequestException e)
48-
{
49-
throw new Exception($"DocuSign API Request failed: {e.Message}");
50-
}
21+
var client = CreateAuthenticatedClient(basePath, accessToken);
22+
return await client.ConnectedFields.TabInfo.GetConnectedFieldsTabGroupsAsync(accountId);
5123
}
5224

53-
public static JArray FilterData(JArray data)
25+
public static List<TabInfo> FilterData(List<TabInfo> connectedFields)
5426
{
55-
//ds-snippet-start:ConnectedFields1Step4
56-
var filteredData = data.Where(item =>
57-
{
58-
var tabs = item["tabs"] as JArray;
59-
if (tabs == null)
60-
{
61-
return false;
62-
}
63-
64-
foreach (var tab in tabs)
65-
{
66-
var extensionData = tab["extensionData"];
67-
var tabLabel = tab["tabLabel"]?.ToString();
68-
69-
if ((extensionData != null && extensionData["actionContract"]?.ToString().Contains("Verify") == true) ||
70-
(tabLabel != null && tabLabel.Contains("connecteddata")))
71-
{
72-
return true;
73-
}
74-
}
75-
76-
return false;
77-
}).ToList();
78-
//ds-snippet-end:ConnectedFields1Step4
79-
80-
return new JArray(filteredData);
27+
return connectedFields
28+
.Where(group => group.Tabs.Any(tab =>
29+
tab.ExtensionData?.ActionContract?.Contains("Verify") == true ||
30+
tab.TabLabel.Contains("connecteddata")))
31+
.ToList();
8132
}
8233

8334
public static string SendEnvelopeViaEmail(
@@ -87,7 +38,7 @@ public static string SendEnvelopeViaEmail(
8738
string signerEmail,
8839
string signerName,
8940
string docPdf,
90-
JObject selectedApp)
41+
TabInfo selectedApp)
9142
{
9243
//ds-snippet-start:ConnectedFields1Step6
9344
EnvelopeDefinition envelopeDefinition = MakeEnvelope(signerEmail, signerName, docPdf, selectedApp);
@@ -105,11 +56,8 @@ public static EnvelopeDefinition MakeEnvelope(
10556
string signerEmail,
10657
string signerName,
10758
string docPdf,
108-
JObject selectedApp)
59+
TabInfo selectedApp)
10960
{
110-
var appId = selectedApp["appId"]?.ToString() ?? string.Empty;
111-
JArray tabLabels = (JArray)selectedApp["tabs"];
112-
11361
EnvelopeDefinition envelopeDefinition = new EnvelopeDefinition();
11462
envelopeDefinition.EmailSubject = "Please sign this document set";
11563
envelopeDefinition.Status = "sent";
@@ -147,32 +95,24 @@ public static EnvelopeDefinition MakeEnvelope(
14795
},
14896
};
14997

150-
foreach (var tab in tabLabels)
98+
foreach (var tab in selectedApp.Tabs)
15199
{
152-
var connectionKey = tab["extensionData"]["connectionInstances"] != null ?
153-
tab["extensionData"]["connectionInstances"][0]?["connectionKey"]?.ToString() : string.Empty;
154-
var connectionValue = tab["extensionData"]["connectionInstances"] != null ?
155-
tab["extensionData"]["connectionInstances"][0]?["connectionValue"]?.ToString() : string.Empty;
156-
var extensionGroupId = tab["extensionData"]["extensionGroupId"]?.ToString() ?? string.Empty;
157-
var publisherName = tab["extensionData"]["publisherName"]?.ToString() ?? string.Empty;
158-
var applicationName = tab["extensionData"]["applicationName"]?.ToString() ?? string.Empty;
159-
var actionName = tab["extensionData"]["actionName"]?.ToString() ?? string.Empty;
160-
var actionInputKey = tab["extensionData"]["actionInputKey"]?.ToString() ?? string.Empty;
161-
var actionContract = tab["extensionData"]["actionContract"]?.ToString() ?? string.Empty;
162-
var extensionName = tab["extensionData"]["extensionName"]?.ToString() ?? string.Empty;
163-
var extensionContract = tab["extensionData"]["extensionContract"]?.ToString() ?? string.Empty;
164-
var requiredForExtension = tab["extensionData"]["requiredForExtension"]?.ToString() ?? string.Empty;
100+
var extensionData = tab.ExtensionData;
101+
var connectionKey = extensionData.ConnectionInstances != null ?
102+
extensionData.ConnectionInstances[0]?.ConnectionKey : string.Empty;
103+
var connectionValue = extensionData.ConnectionInstances != null ?
104+
extensionData.ConnectionInstances[0]?.ConnectionValue : string.Empty;
165105

166106
var text = new Text
167107
{
168108
RequireInitialOnSharedChange = "false",
169109
RequireAll = "false",
170-
Name = applicationName,
110+
Name = extensionData.ApplicationName,
171111
Required = "false",
172112
Locked = "false",
173113
DisableAutoSize = "false",
174114
MaxLength = "4000",
175-
TabLabel = tab["tabLabel"].ToString(),
115+
TabLabel = tab.TabLabel,
176116
Font = "lucidaconsole",
177117
FontColor = "black",
178118
FontSize = "size9",
@@ -187,16 +127,16 @@ public static EnvelopeDefinition MakeEnvelope(
187127
TabType = "text",
188128
ExtensionData = new ExtensionData
189129
{
190-
ExtensionGroupId = extensionGroupId,
191-
PublisherName = publisherName,
192-
ApplicationId = appId,
193-
ApplicationName = applicationName,
194-
ActionName = actionName,
195-
ActionContract = actionContract,
196-
ExtensionName = extensionName,
197-
ExtensionContract = extensionContract,
198-
RequiredForExtension = requiredForExtension,
199-
ActionInputKey = actionInputKey,
130+
ExtensionGroupId = extensionData.ExtensionGroupId,
131+
PublisherName = extensionData.PublisherName,
132+
ApplicationId = selectedApp.AppId,
133+
ApplicationName = extensionData.ApplicationName,
134+
ActionName = extensionData.ActionName,
135+
ActionContract = extensionData.ActionContract,
136+
ExtensionName = extensionData.ExtensionName,
137+
ExtensionContract = extensionData.ExtensionContract,
138+
RequiredForExtension = extensionData.RequiredForExtension.ToString(),
139+
ActionInputKey = extensionData.ActionInputKey,
200140
ExtensionPolicy = "MustVerifyToSign",
201141
ConnectionInstances = new List<ConnectionInstance>
202142
{
@@ -222,5 +162,8 @@ public static EnvelopeDefinition MakeEnvelope(
222162
}
223163

224164
//ds-snippet-end:ConnectedFields1Step5
165+
166+
private static IamClient CreateAuthenticatedClient(string basePath, string accessToken) =>
167+
IamClient.Builder().WithServerUrl(basePath).WithAccessToken(accessToken).Build();
225168
}
226169
}

0 commit comments

Comments
 (0)