public DocuSignApiConfiguration SetUp(DocuSignAuthTokenDTO docuSignAuthDTO) { string baseUrl = string.Empty; string integratorKey = string.Empty; //create configuration for future api calls if (docuSignAuthDTO.IsDemoAccount) { integratorKey = CloudConfigurationManager.GetSetting("DocuSignIntegratorKey_DEMO"); baseUrl = CloudConfigurationManager.GetSetting("environment_DEMO") + "restapi/"; } else { integratorKey = CloudConfigurationManager.GetSetting("DocuSignIntegratorKey"); baseUrl = docuSignAuthDTO.Endpoint.Replace("v2/accounts/" + docuSignAuthDTO.AccountId.ToString(), ""); } ApiClient apiClient = new ApiClient(baseUrl); string authHeader = "bearer " + docuSignAuthDTO.ApiPassword; Configuration conf = new Configuration(apiClient); conf.AddDefaultHeader("Authorization", authHeader); DocuSignApiConfiguration result = new DocuSignApiConfiguration() { AccountId = docuSignAuthDTO.AccountId, Configuration = conf }; if (string.IsNullOrEmpty(docuSignAuthDTO.AccountId)) //we deal with and old token, that don't have accountId yet { AuthenticationApi authApi = new AuthenticationApi(conf); try { LoginInformation loginInfo = authApi.Login(); result.AccountId = loginInfo.LoginAccounts[0].AccountId; //it seems that althought one DocuSign account can have multiple users - only one is returned, the one that oAuth token was created for } catch (Exception ex) { throw new AuthorizationTokenExpiredOrInvalidException(); } } return(result); }
private async Task <DocuSignAuthTokenDTO> ObtainAuthToken(CredentialsDTO curCredentials) { //TODO: choose configuration either for demo or prod service string endpoint = string.Empty; if (curCredentials.IsDemoAccount) { endpoint = CloudConfigurationManager.GetSetting("environment_DEMO") + "/restapi"; } else { endpoint = CloudConfigurationManager.GetSetting("environment") + "/restapi"; } // Here we make a call to API with X-DocuSign-Authentication to retrieve both oAuth token and AccountID string integratorKey = CloudConfigurationManager.GetSetting("DocuSignIntegratorKey" + (curCredentials.IsDemoAccount ? "_DEMO" : "")); ApiClient apiClient = new ApiClient(endpoint); string authHeader = "{\"Username\":\"" + curCredentials.Username + "\", \"Password\":\"" + curCredentials.Password + "\", \"IntegratorKey\":\"" + integratorKey + "\"}"; Configuration conf = new Configuration(apiClient); conf.AddDefaultHeader("X-DocuSign-Authentication", authHeader); AuthenticationApi authApi = new AuthenticationApi(conf); LoginInformation loginInfo = await authApi.LoginAsync(new AuthenticationApi.LoginOptions() { apiPassword = "******" }); string accountId = loginInfo.LoginAccounts[0].AccountId; //it seems that althought one DocuSign account can have multiple users - only one is returned, the one that credentials were provided for DocuSignAuthTokenDTO result = new DocuSignAuthTokenDTO() { AccountId = accountId, ApiPassword = loginInfo.ApiPassword, Email = curCredentials.Username, IsDemoAccount = curCredentials.IsDemoAccount, Endpoint = loginInfo.LoginAccounts[0].BaseUrl.Replace("v2/accounts/" + accountId.ToString(), "") }; return(result); }
public DocuSignQuery BuildDocusignQuery(DocuSignAuthTokenDTO authToken, List <FilterConditionDTO> conditions) { var query = new DocuSignQuery(); List <DocusignFolderInfo> folders = null; //Currently we can support only equality operation foreach (var condition in conditions) { FieldBackedRoutingInfo fieldBackedRoutingInfo; if (!_queryBuilderFields.TryGetValue(condition.Field, out fieldBackedRoutingInfo) || fieldBackedRoutingInfo.DocusignQueryName == null) { continue; } // criteria contains folder name, but to search we need folder id if (fieldBackedRoutingInfo.DocusignQueryName == "Folder") { if (condition.Operator == "eq") { // cache list of folders if (folders == null) { //folders = _docuSignFolder.GetSearchFolders(authToken.Email, authToken.ApiPassword); } var value = condition.Value; var folder = folders.FirstOrDefault(x => x.Name == value); query.Folder = folder != null ? folder.FolderId : value; } } else if (fieldBackedRoutingInfo.DocusignQueryName == "Status" && condition.Operator == "eq") { query.Status = condition.Value; } else if (fieldBackedRoutingInfo.DocusignQueryName == "SearchText") { if (condition.Operator == "eq") { query.SearchText = condition.Value; } } else if (fieldBackedRoutingInfo.DocusignQueryName == "CreatedDateTime") { DateTime dt; if (condition.Operator == "gt" || condition.Operator == "gte") { if (DateTime.TryParseExact(condition.Value, "dd-MM-yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out dt)) { query.FromDate = dt; } } else if (condition.Operator == "lt") { if (DateTime.TryParseExact(condition.Value, "dd-MM-yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out dt)) { query.ToDate = dt.AddDays(-1); } } else if (condition.Operator == "lte") { if (DateTime.TryParseExact(condition.Value, "dd-MM-yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out dt)) { query.ToDate = dt; } } } else { query.Conditions.Add(new FilterConditionDTO() { Field = fieldBackedRoutingInfo.DocusignQueryName, Operator = condition.Operator, Value = condition.Value }); } } return(query); }