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

Added WebModules API POST support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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);
Note: See TracChangeset for help on using the changeset viewer.