Exemplo n.º 1
0
        public void ThaliWebRequestTest()
        {
            var keyPair      = ThaliCryptoUtilities.GenerateThaliAcceptablePublicPrivateKeyPair();
            var pkcs12Stream = ThaliCryptoUtilities.CreatePKCS12KeyStoreWithPublicPrivateKeyPair(
                keyPair,
                ThaliCryptoUtilities.DefaultPassPhrase);
            var cert             = ThaliCryptoUtilities.GetX509Certificate(pkcs12Stream, ThaliCryptoUtilities.DefaultPassPhrase);
            var serverKey        = ThaliClientToDeviceHubUtilities.GetServersRootPublicKey(Host, Port, cert);
            var serverHttpKeyUri = HttpKeyUri.BuildHttpKeyUri(serverKey, Host, Port, null, null);
            var thaliWebRequest  = ThaliClientToDeviceHubUtilities.CreateThaliWebRequest(serverHttpKeyUri, cert);

            thaliWebRequest.Method = "GET";
            thaliWebRequest.GetResponse().Close();
        }
Exemplo n.º 2
0
        private static XmlHttpResponse ProxyRequest(
            XmlHttpRequest xmlHttpRequest,
            X509Certificate2 clientCert)
        {
            var httpKeyUri = HttpKeyUri.BuildHttpKeyUri(xmlHttpRequest.url);

            HttpWebRequest webRequest = ThaliClientToDeviceHubUtilities.CreateThaliWebRequest(httpKeyUri, clientCert);

            webRequest.Method = xmlHttpRequest.method;

            // There are multiple headers that cannot be set directly via webRequest.Headers. I only catch
            // two below that seem of some reasonable use.
            foreach (var headerNameValue in xmlHttpRequest.headers)
            {
                if (headerNameValue.Key.Equals("Accept", StringComparison.OrdinalIgnoreCase))
                {
                    webRequest.Accept = headerNameValue.Value;
                }
                else if (headerNameValue.Key.Equals("Content-Type", StringComparison.OrdinalIgnoreCase))
                {
                    webRequest.ContentType = headerNameValue.Value;
                }
                else
                {
                    webRequest.Headers.Add(headerNameValue.Key, headerNameValue.Value);
                }
            }

            if (string.IsNullOrWhiteSpace(xmlHttpRequest.requestText))
            {
                return ProcessResponse(xmlHttpRequest.transactionId, webRequest);
            }

            var bodyAsBytes = Encoding.UTF8.GetBytes(xmlHttpRequest.requestText);
            webRequest.GetRequestStream().Write(bodyAsBytes, 0, bodyAsBytes.Count());

            var response = ProcessResponse(xmlHttpRequest.transactionId, webRequest);

            return response;
        }