public SdkEvent(EventOptions eventOptions, SecureNativeOptions options)
        {
            if (eventOptions.GetUserId() == null || eventOptions.GetUserId().Length <= 0 || eventOptions.GetUserId().Equals(""))
            {
                throw new SecureNativeInvalidOptionsException("Invalid event structure; User Id is missing");
            }

            if (eventOptions.GetEventType() == null || eventOptions.GetEventType().Length <= 0 || eventOptions.GetEventType().Equals(""))
            {
                throw new SecureNativeInvalidOptionsException("Invalid event structure; Event Type is missing");
            }

            var context     = eventOptions.GetContext() ?? SecureNativeContextBuilder.DefaultContextBuilder().Build();
            var clientToken = EncryptionUtils.Decrypt(context.GetClientToken(), options.GetApiKey());

            Rid        = Guid.NewGuid().ToString();
            EventType  = eventOptions.GetEventType();
            UserId     = eventOptions.GetUserId();
            UserTraits = eventOptions.GetUserTraits();
            Request    = new RequestContextBuilder()
                         .WithCid(clientToken.GetCid())
                         .WithVid(clientToken.GetVid())
                         .WithFp(clientToken.GetFp())
                         .WithIp(context.GetIp())
                         .WithRemoteIp(context.GetRemoteIp())
                         .WithMethod(context.GetMethod())
                         .WithUrl(context.GetUrl())
                         .WitHeaders(context.GetHeaders())
                         .Build();

            Timestamp  = DateUtils.ToTimestamp(eventOptions.GetTimestamp() ?? new DateTime());
            Properties = eventOptions.GetProperties();
        }
Beispiel #2
0
 public SecureNativeHttpClient(SecureNativeOptions options, HttpMessageHandler handler = null)
 {
     _options = options;
     _client  = handler != null ? new HttpClient(handler) : new HttpClient();
     _client.DefaultRequestHeaders.Add(UserAgentHeader, UserAgentHeaderValue);
     _client.DefaultRequestHeaders.Add(VersionHeader, Utils.VersionUtils.GetVersion());
     _client.DefaultRequestHeaders.Add(AuthorizationHeader, options.GetApiKey());
 }
Beispiel #3
0
 public static Client Init(SecureNativeOptions options)
 {
     if (_securenative != null)
     {
         throw new SecureNativeSdkException("This SDK was already initialized");
     }
     _securenative = new Client(options);
     _options      = options;
     return(_securenative);
 }
        public void ParseConfigFileCorrectlyTest()
        {
            SecureNativeOptions options = ConfigurationManager.LoadConfig();

            Assert.IsNotNull(options);
            Assert.AreEqual("SOME_API_KEY", options.GetApiKey());
            Assert.AreEqual("SOME_API_URL", options.GetApiUrl());
            Assert.AreEqual(true, options.IsAutoSend());
            Assert.AreEqual(false, options.IsDisabled());
            Assert.AreEqual(FailOverStrategy.FAIL_CLOSED, options.GetFailOverStrategy());
            Assert.AreEqual(1000, options.GetInterval());
            Assert.AreEqual("fatal", options.GetLogLevel());
            Assert.AreEqual(100, options.GetMaxEvents());
            Assert.AreEqual(1500, options.GetTimeout());
            Assert.AreEqual(1, options.GetProxyHeaders().Length);
        }
Beispiel #5
0
        public Client(SecureNativeOptions options)
        {
            if (string.IsNullOrEmpty(options.GetApiKey()))
            {
                throw new SecureNativeSdkException("You must pass your SecureNative api key");
            }

            var eventManager = new EventManager(options);

            if (options.IsAutoSend())
            {
                eventManager.StartEventsPersist();
            }

            _apiManager = new ApiManager(eventManager, options);

            var logLevel = SecureNativeLogger.GetLogLevel(options.GetLogLevel());

            SecureNativeLogger.InitLogger(logLevel);
        }
        public static string GetClientIpFromRequest(HttpRequest request, SecureNativeOptions options)
        {
            if (options?.GetProxyHeaders().Length > 0)
            {
                foreach (var header in options.GetProxyHeaders())
                {
                    if (request.Headers[header].ToArray() == null)
                    {
                        continue;
                    }
                    var extracted = GetValidIp(request.Headers[header].ToArray());
                    if (!string.IsNullOrEmpty(extracted))
                    {
                        return(extracted);
                    }
                }
            }

            try
            {
                foreach (var header in IpHeaders.Where(header => request.Headers[header].Count > 0))
                {
                    var extracted = GetValidIp(request.Headers[header].ToArray());
                    if (!string.IsNullOrEmpty(extracted))
                    {
                        return(extracted);
                    }
                }

                if (request.HttpContext.Connection.LocalIpAddress != null)
                {
                    return(request.HttpContext.Connection.LocalIpAddress.ToString());
                }
            }
            catch (Exception)
            {
                return(string.Empty);
            }

            return(string.Empty);
        }
        public static string GetClientIpFromRequest(HttpWebRequest request, SecureNativeOptions options)
        {
            if (options?.GetProxyHeaders().Length > 0)
            {
                foreach (var header in options.GetProxyHeaders())
                {
                    if (string.IsNullOrEmpty(request.Headers.Get(header)))
                    {
                        continue;
                    }
                    var ips       = request.Headers.Get(header).Split(",");
                    var extracted = GetValidIp(ips);
                    if (!string.IsNullOrEmpty(extracted))
                    {
                        return(extracted);
                    }
                }
            }

            try
            {
                foreach (var header in IpHeaders.Where(header => request.Headers.Get(header) != null))
                {
                    var ips       = request.Headers.Get(header).Split(",");
                    var extracted = GetValidIp(ips);
                    if (!string.IsNullOrEmpty(extracted))
                    {
                        return(extracted);
                    }
                }
            }
            catch (Exception)
            {
                return(string.Empty);
            }

            return(string.Empty);
        }
Beispiel #8
0
        public static SecureNativeContextBuilder FromHttpRequest(HttpWebRequest request, SecureNativeOptions options)
        {
            var headers = RequestUtils.GetHeadersFromRequest(request, options);

            var clientToken = RequestUtils.GetCookieValueFromRequest(request, RequestUtils.SecurenativeCookie);

            if (string.IsNullOrEmpty(clientToken))
            {
                clientToken = RequestUtils.GetSecureHeaderFromRequest(headers);
            }

            return(new SecureNativeContextBuilder()
                   .WithUrl(request.RequestUri.ToString())
                   .WithMethod(request.Method)
                   .WithHeaders(headers)
                   .WithClientToken(clientToken)
                   .WithIp(RequestUtils.GetClientIpFromRequest(request, options))
                   .WithRemoteIp(RequestUtils.GetRemoteIpFromRequest(request))
                   .WithBody(null));
        }
Beispiel #9
0
 public ApiManager(EventManager eventManager, SecureNativeOptions options)
 {
     _options      = options;
     _eventManager = eventManager;
 }
        public static Dictionary <string, string> GetHeadersFromRequest(HttpWebRequest request, SecureNativeOptions options)
        {
            var headers = new Dictionary <string, string>();

            if (options?.GetPiiHeaders().Length > 0)
            {
                try
                {
                    foreach (var key in request.Headers.AllKeys)
                    {
                        if (!options.GetPiiHeaders().Contains(key.ToLower()) && !options.GetPiiHeaders().Contains(key.ToUpper()))
                        {
                            headers.Add(key, request.Headers[key]);
                        }
                    }
                }
                catch (Exception)
                {
                    // ignored
                }
            }
            else if (options != null && options.GetPiiRegexPattern() != "")
            {
                try
                {
                    var pattern = new Regex(options.GetPiiRegexPattern());

                    foreach (var key in request.Headers.AllKeys)
                    {
                        if (!pattern.Match(key).Success)
                        {
                            headers.Add(key, request.Headers[key]);
                        }
                    }
                }
                catch (Exception)
                {
                    // ignored
                }
            }
            else
            {
                try
                {
                    foreach (var key in request.Headers.AllKeys)
                    {
                        if (!PiiHeaders.Contains(key.ToLower()) && !PiiHeaders.Contains(key.ToUpper()))
                        {
                            headers.Add(key, request.Headers[key]);
                        }
                    }
                }
                catch (Exception)
                {
                    // ignored
                }
            }

            return(headers);
        }