Example #1
0
        public void ProcessRequest(HttpContext context)
        {
            var controller        = new FrontController();
            var webRequestFactory = new WebRequestFactory();

            controller.Handle(webRequestFactory.CreateFrom(context));
        }
Example #2
0
        private void BackgroundGetGitHubVersion(object sender, DoWorkEventArgs e)
        {
            System.Threading.Thread.Sleep(CHECK_SECONDS_AFTER_STARTUP.SecondsToMilliseconds()); //give DaxStudio a little time to get started up so we don't impede work people are doing with this version check
            LastVersionCheck = DateTime.UtcNow;

            VersionStatus = "Checking for updates...";
            NotifyOfPropertyChange(() => VersionStatus);
            try
            {
                if (_webRequestFactory == null)
                {
                    _webRequestFactory = WebRequestFactory.CreateAsync(_globalOptions, _eventAggregator).Result;
                }

                PopulateServerVersionFromGithub(_webRequestFactory);
                SetVersionStatus();
            }
            catch (Exception ex)
            {
                Log.Error("{class} {method} {error}", "VersionCheck", "worker_DoWork", ex.Message);
                _eventAggregator.PublishOnUIThread(new ErrorEventArgs(ex));
            }

            CheckVersion();
        }
Example #3
0
        public void Languages()
        {
            Settings settings   = "123";
            var      webRequest = new WebRequestFactory(settings);

            llist = new LanguageList(webRequest);
            llist.Output();
        }
        public static void Default_1_GetHttpWebRequest_WithEmptyUri()
        {
            var webRequestFactory = WebRequestFactory.GetInstance();

            Assert.NotNull(webRequestFactory);
            var webRequest = webRequestFactory.GetHttpWebRequest(null);

            Assert.Null(webRequest);
        }
        public void Default_1_GetHttpWebRequest()
        {
            var webRequestFactory = WebRequestFactory.GetInstance();

            Assert.NotNull(webRequestFactory);
            var webRequest = webRequestFactory.GetHttpWebRequest(new Uri("https://www.google.com/search?q=firefox"));

            Assert.NotNull(webRequest);
            _output.WriteLine("WebRequest.UserAgent: " + webRequest.UserAgent);
        }
        private WebRequest createWebRequest(string path)
        {
            int    port    = IsCorrelation ? 9682 : 9681;
            string address = string.Format("https://{0}:{1}{2}", Host, port, path);

            WebRequest webRequest = WebRequestFactory.CreateSpotfireWebRequest(new Uri(address));

            webRequest.Credentials = new NetworkCredential(UserName, userPass);
            return(webRequest);
        }
Example #7
0
        public static async Task PrimeConnectionAsync(string uri, IGlobalOptions globalOptions, IEventAggregator eventAggregator)
        {
            Log.Debug("{class} {method} {event}", "DaxFormatter", "PrimeConnectionAsync", "Start");
            try
            {
                if (globalOptions.BlockExternalServices)
                {
                    Log.Debug(Common.Constants.LogMessageTemplate, nameof(DaxFormatterProxy), nameof(PrimeConnectionAsync), "Skipping Priming Connection to DaxFormatter.com as External Services are blocked in options");
                    return;
                }

                if (redirectHost == null)
                {
                    // www.daxformatter.com redirects request to another site.  HttpWebRequest does redirect with GET.  It fails, since the web service works only with POST
                    // The following 2 requests are doing manual POST re-direct
                    //var webRequestFactory = IoC.Get<WebRequestFactory>();
                    WebRequestFactory webRequestFactory =
                        await WebRequestFactory.CreateAsync(globalOptions, eventAggregator);

                    var redirectRequest = webRequestFactory.Create(uri) as HttpWebRequest;

                    redirectRequest.AllowAutoRedirect = false;
                    redirectRequest.Timeout           = globalOptions.DaxFormatterRequestTimeout.SecondsToMilliseconds();
                    try
                    {
                        using (var netResponse = await redirectRequest.GetResponseAsync())
                        {
                            var redirectResponse = (HttpWebResponse)netResponse;
                            redirectUrl = redirectResponse.Headers["Location"];
                            var redirectUri = new Uri(redirectUrl);

                            // set the shared redirectHost variable
                            redirectHost = redirectUri.Host;
                            Log.Debug("{class} {method} Redirected to: {redirectUrl}", "DaxFormatter",
                                      "CallDaxFormatterAsync", uri.ToString());
                            System.Diagnostics.Debug.WriteLine("Host: " + redirectUri.Host);
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Error("{class} {method} {error}", "DaxFormatter", "PrimeConnectionAsync",
                                  $"Error getting redirect response: {ex.Message}");
                    }
                }
            }
            catch (Exception ex1)
            {
                Log.Error("{class} {method} {error}", "DaxFormatter", "PrimeConnectionAsync",
                          $"Error getting redirect location: {ex1.Message}");
                await eventAggregator.PublishOnUIThreadAsync(new OutputMessage(MessageType.Warning,
                                                                               $"An error occurred while checking the connection to daxformatter.com\n\t{ex1.Message}"));
            }

            Log.Debug("{class} {method} {event}", "DaxFormatter", "PrimeConnectionAsync", "End");
        }
Example #8
0
        //private void SetVersionStatus()
        //{
        //    if (ServerVersion.IsNotSet() )
        //    { VersionStatus = "(Unable to get version information)"; }
        //    else if (LocalVersion.CompareTo(ServerVersion) > 0)
        //    { VersionStatus = string.Format("(Ahead of {1} Version - {0} )", ServerVersion.ToString(3), ServerVersionType); }
        //    else if (LocalVersion.CompareTo(ServerVersion) == 0)
        //    { VersionStatus = string.Format("(Latest {0} Version)", ServerVersionType); }
        //    else
        //    { VersionStatus = string.Format("(New {1} Version available - {0})", ServerVersion.ToString(3), ServerVersionType); }

        //    UpdateCompleteCallback();

        //    NotifyOfPropertyChange(() => VersionStatus);
        //}


        // This code runs async in a background worker
        private void PopulateServerVersionFromGithub(WebRequestFactory wrf)
        {
            Log.Information(Common.Constants.LogMessageTemplate, nameof(VersionCheck), nameof(PopulateServerVersionFromGithub), "Start");

            using (System.Net.WebClient http = wrf.CreateWebClient())
            {
                string json = "";

                try
                {
                    //#if DEBUG
                    //                    json = File.ReadAllText(@"..\..\..\src\CurrentReleaseVersion.json");
                    //#else
                    Log.Information(Common.Constants.LogMessageTemplate, nameof(VersionCheck), nameof(PopulateServerVersionFromGithub), "Starting download of CurrentVersion.json");
                    json = http.DownloadString(new Uri(WebRequestFactory.CurrentGithubVersionUrl));
//#endif
                }
                catch (System.Net.WebException wex)
                {
                    if (wex.Status == System.Net.WebExceptionStatus.ProtocolError && ((HttpWebResponse)wex.Response).StatusCode == HttpStatusCode.ProxyAuthenticationRequired)
                    {
                        Log.Information(Common.Constants.LogMessageTemplate, nameof(VersionCheck), nameof(PopulateServerVersionFromGithub), "Re-trying download of CurrentVersion.json with proxy auth");
                        // assume proxy auth error and re-try with current user credentials
                        http.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
                        json = http.DownloadString(new Uri(WebRequestFactory.CurrentGithubVersionUrl));
                    }
                    else
                    {
                        throw;
                    }
                }

                JObject jobj = JObject.Parse(json);
                try
                {
                    _productionVersion     = Version.Parse((string)jobj["Version"]);
                    _productionDownloadUrl = new Uri((string)jobj["DownloadUrl"]);

                    ServerVersionType = "Production";
                    _globalOptions.CurrentDownloadVersion = _productionVersion;
                    DownloadUrl = _productionDownloadUrl;
                }
                catch (Exception ex)
                {
                    Log.Error(ex, Common.Constants.LogMessageTemplate, nameof(VersionCheck), nameof(PopulateServerVersionFromGithub), $"Error parsing CurrentVersion.json: {ex.Message}");
                    _eventAggregator.PublishOnUIThread(new OutputMessage(MessageType.Warning, $"The following error occurred while checking if there is an updated release available: {ex.Message}"));
                }
                finally
                {
                    UpdateCompleteCallback?.Invoke();
                }
                Log.Information(Common.Constants.LogMessageTemplate, nameof(VersionCheck), nameof(PopulateServerVersionFromGithub), "Finish");
            }
        }
Example #9
0
 public VersionCheck(IEventAggregator eventAggregator, WebRequestFactory webRequestFactory, IGlobalOptions globalOptions)
 {
     _eventAggregator   = eventAggregator;
     _webRequestFactory = webRequestFactory;
     _globalOptions     = globalOptions;
     if (Enabled) // && LastVersionCheck.AddDays(CHECK_EVERY_DAYS) < DateTime.Today)
     {
         worker.DoWork += new DoWorkEventHandler(worker_DoWork);
         worker.RunWorkerAsync();
     }
 }
Example #10
0
 public Skype4Sharp(SkypeCredentials loginData, WebProxy loginProxy = null)
 {
     authInfo          = loginData;
     mainProxy         = loginProxy;
     mainFactory       = new WebRequestFactory(mainProxy, new CookieContainer());
     mainPoll          = new Poller(this);
     selfProfile       = new User(this);
     mainUserModule    = new UserModule(this);
     mainAuthModule    = new AuthModule(this);
     mainMessageModule = new MessageModule(this);
     mainContactModule = new ContactModule(this);
 }
Example #11
0
        private void BackgroundGetGitHubVersion(object sender, DoWorkEventArgs e)
        {
            try
            {
                Log.Information(Common.Constants.LogMessageTemplate, nameof(VersionCheck), nameof(BackgroundGetGitHubVersion), "Starting Background Version Check");
                _isCheckRunning = true;
                UpdateStartingCallback?.Invoke();

                //give DaxStudio a little time to get started up so we don't impede work people are doing with this version check
                if (_isAutomaticCheck)
                {
                    System.Threading.Thread.Sleep(CHECK_SECONDS_AFTER_STARTUP.SecondsToMilliseconds());
                    _isAutomaticCheck = false;
                }
                LastVersionCheck = DateTime.UtcNow;

                //VersionStatus = "Checking for updates...";
                //NotifyOfPropertyChange(() => VersionStatus);
                try
                {
                    if (_webRequestFactory == null)
                    {
                        Log.Information(Common.Constants.LogMessageTemplate, nameof(VersionCheck), nameof(BackgroundGetGitHubVersion), "Creating WebRequestFactory");
                        _webRequestFactory = WebRequestFactory.CreateAsync(_globalOptions, _eventAggregator).Result;
                    }
                    Log.Information(Common.Constants.LogMessageTemplate, nameof(VersionCheck), nameof(BackgroundGetGitHubVersion), "Starting Population of version information from Github");
                    PopulateServerVersionFromGithub(_webRequestFactory);
                    Log.Information(Common.Constants.LogMessageTemplate, nameof(VersionCheck), nameof(BackgroundGetGitHubVersion), "Updating Version Status");
                    //SetVersionStatus();
                    UpdateCompleteCallback?.Invoke();
                }
                catch (Exception ex)
                {
                    Log.Error("{class} {method} {error}", "VersionCheck", "worker_DoWork", ex.Message);
                    _eventAggregator.PublishOnUIThread(new ErrorEventArgs(ex));
                }

                CheckVersion();
            }
            catch (Exception ex)
            {
                Log.Error(ex, Common.Constants.LogMessageTemplate, nameof(VersionCheck), nameof(BackgroundGetGitHubVersion), ex.Message);
                _eventAggregator.PublishOnUIThread(new OutputMessage(MessageType.Warning, $"Error while checking for updates: {ex.Message}"));
            }
            finally
            {
                _isCheckRunning = false;
            }
            Log.Information(Common.Constants.LogMessageTemplate, nameof(VersionCheck), nameof(BackgroundGetGitHubVersion), "Finished Background Version Check");
        }
Example #12
0
        //private void PopulateServerVersionFromCodeplex()
        //{
        //    System.Net.WebClient http = new System.Net.WebClient();
        //    //http.Proxy = System.Net.WebProxy.GetDefaultProxy(); //works but is deprecated
        //    http.Proxy = System.Net.WebRequest.GetSystemWebProxy(); //inherits the Internet Explorer proxy settings. Should help this version check work behind a proxy server.
        //    MemoryStream ms;
        //    try
        //    {
        //        ms = new MemoryStream(http.DownloadData(new Uri(CURRENT_CODEPLEX_VERSION_URL)));
        //    }
        //    catch (System.Net.WebException wex)
        //    {
        //        if (wex.Status == System.Net.WebExceptionStatus.ProtocolError)
        //        {
        //            // assume proxy auth error and re-try with current user credentials
        //            http.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
        //            ms = new MemoryStream(http.DownloadData(new Uri(CURRENT_CODEPLEX_VERSION_URL)));
        //        }
        //        else
        //        {
        //            throw;
        //        }
        //    }
        //    XmlReader reader = XmlReader.Create(ms);
        //    XmlDocument doc = new XmlDocument();
        //    doc.Load(reader);
        //    this._serverVersion = Version.Parse(doc.DocumentElement.SelectSingleNode("Version").InnerText);
        //    ms.Close();
        //    reader.Close();

        //}

        // This code runs async in a background worker
        private void PopulateServerVersionFromGithub(WebRequestFactory wrf)
        {
            using (System.Net.WebClient http = wrf.CreateWebClient())
            {
                string json = "";

                try
                {
#if DEBUG
                    json = File.ReadAllText(@"..\..\..\src\CurrentReleaseVersion.json");
#else
                    json = http.DownloadString(new Uri(WebRequestFactory.CurrentGithubVersionUrl));
#endif
                }
                catch (System.Net.WebException wex)
                {
                    if (wex.Status == System.Net.WebExceptionStatus.ProtocolError && ((HttpWebResponse)wex.Response).StatusCode == HttpStatusCode.ProxyAuthenticationRequired)
                    {
                        // assume proxy auth error and re-try with current user credentials
                        http.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
                        json = http.DownloadString(new Uri(WebRequestFactory.CurrentGithubVersionUrl));
                    }
                    else
                    {
                        throw;
                    }
                }

                JObject jobj = JObject.Parse(json);

                _productionVersion     = Version.Parse((string)jobj["Version"]);
                _productionDownloadUrl = (string)jobj["DownloadUrl"];

                _prereleaseVersion     = Version.Parse((string)jobj["PreRelease"]["Version"]);
                _prereleaseDownloadUrl = (string)jobj["PreRelease"]["DownloadUrl"];

                if (_globalOptions.ShowPreReleaseNotifcations && _productionVersion.CompareTo(_prereleaseVersion) < 0)
                {
                    ServerVersionType = "Pre-Release";
                    _serverVersion    = _prereleaseVersion;
                    _downloadUrl      = _prereleaseDownloadUrl;
                }
                else
                {
                    ServerVersionType = "Production";
                    _serverVersion    = _productionVersion;
                    DownloadUrl       = _productionDownloadUrl;
                }
            }
        }
        public void WebRequestFactory_CreateWebRequest_CreatesANewWebRequestEachCall()
        {
            // Arrange
            var factory = new WebRequestFactory();

            // Act
            var request1 = factory.Create("http://localhost");
            var request2 = factory.Create("http://localhost");

            // Assert
            Assert.IsNotNull(request1);
            Assert.IsNotNull(request2);
            Assert.AreNotSame(request1, request2);
        }
        public void WebRequestFactory_CreateWebRequest_CreatesANewWebRequestEachCall()
        {
            // Arrange
            var factory = new WebRequestFactory();

            // Act
            var request1 = factory.Create("http://localhost");
            var request2 = factory.Create("http://localhost");

            // Assert
            Assert.IsNotNull(request1);
            Assert.IsNotNull(request2);
            Assert.AreNotSame(request1, request2);
        }
        public void Run(string flightUrl)
        {
            var startTime = DateTime.Now;
            var requestFactory = new WebRequestFactory();
            var scraper = new ThomsonScraper(requestFactory, new ThomsonHtmlParser(), new ElasticSearchWriter());
            var pagesScraped = 0;
            var elasticSearchErrorEncountered = false;

            foreach (var departureAirport in ScrapeDepartureAirports(scraper, requestFactory))
            {
                Console.WriteLine("Finding flights from {0}", departureAirport);
                foreach (var query in new ThomsonQueryBuilder().GetFlightQueries(DateTime.Now, 7))
                {
                    if (elasticSearchErrorEncountered)
                        break;

                    var formattedUrl = string.Format(flightUrl, departureAirport, query);

                    Console.WriteLine("Scraping {0}", formattedUrl);

                    while (formattedUrl != null)
                    {
                        try
                        {
                            var scrapeResult = Scrape(scraper, requestFactory, formattedUrl);

                            formattedUrl = GetNextUrl(scrapeResult);

                            pagesScraped++;
                        }
                        catch (ElasticSearchException e)
                        {
                            Console.WriteLine(e.Message);
                            elasticSearchErrorEncountered = true;
                            break;
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                        }
                    }
                    pagesScraped = 0;
                }
            }

            Console.WriteLine(pagesScraped + " pages scraped");

            Console.WriteLine("Ran in " + (DateTime.Now - startTime));
        }
Example #16
0
        static void Main(string[] args)
        {
            var serializerFactory       = new ContentSerializerFactory();
            var contentExtractorFactory = new ContentProviderFactory();
            var webRequestFactory       = new WebRequestFactory(serializerFactory, contentExtractorFactory);
            var requestDesigner         = new RequestDesigner(webRequestFactory);

            while (true)
            {
                requestDesigner.SetUp();

                Console.ReadKey();
                Console.Clear();
            }
        }
Example #17
0
        public void Test_SecretProviderFactory()
        {
            var webRequestFactory = new WebRequestFactory();
            var serializer        = new DefaultJSONSerializer();

            var secretProviderFactory = new AzureSecretProviderFactory(webRequestFactory, serializer);

            var executionContext = new FakeExecutionContext();

            var provider = secretProviderFactory.Create(executionContext);

            Assert.AreEqual(26, provider.Count);

            var value = provider.GetValue <string>("MySimpleSecret");

            Assert.AreEqual("This is a secret", value);
        }
Example #18
0
        public void TestWebServer()
        {
            const int webserverPort = 20202;

            using (var webserver = new WebServer(webserverPort))
            {
                foreach (var element in plainTextElementResponses)
                {
                    new TestElementResponse(element.Key, element.Value);
                }

                foreach (var element in plainTextElementResponses)
                {
                    Assert.AreEqual(WebRequestFactory.GetResponseSimple($"http://localhost:{webserver.Port}/{element.Key}", out System.Net.HttpStatusCode statusCode), element.Key);
                }

                int count = 0;

                foreach (var element in complexRelementResponsesContain)
                {
                    new TestElementResponse($"{nameof(complexRelementResponsesContain)}.{count++}.{element.Key.GetType().Name}", element.Key);
                }

                count = 0;

                foreach (var element in complexRelementResponsesContain)
                {
                    foreach (var value in element.Value)
                    {
                        Assert.IsTrue(WebRequestFactory.GetResponseSimple($"http://localhost:{webserver.Port}/{nameof(complexRelementResponsesContain)}.{count}.{element.Key.GetType().Name}", out System.Net.HttpStatusCode statusCode).Contains(value));
                    }

                    count++;
                }
            }

            Thread.Sleep(500);

            Assert.IsTrue(ServerCore.TcpPortIsUnused(webserverPort));
        }
        public void ServiceBaseGenerates_WebRequestEntities_From_SharedWebRequestFactory()
        {
            // arrange
            var uri     = new Uri("http://www.google.com");
            var factory = new TestWebRequestFactoryEx();
            var user    = new UserContract {
                Name = "Freddie"
            };

            factory.RegisterResultForUri(uri.ToString(), user.ToJson()); // if our hook is working then we should get contracts from google and not a search page

            WebRequestFactory.SetSharedWebRequestFactory(factory);

            // act
            var service = new TestServiceBase(new ApiConfiguration("<<clientid>>", "<<clientsecret>>", "<<redirecturl>>"), null, null);

            // assert
            var contract = service.Get(uri);

            Assert.AreNotSame(user, contract);
            Assert.AreEqual(user.Name, contract.Name);
        }
Example #20
0
        public static async Task PrimeConnectionAsync(string uri, IGlobalOptions globalOptions, IEventAggregator eventAggregator)
        {
            await Task.Run(async() =>
            {
                Log.Debug("{class} {method} {event}", "DaxFormatter", "PrimeConnectionAsync", "Start");
                if (redirectHost == null)
                {
                    // www.daxformatter.com redirects request to another site.  HttpWebRequest does redirect with GET.  It fails, since the web service works only with POST
                    // The following 2 requests are doing manual POST re-direct
                    //var webRequestFactory = IoC.Get<WebRequestFactory>();
                    WebRequestFactory webRequestFactory = await WebRequestFactory.CreateAsync(globalOptions, eventAggregator);
                    var redirectRequest = webRequestFactory.Create(uri) as HttpWebRequest;

                    redirectRequest.AllowAutoRedirect = false;
                    redirectRequest.Timeout           = globalOptions.DaxFormatterRequestTimeout.SecondsToMilliseconds();
                    try
                    {
                        using (var netResponse = redirectRequest.GetResponse())
                        {
                            var redirectResponse = (HttpWebResponse)netResponse;
                            redirectUrl          = redirectResponse.Headers["Location"];
                            var redirectUri      = new Uri(redirectUrl);

                            // set the shared redirectHost variable
                            redirectHost = redirectUri.Host;
                            Log.Debug("{class} {method} Redirected to: {redirectUrl}", "DaxFormatter", "CallDaxFormatterAsync", uri.ToString());
                            System.Diagnostics.Debug.WriteLine("Host: " + redirectUri.Host);
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Error("{class} {method} {error}", "DaxFormatter", "PrimeConnectionAsync", ex.Message);
                    }
                }
                Log.Debug("{class} {method} {event}", "DaxFormatter", "PrimeConnectionAsync", "End");
            });
        }
        public async Task <WebRequestResponse <T> > GetResponseFromEndpoint <T>(string url, CancellationToken token)
        {
            if (!networkChecker.HasInternetAccess())
            {
                return(WebRequestFactory.Cancelled <T>());
            }

            try
            {
                var responseString = await GetResponseString(url, token);

                var obj = stringDeserializer.Deserialize <T>(responseString);

                return(WebRequestFactory.Success(obj));
            }
            catch (System.Net.WebException)
            {
                return(WebRequestFactory.Cancelled <T>());
            }
            catch (HttpRequestException)
            {
                return(WebRequestFactory.Errored <T>("Internet connection was disrupted."));
            }
        }
Example #22
0
        public MainWindow()
        {
            InitializeComponent();

            var webRequestFactory = new WebRequestFactory();

            var dispatcherInvokator = new DispatcherInvokator();

            var connectionViewModel = InitializeConnectionViewModel();

            var urlViewer = new UrlViewerViewModel();

            var registeredEventViewModel = InitializeRegistereEventsView(connectionViewModel, urlViewer, webRequestFactory);

            var channelsViewModel = InitializeChannelsViewModel(connectionViewModel, urlViewer, webRequestFactory);

            InitializeEventUpdaterViewModel(connectionViewModel, registeredEventViewModel, channelsViewModel, urlViewer, webRequestFactory, dispatcherInvokator);

            InitialzieArchiveEventsViewModel(connectionViewModel, webRequestFactory, registeredEventViewModel, channelsViewModel, urlViewer);

            MainWindowViewModel.UrlViewerViewModel = urlViewer;

            DataContext = MainWindowViewModel;
        }
Example #23
0
        private static async Task <string> CallDaxFormatterAsync(string uri, string query, ServerDatabaseInfo serverDbInfo, IGlobalOptions globalOptions, IEventAggregator eventAggregator, bool formatAlternateStyle)
        {
            Log.Verbose("{class} {method} {uri} {query}", "DaxFormatter", "CallDaxFormatterAsync:Begin", uri, query);
            try
            {
                DaxFormatterRequest req = new DaxFormatterRequest();
                req.Dax = query;
                if (globalOptions.DefaultSeparator == DaxStudio.Interfaces.Enums.DelimiterType.SemiColon)
                {
                    req.DecimalSeparator = ',';
                    req.ListSeparator    = ';';
                }
                req.ServerName                 = Crypto.SHA256(serverDbInfo.ServerName);
                req.ServerEdition              = serverDbInfo.ServerEdition;
                req.ServerType                 = serverDbInfo.ServerType;
                req.ServerMode                 = serverDbInfo.ServerMode;
                req.ServerLocation             = serverDbInfo.ServerLocation;
                req.ServerVersion              = serverDbInfo.ServerVersion;
                req.DatabaseName               = Crypto.SHA256(serverDbInfo.DatabaseName);
                req.DatabaseCompatibilityLevel = serverDbInfo.DatabaseCompatibilityLevel;
                if ((globalOptions.DefaultDaxFormatStyle == DaxStudio.Interfaces.Enums.DaxFormatStyle.ShortLine && !formatAlternateStyle)
                    ||
                    (globalOptions.DefaultDaxFormatStyle == DaxStudio.Interfaces.Enums.DaxFormatStyle.LongLine && formatAlternateStyle)
                    )
                {
                    req.MaxLineLenght = 1;
                }

                var data = JsonConvert.SerializeObject(req);

                var enc   = System.Text.Encoding.UTF8;
                var data1 = enc.GetBytes(data);

                // this should allow DaxFormatter to work through http 1.0 proxies
                // see: http://stackoverflow.com/questions/566437/http-post-returns-the-error-417-expectation-failed-c
                //System.Net.ServicePointManager.Expect100Continue = false;



                await PrimeConnectionAsync(uri, globalOptions, eventAggregator);

                Uri    originalUri = new Uri(uri);
                string actualUrl   = new UriBuilder(originalUri.Scheme, redirectHost, originalUri.Port, originalUri.PathAndQuery).ToString();

                //var webRequestFactory = IoC.Get<WebRequestFactory>();
                var webRequestFactory = await WebRequestFactory.CreateAsync(globalOptions, eventAggregator);

                var wr = webRequestFactory.Create(new Uri(actualUrl));

                wr.Timeout     = globalOptions.DaxFormatterRequestTimeout.SecondsToMilliseconds();
                wr.ContentType = "application/json";
                wr.Method      = "POST";
                wr.Accept      = "application/json, text/javascript, */*; q=0.01";
                wr.Headers.Add("Accept-Encoding", "gzip,deflate");
                wr.Headers.Add("Accept-Language", "en-US,en;q=0.8");
                wr.ContentType            = "application/json; charset=UTF-8";
                wr.AutomaticDecompression = DecompressionMethods.GZip;

                string output = "";
                using (var strm = await wr.GetRequestStreamAsync())
                {
                    strm.Write(data1, 0, data1.Length);

                    using (var resp = wr.GetResponse())
                    {
                        //var outStrm = new System.IO.Compression.GZipStream(resp.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
                        var outStrm = resp.GetResponseStream();
                        using (var reader = new System.IO.StreamReader(outStrm))
                        {
                            output = await reader.ReadToEndAsync();
                        }
                    }
                }

                return(output);
            }
            catch (Exception ex)
            {
                Log.Error("{class} {method} {message}", "DaxFormatter", "CallDaxFormatterAsync", ex.Message);
                throw;
            }
            finally
            {
                Log.Debug("{class} {method}", "DaxFormatter", "CallDaxFormatterAsync:End");
            }
        }
        private async Task <Response> SendInternalAsync(Request request, WebRequestState state, TimeSpan?connectionTimeout, CancellationToken cancellationToken)
        {
            CancellationTokenRegistration registration;

            try
            {
                registration = cancellationToken.Register(state.CancelRequest);
            }
            catch (ObjectDisposedException)
            {
                return(Responses.Canceled);
            }

            using (registration)
                using (state)
                {
                    if (state.RequestCanceled)
                    {
                        return(Responses.Canceled);
                    }

                    state.Request = WebRequestFactory.Create(request, state.TimeRemaining, Settings, log);

                    HttpActionStatus status;

                    // Step 1: send request body if it was supplied in request.
                    if (state.RequestCanceled)
                    {
                        return(Responses.Canceled);
                    }

                    if (request.HasBody)
                    {
                        status = await connectTimeLimiter
                                 .LimitConnectTime(SendRequestBodyAsync(request, state, cancellationToken), request, state, connectionTimeout)
                                 .ConfigureAwait(false);

                        if (status != HttpActionStatus.Success)
                        {
                            return(responseFactory.BuildFailureResponse(status, state));
                        }
                    }

                    // Step 2: receive response from server.
                    if (state.RequestCanceled)
                    {
                        return(Responses.Canceled);
                    }

                    status = request.HasBody
                    ? await GetResponseAsync(request, state).ConfigureAwait(false)
                    : await connectTimeLimiter.LimitConnectTime(GetResponseAsync(request, state), request, state, connectionTimeout).ConfigureAwait(false);

                    if (status != HttpActionStatus.Success)
                    {
                        return(responseFactory.BuildFailureResponse(status, state));
                    }

                    // Step 3 - download request body if it exists.
                    if (!NeedToReadResponseBody(request, state))
                    {
                        return(responseFactory.BuildSuccessResponse(state));
                    }

                    if (ResponseBodyIsTooLarge(state))
                    {
                        state.CancelRequestAttempt();
                        return(responseFactory.BuildResponse(ResponseCode.InsufficientStorage, state));
                    }

                    if (state.RequestCanceled)
                    {
                        return(Responses.Canceled);
                    }

                    if (NeedToStreamResponseBody(state))
                    {
                        state.ReturnStreamDirectly = true;
                        state.PreventNextDispose();
                        return(responseFactory.BuildSuccessResponse(state));
                    }

                    status = await ReadResponseBodyAsync(request, state, cancellationToken)
                             .ConfigureAwait(false);

                    return(status == HttpActionStatus.Success
                    ? responseFactory.BuildSuccessResponse(state)
                    : responseFactory.BuildFailureResponse(status, state));
                }
        }
Example #25
0
 public override IPluginWebRequest CreateWebRequest(Uri address, string dependencyName = null)
 {
     return(WebRequestFactory.BuildPluginWebRequest(address, dependencyName, this.TelemetryFactory, this.TelemetryClient));
 }
        public static void Default_0_GetInstance()
        {
            var webRequestFactory = WebRequestFactory.GetInstance();

            Assert.NotNull(webRequestFactory);
        }