Ignore:
Timestamp:
Aug 24, 2023, 12:48:17 PM (15 months ago)
Author:
alloc
Message:

Added locks on AdminTools instead of local to the individual permission systems

Location:
TFP-WebServer/WebServer/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TFP-WebServer/WebServer/src/Permissions/AdminApiTokens.cs

    r440 r474  
    4040
    4141                public void AddToken (string _name, string _secret, int _permissionLevel) {
    42                         ApiToken apiToken = new ApiToken (_name, _secret, _permissionLevel);
    43                         tokens [_name] = apiToken;
    44                         Parent.Save ();
     42                        lock (Parent) {
     43                                ApiToken apiToken = new ApiToken (_name, _secret, _permissionLevel);
     44                                tokens[_name] = apiToken;
     45                                Parent.Save ();
     46                        }
    4547                }
    4648
    4749                public bool RemoveToken (string _name) {
    48                         bool removed = tokens.Remove (_name);
    49                         if (removed) {
    50                                 Parent.Save ();
     50                        lock (Parent) {
     51                                bool removed = tokens.Remove (_name);
     52                                if (removed) {
     53                                        Parent.Save ();
     54                                }
     55
     56                                return removed;
    5157                        }
    52 
    53                         return removed;
    5458                }
    5559
    5660                public Dictionary<string, ApiToken> GetTokens () {
    57                         return tokens;
     61                        lock (Parent) {
     62                                return tokens;
     63                        }
    5864                }
    5965
     
    113119
    114120                public int GetPermissionLevel (string _name, string _secret) {
    115                         if (tokens.TryGetValue (_name, out ApiToken apiToken) && apiToken.Secret == _secret) {
    116                                 return apiToken.PermissionLevel;
     121                        lock (Parent) {
     122                                if (tokens.TryGetValue (_name, out ApiToken apiToken) && apiToken.Secret == _secret) {
     123                                        return apiToken.PermissionLevel;
     124                                }
     125
     126                                if (IsCommandlineToken (_name, _secret)) {
     127                                        return 0;
     128                                }
     129
     130                                return int.MaxValue;
    117131                        }
    118 
    119                         if (IsCommandlineToken (_name, _secret)) {
    120                                 return 0;
    121                         }
    122 
    123                         return int.MaxValue;
    124132                }
    125133
  • TFP-WebServer/WebServer/src/Permissions/AdminWebModules.cs

    r435 r474  
    4141
    4242                public void AddModule (WebModule _module) {
    43                         lock (this) {
     43                        lock (Parent) {
    4444                                allModulesList.Clear ();
    4545                               
     
    5050
    5151                public bool RemoveModule (string _module) {
    52                         lock (this) {
     52                        lock (Parent) {
    5353                                allModulesList.Clear ();
    5454                               
     
    6363
    6464                public List<WebModule> GetModules () {
    65                         lock (this) {
     65                        lock (Parent) {
    6666                                if (allModulesList.Count != 0) {
    6767                                        return allModulesList;
     
    259259                        _module.IsDefault = true;
    260260                       
    261                         lock (this) {
     261                        lock (Parent) {
    262262                                allModulesList.Clear ();
    263263                                knownModules [_module.Name] = _module;
     
    270270                        }
    271271
    272                         lock (this) {
     272                        lock (Parent) {
    273273                                return knownModules.ContainsKey (_module);
    274274                        }
     
    276276
    277277                public bool ModuleAllowedWithLevel (string _module, int _level) {
    278                         return GetModule (_module).LevelGlobal >= _level;
     278                        lock (Parent) {
     279                                return GetModule (_module).LevelGlobal >= _level;
     280                        }
    279281                }
    280282
    281283                public WebModule GetModule (string _module) {
    282                         if (modules.TryGetValue (_module, out WebModule result)) {
    283                                 return result;
    284                         }
    285 
    286                         return knownModules.TryGetValue (_module, out result) ? result : defaultModulePermission;
     284                        lock (Parent) {
     285                                if (modules.TryGetValue (_module, out WebModule result)) {
     286                                        return result;
     287                                }
     288
     289                                return knownModules.TryGetValue (_module, out result) ? result : defaultModulePermission;
     290                        }
    287291                }
    288292
  • TFP-WebServer/WebServer/src/Permissions/AdminWebUsers.cs

    r433 r474  
    4343
    4444                public void AddUser (string _name, string _password, PlatformUserIdentifierAbs _userIdentifier, PlatformUserIdentifierAbs _crossPlatformIdentifier) {
    45                         WebUser p = new WebUser (_name, _password, _userIdentifier, _crossPlatformIdentifier);
    46                        
    47                         // TODO: Check if another name exists with the same (crossplatform)identifier, remove that
    48                         users [_name] = p;
    49                        
    50                         Parent.Save ();
     45                        lock (Parent) {
     46                                WebUser p = new WebUser (_name, _password, _userIdentifier, _crossPlatformIdentifier);
     47
     48                                // TODO: Check if another name exists with the same (crossplatform)identifier, remove that
     49                                users[_name] = p;
     50
     51                                Parent.Save ();
     52                        }
    5153                }
    5254
    5355                public bool RemoveUser (string _name) {
    54                         bool removed = users.Remove (_name);
    55                         if (removed) {
    56                                 Parent.Save ();
     56                        lock (Parent) {
     57                                bool removed = users.Remove (_name);
     58                                if (removed) {
     59                                        Parent.Save ();
     60                                }
     61
     62                                return removed;
    5763                        }
    58 
    59                         return removed;
    6064                }
    6165
    6266                public Dictionary<string, WebUser> GetUsers () {
    63                         return users;
     67                        lock (Parent) {
     68                                return users;
     69                        }
    6470                }
    6571
     
    134140
    135141                public bool TryGetUser (string _name, string _password, out WebUser _result) {
    136                         if (users.TryGetValue (_name, out _result) && _result.ValidatePassword (_password)) {
    137                                 return true;
     142                        lock (Parent) {
     143                                if (users.TryGetValue (_name, out _result) && _result.ValidatePassword (_password)) {
     144                                        return true;
     145                                }
     146
     147                                _result = default;
     148                                return false;
    138149                        }
    139 
    140                         _result = default;
    141                         return false;
    142150                }
    143151
    144152                public bool HasUser (PlatformUserIdentifierAbs _platformUser, PlatformUserIdentifierAbs _crossPlatformUser, out WebUser _result) {
    145                         _result = default;
    146                        
    147                         foreach ((string _, WebUser webUser) in users) {
    148                                 if (!PlatformUserIdentifierAbs.Equals (webUser.PlatformUser, _platformUser) ||
    149                                     !PlatformUserIdentifierAbs.Equals (webUser.CrossPlatformUser, _crossPlatformUser)) {
    150                                         continue;
     153                        lock (Parent) {
     154                                _result = default;
     155
     156                                foreach ((string _, WebUser webUser) in users) {
     157                                        if (!PlatformUserIdentifierAbs.Equals (webUser.PlatformUser, _platformUser) ||
     158                                            !PlatformUserIdentifierAbs.Equals (webUser.CrossPlatformUser, _crossPlatformUser)) {
     159                                                continue;
     160                                        }
     161
     162                                        _result = webUser;
     163                                        return true;
    151164                                }
    152165
    153                                 _result = webUser;
    154                                 return true;
     166                                return false;
    155167                        }
    156 
    157                         return false;
    158168                }
    159169
  • TFP-WebServer/WebServer/src/Web.cs

    r469 r474  
    236236                                }
    237237
     238                                // Force parsing the URL path as UTF8 so special characters get decoded properly
    238239                                request.ContentEncoding = Encoding.UTF8;
    239240                                RequestContext context = new RequestContext (requestPath, request, response, conn, permissionLevel);
Note: See TracChangeset for help on using the changeset viewer.