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);
        }
Esempio n. 3
0
        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);
        }