/// <summary>
 /// Constructor for HomeController
 /// </summary>
 /// <param name="browserResolver">Provides information about user's browser</param>
 /// <param name="accessor">Provides access to HTTP-specific information about an individual HTTP request</param>
 public HomeController(IBrowserResolver browserResolver, IHttpContextAccessor accessor)
 {
     _useragent    = browserResolver.UserAgent;
     _browser      = browserResolver.Browser;
     _browser_Name = _browser.Type.ToString();
     _accessor     = accessor;
 }
 /// <summary>
 /// Construct a <see cref="HomeController"/>
 /// </summary>
 /// <param name="databaseContext">The <see cref="IDatabaseContext"/> for the <see cref="ApiController"/></param>
 /// <param name="authenticationContextFactory">The <see cref="IAuthenticationContextFactory"/> for the <see cref="ApiController"/></param>
 /// <param name="tokenFactory">The value of <see cref="tokenFactory"/></param>
 /// <param name="systemIdentityFactory">The value of <see cref="systemIdentityFactory"/></param>
 /// <param name="cryptographySuite">The value of <see cref="cryptographySuite"/></param>
 /// <param name="assemblyInformationProvider">The value of <see cref="assemblyInformationProvider"/></param>
 /// <param name="identityCache">The value of <see cref="identityCache"/></param>
 /// <param name="oAuthProviders">The value of <see cref="oAuthProviders"/>.</param>
 /// <param name="platformIdentifier">The value of <see cref="platformIdentifier"/>.</param>
 /// <param name="browserResolver">The value of <see cref="browserResolver"/></param>
 /// <param name="swarmService">The value of <see cref="swarmService"/>.</param>
 /// <param name="serverControl">The value of <see cref="serverControl"/>.</param>
 /// <param name="generalConfigurationOptions">The <see cref="IOptions{TOptions}"/> containing the value of <see cref="generalConfiguration"/>.</param>
 /// <param name="controlPanelConfigurationOptions">The <see cref="IOptions{TOptions}"/> containing the value of <see cref="controlPanelConfiguration"/></param>
 /// <param name="logger">The <see cref="ILogger"/> for the <see cref="ApiController"/></param>
 public HomeController(
     IDatabaseContext databaseContext,
     IAuthenticationContextFactory authenticationContextFactory,
     ITokenFactory tokenFactory,
     ISystemIdentityFactory systemIdentityFactory,
     ICryptographySuite cryptographySuite,
     IAssemblyInformationProvider assemblyInformationProvider,
     IIdentityCache identityCache,
     IOAuthProviders oAuthProviders,
     IPlatformIdentifier platformIdentifier,
     IBrowserResolver browserResolver,
     ISwarmService swarmService,
     IServerControl serverControl,
     IOptions <GeneralConfiguration> generalConfigurationOptions,
     IOptions <ControlPanelConfiguration> controlPanelConfigurationOptions,
     ILogger <HomeController> logger)
     : base(
         databaseContext,
         authenticationContextFactory,
         logger,
         false)
 {
     this.tokenFactory                = tokenFactory ?? throw new ArgumentNullException(nameof(tokenFactory));
     this.systemIdentityFactory       = systemIdentityFactory ?? throw new ArgumentNullException(nameof(systemIdentityFactory));
     this.cryptographySuite           = cryptographySuite ?? throw new ArgumentNullException(nameof(cryptographySuite));
     this.assemblyInformationProvider = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider));
     this.identityCache               = identityCache ?? throw new ArgumentNullException(nameof(identityCache));
     this.platformIdentifier          = platformIdentifier ?? throw new ArgumentNullException(nameof(platformIdentifier));
     this.oAuthProviders              = oAuthProviders ?? throw new ArgumentNullException(nameof(oAuthProviders));
     this.browserResolver             = browserResolver ?? throw new ArgumentNullException(nameof(browserResolver));
     this.swarmService                = swarmService ?? throw new ArgumentNullException(nameof(swarmService));
     this.serverControl               = serverControl ?? throw new ArgumentNullException(nameof(serverControl));
     generalConfiguration             = generalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(generalConfigurationOptions));
     controlPanelConfiguration        = controlPanelConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(controlPanelConfigurationOptions));
 }
        public async Task Invoke(
            HttpContext context,
            IDeviceResolver deviceResolver,
            IBrowserResolver browserResolver,
            IClientRepository clientRepository)
        {
            if (!deviceResolver.Device.Crawler)
            {
                Parser     uaParser   = Parser.GetDefault();
                ClientInfo clientInfo = null;

                Guid clientId  = Guid.Empty;
                Guid sessionId = Guid.Empty;

                var cookieId       = context.Request.Cookies[_key];
                var isExistingUser = context.Request.Cookies.ContainsKey(_key);
                if (!isExistingUser || !Guid.TryParse(cookieId, out clientId) || clientRepository.Get(clientId) is null)
                {
                    clientId = Guid.NewGuid();
                    var userAgent = deviceResolver.UserAgent.ToString();
                    if (clientInfo is null)
                    {
                        clientInfo = uaParser.Parse(userAgent);
                    }
                    context.Response.Cookies.Append(_key, clientId.ToString());
                    var newClient = new DAL.Entities.Client()
                    {
                        ClientId        = clientId,
                        Ip              = context.Connection.RemoteIpAddress.ToString(),
                        Device          = deviceResolver.Device.Type.ToString(),
                        Browser         = browserResolver.Browser.Type.ToString(),
                        BrowserVersion  = browserResolver.Browser.Version.ToString(),
                        Platform        = clientInfo.OS.Family,
                        PlatformVersion = clientInfo.OS.Major,
                    };
                    clientRepository.Add(newClient);
                }
                if (clientInfo is null)
                {
                    clientInfo = uaParser.Parse(deviceResolver.UserAgent.ToString());
                }
                var onlineClient = new OnlineClientViewModel()
                {
                    ClientId     = clientId,
                    Ip           = context.Connection.RemoteIpAddress.ToString(),
                    UserAgent    = $"Device: {deviceResolver.Device.Type.ToString()}, OS: {clientInfo.OS.Family} - {clientInfo.OS.Major}, Browser: {browserResolver.Browser.Type.ToString()} - {browserResolver.Browser.Version.ToString()}",
                    LastActivity = DateTime.Now
                };
                OnlineClients.AddOrUpdate(clientId.ToString(), onlineClient, (key, value) => { value.LastActivity = DateTime.Now; return(value); });
            }
            foreach (var item in OnlineClients)
            {
                if ((DateTime.Now - item.Value.LastActivity).Seconds >= _timeout)
                {
                    OnlineClients.Remove(item.Key, out OnlineClientViewModel deletedUser);
                }
            }
            await _next(context);
        }
示例#4
0
 public Detection(IUserAgentService service,
                  IDeviceResolver deviceResolver,
                  IBrowserResolver browserResolver,
                  ICrawlerResolver crawlerResolver)
 {
     this._service         = service;
     this._deviceResolver  = deviceResolver;
     this._browserResolver = browserResolver;
     this._crawlerResolver = crawlerResolver;
 }
示例#5
0
 /// <summary>
 /// Construct a <see cref="HomeController"/>
 /// </summary>
 /// <param name="databaseContext">The <see cref="IDatabaseContext"/> for the <see cref="ApiController"/></param>
 /// <param name="authenticationContextFactory">The <see cref="IAuthenticationContextFactory"/> for the <see cref="ApiController"/></param>
 /// <param name="tokenFactory">The value of <see cref="tokenFactory"/></param>
 /// <param name="systemIdentityFactory">The value of <see cref="systemIdentityFactory"/></param>
 /// <param name="cryptographySuite">The value of <see cref="cryptographySuite"/></param>
 /// <param name="application">The value of <see cref="application"/></param>
 /// <param name="identityCache">The value of <see cref="identityCache"/></param>
 /// <param name="browserResolver">The value of <see cref="browserResolver"/></param>
 /// <param name="controlPanelConfigurationOptions">The <see cref="IOptions{TOptions}"/> containing the value of <see cref="controlPanelConfiguration"/></param>
 /// <param name="logger">The <see cref="ILogger"/> for the <see cref="ApiController"/></param>
 public HomeController(IDatabaseContext databaseContext, IAuthenticationContextFactory authenticationContextFactory, ITokenFactory tokenFactory, ISystemIdentityFactory systemIdentityFactory, ICryptographySuite cryptographySuite, IApplication application, IIdentityCache identityCache, IBrowserResolver browserResolver, IOptions <ControlPanelConfiguration> controlPanelConfigurationOptions, ILogger <HomeController> logger) : base(databaseContext, authenticationContextFactory, logger, false, false)
 {
     this.tokenFactory          = tokenFactory ?? throw new ArgumentNullException(nameof(tokenFactory));
     this.systemIdentityFactory = systemIdentityFactory ?? throw new ArgumentNullException(nameof(systemIdentityFactory));
     this.cryptographySuite     = cryptographySuite ?? throw new ArgumentNullException(nameof(cryptographySuite));
     this.application           = application ?? throw new ArgumentNullException(nameof(application));
     this.identityCache         = identityCache ?? throw new ArgumentNullException(nameof(identityCache));
     this.browserResolver       = browserResolver ?? throw new ArgumentNullException(nameof(browserResolver));
     controlPanelConfiguration  = controlPanelConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(controlPanelConfigurationOptions));
 }
示例#6
0
 public Detection(IUserAgentService service,
                  IDeviceResolver deviceResolver,
                  IBrowserResolver browserResolver,
                  IPlatformResolver platformResolver,
                  IEngineResolver engineResolver,
                  ICrawlerResolver crawlerResolver)
 {
     this._service          = service;
     this._deviceResolver   = deviceResolver;
     this._browserResolver  = browserResolver;
     this._platformResolver = platformResolver;
     this._engineResolver   = engineResolver;
     this._crawlerResolver  = crawlerResolver;
 }
示例#7
0
 public HomeController(
     IDetectionService detectionService,
     IDeviceResolver deviceResolver,
     IBrowserResolver browserResolver,
     IEngineResolver engineResolver,
     IPlatformResolver platformResolver)
 {
     client = new ClientInfo
     {
         UserAgent = detectionService.UserAgent,
         Device    = deviceResolver.Device,
         Browser   = browserResolver.Browser,
         Engine    = engineResolver.Engine,
         Platform  = platformResolver.Platform
     };
 }
示例#8
0
 /// <summary>
 /// Construct a <see cref="HomeController"/>
 /// </summary>
 /// <param name="databaseContext">The <see cref="IDatabaseContext"/> for the <see cref="ApiController"/></param>
 /// <param name="authenticationContextFactory">The <see cref="IAuthenticationContextFactory"/> for the <see cref="ApiController"/></param>
 /// <param name="tokenFactory">The value of <see cref="tokenFactory"/></param>
 /// <param name="systemIdentityFactory">The value of <see cref="systemIdentityFactory"/></param>
 /// <param name="cryptographySuite">The value of <see cref="cryptographySuite"/></param>
 /// <param name="assemblyInformationProvider">The value of <see cref="assemblyInformationProvider"/></param>
 /// <param name="identityCache">The value of <see cref="identityCache"/></param>
 /// <param name="browserResolver">The value of <see cref="browserResolver"/></param>
 /// <param name="generalConfigurationOptions">The <see cref="IOptions{TOptions}"/> containing the value of <see cref="generalConfiguration"/>.</param>
 /// <param name="controlPanelConfigurationOptions">The <see cref="IOptions{TOptions}"/> containing the value of <see cref="controlPanelConfiguration"/></param>
 /// <param name="logger">The <see cref="ILogger"/> for the <see cref="ApiController"/></param>
 public HomeController(
     IDatabaseContext databaseContext,
     IAuthenticationContextFactory authenticationContextFactory,
     ITokenFactory tokenFactory,
     ISystemIdentityFactory systemIdentityFactory,
     ICryptographySuite cryptographySuite,
     IAssemblyInformationProvider assemblyInformationProvider,
     IIdentityCache identityCache,
     IBrowserResolver browserResolver,
     IOptions <GeneralConfiguration> generalConfigurationOptions,
     IOptions <ControlPanelConfiguration> controlPanelConfigurationOptions,
     ILogger <HomeController> logger)
     : base(
         databaseContext,
         authenticationContextFactory,
         logger,
         (browserResolver ?? throw new ArgumentNullException(nameof(browserResolver))).Browser.Type != BrowserType.Generic &&
示例#9
0
 public HomeController(IBrowserResolver browser)
 {
     _browser = browser;
 }