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();
        }
Example #2
0
        public RouteContext GetContext(RouteId id, HttpContext ctx)
        {
            var spec    = Specs[id];
            var options = RouteOptionsBuilder.Build(id, Config);
            var callCtx = RequestContextBuilder.Build(ctx);
            var handler = HandlerProvider.GetHandler(options.Handler, options.Config, responseContext: null);

            return(new RouteContext(options, spec, callCtx, handler, Logger));
        }
Example #3
0
        public RequestContext ParseRequestStream(NetworkStream requestStream)
        {
            if (requestStream == null)
            {
                throw new ArgumentNullException($"{nameof(requestStream)} cannot be null.");
            }

            StringBuilder requestHeaderTextBuilder = new StringBuilder();

            int  currentByte;
            bool lastCharNewLine = false;

            byte[] buffer    = new byte[1];
            int    bytesRead = requestStream.Read(buffer, 0, buffer.Length);

            if (bytesRead > 0)
            {
                requestHeaderTextBuilder.Append(Encoding.UTF8.GetString(buffer));
            }

            while (requestStream.DataAvailable)
            {
                currentByte = requestStream.ReadByte();

                if (currentByte > -1)
                {
                    char currentChar = Convert.ToChar(currentByte);

                    if (lastCharNewLine && currentChar == '\r')
                    {
                        requestStream.ReadByte();
                        break;
                    }
                    else if (lastCharNewLine && currentChar == '\n')
                    {
                        break;
                    }

                    lastCharNewLine = currentChar == '\n';
                    requestHeaderTextBuilder.Append(currentChar);
                }
            }

            string requestHeaderText = RequestHeaderStringNormalizer.NormalizeForApplication(requestHeaderTextBuilder.ToString());

            Console.WriteLine(requestHeaderText);

            if (string.IsNullOrWhiteSpace(requestHeaderText))
            {
                throw new HttpRequestParserException("Empty Requests cannot be parsed.");
            }

            return(RequestContextBuilder.BuildRequestContext(requestHeaderText, requestStream));
        }
        /// <summary>
        /// Creates a new RequestContextBuilder which can be used to fluently set
        /// preferences
        /// </summary>
        /// <returns>Returns a new RequestContextBuilder</returns>
        public static RequestContextBuilder Configure()
        {
            var builder = new RequestContextBuilder();

            return(builder);
        }
Example #5
0
        public static IRequestContext UseWebContext(this RequestContextBuilder <IServiceProvider> contextBuilder)
        {
            var contextAccessor = contextBuilder.Container.GetRequiredService <IHttpContextAccessor>();

            return(new RequestContext(contextAccessor));
        }