Ignore:
Timestamp:
Sep 4, 2018, 2:33:52 PM (6 years ago)
Author:
alloc
Message:

More cleanup, allocation improvements

Location:
binary-improvements/MapRendering/Web
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/MapRendering/Web/API/GetLandClaims.cs

    r325 r326  
    5050
    5151                        foreach (KeyValuePair<Player, List<Vector3i>> kvp in claims) {
    52                                 try {
     52//                              try {
    5353                                        JSONObject owner = new JSONObject ();
    5454                                        claimOwners.Add (owner);
     
    7474                                                claimsJson.Add (claim);
    7575                                        }
    76                                 } catch {
    77                                 }
     76//                              } catch {
     77//                              }
    7878                        }
    7979
  • binary-improvements/MapRendering/Web/API/GetPlayerInventory.cs

    r325 r326  
    7575
    7676                internal static JSONNode GetJsonForItem (InvItem _item) {
    77                         if (_item != null) {
    78                                 JSONObject jsonItem = new JSONObject ();
    79                                 jsonItem.Add ("count", new JSONNumber (_item.count));
    80                                 jsonItem.Add ("name", new JSONString (_item.itemName));
    81                                 jsonItem.Add ("icon", new JSONString (_item.icon));
    82                                 jsonItem.Add ("iconcolor", new JSONString (_item.iconcolor));
    83                                 jsonItem.Add ("quality", new JSONNumber (_item.quality));
    84                                 if (_item.quality >= 0) {
    85                                         jsonItem.Add ("qualitycolor", new JSONString (QualityInfo.GetQualityColorHex (_item.quality)));
    86                                 }
    87 
    88                                 return jsonItem;
     77                        if (_item == null) {
     78                                return new JSONNull ();
    8979                        }
    9080
    91                         return new JSONNull ();
     81                        JSONObject jsonItem = new JSONObject ();
     82                        jsonItem.Add ("count", new JSONNumber (_item.count));
     83                        jsonItem.Add ("name", new JSONString (_item.itemName));
     84                        jsonItem.Add ("icon", new JSONString (_item.icon));
     85                        jsonItem.Add ("iconcolor", new JSONString (_item.iconcolor));
     86                        jsonItem.Add ("quality", new JSONNumber (_item.quality));
     87                        if (_item.quality >= 0) {
     88                                jsonItem.Add ("qualitycolor", new JSONString (QualityInfo.GetQualityColorHex (_item.quality)));
     89                        }
     90
     91                        return jsonItem;
     92
    9293                }
    9394        }
  • binary-improvements/MapRendering/Web/API/GetPlayerList.cs

    r325 r326  
    4040                                Player p = playersList [sid, false];
    4141
    42                                 ulong player_steam_ID = 0L;
     42                                ulong player_steam_ID;
    4343                                if (!ulong.TryParse (sid, out player_steam_ID)) {
    4444                                        player_steam_ID = 0L;
     
    6464                                        pJson.Add ("ping", new JSONNumber (p.IsOnline ? p.ClientInfo.ping : -1));
    6565
    66                                         JSONBoolean banned = null;
     66                                        JSONBoolean banned;
    6767                                        if (admTools != null) {
    6868                                                banned = new JSONBoolean (admTools.IsBanned (sid));
     
    132132
    133133                                if (colType == typeof (JSONBoolean)) {
    134                                         bool value = _filterVal.Trim ().ToLower () == "true";
    135                                         return _list.Where (line => (line [_filterCol] as JSONBoolean).GetBool () == value);
     134                                        bool value = StringParsers.ParseBool (_filterVal);
     135                                        return _list.Where (line => ((JSONBoolean) line [_filterCol]).GetBool () == value);
    136136                                }
    137137
     
    143143                                        //Log.Out ("GetPlayerList: Filter on String with Regex '" + _filterVal + "'");
    144144                                        Regex matcher = new Regex (_filterVal, RegexOptions.IgnoreCase);
    145                                         return _list.Where (line => matcher.IsMatch ((line [_filterCol] as JSONString).GetString ()));
     145                                        return _list.Where (line => matcher.IsMatch (((JSONString) line [_filterCol]).GetString ()));
    146146                                }
    147147                        }
     
    185185
    186186                                return _list.Where (delegate (JSONObject line) {
    187                                         double objVal = (line [_filterCol] as JSONNumber).GetDouble ();
     187                                        double objVal = ((JSONNumber) line [_filterCol]).GetDouble ();
    188188                                        switch (matchType) {
    189189                                                case NumberMatchType.Greater:
     
    216216                                if (colType == typeof (JSONNumber)) {
    217217                                        if (_ascending) {
    218                                                 return _list.OrderBy (line => (line [_sortCol] as JSONNumber).GetDouble ());
    219                                         }
    220 
    221                                         return _list.OrderByDescending (line => (line [_sortCol] as JSONNumber).GetDouble ());
     218                                                return _list.OrderBy (line => ((JSONNumber) line [_sortCol]).GetDouble ());
     219                                        }
     220
     221                                        return _list.OrderByDescending (line => ((JSONNumber) line [_sortCol]).GetDouble ());
    222222                                }
    223223
    224224                                if (colType == typeof (JSONBoolean)) {
    225225                                        if (_ascending) {
    226                                                 return _list.OrderBy (line => (line [_sortCol] as JSONBoolean).GetBool ());
    227                                         }
    228 
    229                                         return _list.OrderByDescending (line => (line [_sortCol] as JSONBoolean).GetBool ());
     226                                                return _list.OrderBy (line => ((JSONBoolean) line [_sortCol]).GetBool ());
     227                                        }
     228
     229                                        return _list.OrderByDescending (line => ((JSONBoolean) line [_sortCol]).GetBool ());
    230230                                }
    231231
  • binary-improvements/MapRendering/Web/API/GetPlayersLocation.cs

    r325 r326  
    3131
    3232                                if (listOffline || p.IsOnline) {
    33                                         ulong player_steam_ID = 0L;
     33                                        ulong player_steam_ID;
    3434                                        if (!ulong.TryParse (sid, out player_steam_ID)) {
    3535                                                player_steam_ID = 0L;
  • binary-improvements/MapRendering/Web/API/GetPlayersOnline.cs

    r325 r326  
    4141                                p.Add ("totalplaytime", new JSONNumber (player != null ? player.TotalPlayTime : -1));
    4242                                p.Add ("lastonline", new JSONString (player != null ? player.LastOnline.ToString ("s") : string.Empty));
    43                                 p.Add ("ping", new JSONNumber (ci != null ? ci.ping : -1));
     43                                p.Add ("ping", new JSONNumber (ci.ping));
    4444
    4545                                players.Add (p);
  • binary-improvements/MapRendering/Web/API/WebAPI.cs

    r325 r326  
    55namespace AllocsFixes.NetConnections.Servers.Web.API {
    66        public abstract class WebAPI {
     7                public readonly string Name;
     8
     9                protected WebAPI () {
     10                        Name = GetType ().Name;
     11                }
     12
    713                public static void WriteJSON (HttpListenerResponse resp, JSONNode root) {
    814                        StringBuilder sb = new StringBuilder ();
  • binary-improvements/MapRendering/Web/ConnectionHandler.cs

    r325 r326  
    55        public class ConnectionHandler {
    66                private readonly Dictionary<string, WebConnection> connections = new Dictionary<string, WebConnection> ();
    7                 private Web parent;
    8 
    9                 public ConnectionHandler (Web _parent) {
    10                         parent = _parent;
    11                 }
    127
    138                public WebConnection IsLoggedIn (string _sessionId, string _endpoint) {
  • binary-improvements/MapRendering/Web/Handlers/ApiHandler.cs

    r325 r326  
    77namespace AllocsFixes.NetConnections.Servers.Web.Handlers {
    88        public class ApiHandler : PathHandler {
    9                 private readonly Dictionary<string, WebAPI> apis = new Dictionary<string, WebAPI> ();
     9                private readonly Dictionary<string, WebAPI> apis = new CaseInsensitiveStringDictionary<WebAPI> ();
    1010                private readonly string staticPart;
    1111
     
    1818                                        if (ctor != null) {
    1919                                                WebAPI apiInstance = (WebAPI) ctor.Invoke (new object [0]);
    20                                                 addApi (t.Name.ToLower (), apiInstance);
     20                                                addApi (apiInstance.Name, apiInstance);
    2121                                        }
    2222                                }
     
    5252                        }
    5353
    54                         foreach (KeyValuePair<string, WebAPI> kvp in apis) {
    55                                 if (apiName.StartsWith (kvp.Key)) {
    56                                         try {
    57                                                 kvp.Value.HandleRequest (req, resp, user, permissionLevel);
    58                                                 return;
    59                                         } catch (Exception e) {
    60                                                 Log.Error ("Error in ApiHandler.HandleRequest(): Handler {0} threw an exception:", kvp.Key);
    61                                                 Log.Exception (e);
    62                                                 resp.StatusCode = (int) HttpStatusCode.InternalServerError;
    63                                                 return;
    64                                         }
     54                        WebAPI api;
     55                        if (apis.TryGetValue (apiName, out api)) {
     56                                try {
     57                                        api.HandleRequest (req, resp, user, permissionLevel);
     58                                        return;
     59                                } catch (Exception e) {
     60                                        Log.Error ("Error in ApiHandler.HandleRequest(): Handler {0} threw an exception:", api.Name);
     61                                        Log.Exception (e);
     62                                        resp.StatusCode = (int) HttpStatusCode.InternalServerError;
     63                                        return;
    6564                                }
    6665                        }
    67 
     66                       
    6867                        Log.Out ("Error in ApiHandler.HandleRequest(): No handler found for API \"" + apiName + "\"");
    6968                        resp.StatusCode = (int) HttpStatusCode.NotFound;
  • binary-improvements/MapRendering/Web/Handlers/ItemIconHandler.cs

    r325 r326  
    3737                        requestFileName = requestFileName.Remove (requestFileName.LastIndexOf ('.'));
    3838
    39                         if (icons.ContainsKey (requestFileName) && req.Url.AbsolutePath.ToLower ().EndsWith (".png")) {
     39                        if (icons.ContainsKey (requestFileName) && req.Url.AbsolutePath.EndsWith (".png", StringComparison.OrdinalIgnoreCase)) {
    4040                                resp.ContentType = MimeType.GetMimeType (".png");
    4141
     
    128128                                                        foreach (string file in Directory.GetFiles (modIconsPath)) {
    129129                                                                try {
    130                                                                         if (file.ToLower ().EndsWith (".png")) {
     130                                                                        if (file.EndsWith (".png", StringComparison.OrdinalIgnoreCase)) {
    131131                                                                                string name = Path.GetFileNameWithoutExtension (file);
    132132                                                                                Texture2D tex = new Texture2D (1, 1, TextureFormat.ARGB32, false);
  • binary-improvements/MapRendering/Web/LogBuffer.cs

    r325 r326  
    1515
    1616                private int listOffset;
     17
     18                public static void Init () {
     19                        if (instance == null) {
     20                                instance = new LogBuffer ();
     21                        };
     22                }
    1723
    1824                private LogBuffer () {
  • binary-improvements/MapRendering/Web/OpenID.cs

    r325 r326  
    8787                                                }
    8888
    89                                                 if (chainStatus.Status == X509ChainStatusFlags.UntrustedRoot && chainEl.Certificate == caCert) {
     89                                                if (chainStatus.Status == X509ChainStatusFlags.UntrustedRoot && chainEl.Certificate.Equals (caCert)) {
    9090                                                        // This status is about the cert being an untrusted root certificate but the certificate is one of those we added, ignore
    9191                                                        continue;
     
    149149
    150150                        string steamIdString = getValue (_req, "openid.claimed_id");
    151                         ulong steamId = 0;
     151                        ulong steamId;
    152152                        Match steamIdMatch = steamIdUrlMatcher.Match (steamIdString);
    153153                        if (steamIdMatch.Success) {
     
    190190
    191191                        HttpWebResponse response = (HttpWebResponse) request.GetResponse ();
    192                         string responseString = null;
     192                        string responseString;
    193193                        using (Stream st = response.GetResponseStream ()) {
    194194                                using (StreamReader str = new StreamReader (st)) {
     
    197197                        }
    198198
    199                         if (responseString.ToLower ().Contains ("is_valid:true")) {
     199                        if (responseString.ContainsCaseInsensitive ("is_valid:true")) {
    200200                                return steamId;
    201201                        }
  • binary-improvements/MapRendering/Web/Web.cs

    r325 r326  
    107107                                );
    108108
    109                                 connectionHandler = new ConnectionHandler (this);
     109                                connectionHandler = new ConnectionHandler ();
    110110
    111111                                _listener.Prefixes.Add (string.Format ("http://*:{0}/", webPort + 2));
     
    149149
    150150                private void HandleRequest (IAsyncResult result) {
    151                         if (_listener.IsListening) {
    152                                 Interlocked.Increment (ref handlingCount);
    153                                 Interlocked.Increment (ref currentHandlers);
     151                        if (!_listener.IsListening) {
     152                                return;
     153                        }
     154
     155                        Interlocked.Increment (ref handlingCount);
     156                        Interlocked.Increment (ref currentHandlers);
    154157
    155158//                              MicroStopwatch msw = new MicroStopwatch ();
    156                                 HttpListenerContext ctx = _listener.EndGetContext (result);
    157                                 _listener.BeginGetContext (HandleRequest, _listener);
    158                                 try {
    159                                         HttpListenerRequest request = ctx.Request;
    160                                         HttpListenerResponse response = ctx.Response;
    161                                         response.SendChunked = false;
    162 
    163                                         response.ProtocolVersion = new Version ("1.1");
    164 
    165                                         WebConnection conn;
    166                                         int permissionLevel = DoAuthentication (request, out conn);
    167 
    168 
    169                                         //Log.Out ("Login status: conn!=null: {0}, permissionlevel: {1}", conn != null, permissionLevel);
    170 
    171 
    172                                         if (conn != null) {
    173                                                 Cookie cookie = new Cookie ("sid", conn.SessionID, "/");
    174                                                 cookie.Expired = false;
    175                                                 cookie.Expires = new DateTime (2020, 1, 1);
    176                                                 cookie.HttpOnly = true;
    177                                                 cookie.Secure = false;
    178                                                 response.AppendCookie (cookie);
    179                                         }
    180 
    181                                         // No game yet -> fail request
    182                                         if (GameManager.Instance.World == null) {
    183                                                 response.StatusCode = (int) HttpStatusCode.ServiceUnavailable;
    184                                                 return;
    185                                         }
    186 
    187                                         if (request.Url.AbsolutePath.Length < 2) {
    188                                                 handlers ["/index.htm"].HandleRequest (request, response, conn, permissionLevel);
    189                                                 return;
    190                                         } else {
    191                                                 foreach (KeyValuePair<string, PathHandler> kvp in handlers) {
    192                                                         if (request.Url.AbsolutePath.StartsWith (kvp.Key)) {
    193                                                                 if (!kvp.Value.IsAuthorizedForHandler (conn, permissionLevel)) {
    194                                                                         response.StatusCode = (int) HttpStatusCode.Forbidden;
    195                                                                         if (conn != null) {
    196                                                                                 //Log.Out ("Web.HandleRequest: user '{0}' not allowed to access '{1}'", conn.SteamID, kvp.Value.ModuleName);
    197                                                                         }
    198                                                                 } else {
    199                                                                         kvp.Value.HandleRequest (request, response, conn, permissionLevel);
     159                        HttpListenerContext ctx = _listener.EndGetContext (result);
     160                        _listener.BeginGetContext (HandleRequest, _listener);
     161                        try {
     162                                HttpListenerRequest request = ctx.Request;
     163                                HttpListenerResponse response = ctx.Response;
     164                                response.SendChunked = false;
     165
     166                                response.ProtocolVersion = new Version ("1.1");
     167
     168                                WebConnection conn;
     169                                int permissionLevel = DoAuthentication (request, out conn);
     170
     171
     172                                //Log.Out ("Login status: conn!=null: {0}, permissionlevel: {1}", conn != null, permissionLevel);
     173
     174
     175                                if (conn != null) {
     176                                        Cookie cookie = new Cookie ("sid", conn.SessionID, "/");
     177                                        cookie.Expired = false;
     178                                        cookie.Expires = new DateTime (2020, 1, 1);
     179                                        cookie.HttpOnly = true;
     180                                        cookie.Secure = false;
     181                                        response.AppendCookie (cookie);
     182                                }
     183
     184                                // No game yet -> fail request
     185                                if (GameManager.Instance.World == null) {
     186                                        response.StatusCode = (int) HttpStatusCode.ServiceUnavailable;
     187                                        return;
     188                                }
     189
     190                                if (request.Url.AbsolutePath.Length < 2) {
     191                                        handlers ["/index.htm"].HandleRequest (request, response, conn, permissionLevel);
     192                                        return;
     193                                } else {
     194                                        foreach (KeyValuePair<string, PathHandler> kvp in handlers) {
     195                                                if (request.Url.AbsolutePath.StartsWith (kvp.Key)) {
     196                                                        if (!kvp.Value.IsAuthorizedForHandler (conn, permissionLevel)) {
     197                                                                response.StatusCode = (int) HttpStatusCode.Forbidden;
     198                                                                if (conn != null) {
     199                                                                        //Log.Out ("Web.HandleRequest: user '{0}' not allowed to access '{1}'", conn.SteamID, kvp.Value.ModuleName);
    200200                                                                }
    201 
    202                                                                 return;
     201                                                        } else {
     202                                                                kvp.Value.HandleRequest (request, response, conn, permissionLevel);
    203203                                                        }
     204
     205                                                        return;
    204206                                                }
    205207                                        }
    206 
    207                                         // Not really relevant for non-debugging purposes:
    208                                         //Log.Out ("Error in Web.HandleRequest(): No handler found for path \"" + request.Url.AbsolutePath + "\"");
    209                                         response.StatusCode = (int) HttpStatusCode.NotFound;
    210                                 } catch (IOException e) {
    211                                         if (e.InnerException is SocketException) {
    212                                                 Log.Out ("Error in Web.HandleRequest(): Remote host closed connection: " +
    213                                                          e.InnerException.Message);
    214                                         } else {
    215                                                 Log.Out ("Error (IO) in Web.HandleRequest(): " + e);
    216                                         }
    217                                 } catch (Exception e) {
    218                                         Log.Out ("Error in Web.HandleRequest(): " + e);
    219                                 } finally {
    220                                         if (ctx != null && !ctx.Response.SendChunked) {
    221                                                 ctx.Response.Close ();
    222                                         }
     208                                }
     209
     210                                // Not really relevant for non-debugging purposes:
     211                                //Log.Out ("Error in Web.HandleRequest(): No handler found for path \"" + request.Url.AbsolutePath + "\"");
     212                                response.StatusCode = (int) HttpStatusCode.NotFound;
     213                        } catch (IOException e) {
     214                                if (e.InnerException is SocketException) {
     215                                        Log.Out ("Error in Web.HandleRequest(): Remote host closed connection: " +
     216                                                 e.InnerException.Message);
     217                                } else {
     218                                        Log.Out ("Error (IO) in Web.HandleRequest(): " + e);
     219                                }
     220                        } catch (Exception e) {
     221                                Log.Out ("Error in Web.HandleRequest(): " + e);
     222                        } finally {
     223                                if (ctx != null && !ctx.Response.SendChunked) {
     224                                        ctx.Response.Close ();
     225                                }
    223226
    224227//                                      msw.Stop ();
    225228//                                      totalHandlingTime += msw.ElapsedMicroseconds;
    226229//                                      Log.Out ("Web.HandleRequest(): Took {0} µs", msw.ElapsedMicroseconds);
    227                                         Interlocked.Decrement (ref currentHandlers);
    228                                 }
     230                                Interlocked.Decrement (ref currentHandlers);
    229231                        }
    230232                }
  • binary-improvements/MapRendering/Web/WebConnection.cs

    r325 r326  
    66        public class WebConnection : ConsoleConnectionAbstract {
    77                private readonly DateTime login;
    8                 private readonly List<string> outputLines = new List<string> ();
     8//              private readonly List<string> outputLines = new List<string> ();
    99                private DateTime lastAction;
    1010                private readonly string conDescription;
     
    3030
    3131                public static bool CanViewAllPlayers (int _permissionLevel) {
    32                         bool val = false;
     32                        const int defaultPermissionLevel = 0;
    3333
    34                         try {
    35                                 const int defaultPermissionLevel = 0;
     34                        bool val = _permissionLevel <= defaultPermissionLevel;
    3635
    37                                 val = _permissionLevel <= defaultPermissionLevel;
    38 
    39                                 foreach (WebPermissions.WebModulePermission wap in WebPermissions.Instance.GetModules ()) {
    40                                         if (wap.module.Trim ().ToLower () == "webapi.viewallplayers") {
    41                                                 val = _permissionLevel <= wap.permissionLevel;
    42                                         }
     36                        foreach (WebPermissions.WebModulePermission wap in WebPermissions.Instance.GetModules ()) {
     37                                if (wap.module.EqualsCaseInsensitive ("webapi.viewallplayers")) {
     38                                        val = _permissionLevel <= wap.permissionLevel;
    4339                                }
    44                         } catch {
    4540                        }
    4641
     
    4944
    5045                public static bool CanViewAllClaims (int _permissionLevel) {
    51                         bool val = false;
     46                        const int defaultPermissionLevel = 0;
    5247
    53                         try {
    54                                 const int defaultPermissionLevel = 0;
     48                        bool val = _permissionLevel <= defaultPermissionLevel;
    5549
    56                                 val = _permissionLevel <= defaultPermissionLevel;
    57 
    58                                 foreach (WebPermissions.WebModulePermission wap in WebPermissions.Instance.GetModules ()) {
    59                                         if (wap.module.Trim ().ToLower () == "webapi.viewallclaims") {
    60                                                 val = _permissionLevel <= wap.permissionLevel;
    61                                         }
     50                        foreach (WebPermissions.WebModulePermission wap in WebPermissions.Instance.GetModules ()) {
     51                                if (wap.module.EqualsCaseInsensitive ("webapi.viewallclaims")) {
     52                                        val = _permissionLevel <= wap.permissionLevel;
    6253                                }
    63                         } catch {
    6454                        }
    6555
     
    7666
    7767                public override void SendLine (string _text) {
    78                         outputLines.Add (_text);
     68//                      outputLines.Add (_text);
    7969                }
    8070
    8171                public override void SendLines (List<string> _output) {
    82                         outputLines.AddRange (_output);
     72//                      outputLines.AddRange (_output);
    8373                }
    8474
  • binary-improvements/MapRendering/Web/WebPermissions.cs

    r325 r326  
    1212                        new Dictionary<string, WebModulePermission> ();
    1313
    14                 private Dictionary<string, AdminToken> admintokens;
     14                private readonly Dictionary<string, AdminToken> admintokens = new CaseInsensitiveStringDictionary<AdminToken> ();
    1515                private FileSystemWatcher fileWatcher;
    1616
    17                 private Dictionary<string, WebModulePermission> modules;
     17                private readonly Dictionary<string, WebModulePermission> modules = new CaseInsensitiveStringDictionary<WebModulePermission> ();
    1818
    1919                public WebPermissions () {
     
    4949
    5050                public WebModulePermission GetModulePermission (string _module) {
    51                         if (modules.ContainsKey (_module.ToLower ())) {
    52                                 return modules [_module.ToLower ()];
     51                        WebModulePermission result;
     52                        if (modules.TryGetValue (_module, out result)) {
     53                                return result;
    5354                        }
    5455
     
    8384                public AdminToken[] GetAdmins () {
    8485                        AdminToken[] result = new AdminToken[admintokens.Count];
    85                         admintokens.Values.CopyTo (result, 0);
     86                        admintokens.CopyValuesTo (result);
    8687                        return result;
    8788                }
     
    9091                // Commands
    9192                public void AddModulePermission (string _module, int _permissionLevel, bool _save = true) {
    92                         WebModulePermission p = new WebModulePermission (_module.ToLower (), _permissionLevel);
     93                        WebModulePermission p = new WebModulePermission (_module, _permissionLevel);
    9394                        lock (this) {
    9495                                modules [_module] = p;
     
    100101
    101102                public void AddKnownModule (string _module, int _defaultPermission) {
    102                         if (!string.IsNullOrEmpty (_module)) {
    103                                 lock (this) {
    104                                         if (!IsKnownModule (_module)) {
    105                                                 knownModules.Add (_module, new WebModulePermission (_module, _defaultPermission));
    106                                         }
    107 
    108                                         if (_defaultPermission > 0 && !modules.ContainsKey (_module.ToLower ())) {
    109                                                 AddModulePermission (_module, _defaultPermission);
    110                                         }
     103                        if (string.IsNullOrEmpty (_module)) {
     104                                return;
     105                        }
     106
     107                        lock (this) {
     108                                if (!IsKnownModule (_module)) {
     109                                        knownModules.Add (_module, new WebModulePermission (_module, _defaultPermission));
     110                                }
     111
     112                                if (_defaultPermission > 0 && !modules.ContainsKey (_module)) {
     113                                        AddModulePermission (_module, _defaultPermission);
    111114                                }
    112115                        }
     
    114117
    115118                public bool IsKnownModule (string _module) {
    116                         if (!string.IsNullOrEmpty (_module)) {
    117                                 lock (this) {
    118                                         return knownModules.ContainsKey (_module);
    119                                 }
    120                         }
    121 
    122                         return false;
     119                        if (string.IsNullOrEmpty (_module)) {
     120                                return false;
     121                        }
     122
     123                        lock (this) {
     124                                return knownModules.ContainsKey (_module);
     125                        }
     126
    123127                }
    124128
    125129                public void RemoveModulePermission (string _module, bool _save = true) {
    126130                        lock (this) {
    127                                 modules.Remove (_module.ToLower ());
     131                                modules.Remove (_module);
    128132                                if (_save) {
    129133                                        Save ();
     
    174178
    175179                public void Load () {
    176                         admintokens = new Dictionary<string, AdminToken> ();
    177                         modules = new Dictionary<string, WebModulePermission> ();
     180                        admintokens.Clear ();
     181                        modules.Clear ();
    178182
    179183                        if (!Utils.FileExists (GetFullPath ())) {
     
    190194                                xmlDoc.Load (GetFullPath ());
    191195                        } catch (XmlException e) {
    192                                 Log.Error (string.Format ("Failed loading permissions file: {0}", e.Message));
     196                                Log.Error ("Failed loading permissions file: " + e.Message);
    193197                                return;
    194198                        }
     
    196200                        XmlNode adminToolsNode = xmlDoc.DocumentElement;
    197201
     202                        if (adminToolsNode == null) {
     203                                Log.Error ("Failed loading permissions file: No DocumentElement found");
     204                                return;
     205                        }
     206                       
    198207                        foreach (XmlNode childNode in adminToolsNode.ChildNodes) {
    199208                                if (childNode.Name == "admintokens") {
     
    230239                                                string name = lineItem.GetAttribute ("name");
    231240                                                string token = lineItem.GetAttribute ("token");
    232                                                 int permissionLevel = 2000;
     241                                                int permissionLevel;
    233242                                                if (!int.TryParse (lineItem.GetAttribute ("permission_level"), out permissionLevel)) {
    234243                                                        Log.Warning (
     
    267276                                                }
    268277
    269                                                 int permissionLevel = 0;
     278                                                int permissionLevel;
    270279                                                if (!int.TryParse (lineItem.GetAttribute ("permission_level"), out permissionLevel)) {
    271280                                                        Log.Warning (
     
    275284                                                }
    276285
    277                                                 AddModulePermission (lineItem.GetAttribute ("module").ToLower (), permissionLevel, false);
     286                                                AddModulePermission (lineItem.GetAttribute ("module"), permissionLevel, false);
    278287                                        }
    279288                                }
Note: See TracChangeset for help on using the changeset viewer.