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(); }
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()); }
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); }
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); }
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)); }
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); }