diff --git a/websocket-sharp/Net/HttpListener.cs b/websocket-sharp/Net/HttpListener.cs index aac74acc..75924a42 100644 --- a/websocket-sharp/Net/HttpListener.cs +++ b/websocket-sharp/Net/HttpListener.cs @@ -505,6 +505,38 @@ namespace WebSocketSharp.Net _connections[connection] = connection; } + internal bool Authenticate (HttpListenerContext context) + { + var schm = SelectAuthenticationScheme (context); + if (schm == AuthenticationSchemes.Anonymous) + return true; + + if (schm != AuthenticationSchemes.Basic && schm != AuthenticationSchemes.Digest) { + context.Response.Close (HttpStatusCode.Forbidden); + return false; + } + + var realm = Realm; + var req = context.Request; + var user = HttpUtility.CreateUser ( + req.Headers["Authorization"], schm, realm, req.HttpMethod, UserCredentialsFinder); + + if (user != null && user.Identity.IsAuthenticated) { + context.User = user; + return true; + } + + if (schm == AuthenticationSchemes.Basic) + context.Response.CloseWithAuthChallenge ( + AuthenticationChallenge.CreateBasicChallenge (realm).ToBasicString ()); + + if (schm == AuthenticationSchemes.Digest) + context.Response.CloseWithAuthChallenge ( + AuthenticationChallenge.CreateDigestChallenge (realm).ToDigestString ()); + + return false; + } + internal HttpListenerAsyncResult BeginGetContext (HttpListenerAsyncResult asyncResult) { CheckDisposed (); diff --git a/websocket-sharp/Net/HttpListenerAsyncResult.cs b/websocket-sharp/Net/HttpListenerAsyncResult.cs index 4e623cbf..a747da0a 100644 --- a/websocket-sharp/Net/HttpListenerAsyncResult.cs +++ b/websocket-sharp/Net/HttpListenerAsyncResult.cs @@ -108,38 +108,6 @@ namespace WebSocketSharp.Net #region Private Methods - private static bool authenticate (HttpListenerContext context, HttpListener listener) - { - var schm = listener.SelectAuthenticationScheme (context); - if (schm == AuthenticationSchemes.Anonymous) - return true; - - if (schm != AuthenticationSchemes.Basic && schm != AuthenticationSchemes.Digest) { - context.Response.Close (HttpStatusCode.Forbidden); - return false; - } - - var req = context.Request; - var realm = listener.Realm; - var user = HttpUtility.CreateUser ( - req.Headers["Authorization"], schm, realm, req.HttpMethod, listener.UserCredentialsFinder); - - if (user != null && user.Identity.IsAuthenticated) { - context.User = user; - return true; - } - - if (schm == AuthenticationSchemes.Basic) - context.Response.CloseWithAuthChallenge ( - AuthenticationChallenge.CreateBasicChallenge (realm).ToBasicString ()); - - if (schm == AuthenticationSchemes.Digest) - context.Response.CloseWithAuthChallenge ( - AuthenticationChallenge.CreateDigestChallenge (realm).ToDigestString ()); - - return false; - } - private static void complete (HttpListenerAsyncResult asyncResult) { asyncResult._completed = true; @@ -183,7 +151,7 @@ namespace WebSocketSharp.Net internal void Complete (HttpListenerContext context, bool syncCompleted) { var lsnr = context.Listener; - if (!authenticate (context, lsnr)) { + if (!lsnr.Authenticate (context)) { lsnr.BeginGetContext (this); return; }