Changeset 435


Ignore:
Timestamp:
May 18, 2023, 12:20:16 PM (19 months ago)
Author:
alloc
Message:

Added WebModules API POST support

Location:
binary-improvements2
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements2/CommandExtensions/ModInfo.xml

    r434 r435  
    55        <Description value="Additional commands for server operation" />
    66        <Author value="The Fun Pimps LLC" />
    7         <Version value="21.0.288.0" />
     7        <Version value="21.0.289.0" />
    88        <Website value="" />
    99</xml>
  • binary-improvements2/MapRendering/ModInfo.xml

    r434 r435  
    55        <Description value="Render the game map to image map tiles as it is uncovered" />
    66        <Author value="The Fun Pimps LLC" />
    7         <Version value="21.0.288.0" />
     7        <Version value="21.0.289.0" />
    88        <Website value="" />
    99</xml>
  • binary-improvements2/MarkersMod/ModInfo.xml

    r434 r435  
    55        <Description value="Allows placing custom markers on the web map" />
    66        <Author value="Catalysm and Alloc" />
    7         <Version value="21.0.288.0" />
     7        <Version value="21.0.289.0" />
    88        <Website value="" />
    99</xml>
  • binary-improvements2/WebServer/ModInfo.xml

    r434 r435  
    55        <Description value="Integrated Webserver for the Web Dashboard and server APIs" />
    66        <Author value="The Fun Pimps LLC" />
    7         <Version value="21.0.288.0" />
     7        <Version value="21.0.289.0" />
    88        <Website value="" />
    99</xml>
  • binary-improvements2/WebServer/src/Commands/WebPermissionsCmd.cs

    r434 r435  
    8282                        }
    8383
    84                         if (permissionLevelString.EqualsCaseInsensitive ("inherit")) {
     84                        if (permissionLevelString.EqualsCaseInsensitive (AdminWebModules.MethodLevelInheritKeyword)) {
    8585                                if (isGlobal) {
    8686                                        SdtdConsole.Instance.Output ($"Permission level can not use the 'inherit' keyword with the 'global' method keyword.");
  • binary-improvements2/WebServer/src/Permissions/AdminWebModules.cs

    r434 r435  
    8181               
    8282                public struct WebModule {
    83                         private const string methodLevelInheritKeyword = "inherit";
    84 
    8583                        public string Name;
    8684                        public int LevelGlobal;
     
    135133                                        permissionElement.AddXmlElement ("method")
    136134                                                .SetAttrib ("name", method.ToStringCached ())
    137                                                 .SetAttrib ("permission_level", level == MethodLevelInheritGlobal ? methodLevelInheritKeyword : level.ToString ());
     135                                                .SetAttrib ("permission_level", level == MethodLevelInheritGlobal ? MethodLevelInheritKeyword : level.ToString ());
    138136                                }
    139137                        }
     
    195193
    196194                                        int methodPermissionLevel;
    197                                         if (permissionLevelString.EqualsCaseInsensitive (methodLevelInheritKeyword)) {
     195                                        if (permissionLevelString.EqualsCaseInsensitive (MethodLevelInheritKeyword)) {
    198196                                                methodPermissionLevel = MethodLevelInheritGlobal;
    199197                                        } else if (!int.TryParse (permissionLevelString, out methodPermissionLevel)) {
     
    230228                /// </summary>
    231229                public const int MethodLevelInheritGlobal = int.MinValue;
    232                
     230
     231                /// <summary>
     232                /// Keyword used to signal inherit level on user facing levels like admins.xml or WebAPIs
     233                /// </summary>
     234                public const string MethodLevelInheritKeyword = "inherit";
     235
    233236                /// <summary>
    234237                /// Method not supported
     
    287290               
    288291#endregion
     292
    289293        }
    290294}
  • binary-improvements2/WebServer/src/WebAPI/APIs/Permissions/WebModules.cs

    r434 r435  
     1using System;
    12using System.Collections.Generic;
    23using System.Net;
     
    6768                        _writer.WriteInt32 (_module.LevelGlobal);
    6869                        _writer.WriteRaw (jsonKeyPermissionLevelPerMethod);
    69                        
     70
    7071                        _writer.WriteBeginObject ();
    7172
     
    7475                                for (int iMethod = 0; iMethod < _module.LevelPerMethod.Length; iMethod++) {
    7576                                        int methodLevel = _module.LevelPerMethod [iMethod];
    76                                                
     77
    7778                                        if (methodLevel == AdminWebModules.MethodLevelNotSupported) {
    7879                                                continue;
     
    8485
    8586                                        first = false;
    86                                                
     87
    8788                                        _writer.WriteRaw (jsonMethodNameKeys [iMethod]);
    8889                                        if (methodLevel == AdminWebModules.MethodLevelInheritGlobal) {
    89                                                 _writer.WriteString ("inherit");
     90                                                _writer.WriteString (AdminWebModules.MethodLevelInheritKeyword);
    9091                                        } else {
    9192                                                _writer.WriteInt32 (methodLevel);
     
    9596
    9697                        _writer.WriteEndObject ();
    97                        
     98
    9899                        _writer.WriteRaw (jsonKeyIsDefault);
    99100                        _writer.WriteBoolean (_module.IsDefault);
    100                        
     101
    101102                        _writer.WriteEndObject ();
    102103                }
     
    105106                        string id = _context.RequestPath;
    106107
    107                         // TODO
    108                        
    109108                        if (string.IsNullOrEmpty (id)) {
    110109                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_MODULE");
     
    112111                        }
    113112
    114                         if (!JsonCommons.TryGetJsonField (_jsonInput, propertyPermissionLevelGlobal, out int permissionLevel)) {
    115                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_PERMISSION_LEVEL");
     113                        if (!AdminWebModules.Instance.IsKnownModule (id)) {
     114                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_MODULE");
    116115                                return;
    117116                        }
    118117
    119                         // ModulesInstance.AddModule (id, permissionLevel);
     118                        AdminWebModules.WebModule module = AdminWebModules.Instance.GetModule (id);
     119
     120                        if (_jsonInput.ContainsKey (propertyPermissionLevelGlobal)) {
     121                                if (!JsonCommons.TryGetJsonField (_jsonInput, propertyPermissionLevelGlobal, out int permissionLevelGlobal)) {
     122                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_PERMISSION_LEVEL_GLOBAL");
     123                                        return;
     124                                }
     125
     126                                module.LevelGlobal = permissionLevelGlobal;
     127                        }
     128
     129                        if (_jsonInput.TryGetValue (propertyPermissionLevelPerMethod, out object perLevelField)) {
     130                                if (perLevelField is not IDictionary<string, object> perLevelObj) {
     131                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_PERMISSION_LEVEL_PER_METHOD_PROPERTY");
     132                                        return;
     133                                }
     134
     135                                foreach ((string property, object valueObj) in perLevelObj) {
     136                                        if (!EnumUtils.TryParse (property, out ERequestMethod method, true)) {
     137                                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_METHOD_NAME");
     138                                                return;
     139                                        }
     140
     141                                        if (module.LevelPerMethod == null || module.LevelPerMethod [(int)method] == AdminWebModules.MethodLevelNotSupported) {
     142                                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "UNSUPPORTED_METHOD");
     143                                                return;
     144                                        }
     145
     146                                        int permissionLevel;
     147
     148                                        if (valueObj is string valueString) {
     149                                                if (!valueString.EqualsCaseInsensitive (AdminWebModules.MethodLevelInheritKeyword)) {
     150                                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_PERMISSION_STRING");
     151                                                        return;
     152                                                }                                               
     153
     154                                                permissionLevel = AdminWebModules.MethodLevelInheritGlobal;
     155                                        } else if (valueObj is double valueDbl) {
     156                                                try {
     157                                                        permissionLevel = (int)valueDbl;
     158                                                } catch (Exception) {
     159                                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_PERMISSION_VALUE");
     160                                                        return;
     161                                                }
     162                                        } else {
     163                                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_PERMISSION_VALUE_TYPE");
     164                                                return;
     165                                        }
     166
     167                                        module.LevelPerMethod [(int)method] = permissionLevel;
     168                                }
     169                        }
     170
     171                        module.IsDefault = false;
     172                        ModulesInstance.AddModule (module);
    120173
    121174                        SendEmptyResponse (_context, HttpStatusCode.Created);
  • binary-improvements2/bin/Mods/TFP_CommandExtensions/ModInfo.xml

    r434 r435  
    55        <Description value="Additional commands for server operation" />
    66        <Author value="The Fun Pimps LLC" />
    7         <Version value="21.0.288.0" />
     7        <Version value="21.0.289.0" />
    88        <Website value="" />
    99</xml>
  • binary-improvements2/bin/Mods/TFP_MapRendering/ModInfo.xml

    r434 r435  
    55        <Description value="Render the game map to image map tiles as it is uncovered" />
    66        <Author value="The Fun Pimps LLC" />
    7         <Version value="21.0.288.0" />
     7        <Version value="21.0.289.0" />
    88        <Website value="" />
    99</xml>
  • binary-improvements2/bin/Mods/TFP_WebServer/ModInfo.xml

    r434 r435  
    55        <Description value="Integrated Webserver for the Web Dashboard and server APIs" />
    66        <Author value="The Fun Pimps LLC" />
    7         <Version value="21.0.288.0" />
     7        <Version value="21.0.289.0" />
    88        <Website value="" />
    99</xml>
  • binary-improvements2/bin/Mods/Xample_MarkersMod/ModInfo.xml

    r434 r435  
    55        <Description value="Allows placing custom markers on the web map" />
    66        <Author value="Catalysm and Alloc" />
    7         <Version value="21.0.288.0" />
     7        <Version value="21.0.289.0" />
    88        <Website value="" />
    99</xml>
Note: See TracChangeset for help on using the changeset viewer.