예제 #1
0
        public async Task <ResponseDetails> ReadRequestToEnd2Async(HttpWebRequest request)
        {
            using (var response = await request.GetResponseAsync().TimeoutAfter(shellService.Settings.TimeOut) as HttpWebResponse)
            {
                if (response.StatusCode == HttpStatusCode.Found || response.StatusCode == HttpStatusCode.Moved)
                {
                    response.Close();
                    if (response.Headers.AllKeys.Contains("Set-Cookie"))
                    {
                        cookieService.SetUriCookie(CookieParser.GetAllCookiesFromHeader(response.Headers["Set-Cookie"], "www.tumblr.com"));
                    }

                    return(new ResponseDetails()
                    {
                        HttpStatusCode = response.StatusCode, RedirectUrl = response.Headers["Location"]
                    });
                }
                using (Stream stream = GetStreamForApiRequest(response.GetResponseStream()))
                {
                    using (var buffer = new BufferedStream(stream))
                    {
                        using (var reader = new StreamReader(buffer))
                        {
                            string content = reader.ReadToEnd();
                            return(new ResponseDetails()
                            {
                                HttpStatusCode = response.StatusCode, Response = content
                            });
                        }
                    }
                }
            }
        }
        private async Task PerformPrivacyConsentRequestAsync()
        {
            if (CheckIfLoggedInAsync())
            {
                return;
            }
            await UpdateTumblrKey();

            var referer = @"https://www.tumblr.com/privacy/consent?redirect=";
            var headers = new Dictionary <string, string> {
                { "X-tumblr-form-key", tumblrKey }
            };
            HttpWebRequest request =
                webRequestFactory.CreatePostXhrReqeust("https://www.tumblr.com/svc/privacy/consent", referer, headers);
            var requestBody =
                "{\"eu_resident\":true,\"gdpr_is_acceptable_age\":true,\"gdpr_consent_core\":true,\"gdpr_consent_first_party_ads\":true,\"gdpr_consent_third_party_ads\":true,\"gdpr_consent_search_history\":true,\"redirect_to\":\"\"}";

            request.ContentType = "application/json";
            await webRequestFactory.PerformPostXHRReqeustAsync(request, requestBody);

            using (var response = await request.GetResponseAsync() as HttpWebResponse)
            {
                cookieService.SetUriCookie(response.Cookies);
            }
        }
        public async Task ConfirmPrivacyConsent()
        {
            //if (CheckIfLoggedIn())
            //    return;
            await UpdateTumblrKey();

            string referer = @"https://www.tumblr.com/privacy/consent?redirect=";
            var    headers = new Dictionary <string, string> {
                { "X-tumblr-form-key", tumblrKey }
            };
            HttpWebRequest request = webRequestFactory.CreatePostXhrReqeust("https://www.tumblr.com/svc/privacy/consent", referer, headers);

            request.ContentType = "application/json";
            string requestBody = "{\"eu_resident\":true,\"gdpr_is_acceptable_age\":true,\"gdpr_consent_core\":true,\"gdpr_consent_first_party_ads\":true,\"gdpr_consent_third_party_ads\":true,\"gdpr_consent_search_history\":true,\"redirect_to\":\"\"}";

            using (Stream postStream = await request.GetRequestStreamAsync())
            {
                byte[] postBytes = Encoding.ASCII.GetBytes(requestBody);
                await postStream.WriteAsync(postBytes, 0, postBytes.Length);

                await postStream.FlushAsync();
            }
            using (var response = await request.GetResponseAsync() as HttpWebResponse)
            {
                cookieService.SetUriCookie(response.Cookies);
            }
        }
예제 #4
0
        public void Initialize()
        {
            string savePath = _environmentService.AppSettingsPath;
            string logPath  = Path.GetFullPath(Path.Combine(savePath, ".."));

            if (CheckIfPortableMode(AppSettingsFileName))
            {
                savePath = AppDomain.CurrentDomain.BaseDirectory;
                logPath  = savePath;
            }

            Logger.Initialize(logPath, TraceLevel.Verbose);

            _appSettings = LoadSettings <AppSettings>(Path.Combine(savePath, AppSettingsFileName));
            InitializeCultures(_appSettings);
            if (AppSettings.Upgrade(_appSettings))
            {
                SaveSettings(Path.Combine(GetAppDataPath(), AppSettingsFileName), _appSettings);
            }

            Logger.ChangeLogLevel((TraceLevel)Enum.Parse(typeof(TraceLevel), _appSettings.LogLevel));

            Logger.Information(ApplicationInfo.ProductName + " start");
            Logger.Information("AppPath: {0}", ApplicationInfo.ApplicationPath);
            Logger.Information("AppSettingsPath: {0}", _environmentService.AppSettingsPath);
            Logger.Information("LogFilename: {0}", Path.Combine(logPath, "TumblThree.log"));
            Logger.Information("Version: {0}", ApplicationInfo.Version);
            Logger.Information("IsLongPathSupported: {0}", ShellService.IsLongPathSupported);

            _queueSettings   = LoadSettings <QueueSettings>(Path.Combine(savePath, QueueSettingsFileName));
            _managerSettings = LoadSettings <ManagerSettings>(Path.Combine(savePath, ManagerSettingsFileName));
            _cookieList      = LoadSettings <List <Cookie> >(Path.Combine(savePath, CookiesFileName));

            ShellService.Settings                = _appSettings;
            ShellService.ShowErrorAction         = ShellViewModel.ShowError;
            ShellService.ShowDetailsViewAction   = ShowDetailsView;
            ShellService.ShowQueueViewAction     = ShowQueueView;
            ShellService.UpdateDetailsViewAction = UpdateDetailsView;
            ShellService.SettingsUpdatedHandler += OnSettingsUpdated;
            ShellService.InitializeOAuthManager();

            ManagerController.QueueManager    = _queueManager;
            ManagerController.ManagerSettings = _managerSettings;
            ManagerController.BlogManagerFinishedLoadingLibrary += OnBlogManagerFinishedLoadingLibrary;
            ManagerController.FinishedCrawlingLastBlog          += OnFinishedCrawlingLastBlog;
            QueueController.QueueSettings  = _queueSettings;
            QueueController.QueueManager   = _queueManager;
            DetailsController.QueueManager = _queueManager;
            CrawlerController.QueueManager = _queueManager;

            Task managerControllerInit = ManagerController.InitializeAsync();

            QueueController.Initialize();
            DetailsController.Initialize();
            CrawlerController.Initialize();
            _cookieService.SetUriCookie(_cookieList);
        }
예제 #5
0
 public async Task <string> ReadRequestToEndAsync(HttpWebRequest request, bool storeCookies = false)
 {
     using (var response = await request.GetResponseAsync().TimeoutAfter(shellService.Settings.TimeOut) as HttpWebResponse)
     {
         if (storeCookies)
         {
             cookieService.SetUriCookie(response.Cookies);
         }
         using (Stream stream = GetStreamForApiRequest(response.GetResponseStream()))
         {
             using (var buffer = new BufferedStream(stream))
             {
                 using (var reader = new StreamReader(buffer))
                 {
                     return(reader.ReadToEnd());
                 }
             }
         }
     }
 }
예제 #6
0
        private async Task <string> RequestTumblrKey()
        {
            string         url     = "https://www.tumblr.com/login";
            HttpWebRequest request = webRequestFactory.CreateGetReqeust(url);

            cookieService.GetUriCookie(request.CookieContainer, new Uri("https://www.tumblr.com/"));
            using (var response = await request.GetResponseAsync() as HttpWebResponse)
            {
                cookieService.SetUriCookie(response.Cookies);
                using (var stream = webRequestFactory.GetStreamForApiRequest(response.GetResponseStream()))
                {
                    using (var buffer = new BufferedStream(stream))
                    {
                        using (var reader = new StreamReader(buffer))
                        {
                            return(reader.ReadToEnd());
                        }
                    }
                }
            }
        }
예제 #7
0
        public void Initialize()
        {
            string savePath = _environmentService.AppSettingsPath;
            string logPath  = Path.GetFullPath(Path.Combine(savePath, ".."));

            if (CheckIfPortableMode(AppSettingsFileName))
            {
                savePath = AppDomain.CurrentDomain.BaseDirectory;
                logPath  = savePath;
            }

            _appSettings = LoadSettings <AppSettings>(Path.Combine(savePath, AppSettingsFileName));
            if (AppSettings.Upgrade(_appSettings))
            {
                SaveSettings(Path.Combine(GetAppDataPath(), AppSettingsFileName), _appSettings);
            }

            Logger.Initialize(logPath, (System.Diagnostics.TraceLevel)Enum.Parse(typeof(System.Diagnostics.TraceLevel), _appSettings.LogLevel));

            Logger.Information("IsLongPathSupported: {0}", ShellService.IsLongPathSupported);

            _queueSettings   = LoadSettings <QueueSettings>(Path.Combine(savePath, QueueSettingsFileName));
            _managerSettings = LoadSettings <ManagerSettings>(Path.Combine(savePath, ManagerSettingsFileName));
            _cookieList      = LoadSettings <List <Cookie> >(Path.Combine(savePath, CookiesFileName));

            ShellService.Settings                = _appSettings;
            ShellService.ShowErrorAction         = ShellViewModel.ShowError;
            ShellService.ShowDetailsViewAction   = ShowDetailsView;
            ShellService.ShowQueueViewAction     = ShowQueueView;
            ShellService.UpdateDetailsViewAction = UpdateDetailsView;
            ShellService.SettingsUpdatedHandler += OnSettingsUpdated;
            ShellService.InitializeOAuthManager();

            ManagerController.QueueManager    = _queueManager;
            ManagerController.ManagerSettings = _managerSettings;
            ManagerController.BlogManagerFinishedLoadingLibrary += OnBlogManagerFinishedLoadingLibrary;
            QueueController.QueueSettings  = _queueSettings;
            QueueController.QueueManager   = _queueManager;
            DetailsController.QueueManager = _queueManager;
            CrawlerController.QueueManager = _queueManager;

            Task managerControllerInit = ManagerController.InitializeAsync();

            QueueController.Initialize();
            DetailsController.Initialize();
            CrawlerController.Initialize();
            _cookieService.SetUriCookie(_cookieList);
        }
예제 #8
0
        public void PerformTumblrLogout()
        {
            HttpWebRequest request = webRequestFactory.CreateGetReqeust("https://www.tumblr.com/");

            cookieService.GetUriCookie(request.CookieContainer, new Uri("https://www.tumblr.com/"));
            cookieService.RemoveUriCookie(new Uri("https://www.tumblr.com"));
            var tosCookie           = request.CookieContainer.GetCookies(new Uri("https://www.tumblr.com/"))["pfg"];
            var tosCookieCollection = new CookieCollection();

            tosCookieCollection.Add(tosCookie);
            cookieService.SetUriCookie(tosCookieCollection);
        }
예제 #9
0
        public void Initialize()
        {
            if (CheckIfPortableMode(appSettingsFileName))
            {
                appSettings   = LoadSettings <AppSettings>(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, appSettingsFileName));
                queueSettings =
                    LoadSettings <QueueSettings>(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, queueSettingsFileName));
                managerSettings =
                    LoadSettings <ManagerSettings>(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, managerSettingsFileName));
                cookieList = LoadSettings <List <Cookie> >(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, cookiesFileName));
            }
            else
            {
                appSettings   = LoadSettings <AppSettings>(Path.Combine(environmentService.AppSettingsPath, appSettingsFileName));
                queueSettings =
                    LoadSettings <QueueSettings>(Path.Combine(environmentService.AppSettingsPath, queueSettingsFileName));
                managerSettings =
                    LoadSettings <ManagerSettings>(Path.Combine(environmentService.AppSettingsPath, managerSettingsFileName));
                cookieList = LoadSettings <List <Cookie> >(Path.Combine(environmentService.AppSettingsPath, cookiesFileName));
            }

            ShellService.Settings                = appSettings;
            ShellService.ShowErrorAction         = ShellViewModel.ShowError;
            ShellService.ShowDetailsViewAction   = ShowDetailsView;
            ShellService.ShowQueueViewAction     = ShowQueueView;
            ShellService.UpdateDetailsViewAction = UpdateDetailsView;
            ShellService.InitializeOAuthManager();

            ManagerController.QueueManager    = queueManager;
            ManagerController.ManagerSettings = managerSettings;
            ManagerController.BlogManagerFinishedLoadingLibrary += OnBlogManagerFinishedLoadingLibrary;
            Task managerControllerInit = ManagerController.Initialize();

            QueueController.QueueSettings = queueSettings;
            QueueController.QueueManager  = queueManager;
            QueueController.Initialize();
            DetailsController.QueueManager = queueManager;
            DetailsController.Initialize();
            CrawlerController.QueueManager = queueManager;
            CrawlerController.Initialize();
            cookieService.SetUriCookie(cookieList);
        }
예제 #10
0
        public void PerformTumblrLogout()
        {
            var request = webRequestFactory.CreateGetReqeust("https://www.tumblr.com/");

            cookieService.GetUriCookie(request.CookieContainer, new Uri("https://www.tumblr.com/"));
            cookieService.RemoveUriCookie(new Uri("https://www.tumblr.com"));
            var tosCookie =
                request.CookieContainer.GetCookies(
                    new Uri("https://www.tumblr.com/"))["pfg"]; // pfg cookie contains ToS/GDPR agreement
            var tosCookieCollection = new CookieCollection
            {
                tosCookie
            };

            cookieService.SetUriCookie(tosCookieCollection);
        }
예제 #11
0
        public void Initialize()
        {
            string savePath = _environmentService.AppSettingsPath;

            if (CheckIfPortableMode(AppSettingsFileName))
            {
                savePath = AppDomain.CurrentDomain.BaseDirectory;
            }

            _appSettings     = LoadSettings <AppSettings>(Path.Combine(savePath, AppSettingsFileName));
            _queueSettings   = LoadSettings <QueueSettings>(Path.Combine(savePath, QueueSettingsFileName));
            _managerSettings = LoadSettings <ManagerSettings>(Path.Combine(savePath, ManagerSettingsFileName));
            _cookieList      = LoadSettings <List <Cookie> >(Path.Combine(savePath, CookiesFileName));

            ShellService.Settings                = _appSettings;
            ShellService.ShowErrorAction         = ShellViewModel.ShowError;
            ShellService.ShowDetailsViewAction   = ShowDetailsView;
            ShellService.ShowQueueViewAction     = ShowQueueView;
            ShellService.UpdateDetailsViewAction = UpdateDetailsView;
            ShellService.SettingsUpdatedHandler += OnSettingsUpdated;
            ShellService.InitializeOAuthManager();

            ManagerController.QueueManager    = _queueManager;
            ManagerController.ManagerSettings = _managerSettings;
            ManagerController.BlogManagerFinishedLoadingLibrary += OnBlogManagerFinishedLoadingLibrary;
            QueueController.QueueSettings  = _queueSettings;
            QueueController.QueueManager   = _queueManager;
            DetailsController.QueueManager = _queueManager;
            CrawlerController.QueueManager = _queueManager;

            Task managerControllerInit = ManagerController.InitializeAsync();

            QueueController.Initialize();
            DetailsController.Initialize();
            CrawlerController.Initialize();
            _cookieService.SetUriCookie(_cookieList);
        }
예제 #12
0
 public void AddCookies(CookieCollection cookies)
 {
     cookieService.SetUriCookie(cookies);
 }