public void ComprehendRequestHeaders()
        {
            string etag = _etag;

            string[] ifMatch = _request.GetHeaderUnmodified("If-Match");
            if (ifMatch != null)
            {
                _ifMatchState = PreconditionState.PreconditionFailed;
                foreach (var segment in new HeaderSegmentCollection(ifMatch))
                {
                    if (segment.Data.Equals(etag, StringComparison.Ordinal))
                    {
                        _ifMatchState = PreconditionState.ShouldProcess;
                        break;
                    }
                }
            }

            string[] ifNoneMatch = _request.GetHeaderUnmodified("If-None-Match");
            if (ifNoneMatch != null)
            {
                _ifNoneMatchState = PreconditionState.ShouldProcess;
                foreach (var segment in new HeaderSegmentCollection(ifNoneMatch))
                {
                    if (segment.Data.Equals(etag, StringComparison.Ordinal))
                    {
                        _ifNoneMatchState = PreconditionState.NotModified;
                        break;
                    }
                }
            }

            string ifModifiedSince = _request.GetHeader("If-Modified-Since");

            if (ifModifiedSince != null)
            {
                bool matches = string.Equals(ifModifiedSince, _lastModifiedString, StringComparison.Ordinal);
                _ifModifiedSinceState = matches ? PreconditionState.NotModified : PreconditionState.ShouldProcess;
            }

            string ifUnmodifiedSince = _request.GetHeader("If-Unmodified-Since");

            if (ifUnmodifiedSince != null)
            {
                bool matches = string.Equals(ifModifiedSince, _lastModifiedString, StringComparison.Ordinal);
                _ifUnmodifiedSinceState = matches ? PreconditionState.ShouldProcess : PreconditionState.PreconditionFailed;
            }
        }
Пример #2
0
        public Task Invoke(IDictionary <string, object> env)
        {
            var request = new OwinRequest(env);

            var logger = _kernel.Get <ILogger>();

            var requestHeaders = new StringBuilder();

            foreach (var header in request.Headers)
            {
                requestHeaders.AppendLine(header.Key + " = " + request.GetHeader(header.Key));
            }

            Task task = _next(env);

            var response = new OwinResponse(env);

            var responseHeaders = new StringBuilder();

            foreach (var header in response.Headers)
            {
                responseHeaders.AppendLine(header.Key + " = " + response.GetHeader(header.Key));
            }

            logger.Log("URI: " + request.Uri + " " + Environment.NewLine +
                       "Request Headers: \r\n " + requestHeaders.ToString() + Environment.NewLine +
                       "Response Headers: \r\n " + responseHeaders.ToString());

            return(task);
        }
        /// <summary>
        /// Inspects the environment and checks to see if this is a POST containing the HTML form fields in the login.html page.
        /// </summary>
        /// <param name="environment"></param>
        /// <param name="formsAuthenticationProvider"></param>
        public LoginContext(IDictionary <string, object> environment, FormsAuthenticationProvider formsAuthenticationProvider)
        {
            _environment = environment;
            Request      = new OwinRequest(environment);
            Response     = new OwinResponse(environment);

            _formsAuthenticationProvider = formsAuthenticationProvider;

            _responseStream = Response.Body;

            var requestContentType = Request.GetHeader("Content-Type");

            _isFormUrlEncodedPost = Request.Method == "POST" && !string.IsNullOrEmpty(requestContentType) && requestContentType.StartsWith("application/x-www-form-urlencoded");

            if (_isFormUrlEncodedPost && Request.Body != null)
            {
                _formData = Request.ReadForm().Result;

                var username   = _formData["login_username"];
                var password   = _formData["login_password"];
                var rememberMe = _formData["remember_me"] != null && _formData["remember_me"] == "yes";

                if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
                {
                    environment["formsauthn.username"] = username;
                    environment["formsauthn.password"] = password;
                    environment["formsauthn.remember"] = rememberMe;
                }
            }
        }
        public Task Invoke(IDictionary <string, object> environment)
        {
            OwinRequest  request  = new OwinRequest(environment);
            OwinResponse response = new OwinResponse(environment);

            response.ContentType = "text/plain";

            string responseText = request.GetHeader("breadcrumbs") + "\r\n"
                                  + "PathBase: " + request.PathBase + "\r\n"
                                  + "Path: " + request.Path + "\r\n";

            return(response.WriteAsync(responseText));
        }
Пример #5
0
        public async Task Invoke(IDictionary <string, object> environment)
        {
            var request = new OwinRequest(environment);
            Uri uri     = request.Uri;

            // Create a stream for the host and port so we can send the request
            Stream stream = await _streamFactory.CreateStream(uri).ConfigureAwait(continueOnCapturedContext: false);

            var requestWriter = new StreamWriter(stream);

            // Request line
            requestWriter.WriteHttpLine("{0} {1} {2}", request.Method, uri.PathAndQuery, request.Protocol);

            // Write headers
            foreach (var header in request.Headers)
            {
                requestWriter.WriteHttpLine("{0}: {1}", header.Key, request.GetHeader(header.Key));
            }

            // End headers
            requestWriter.WriteHttpLine();

            if (request.Body == null)
            {
                // End request
                requestWriter.WriteHttpLine();
            }

            // Flush buffered content to the stream async
            await requestWriter.FlushAsync().ConfigureAwait(continueOnCapturedContext: false);

            if (request.Body != null)
            {
                // Copy the body to the request
                await request.Body.CopyToAsync(stream).ConfigureAwait(continueOnCapturedContext: false);
            }

            var response = new OwinResponse(environment);

            // Parse the response
            HttpParser.ParseResponse(stream, (protocol, statusCode, reasonPhrase) =>
            {
                response.Protocol     = protocol;
                response.StatusCode   = statusCode;
                response.ReasonPhrase = reasonPhrase;
            },
                                     (key, value) => response.SetHeader(key, value));

            // Set the body to the rest of the stream
            response.Body = stream;
        }
Пример #6
0
        public Task Invoke(IDictionary <string, object> env)
        {
            var request = new OwinRequest(env);

            // This header is set on app harbor since ssl is terminated at the load balancer
            var scheme = request.GetHeader("X-Forwarded-Proto");

            if (!String.IsNullOrEmpty(scheme))
            {
                env[OwinConstants.RequestScheme] = scheme;
            }

            return(_next(env));
        }
    public static IDictionary<string, string> GetCookies(OwinRequest request)
    {
        var cookies = request.Get<IDictionary<string, string>>("Owin.Types.Cookies#dictionary");
            if (cookies == null)
            {
                cookies = new Dictionary<string, string>(StringComparer.Ordinal);
                request.Set("Owin.Types.Cookies#dictionary", cookies);
            }

            var text = request.GetHeader("Cookie");
            if (request.Get<string>("Owin.Types.Cookies#text") != text)
            {
                cookies.Clear();
                ParseDelimited(text, SemicolonAndComma, AddCookieCallback, cookies);
                request.Set("Owin.Types.Cookies#text", text);
            }
            return cookies;
    }
Пример #8
0
        public static IDictionary <string, string> GetCookies(OwinRequest request)
        {
            var cookies = request.Get <IDictionary <string, string> >("Owin.Types.Cookies#dictionary");

            if (cookies == null)
            {
                cookies = new Dictionary <string, string>(StringComparer.Ordinal);
                request.Set("Owin.Types.Cookies#dictionary", cookies);
            }

            var text = request.GetHeader("Cookie");

            if (request.Get <string>("Owin.Types.Cookies#text") != text)
            {
                cookies.Clear();
                ParseDelimited(text, SemicolonAndComma, AddCookieCallback, cookies);
                request.Set("Owin.Types.Cookies#text", text);
            }
            return(cookies);
        }
Пример #9
0
        internal static bool IsPayloadHashPresent(this OwinRequest request)
        {
            string authorization = request.GetHeader(HawkConstants.AuthorizationHeaderName);

            if (!String.IsNullOrWhiteSpace(authorization))
            {
                // TODO - Replace the following block with
                // return ArtifactsContainer.IsPayloadHashPresent(parameter);
                // once OWIN is part of tt.idm
                string parameter = AuthenticationHeaderValue.Parse(authorization).Parameter;
                string pattern   = String.Format(@"({0})=""([^""\\]*)""\s*(?:,\s*|$)", "hash");

                if (!String.IsNullOrWhiteSpace(parameter))
                {
                    if (System.Text.RegularExpressions.Regex.IsMatch(parameter, pattern))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
 public OwinRequestMessage(OwinRequest request)
     : base(request.Body, request.GetHeader(HawkConstants.ContentTypeHeaderName))
 {
     this.request = request;
 }
Пример #11
0
        private bool IsIE(IDictionary <string, object> environment)
        {
            OwinRequest request = new OwinRequest(environment);

            return(request.GetHeader("User-Agent").Contains("MSIE"));
        }