/// <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(); } }
public void TestCacheSetAndGet() { var dd = new DeviceDetector(); var cache = new DictionaryCache(); dd.SetCache(cache); dd.GetCache().Should().BeOfType <DictionaryCache>(); }
/// <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); }
/// <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); }
/// <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); }); }
/// <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); }
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); }
[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()); }