コード例 #1
0
 protected void OnRequestBlock()
 {
     RequestBlock?.Invoke(this, EventArgs.Empty);
 }
コード例 #2
0
        public void RequestAndResponseRemovalTest()
        {
            SdkConfig config = new SdkConfig()
            {
                ControlId      = "unittest",
                SenderId       = "testsenderid",
                SenderPassword = "******",
                CompanyId      = "testcompany",
                UserId         = "testuser",
                UserPassword   = "******",
            };

            Content content = new Content()
            {
                new ApiSessionCreate(),
            };

            RequestBlock xmlRequest = new RequestBlock(config, content);

            string xmlResponse = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<response>
    <control>
        <status>success</status>
        <senderid>testsenderid</senderid>
        <controlid>testControl</controlid>
        <uniqueid>false</uniqueid>
        <dtdversion>3.0</dtdversion>
    </control>
    <operation>
        <authentication>
            <status>success</status>
            <userid>testuser</userid>
            <companyid>testcompany</companyid>
            <sessiontimestamp>2016-08-22T10:58:43-07:00</sessiontimestamp>
        </authentication>
        <result>
            <status>success</status>
            <function>get_list</function>
            <controlid>test1</controlid>
            <listtype start=""0"" end=""0"" total=""1"">vendor</listtype>
            <data>
                <vendor>
                    <recordno>4</recordno>
                    <vendorid>V0004</vendorid>
                    <name>Vendor 4</name>
                    <taxid>99-9999999</taxid>
                    <achenabled>true</achenabled>
                    <achaccountnumber>1111222233334444</achaccountnumber>
                    <achaccounttype>Checking Account</achaccounttype>
                </vendor>
            </data>
        </result>
        <result>
            <status>success</status>
            <function>readByQuery</function>
            <controlid>test2</controlid>
            <data listtype=""vendor"" count=""1"" totalcount=""1"" numremaining=""0"" resultId="""">
                <vendor>
                    <RECORDNO>4</RECORDNO>
                    <VENDORID>V0004</VENDORID>
                    <NAME>Vendor 4</NAME>
                    <TAXID>99-9999999</TAXID>
                    <ACHENABLED>true</ACHENABLED>
                    <ACHACCOUNTNUMBER>1111222233334444</ACHACCOUNTNUMBER>
                    <ACHACCOUNTTYPE>Checking Account</ACHACCOUNTTYPE>
                </vendor>
            </data>
        </result>
    </operation>
</response>";


            Stream requestStream = xmlRequest.WriteXml();

            requestStream.Position = 0;

            HttpRequestMessage mockRequest = new HttpRequestMessage(HttpMethod.Post, "https://unittest.intacct.com")
            {
                Content = new StreamContent(requestStream),
            };
            HttpResponseMessage mockResponse = new HttpResponseMessage()
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(xmlResponse)
            };

            MessageFormatter formatter = new MessageFormatter();
            string           message   = formatter.Format(mockRequest, mockResponse);

            Assert.IsFalse(message.Contains("<password>pass123!</password>"));
            Assert.IsFalse(message.Contains("<password>P@ssW0rd!123</password>"));
            Assert.IsTrue(message.Contains("<password>REDACTED</password>"));

            Assert.IsFalse(message.Contains("<taxid>99-9999999</taxid>"));
            Assert.IsTrue(message.Contains("<taxid>REDACTED</taxid>"));

            Assert.IsFalse(message.Contains("<TAXID>99-9999999</TAXID>"));
            Assert.IsTrue(message.Contains("<TAXID>REDACTED</TAXID>"));

            Assert.IsFalse(message.Contains("<achaccountnumber>1111222233334444</achaccountnumber>"));
            Assert.IsTrue(message.Contains("<achaccountnumber>REDACTED</achaccountnumber>"));

            Assert.IsFalse(message.Contains("<ACHACCOUNTNUMBER>1111222233334444</ACHACCOUNTNUMBER>"));
            Assert.IsTrue(message.Contains("<ACHACCOUNTNUMBER>REDACTED</ACHACCOUNTNUMBER>"));
        }
コード例 #3
0
        protected async Task <HttpResponse> HandleRequest(RequestBlock request, Dictionary <string, object> variables = null, string referer = null)
        {
            var requestLinkStr = ResolvePath(ApplyGoTemplateText(request.Path, variables)).ToString();

            _logger.Debug("CardigannIndexer ({0}): handleRequest() requestLinkStr= {1}", _definition.Id, requestLinkStr);

            Dictionary <string, string> pairs = null;
            var queryCollection = new NameValueCollection();

            var method = HttpMethod.Get;

            if (string.Equals(request.Method, "post", StringComparison.OrdinalIgnoreCase))
            {
                method = HttpMethod.Post;
                pairs  = new Dictionary <string, string>();
            }

            foreach (var input in request.Inputs)
            {
                var value = ApplyGoTemplateText(input.Value, variables);
                if (method == HttpMethod.Get)
                {
                    queryCollection.Add(input.Key, value);
                }
                else if (method == HttpMethod.Post)
                {
                    pairs.Add(input.Key, value);
                }
            }

            if (queryCollection.Count > 0)
            {
                if (!requestLinkStr.Contains("?"))
                {
                    // TODO Need Encoding here if we add it back
                    requestLinkStr += "?" + queryCollection.GetQueryString(separator: request.Queryseparator).Substring(1);
                }
                else
                {
                    requestLinkStr += queryCollection.GetQueryString(separator: request.Queryseparator);
                }
            }

            var httpRequest = new HttpRequestBuilder(requestLinkStr)
                              .SetCookies(Cookies ?? new Dictionary <string, string>())
                              .SetEncoding(_encoding)
                              .SetHeader("Referer", referer);

            httpRequest.Method = method;

            // Add form data for POST requests
            if (method == HttpMethod.Post)
            {
                foreach (var param in pairs)
                {
                    httpRequest.AddFormParameter(param.Key, param.Value);
                }
            }

            var response = await HttpClient.ExecuteProxiedAsync(httpRequest.Build(), Definition);

            _logger.Debug("CardigannIndexer ({0}): handleRequest() remote server returned {1}", _definition.Id, response.StatusCode);
            return(response);
        }