Ignore:
Timestamp:
Feb 16, 2023, 3:50:53 PM (21 months ago)
Author:
alloc
Message:

Latest state including reworking to the permissions system

File:
1 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements2/WebServer/src/UrlHandlers/ApiHandler.cs

    r402 r404  
    33using System.Net;
    44using System.Reflection;
     5using Webserver.Permissions;
    56using Webserver.WebAPI;
    67
     
    1011
    1112                public ApiHandler () : base (null) {
    12 
    1313                }
     14               
     15                private static readonly Type[] apiWithParentCtorTypes = { typeof (Web) };
     16                private static readonly object[] apiWithParentCtorArgs = new object[1];
     17                private static readonly Type[] apiEmptyCtorTypes = { };
     18                private static readonly object[] apiEmptyCtorArgs = { };
    1419
    1520                public override void SetBasePathAndParent (Web _parent, string _relativePath) {
    1621                        base.SetBasePathAndParent (_parent, _relativePath);
    1722
    18                         Type[] apiWithParentCtorTypes = { typeof (Web) };
    19                         object[] apiWithParentCtorArgs = { _parent };
     23                        apiWithParentCtorArgs[0] = _parent;
    2024
    21                         Type[] apiEmptyCtorTypes = { };
    22                         object[] apiEmptyCtorArgs = { };
    23                        
    24                        
    25                         ReflectionHelpers.FindTypesImplementingBase (typeof (AbsWebAPI), _type => {
    26                                 ConstructorInfo ctor = _type.GetConstructor (apiWithParentCtorTypes);
    27                                 if (ctor != null) {
    28                                         AbsWebAPI apiInstance = (AbsWebAPI) ctor.Invoke (apiWithParentCtorArgs);
    29                                         addApi (apiInstance);
    30                                         return;
    31                                 }
    32                                        
    33                                 ctor = _type.GetConstructor (apiEmptyCtorTypes);
    34                                 if (ctor != null) {
    35                                         AbsWebAPI apiInstance = (AbsWebAPI) ctor.Invoke (apiEmptyCtorArgs);
    36                                         addApi (apiInstance);
    37                                 }
    38                         });
     25                        ReflectionHelpers.FindTypesImplementingBase (typeof (AbsWebAPI), apiFoundCallback);
    3926
    4027                        // Permissions that don't map to a real API
     
    4330                }
    4431
     32                private void apiFoundCallback (Type _type) {
     33                        ConstructorInfo ctor = _type.GetConstructor (apiWithParentCtorTypes);
     34                        if (ctor != null) {
     35                                AbsWebAPI apiInstance = (AbsWebAPI)ctor.Invoke (apiWithParentCtorArgs);
     36                                addApi (apiInstance);
     37                                return;
     38                        }
     39
     40                        ctor = _type.GetConstructor (apiEmptyCtorTypes);
     41                        if (ctor != null) {
     42                                AbsWebAPI apiInstance = (AbsWebAPI)ctor.Invoke (apiEmptyCtorArgs);
     43                                addApi (apiInstance);
     44                        }
     45                }
     46
    4547                private void addApi (AbsWebAPI _api) {
    4648                        apis.Add (_api.Name, _api);
    47                         WebPermissions.Instance.AddKnownModule ($"webapi.{_api.Name}", _api.DefaultPermissionLevel ());
     49                        AdminWebModules.Instance.AddKnownModule ($"webapi.{_api.Name}", _api.DefaultPermissionLevel ());
    4850                }
    4951
     
    9294
    9395                private bool IsAuthorizedForApi (string _apiName, int _permissionLevel) {
    94                         return WebPermissions.Instance.ModuleAllowedWithLevel ($"webapi.{_apiName}", _permissionLevel);
     96                        return AdminWebModules.Instance.ModuleAllowedWithLevel ($"webapi.{_apiName}", _permissionLevel);
    9597                }
    9698        }
Note: See TracChangeset for help on using the changeset viewer.