예제 #1
0
        /// <summary>
        ///
        /// </summary>
        public Detector(string userAgent)
        {
            DeviceDetector.SetVersionTruncation(VersionTruncation.VERSION_TRUNCATION_NONE);

            DeviceDetector dd = new DeviceDetector(userAgent);

            // OPTIONAL: Set caching method
            // By default static cache is used, which works best within one php process (memory array caching)
            // To cache across requests use caching in files or memcache
            dd.SetCache(new DictionaryCache());

            // OPTIONAL: If called, GetBot() will only return true if a bot was detected  (speeds up detection a bit)
            dd.DiscardBotInformation();

            // OPTIONAL: If called, bot detection will completely be skipped (bots will be detected as regular devices then)
            dd.SkipBotDetection();

            dd.Parse();

            if (dd.IsBot())
            {
                // handle bots,spiders,crawlers,...
                var botInfo = dd.GetBot();
            }
            else
            {
                var clientInfo = dd.GetClient(); // holds information about browser, feed reader, media player, ...
                var osInfo     = dd.GetOs();
                var device     = dd.GetDeviceName();
                var brand      = dd.GetBrandName();
                var model      = dd.GetModel();
            }
        }
예제 #2
0
        public void TestCacheSetAndGet()
        {
            var dd    = new DeviceDetector();
            var cache = new DictionaryCache();

            dd.SetCache(cache);
            dd.GetCache().Should().BeOfType <DictionaryCache>();
        }
예제 #3
0
        /// <summary>
        /// Setup and return the device detector
        /// </summary>
        /// <param name="userAgent"></param>
        /// <returns></returns>
        private static DeviceDetector GetDeviceDetector(string userAgent)
        {
            DeviceDetectorSettings.RegexesDirectory = HostingEnvironment.MapPath(@"~\Resources\");
            var deviceDetector = new DeviceDetector(userAgent);

            deviceDetector.SetCache(new DictionaryCache());
            deviceDetector.Parse();
            return(deviceDetector);
        }
예제 #4
0
        /// <summary>
        /// this library get device and user related details to perform first level authentication
        /// </summary>
        /// <param name="userAgent"></param>
        /// <returns>DeviceInfo</returns>
        public static DeviceInfo Get(string userAgent)
        {
            var deviceInfo = new DeviceInfo();
            var client     = new ClientModel();
            var bot        = new BotModel();
            var os         = new OsInfo();
            var device     = new DeviceDetector(userAgent);

            device.SetCache(new DictionaryCache());
            device.Parse();
            if (device.IsBot())
            {
                // checks if the user is a bot or crawler and retrieve the info
                var botInfo = device.GetBot();
                bot.Success     = botInfo.Success;
                bot.Name        = botInfo.Matches[0].Name ?? botInfo.Match?.Name;
                bot.Producer    = botInfo.Matches[0].Producer.Name ?? botInfo.Match?.Producer.Name;
                bot.ProducerUrl = botInfo.Matches[0].Producer.Url ?? botInfo.Match?.Producer.Url;
                bot.Url         = botInfo.Matches[0].Url ?? botInfo.Match?.Url;
            }

            else
            {//if its not a bot get client info
                var clientInfo = device.GetClient();
                client.Name    = clientInfo.Matches[0]?.Name ?? clientInfo.Match?.Name;
                client.Type    = clientInfo.Matches[0]?.Type ?? clientInfo.Match?.Type;
                client.Version = clientInfo.Matches[0]?.Version ?? clientInfo.Match?.Version;
                client.Success = clientInfo.Success;


                // holds information about browser, feed reader, media player, ...
                var osInfo = device.GetOs();
                os.Name                = osInfo.Matches[0]?.Name ?? osInfo.Match?.Name;
                os.Version             = osInfo.Match?.Version ?? osInfo.Matches[0]?.Version ?? osInfo.Match?.Version;
                os.PlatForm            = osInfo.Match?.Platform ?? osInfo.Matches[0]?.Platform ?? osInfo.Match?.Platform;
                os.ShortName           = osInfo.Match?.ShortName ?? osInfo.Matches[0]?.ShortName ?? osInfo.Match?.ShortName;
                os.Success             = osInfo.Success;
                client.DeviceName      = device.GetDeviceName();
                client.DeviceBrandName = device.GetBrandName();
                client.DeviceModel     = device.GetModel();
            }

            client.IsDesktop  = device.IsDesktop();
            client.IsMobile   = device.IsMobile();
            deviceInfo.Bot    = bot;
            deviceInfo.Client = client;
            deviceInfo.OsInfo = os;
            return(deviceInfo);
        }
예제 #5
0
        /// <summary>
        /// 加入客戶端裝置追蹤擴充
        /// </summary>
        /// <param name="services">DI服務容器</param>
        /// <returns>DI服務容器</returns>
        public static void AddDeviceDetector(this IServiceCollection services)
        {
            services.AddScoped <DeviceDetector>(sp => {
                var httpContext = sp.GetService <IHttpContextAccessor>().HttpContext;

                DeviceDetector detector = null;
                if (httpContext.Request.Headers.TryGetValue("User-Agent", out StringValues userAgent))
                {
                    detector = new DeviceDetector(userAgent);
                    detector.SetCache(new DictionaryCache());
                    detector.Parse();
                }

                return(detector);
            });
        }
예제 #6
0
        /// <summary>
        /// LRU cached version of GetDeviceDetector
        /// </summary>
        /// <param name="userAgent">used as the key for the cache lookup.
        /// Note that this does not handle situations where SetVersionTruncation is used because Parse will operate differently based on Version Truncation, which
        /// is a static variable.</param>
        /// <returns></returns>
        public static DeviceDetector GetDeviceDetector(string userAgent)
        {
            if (string.IsNullOrEmpty(userAgent))
            {
                return(null);
            }

            if (!lruDeviceDetector.TryGetValue(userAgent, out var dd))
            {
                dd = new DeviceDetector(userAgent);
                dd.SetCache(deviceCache);
                dd.Parse();
                lruDeviceDetector.AddToCache(userAgent, dd);
            }
            return(dd);
        }
예제 #7
0
        private DeviceDetector GetDeviceDetectorConfigured()
        {
            var ua = _detection.UserAgent;

            DeviceDetector.SetVersionTruncation(VersionTruncation.VERSION_TRUNCATION_NONE);

            var dd = new DeviceDetector(ua.ToString());

            // OPTIONAL: Set caching method By default static cache is used, which works best within one
            // php process (memory array caching) To cache across requests use caching in files or
            // memcache add using DeviceDetectorNET.Cache;
            dd.SetCache(new DictionaryCache());

            // OPTIONAL: If called, GetBot() will only return true if a bot was detected (speeds up
            // detection a bit)
            dd.DiscardBotInformation();

            // OPTIONAL: If called, bot detection will completely be skipped (bots will be detected as
            // regular devices then)
            dd.SkipBotDetection();
            dd.Parse();
            return(dd);
        }
예제 #8
0
        [ValidateAntiForgeryToken] //protect against CSRF attacks
        public async Task <IActionResult> Kontakt(Inquiry inquiry)
        {
            var userAgent = Request.Headers["User-Agent"].ToString();

            // OPTIONAL: Set version truncation to none, so full versions will be returned
            // By default only minor versions will be returned (e.g. X.Y)
            // for other options see VERSION_TRUNCATION_* constants in DeviceParserAbstract class
            // add using DeviceDetectorNET.Parser;
            DeviceDetector.SetVersionTruncation(VersionTruncation.VERSION_TRUNCATION_NONE);

            var dd = new DeviceDetector(userAgent);

            // OPTIONAL: Set caching method
            // By default static cache is used, which works best within one php process (memory array caching)
            // To cache across requests use caching in files or memcache
            // add using DeviceDetectorNET.Cache;
            dd.SetCache(new DictionaryCache());

            // OPTIONAL: If called, GetBot() will only return true if a bot was detected  (speeds up detection a bit)
            dd.DiscardBotInformation();

            // OPTIONAL: If called, bot detection will completely be skipped (bots will be detected as regular devices then)
            dd.SkipBotDetection();

            dd.Parse();

            if (dd.IsBot())
            {
                // handle bots,spiders,crawlers,...
                var botInfo = dd.GetBot();
                inquiry.Browser         = "BOT";
                inquiry.OperatingSystem = "BOT";
                inquiry.Device          = "BOT";
                inquiry.Brand           = "BOT";
                inquiry.Model           = "BOT";
            }
            else
            {
                var clientInfo = dd.GetClient(); // holds information about browser, feed reader, media player, ...
                var osInfo     = dd.GetOs();
                var device     = dd.GetDeviceName();
                var brand      = dd.GetBrandName();
                var model      = dd.GetModel();

                inquiry.Browser         = $"{clientInfo.Match.Name} ({clientInfo.Match.Version})";
                inquiry.OperatingSystem = $"{osInfo.Match.Name} ({osInfo.Match.Version}) {osInfo.Match.Platform}";
                var deviceResult = device == "" ? inquiry.Device = "N/A" : inquiry.Device = device;
                var brandResult  = brand == "" ? inquiry.Brand = "N/A" : inquiry.Brand = brand;
                var modelResult  = model == "" ? inquiry.Model = "N/A" : inquiry.Model = model;
            }

            //local Environment
            //OperatingSystem os = Environment.OSVersion;
            //var platform = os.Platform.ToString();
            //var version = os.Version.ToString();
            //var servicePack = os.ServicePack.ToString();

            var remoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress.ToString();

            inquiry.IpAddress = remoteIpAddress;

            inquiry.CreatedDate = DateTime.Now;
            inquiry.Status      = "New";
            inquiry.HoursSpend  = 0;
            inquiry.HourPrice   = 400;
            inquiry.InvoiceNo   = "N/A";
            inquiry.Payment     = "N/A";


            if (ModelState.IsValid)
            {
                var inquiryId = await contex.Inquiries.FirstOrDefaultAsync(x => x.Id == inquiry.Id);

                if (inquiryId != null)
                {
                    ModelState.AddModelError("", "Nastapil bland, ponow wpis.");
                    return(View());
                }

                //string attachmentName = "noimagecar.png";
                //if (inquiry.AttachmentUpload != null)
                //{
                //    string uploadsDir = Path.Combine(webHostEnvironment.WebRootPath, "media/cars");
                //    attachmentName = Guid.NewGuid().ToString() + "_" + inquiry.AttachmentUpload.FileName;
                //    string filePath = Path.Combine(uploadsDir, attachmentName);
                //    FileStream fs = new FileStream(filePath, FileMode.Create);
                //    await inquiry.AttachmentUpload.CopyToAsync(fs);
                //    fs.Close();
                //}
                //inquiry.Attachment = attachmentName;



                contex.Add(inquiry);
                await contex.SaveChangesAsync();

                TempData["Success"] = "Wiadomosc zostala wyslana!";

                return(RedirectToAction("Kontakt"));
            }

            return(View());
        }