Ignore:
Timestamp:
Sep 5, 2014, 11:15:20 PM (10 years ago)
Author:
alloc
Message:

fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/Web.cs

    r168 r172  
    1313                private readonly HttpListener _listener = new HttpListener ();
    1414                private Dictionary<string, PathHandler> handlers = new Dictionary<string, PathHandler> ();
     15                private bool authEnabled = false;
     16                private string realm = "7dtd Admin Panel";
    1517
    1618                public Web (int port)
     
    2628
    2729                                _listener.Prefixes.Add (String.Format ("http://*:{0}/", port));
    28                                 if (File.Exists (Application.dataPath + "/../webserver/protect"))
     30                                authEnabled = File.Exists (Application.dataPath + "/../webserver/protect");
     31                                if (authEnabled)
    2932                                        _listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
    3033                                _listener.Start ();
     34                                _listener.Realm = realm;
    3135
    3236                                ThreadPool.QueueUserWorkItem ((o) =>
     
    4549                                );
    4650
    47                                 Log.Out ("Started Webserver on " + port + " (authentication " + (_listener.AuthenticationSchemes == AuthenticationSchemes.Basic ? "enabled" : "disabled") + ")");
     51                                Log.Out ("Started Webserver on " + port + " (authentication " + (authEnabled ? "enabled" : "disabled") + ")");
    4852                        } catch (Exception e) {
    4953                                Log.Out ("Error in Web.ctor: " + e);
     
    5862                                HttpListenerBasicIdentity user = Authorize (ctx);
    5963
    60                                 if (ctx.Request.Url.AbsolutePath.Length < 2) {
    61                                         handlers ["/index.htm"].HandleRequest (ctx.Request, ctx.Response, user);
    62                                         return;
    63                                 } else {
    64                                         foreach (KeyValuePair<string, PathHandler> kvp in handlers) {
    65                                                 if (ctx.Request.Url.AbsolutePath.StartsWith (kvp.Key)) {
    66                                                         kvp.Value.HandleRequest (ctx.Request, ctx.Response, user);
    67                                                         return;
     64                                if (!authEnabled || (user.Name.ToLower ().Equals ("admin") && user.Password.Equals (GamePrefs.GetString (EnumGamePrefs.ControlPanelPassword)))) {
     65                                        if (ctx.Request.Url.AbsolutePath.Length < 2) {
     66                                                handlers ["/index.htm"].HandleRequest (ctx.Request, ctx.Response, user);
     67                                                return;
     68                                        } else {
     69                                                foreach (KeyValuePair<string, PathHandler> kvp in handlers) {
     70                                                        if (ctx.Request.Url.AbsolutePath.StartsWith (kvp.Key)) {
     71                                                                kvp.Value.HandleRequest (ctx.Request, ctx.Response, user);
     72                                                                return;
     73                                                        }
    6874                                                }
    6975                                        }
     76
     77                                        Log.Out ("Error in Web.HandleRequest(): No handler found for path \"" + ctx.Request.Url.AbsolutePath + "\"");
     78                                        ctx.Response.StatusCode = (int)HttpStatusCode.NotFound;
     79                                } else {
     80                                        ctx.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
     81                                        ctx.Response.Headers ["WWW-Authenticate"] = "Basic realm=\"" + realm + "\"";
    7082                                }
    71 
    72                                 Log.Out ("Error in Web.HandleRequest(): No handler found for path \"" + ctx.Request.Url.AbsolutePath + "\"");
    73                                 ctx.Response.StatusCode = (int)HttpStatusCode.NotFound;
    7483
    7584//                              byte[] buf = Encoding.UTF8.GetBytes ("Hello World");
Note: See TracChangeset for help on using the changeset viewer.