コード例 #1
0
ファイル: UserService.cs プロジェクト: namtel-hp/Sombra
        public async Task <bool> ForgotPassword(ForgotPasswordViewModel forgotPasswordViewModel)
        {
            var forgotPasswordRequest = new ForgotPasswordRequest(forgotPasswordViewModel.EmailAddress);
            var getUserByEmailRequest = new GetUserByEmailRequest {
                EmailAddress = forgotPasswordViewModel.EmailAddress
            };

            var clientInfo   = UserAgentParser.Extract(_userAgent);
            var userResponse = await _bus.RequestAsync(getUserByEmailRequest);

            var name = Helpers.GetUserName(userResponse.User);
            var forgotPasswordResponse = await _bus.RequestAsync(forgotPasswordRequest);

            var actionurl = $"{_baseUrl}/Account/ChangePassword/{forgotPasswordResponse.Secret}";

            var emailTemplateRequest = new EmailTemplateRequest(EmailType.ForgotPassword);
            var response             = await _bus.RequestAsync(emailTemplateRequest);

            var template = TemplateContentBuilder.Build(response.Template,
                                                        TemplateContentBuilder.CreateForgotPasswordTemplateContent(name, actionurl, clientInfo.OperatingSystem, clientInfo.BrowserName));

            var email = new EmailEvent(new EmailAddress("noreply", "*****@*****.**"), new EmailAddress(name, forgotPasswordViewModel.EmailAddress), "Wachtwoord vergeten ikdoneer.nu",
                                       template, true);

            await _bus.PublishAsync(email);

            return(true);
        }
コード例 #2
0
        public ActionResult <SearchResource> GrabReleases(List <SearchResource> releases)
        {
            var source = UserAgentParser.ParseSource(Request.Headers["User-Agent"]);
            var host   = Request.GetHostName();

            var groupedReleases = releases.GroupBy(r => r.IndexerId);

            foreach (var indexerReleases in groupedReleases)
            {
                var indexerDef = _indexerFactory.Get(indexerReleases.Key);

                foreach (var release in indexerReleases)
                {
                    ValidateResource(release);

                    var releaseInfo = _remoteReleaseCache.Find(GetCacheKey(release));

                    try
                    {
                        _downloadService.SendReportToClient(releaseInfo, source, host, indexerDef.Redirect);
                    }
                    catch (ReleaseDownloadException ex)
                    {
                        _logger.Error(ex, "Getting release from indexer failed");
                    }
                }
            }

            return(Ok(releases));
        }
コード例 #3
0
        public static CommandResource ToResource(this CommandModel model)
        {
            if (model == null)
            {
                return(null);
            }

            return(new CommandResource
            {
                Id = model.Id,

                Name = model.Name,
                CommandName = model.Name.SplitCamelCase(),
                Message = model.Message,
                Body = model.Body,
                Priority = model.Priority,
                Status = model.Status,
                Queued = model.QueuedAt,
                Started = model.StartedAt,
                Ended = model.EndedAt,
                Duration = model.Duration,
                Exception = model.Exception,
                Trigger = model.Trigger,

                ClientUserAgent = UserAgentParser.SimplifyUserAgent(model.Body.ClientUserAgent),

                CompletionMessage = model.Body.CompletionMessage,
                LastExecutionTime = model.Body.LastExecutionTime
            });
        }
コード例 #4
0
        public static BrowserType GetBrowserType(string userAgent)
        {
            if (userAgent == null)
            {
                return(BrowserType.Other);
            }
            string a    = null;
            string text = null;

            UserAgentParser.UserAgentVersion userAgentVersion;
            UserAgentParser.Parse(userAgent, out a, out userAgentVersion, out text);
            if (string.Equals(a, "MSIE", StringComparison.OrdinalIgnoreCase))
            {
                return(BrowserType.IE);
            }
            if (string.Equals(a, "Opera", StringComparison.OrdinalIgnoreCase))
            {
                return(BrowserType.Opera);
            }
            if (string.Equals(a, "Safari", StringComparison.OrdinalIgnoreCase))
            {
                return(BrowserType.Safari);
            }
            if (string.Equals(a, "Firefox", StringComparison.OrdinalIgnoreCase))
            {
                return(BrowserType.Firefox);
            }
            if (string.Equals(a, "Chrome", StringComparison.OrdinalIgnoreCase))
            {
                return(BrowserType.Chrome);
            }
            return(BrowserType.Other);
        }
コード例 #5
0
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                logDataBase = DataContextConfiguration.ContextCollection["Baase"];
            }
            catch (Exception)
            {
            }
            string        ua = Request.QueryString["ua"];
            TerminalModel tm = new TerminalModel();

            if (ua != null && ua.Length > 0)
            {
                UserAgentParser uap = new UserAgentParser();
                uap.OnProcessUnknowUa += new ProcessUnknowUaEventHandler(uap_OnProcessUnknowUa);
                tm = uap.ParseUserAgent(ua);
                //Response.Write("tm.Browser=" + tm.Browser);
                //Response.Write("tm.Brand=" + tm.Brand);
                //Response.Write("tm.Model=" + tm.Model);
                //Response.Write("tm.Platform=" + tm.Platform);
            }
            else
            {
            }
            JavaScriptSerializer ser = new JavaScriptSerializer();
            String jsonStr           = ser.Serialize(tm);

            Response.Write(jsonStr);
        }
コード例 #6
0
        public async Task <object> GetDownload(int id, string link, string file)
        {
            var indexerDef = _indexerFactory.Get(id);
            var indexer    = _indexerFactory.GetInstance(indexerDef);

            if (_indexerLimitService.AtDownloadLimit(indexerDef))
            {
                throw new BadRequestException("Grab limit reached");
            }

            if (link.IsNullOrWhiteSpace() || file.IsNullOrWhiteSpace())
            {
                throw new BadRequestException("Invalid Prowlarr link");
            }

            file = WebUtility.UrlDecode(file);

            if (indexerDef == null)
            {
                throw new NotFoundException("Indexer Not Found");
            }

            var source = UserAgentParser.ParseSource(Request.Headers["User-Agent"]);
            var host   = Request.GetHostName();

            var unprotectedlLink = _downloadMappingService.ConvertToNormalLink(link);

            // If Indexer is set to download via Redirect then just redirect to the link
            if (indexer.SupportsRedirect && indexerDef.Redirect)
            {
                _downloadService.RecordRedirect(unprotectedlLink, id, source, host, file);
                return(RedirectPermanent(unprotectedlLink));
            }

            var downloadBytes = Array.Empty <byte>();

            downloadBytes = await _downloadService.DownloadReport(unprotectedlLink, id, source, host, file);

            // handle magnet URLs
            if (downloadBytes.Length >= 7 &&
                downloadBytes[0] == 0x6d &&
                downloadBytes[1] == 0x61 &&
                downloadBytes[2] == 0x67 &&
                downloadBytes[3] == 0x6e &&
                downloadBytes[4] == 0x65 &&
                downloadBytes[5] == 0x74 &&
                downloadBytes[6] == 0x3a)
            {
                var magnetUrl = Encoding.UTF8.GetString(downloadBytes);
                return(RedirectPermanent(magnetUrl));
            }

            var contentType = indexer.Protocol == DownloadProtocol.Torrent ? "application/x-bittorrent" : "application/x-nzb";
            var extension   = indexer.Protocol == DownloadProtocol.Torrent ? "torrent" : "nzb";
            var filename    = $"{file}.{extension}";

            return(File(downloadBytes, contentType, filename));
        }
コード例 #7
0
 public EventNotificationsJob(IQueue <EventNotificationWorkItem> queue, IMailer mailer, IProjectRepository projectRepository, IUserRepository userRepository, IEventRepository eventRepository, ICacheClient cacheClient, UserAgentParser parser, ILoggerFactory loggerFactory = null) : base(queue, loggerFactory)
 {
     _mailer            = mailer;
     _projectRepository = projectRepository;
     _userRepository    = userRepository;
     _eventRepository   = eventRepository;
     _cache             = cacheClient;
     _parser            = parser;
 }
コード例 #8
0
        public async Task <IActionResult> Login([FromBody] LoginModel model)
        {
            var connectionInfo = new ConnectionInfo
            {
                IpAddress   = Request.HttpContext.Connection.RemoteIpAddress,
                BrowserInfo = UserAgentParser.FromUserAgent(Request.Headers["User-Agent"])
            };
            var loginResponse = await _userService.LoginUser(new Email(model.Email), model.Password, model.TwoFactorCode, connectionInfo);

            if (!loginResponse.Success)
            {
                switch (loginResponse.Error)
                {
                case LoginError.InvalidLoginDetails:
                    return(StatusCode(401, new ErrorResult <string> {
                        Error = StrResource.UsernameOfPasswordInvalid
                    }));

                case LoginError.NotValidatedEmail:
                    return(StatusCode(403, new ErrorResult <string> {
                        Error = StrResource.EmailNotVerified
                    }));

                case LoginError.NotWhitelistedIp:
                    return(StatusCode(403, new ErrorResult <string> {
                        Error = StrResource.EmailWhitelistIpAddress
                    }));

                case LoginError.TwoFactorRequiered:
                    return(StatusCode(403, new ErrorResult <string> {
                        Error = StrResource.TwoFactorCodeRequiered
                    }));

                case LoginError.TwoFactorInvalid:
                    return(StatusCode(401, new ErrorResult <string> {
                        Error = StrResource.TwoFactorCodeInvalid
                    }));

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }


            var response = new OAuthTokenResponse
            {
                AccessToken  = loginResponse.OAuthToken.AccessToken,
                Expires      = loginResponse.OAuthToken.Expires.ToUnixTimeSeconds(),
                Type         = loginResponse.OAuthToken.Type.ToString(),
                RefreshToken = loginResponse.OAuthToken.RefreshToken,
            };

            return(Ok(new SuccessResult <OAuthTokenResponse> {
                Data = response
            }));
        }
コード例 #9
0
 public EventNotificationsJob(IQueue <EventNotification> queue, SlackService slackService, IMailer mailer, IProjectRepository projectRepository, AppOptions appOptions, EmailOptions emailOptions, IUserRepository userRepository, IEventRepository eventRepository, ICacheClient cacheClient, UserAgentParser parser, ILoggerFactory loggerFactory = null) : base(queue, loggerFactory)
 {
     _slackService      = slackService;
     _mailer            = mailer;
     _projectRepository = projectRepository;
     _appOptions        = appOptions;
     _emailOptions      = emailOptions;
     _userRepository    = userRepository;
     _eventRepository   = eventRepository;
     _cache             = cacheClient;
     _parser            = parser;
 }
コード例 #10
0
 public EventNotificationsJob(IQueue <EventNotificationWorkItem> queue, IMailer mailer,
                              IOrganizationRepository organizationRepository, IProjectRepository projectRepository, IStackRepository stackRepository,
                              IUserRepository userRepository, IEventRepository eventRepository, ICacheClient cacheClient, UserAgentParser parser) : base(queue)
 {
     _mailer = mailer;
     _organizationRepository = organizationRepository;
     _projectRepository      = projectRepository;
     _stackRepository        = stackRepository;
     _userRepository         = userRepository;
     _eventRepository        = eventRepository;
     _cacheClient            = cacheClient;
     _parser = parser;
 }
コード例 #11
0
		public void Agents()
		{
			var userAgentParser = new UserAgentParser(this.xml);

			var chrome = userAgentParser.Parse("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2");
			Assert.AreEqual("Chrome", chrome.ClientName);
			Assert.AreEqual(15, chrome.ClientMajorVersion);

			var ios = userAgentParser.Parse("Mozilla/5.0 (iPhone; U; XXXXX like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/241 Safari/419.3");
			Assert.AreEqual("Mobile Safari", ios.ClientName);

			var wp7 = userAgentParser.Parse("Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Asus;Galaxy6");
			Assert.AreEqual("IE Mobile", wp7.ClientName);
		}
コード例 #12
0
        private void Init(
            Provider devices,
            string deviceId,
            string userAgent)
        {
            if (userAgent == null)
            {
                throw new ArgumentNullException("userAgent");
            }

            _userAgent = UserAgentParser.Parse(userAgent);

            Init(devices, deviceId);
        }
コード例 #13
0
        public static bool IsDownLevelClient(this HttpRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            ExTraceGlobals.VerboseTracer.TraceDebug <string>(0L, "Extensions.IsDownLevelClient. user-agent = {0}", (request.UserAgent == null) ? string.Empty : request.UserAgent);
            string a;

            UserAgentParser.UserAgentVersion userAgentVersion;
            string a2;

            UserAgentParser.Parse(request.UserAgent, out a, out userAgentVersion, out a2);
            return((!string.Equals(a, "rv:", StringComparison.OrdinalIgnoreCase) || userAgentVersion.Build < 11 || !string.Equals(a2, "Windows NT", StringComparison.OrdinalIgnoreCase)) && (!string.Equals(a, "MSIE", StringComparison.OrdinalIgnoreCase) || userAgentVersion.Build < 7 || (!string.Equals(a2, "Windows NT", StringComparison.OrdinalIgnoreCase) && !string.Equals(a2, "Windows 98; Win 9x 4.90", StringComparison.OrdinalIgnoreCase) && !string.Equals(a2, "Windows 2000", StringComparison.OrdinalIgnoreCase))) && (!string.Equals(a, "Safari", StringComparison.OrdinalIgnoreCase) || userAgentVersion.Build < 3 || !string.Equals(a2, "Macintosh", StringComparison.OrdinalIgnoreCase)) && (!string.Equals(a, "Firefox", StringComparison.OrdinalIgnoreCase) || userAgentVersion.Build < 3 || (!string.Equals(a2, "Windows NT", StringComparison.OrdinalIgnoreCase) && !string.Equals(a2, "Windows 98; Win 9x 4.90", StringComparison.OrdinalIgnoreCase) && !string.Equals(a2, "Windows 2000", StringComparison.OrdinalIgnoreCase) && !string.Equals(a2, "Macintosh", StringComparison.OrdinalIgnoreCase) && !string.Equals(a2, "Linux", StringComparison.OrdinalIgnoreCase))) && (!string.Equals(a, "Chrome", StringComparison.OrdinalIgnoreCase) || userAgentVersion.Build < 1 || (!string.Equals(a2, "Windows NT", StringComparison.OrdinalIgnoreCase) && !string.Equals(a2, "Macintosh", StringComparison.OrdinalIgnoreCase))));
        }
コード例 #14
0
        public async Task Invoke(HttpContext context)
        {
            var parser = new UserAgentParser(context.Request.Headers["User-Agent"]);

            parser.Determine();

            var browserName       = parser.BrowserName;
            var forbittenBrowsers = new List <string> {
                "Edge", "Internet Explorer", "EdgeChromium"
            };

            if (forbittenBrowsers.Any(browserName.Contains))
            {
                await context.Response.WriteAsync("Nielegalnia przeglądarka");
            }
            else
            {
                await _next(context);
            }
        }
コード例 #15
0
        public void TestWithACollectionData()
        {
            var error = string.Empty;

            // Arrange
            var expectedUserAgents = GetExpectedOutput();

            // Act
            foreach (var expectedAgent in expectedUserAgents)
            {
                var userAgentNet = new UserAgentParser(expectedAgent.RawUserAgent);
                userAgentNet.Determine();

                // Assert
                if (expectedAgent.Browser != userAgentNet.BrowserName ||
                    expectedAgent.AolVersion != userAgentNet.AolVersion ||
                    expectedAgent.IsAol != userAgentNet.IsAol ||
                    expectedAgent.IsFacebook != userAgentNet.IsFacebook ||
                    expectedAgent.IsMobile != userAgentNet.IsMobile ||
                    expectedAgent.IsRobot != userAgentNet.IsRobot ||
                    expectedAgent.IsTablet != userAgentNet.IsTablet ||
                    expectedAgent.Platform != userAgentNet.Platform ||
                    expectedAgent.Version != userAgentNet.Version)
                {
                    error += expectedAgent.Browser + "--" + expectedAgent.Version + "-------" + userAgentNet.BrowserName + "--" + userAgentNet.Version + "-------" + expectedAgent.RawUserAgent + Environment.NewLine;
                }

                Assert.AreEqual(expectedAgent.Browser, userAgentNet.BrowserName);
                Assert.AreEqual(expectedAgent.Version, userAgentNet.Version);
                Assert.AreEqual(expectedAgent.AolVersion, userAgentNet.AolVersion);
                Assert.AreEqual(expectedAgent.IsAol, userAgentNet.IsAol);
                Assert.AreEqual(expectedAgent.IsChromeFrame, userAgentNet.IsChromeFrame);
                Assert.AreEqual(expectedAgent.IsFacebook, userAgentNet.IsFacebook);
                Assert.AreEqual(expectedAgent.IsMobile, userAgentNet.IsMobile);
                Assert.AreEqual(expectedAgent.IsRobot, userAgentNet.IsRobot);
                Assert.AreEqual(expectedAgent.IsTablet, userAgentNet.IsTablet);
                Assert.AreEqual(expectedAgent.Platform, userAgentNet.Platform);
            }

            File.WriteAllText(@"error.txt", error);
        }
コード例 #16
0
        public void TestWithACollectionData()
        {
            var error = string.Empty;

            // Arrange
            var expectedUserAgents = GetExpectedOutput();

            // Act
            foreach (var expectedAgent in expectedUserAgents)
            {
                var userAgentNet = new UserAgentParser(expectedAgent.RawUserAgent);
                userAgentNet.Determine();

                // Assert
                if (expectedAgent.Browser != userAgentNet.BrowserName ||
                    expectedAgent.AolVersion != userAgentNet.AolVersion ||
                    expectedAgent.IsAol != userAgentNet.IsAol ||
                    expectedAgent.IsFacebook != userAgentNet.IsFacebook ||
                    expectedAgent.IsMobile != userAgentNet.IsMobile ||
                    expectedAgent.IsRobot != userAgentNet.IsRobot ||
                    expectedAgent.IsTablet != userAgentNet.IsTablet ||
                    expectedAgent.Platform != userAgentNet.Platform ||
                    expectedAgent.Version != userAgentNet.Version)
                {
                    error += expectedAgent.Browser + "--" + expectedAgent.Version + "-------" + userAgentNet.BrowserName + "--" + userAgentNet.Version + "-------" + expectedAgent.RawUserAgent + Environment.NewLine;
                }

                Assert.AreEqual(expectedAgent.Browser, userAgentNet.BrowserName);
                Assert.AreEqual(expectedAgent.Version, userAgentNet.Version);
                Assert.AreEqual(expectedAgent.AolVersion, userAgentNet.AolVersion);
                Assert.AreEqual(expectedAgent.IsAol, userAgentNet.IsAol);
                Assert.AreEqual(expectedAgent.IsChromeFrame, userAgentNet.IsChromeFrame);
                Assert.AreEqual(expectedAgent.IsFacebook, userAgentNet.IsFacebook);
                Assert.AreEqual(expectedAgent.IsMobile, userAgentNet.IsMobile);
                Assert.AreEqual(expectedAgent.IsRobot, userAgentNet.IsRobot);
                Assert.AreEqual(expectedAgent.IsTablet, userAgentNet.IsTablet);
                Assert.AreEqual(expectedAgent.Platform, userAgentNet.Platform);
            }

            File.WriteAllText(@"error.txt", error);
        }
コード例 #17
0
        public ActionResult <SearchResource> GrabRelease(SearchResource release)
        {
            ValidateResource(release);

            var releaseInfo = _remoteReleaseCache.Find(GetCacheKey(release));

            var indexerDef = _indexerFactory.Get(release.IndexerId);
            var source     = UserAgentParser.ParseSource(Request.Headers["User-Agent"]);
            var host       = Request.GetHostName();

            try
            {
                _downloadService.SendReportToClient(releaseInfo, source, host, indexerDef.Redirect);
            }
            catch (ReleaseDownloadException ex)
            {
                _logger.Error(ex, "Getting release from indexer failed");
                throw new NzbDroneClientException(HttpStatusCode.Conflict, "Getting release from indexer failed");
            }

            return(Ok(release));
        }
コード例 #18
0
        /// <summary>
        /// Parse the <see cref="UserAgent"/>.
        /// </summary>
        /// <param name="userAgent">The <see cref="UserAgent"/> to parse.</param>
        /// <returns>The parsing context.</returns>
        private UserAgentParser.UserAgentContext ParseUserAgent(UserAgent userAgent)
        {
            var userAgentString = EvilManualUseragentStringHacks.FixIt(userAgent.UserAgentString);

            var input = new AntlrInputStream(userAgentString);
            var lexer = new UserAgentLexer(input);

            var tokens = new CommonTokenStream(lexer);

            var parser = new UserAgentParser(tokens);

            if (!this.verbose)
            {
                lexer.RemoveErrorListeners();
                parser.RemoveErrorListeners();
            }

            lexer.AddErrorListener(userAgent);
            parser.AddErrorListener(userAgent);

            return(parser.userAgent());
        }
コード例 #19
0
        static void Main(string[] args)
        {
//			Dalvlk/l.6.0 (Llnux; U; Androld 4.2.l; M353 Bulld/JOP40D)
//			Console.WriteLine("^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
            UserAgentParser uap = new UserAgentParser();

            uap.OnProcessUnknowUa += new ProcessUnknowUaEventHandler(uap_OnProcessUnknowUa);
            TerminalModel tm = uap.ParseUserAgent("w2(mt6589/4); 4.3.1; s530w2p05v05; zh-cn");

            Console.WriteLine("tm.Browser=" + tm.Browser);
            Console.WriteLine("tm.Brand=" + tm.Brand);
            Console.WriteLine("tm.Model=" + tm.Model);
            Console.WriteLine("tm.Platform=" + tm.Platform);
            Console.WriteLine("^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
            uap.Clear();
            Console.ReadKey();

//			string strReadFilePath = @"aa.txt";
//            StreamReader srReadFile = new StreamReader(strReadFilePath);
//			while (!srReadFile.EndOfStream)
//			{
//				string strReadLine = srReadFile.ReadLine(); //读取每行数据
//				if (strReadLine != null)
//				{
//					TerminalModel tm = uap.ParseUserAgent(strReadLine);
//					if (tm.Platform != null && tm.Platform.Length > 1) {
////						Console.WriteLine(strReadLine); //屏幕打印每行数据
////			            Console.WriteLine ("tm.Browser=" + tm.Browser);
////			            Console.WriteLine ("tm.Brand=" + tm.Brand);
////			            Console.WriteLine ("tm.Model=" + tm.Model);
////			            Console.WriteLine ("tm.Platform=" + tm.Platform);
//					} else {
////						Console.WriteLine(strReadLine); //屏幕打印每行数据
//					}
//				}
//			}
//			srReadFile.Close();


            //string strReadFilePath = @"../../uaa.txt";
//			StreamReader srReadFile = new StreamReader(strReadFilePath);
            //float total = 0;
            //float haveNum = 0;
            //float ucUser = 0;
            //int ucnum = 0;
            //int allnum = 0;
            //while (!srReadFile.EndOfStream)
            //{
            //    string strReadLine = srReadFile.ReadLine(); //读取每行数据
            //    if (strReadLine != null)
            //    {
            //        total++;
            //        Stopwatch sw = new Stopwatch();
            //        sw.Start();
            //        TerminalModel tm = uap.ParseUserAgent(strReadLine);
            //        sw.Stop();
            //        if (tm.Platform != null && tm.Platform.Length > 1)
            //        {
            //            haveNum++;

            //            Console.WriteLine(strReadLine); //屏幕打印每行数据
            //            string[] sArray = strReadLine.Split('\t');
            //            if (sArray[1].Length > 0)
            //            {
            //                int result = int.Parse(sArray[1].ToString());
            //                Console.WriteLine("ALL+" + result);
            //                allnum += result;
            //            }

            //            if (tm.Browser.Equals("UCBrowser"))
            //            {
            //                ucUser++;
            //                Console.WriteLine(strReadLine); //屏幕打印每行数据
            //                sArray = strReadLine.Split('\t');
            //                if (sArray[1].Length > 0)
            //                {
            //                    int result = int.Parse(sArray[1].ToString());
            //                    Console.WriteLine("UC+" + result);
            //                    ucnum += result;
            //                }
            //            }
            //            Console.WriteLine (strReadLine); //屏幕打印每行数据
            //            Console.WriteLine ("tm.Browser=" + tm.Browser);
            //            Console.WriteLine ("tm.Brand=" + tm.Brand);
            //            Console.WriteLine ("tm.Model=" + tm.Model);
            //            Console.WriteLine ("tm.Platform=" + tm.Platform);
            //            Console.WriteLine ("^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
            //            Console.WriteLine("++++>" + sw.ElapsedMilliseconds);
            //        }
            //        else
            //        {
            //            Console.WriteLine (strReadLine); //屏幕打印每行数据
            //            Console.WriteLine("---->" + sw.ElapsedMilliseconds);
            //        }
            //    }

            //}
            //关闭读取流文件
            //srReadFile.Close();
            //Console.WriteLine("total:" + total);
            //Console.WriteLine("haveNum:" + haveNum);
            //Console.WriteLine("PER:" + haveNum / total * 100 + "%");
            //Console.WriteLine("ucUser:"******"UC:" + ucnum);
            //Console.WriteLine("总:" + allnum);
        }
コード例 #20
0
 public RequestInfoPlugin(UserAgentParser parser, ILoggerFactory loggerFactory = null) : base(loggerFactory)
 {
     _parser = parser;
 }
コード例 #21
0
        private void HandleFbaFormPost(BackEndServer backEndServer)
        {
            HttpContext      httpContext            = base.HttpContext;
            HttpResponse     response               = httpContext.Response;
            Uri              uri                    = null;
            string           text                   = httpContext.Items["destination"] as string;
            bool             flag                   = false;
            bool             flag2                  = false;
            bool             flag3                  = true;
            string           fqdn                   = backEndServer.Fqdn;
            int              version                = backEndServer.Version;
            OwaServerVersion owaServerVersion       = null;
            bool             flag4                  = false;
            ServiceTopology  currentServiceTopology = ServiceTopology.GetCurrentServiceTopology("f:\\15.00.1497\\sources\\dev\\cafe\\src\\HttpProxy\\RequestHandlers\\FbaFormPostProxyRequestHandler.cs", "HandleFbaFormPost", 780);
            Site             site                   = currentServiceTopology.GetSite(fqdn, "f:\\15.00.1497\\sources\\dev\\cafe\\src\\HttpProxy\\RequestHandlers\\FbaFormPostProxyRequestHandler.cs", "HandleFbaFormPost", 781);

            if (site != null && !site.Equals(HttpProxyGlobals.LocalSite.Member))
            {
                flag3 = false;
            }
            if (!FbaFormPostProxyRequestHandler.DisableSSORedirects)
            {
                owaServerVersion = OwaServerVersion.CreateFromVersionNumber(version);
                if (UrlUtilities.IsEcpUrl(text) && owaServerVersion.Major < (int)ExchangeObjectVersion.Exchange2010.ExchangeBuild.Major)
                {
                    flag  = false;
                    flag2 = false;
                }
                else if (!flag3 && !UserAgentParser.IsMonitoringRequest(base.ClientRequest.UserAgent))
                {
                    if (owaServerVersion.Major >= (int)ExchangeObjectVersion.Exchange2007.ExchangeBuild.Major)
                    {
                        FbaFormPostProxyRequestHandler.LegacyRedirectFailureCause legacyRedirectFailureCause = FbaFormPostProxyRequestHandler.NeedCrossSiteRedirect(backEndServer, site, HttpProxyGlobals.LocalSite.Member, owaServerVersion, UrlUtilities.IsEcpUrl(text), out uri, out flag4);
                        string authority = base.ClientRequest.Url.Authority;
                        string b         = (uri == null) ? string.Empty : uri.Authority;
                        flag2 = (legacyRedirectFailureCause != FbaFormPostProxyRequestHandler.LegacyRedirectFailureCause.NoCasFound && !string.Equals(authority, b, StringComparison.OrdinalIgnoreCase) && (legacyRedirectFailureCause != FbaFormPostProxyRequestHandler.LegacyRedirectFailureCause.None || uri != null));
                        if (uri == null && owaServerVersion.Major == (int)ExchangeObjectVersion.Exchange2007.ExchangeBuild.Major)
                        {
                            flag = (FbaFormPostProxyRequestHandler.NeedOnSiteLegacyRedirect(backEndServer, null, HttpProxyGlobals.LocalSite.Member, owaServerVersion, out uri, out flag4) != FbaFormPostProxyRequestHandler.LegacyRedirectFailureCause.None || uri != null);
                        }
                    }
                }
                else
                {
                    flag = (FbaFormPostProxyRequestHandler.NeedOnSiteLegacyRedirect(backEndServer, site, HttpProxyGlobals.LocalSite.Member, owaServerVersion, out uri, out flag4) != FbaFormPostProxyRequestHandler.LegacyRedirectFailureCause.None || uri != null);
                }
            }
            if (flag2 || flag)
            {
                if (uri != null)
                {
                    string authority2 = base.ClientRequest.Url.Authority;
                    string authority3 = uri.Authority;
                    if (string.Compare(authority2, authority3, StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        throw new HttpException(403, "Redirect loop detected");
                    }
                }
                using (SecureNameValueCollection secureNameValueCollection = new SecureNameValueCollection())
                {
                    int num = (int)base.HttpContext.Items["flags"];
                    secureNameValueCollection.AddUnsecureNameValue("destination", base.HttpContext.Items["destination"] as string);
                    secureNameValueCollection.AddUnsecureNameValue("username", base.HttpContext.Items["username"] as string);
                    secureNameValueCollection.AddUnsecureNameValue("flags", num.ToString(CultureInfo.InvariantCulture));
                    using (SecureString secureString = base.HttpContext.Items["password"] as SecureString)
                    {
                        secureNameValueCollection.AddSecureNameValue("password", secureString);
                        if (flag)
                        {
                            if (uri == null)
                            {
                                AspNetHelper.TransferToErrorPage(httpContext, ErrorFE.FEErrorCodes.NoLegacyCAS);
                            }
                            else if (flag4)
                            {
                                if (uri.Scheme == Uri.UriSchemeHttps)
                                {
                                    ExTraceGlobals.VerboseTracer.TraceDebug <string>((long)this.GetHashCode(), "FbaFormPostProxyRequestHandler - SSO redirecting to {0}", uri.ToString());
                                    this.RedirectUsingSSOFBA(secureNameValueCollection, uri, response, owaServerVersion.Major);
                                    response.End();
                                }
                                else
                                {
                                    AspNetHelper.TransferToErrorPage(httpContext, ErrorFE.FEErrorCodes.NoFbaSSL);
                                }
                            }
                            else
                            {
                                ExTraceGlobals.VerboseTracer.TraceDebug <string>((long)this.GetHashCode(), "FbaFormPostProxyRequestHandler - redirecting to {0}", uri.ToString());
                                base.PfdTracer.TraceRedirect("FbaAuth", uri.ToString());
                                response.Redirect(FbaFormPostProxyRequestHandler.CheckRedirectUrlForNewline(uri.ToString()));
                            }
                        }
                        else if (flag2)
                        {
                            if (uri == null)
                            {
                                AspNetHelper.TransferToErrorPage(httpContext, ErrorFE.FEErrorCodes.NoLegacyCAS);
                            }
                            else
                            {
                                Uri uri2 = uri;
                                if (this.explicitLogonUser != null)
                                {
                                    uri2 = FbaFormPostProxyRequestHandler.AppendSmtpAddressToUrl(uri, this.explicitLogonUser);
                                }
                                if (flag4)
                                {
                                    if (uri.Scheme == Uri.UriSchemeHttps)
                                    {
                                        ExTraceGlobals.VerboseTracer.TraceDebug <string>((long)this.GetHashCode(), "FbaFormPostProxyRequestHandler - SSO redirecting to {0}", uri.ToString());
                                        this.RedirectUsingSSOFBA(secureNameValueCollection, uri, response, owaServerVersion.Major);
                                        response.End();
                                    }
                                    else
                                    {
                                        AspNetHelper.TransferToErrorPage(httpContext, ErrorFE.FEErrorCodes.NoFbaSSL);
                                    }
                                }
                                else
                                {
                                    ExTraceGlobals.VerboseTracer.TraceDebug <string>((long)this.GetHashCode(), "FbaFormPostProxyRequestHandler - redirecting to {0}", uri2.ToString());
                                    base.PfdTracer.TraceRedirect("FbaAuth", uri2.ToString());
                                    response.Redirect(FbaFormPostProxyRequestHandler.CheckRedirectUrlForNewline(uri2.ToString()));
                                }
                            }
                        }
                    }
                    return;
                }
            }
            try
            {
                FbaModule.SetCadataCookies(base.HttpApplication);
            }
            catch (MissingSslCertificateException)
            {
                AspNetHelper.TransferToErrorPage(httpContext, ErrorFE.FEErrorCodes.NoFbaSSL);
            }
            ExTraceGlobals.VerboseTracer.TraceDebug <string>((long)this.GetHashCode(), "FbaFormPostProxyRequestHandler - redirecting to {0}", text);
            base.PfdTracer.TraceRedirect("FbaAuth", text);
            response.Redirect(FbaFormPostProxyRequestHandler.CheckRedirectUrlForNewline(text), false);
        }
コード例 #22
0
 public void UserAgentParsesOs(string userAgent, string expectedOs)
 {
     Assert.AreEqual(expectedOs, UserAgentParser.GetOperatingSystem(userAgent));
 }
コード例 #23
0
 public TheFromPackageStatisticMethod(ITestOutputHelper testOutputHelper)
 {
     _testOutputHelper = testOutputHelper;
     _parser           = new UserAgentParser();
 }
コード例 #24
0
        public async Task <IActionResult> GetNewznabResponse(int id, [FromQuery] NewznabRequest request)
        {
            var requestType = request.t;

            request.source = UserAgentParser.ParseSource(Request.Headers["User-Agent"]);
            request.server = Request.GetServerUrl();
            request.host   = Request.GetHostName();

            if (requestType.IsNullOrWhiteSpace())
            {
                return(Content(CreateErrorXML(200, "Missing parameter (t)"), "application/rss+xml"));
            }

            request.imdbid = request.imdbid?.TrimStart('t') ?? null;

            if (request.imdbid.IsNotNullOrWhiteSpace())
            {
                if (!int.TryParse(request.imdbid, out var imdb) || imdb == 0)
                {
                    return(Content(CreateErrorXML(201, "Incorrect parameter (imdbid)"), "application/rss+xml"));
                }
            }

            if (id == 0)
            {
                switch (requestType)
                {
                case "caps":
                    var caps = new IndexerCapabilities
                    {
                        TvSearchParams = new List <TvSearchParam>
                        {
                            TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
                        },
                        MovieSearchParams = new List <MovieSearchParam>
                        {
                            MovieSearchParam.Q
                        },
                        MusicSearchParams = new List <MusicSearchParam>
                        {
                            MusicSearchParam.Q
                        },
                        BookSearchParams = new List <BookSearchParam>
                        {
                            BookSearchParam.Q
                        }
                    };

                    foreach (var cat in NewznabStandardCategory.AllCats)
                    {
                        caps.Categories.AddCategoryMapping(1, cat);
                    }

                    return(Content(caps.ToXml(), "application/rss+xml"));

                case "search":
                case "tvsearch":
                case "music":
                case "book":
                case "movie":
                    var results = new NewznabResults();
                    results.Releases = new List <ReleaseInfo>
                    {
                        new ReleaseInfo
                        {
                            Title       = "Test Release",
                            Guid        = "https://prowlarr.com",
                            DownloadUrl = "https://prowlarr.com",
                            PublishDate = DateTime.Now
                        }
                    };

                    return(Content(results.ToXml(DownloadProtocol.Usenet), "application/rss+xml"));
                }
            }

            var indexerDef = _indexerFactory.Get(id);

            if (indexerDef == null)
            {
                throw new NotFoundException("Indexer Not Found");
            }

            var indexer = _indexerFactory.GetInstance(indexerDef);

            //TODO Optimize this so it's not called here and in NzbSearchService (for manual search)
            if (_indexerLimitService.AtQueryLimit(indexerDef))
            {
                return(Content(CreateErrorXML(500, $"Request limit reached ({((IIndexerSettings)indexer.Definition.Settings).BaseSettings.QueryLimit})"), "application/rss+xml"));
            }

            switch (requestType)
            {
            case "caps":
                var caps = indexer.GetCapabilities();
                return(Content(caps.ToXml(), "application/rss+xml"));

            case "search":
            case "tvsearch":
            case "music":
            case "book":
            case "movie":
                var results = await _nzbSearchService.Search(request, new List <int> {
                    indexerDef.Id
                }, false);

                foreach (var result in results.Releases)
                {
                    result.DownloadUrl = result.DownloadUrl.IsNotNullOrWhiteSpace() ? _downloadMappingService.ConvertToProxyLink(new Uri(result.DownloadUrl), request.server, indexerDef.Id, result.Title).AbsoluteUri : null;

                    if (result.DownloadProtocol == DownloadProtocol.Torrent)
                    {
                        ((TorrentInfo)result).MagnetUrl = ((TorrentInfo)result).MagnetUrl.IsNotNullOrWhiteSpace() ? _downloadMappingService.ConvertToProxyLink(new Uri(((TorrentInfo)result).MagnetUrl), request.server, indexerDef.Id, result.Title).AbsoluteUri : null;
                    }
                }

                return(Content(results.ToXml(indexer.Protocol), "application/rss+xml"));

            default:
                return(Content(CreateErrorXML(202, $"No such function ({requestType})"), "application/rss+xml"));
            }
        }
コード例 #25
0
 public void should_parse_user_agent(string userAgent, string parsedAgent)
 {
     UserAgentParser.ParseSource(userAgent).Should().Be(parsedAgent);
 }
コード例 #26
0
 public RequestInfoPlugin(UserAgentParser parser, AppOptions options, ILoggerFactory loggerFactory = null) : base(options, loggerFactory)
 {
     _parser = parser;
 }
コード例 #27
0
 public RequestInfoPlugin(UserAgentParser parser)
 {
     _parser = parser;
 }