Example #1
0
        private static bool TryProcessResult(IBasicAuthenticationResult result,
                                             IDictionary <string, object> environment, out int errorStatusCode, out string errorMessage)
        {
            IBasicAuthenticationError error;

            if (result != null)
            {
                error = result.ErrorResult;

                if (error != null)
                {
                    errorStatusCode = (int)error.StatusCode;
                    errorMessage    = error.Message;
                    return(false);
                }
                else if (error == null && result.Principal != null)
                {
                    environment["server.User"] = result.Principal;
                }
            }
            else
            {
                error = null;
            }

            errorStatusCode = 0;
            errorMessage    = null;
            return(true);
        }
Example #2
0
        /// <summary></summary>
        /// <param name="environment"></param>
        /// <returns></returns>
        public async Task Invoke(IDictionary <string, object> environment)
        {
            OwinRequest       request           = new OwinRequest(environment);
            OwinResponse      response          = new OwinResponse(environment);
            CancellationToken cancellationToken = request.CallCancelled;

            AuthenticationHeaderValue authorization;
            string authorizationHeaderError;

            if (!TryParseAuthorizationHeader(request, out authorization, out authorizationHeaderError))
            {
                response.StatusCode = 400;
                cancellationToken.ThrowIfCancellationRequested();
                await WriteMessage(authorizationHeaderError, response, cancellationToken);

                return;
            }

            cancellationToken.ThrowIfCancellationRequested();
            IBasicAuthenticationResult result = await AuthenticateAsync(authorization, cancellationToken);

            int    errorStatusCode;
            string errorMessage;

            if (!TryProcessResult(result, environment, out errorStatusCode, out errorMessage))
            {
                response.StatusCode = errorStatusCode;
                cancellationToken.ThrowIfCancellationRequested();
                await AddChallengeOnUnauthorizedAsync(response, cancellationToken);

                cancellationToken.ThrowIfCancellationRequested();
                await WriteMessage(errorMessage, response, cancellationToken);

                return;
            }

            cancellationToken.ThrowIfCancellationRequested();
            AuthenticationHeaderValue challenge = await _protocol.CreateChallengeAsync(cancellationToken);

            if (!TryRegisterOnSendingHeaders(challenge, request, response, out errorMessage))
            {
                response.StatusCode = 500;
                cancellationToken.ThrowIfCancellationRequested();
                await WriteMessage(errorMessage, response, cancellationToken);

                return;
            }

            cancellationToken.ThrowIfCancellationRequested();
            await _next(environment);
        }
        private static bool TryProcessResult(IBasicAuthenticationResult result,
            IDictionary<string, object> environment, out int errorStatusCode, out string errorMessage)
        {
            IBasicAuthenticationError error;

            if (result != null)
            {
                error = result.ErrorResult;

                if (error != null)
                {
                    errorStatusCode = (int)error.StatusCode;
                    errorMessage = error.Message;
                    return false;
                }
                else if (error == null && result.Principal != null)
                {
                    environment["server.User"] = result.Principal;
                }
            }
            else
            {
                error = null;
            }

            errorStatusCode = 0;
            errorMessage = null;
            return true;
        }