Ignore:
Timestamp:
Feb 26, 2024, 6:25:48 PM (9 months ago)
Author:
alloc
Message:

22.0.1.1 WebServer release

  • Moved API error codes from string literals to enum
Location:
TFP-WebServer/WebServer
Files:
1 added
13 edited

Legend:

Unmodified
Added
Removed
  • TFP-WebServer/WebServer/ModInfo.xml

    r485 r486  
    55        <Description value="Integrated Webserver for the Web Dashboard and server APIs" />
    66        <Author value="The Fun Pimps LLC" />
    7         <Version value="22.0.1.0" />
     7        <Version value="22.0.1.1" />
    88        <Website value="" />
    99</xml>
  • TFP-WebServer/WebServer/WebServer.csproj

    r485 r486  
    151151    <Compile Include="src\WebAPI\APIs\WorldState\Hostile.cs" />
    152152    <Compile Include="src\WebAPI\APIs\WorldState\Player.cs" />
     153    <Compile Include="src\WebAPI\EApiErrorCode.cs" />
    153154    <Compile Include="src\WebAPI\JsonCommons.cs" />
    154155    <Compile Include="src\WebAPI\Null.cs" />
  • TFP-WebServer/WebServer/src/WebAPI/APIs/Command.cs

    r485 r486  
    9292                protected override void HandleRestPost (RequestContext _context, IDictionary<string, object> _jsonInput, byte[] _jsonInputData) {
    9393                        if (!JsonCommons.TryGetJsonField (_jsonInput, "command", out string commandString)) {
    94                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_COMMAND");
     94                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_COMMAND);
    9595                                return;
    9696                        }
     
    115115
    116116                        if (command == null) {
    117                                 SendEmptyResponse (_context, HttpStatusCode.NotFound, _jsonInputData, "UNKNOWN_COMMAND");
     117                                SendEmptyResponse (_context, HttpStatusCode.NotFound, _jsonInputData, EApiErrorCode.UNKNOWN_COMMAND);
    118118                                return;
    119119                        }
     
    122122
    123123                        if (_context.PermissionLevel > commandPermissionLevel) {
    124                                 SendEmptyResponse (_context, HttpStatusCode.Forbidden, _jsonInputData, "NO_PERMISSION");
     124                                SendEmptyResponse (_context, HttpStatusCode.Forbidden, _jsonInputData, EApiErrorCode.NO_PERMISSION);
    125125                                return;
    126126                        }
  • TFP-WebServer/WebServer/src/WebAPI/APIs/Permissions/Blacklist.cs

    r485 r486  
    6868
    6969                        if (!JsonCommons.TryReadDateTime (_jsonInput, propertyBannedUntil, out DateTime bannedUntil)) {
    70                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_BANNED_UNTIL");
     70                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_OR_INVALID_BANNED_UNTIL);
    7171                                return;
    7272                        }
     
    9696
    9797                        if (string.IsNullOrEmpty (id)) {
    98                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_USER");
     98                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_USER);
    9999                                return false;
    100100                        }
    101101
    102102                        if (!PlatformUserIdentifierAbs.TryFromCombinedString (id, out _userId)) {
    103                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_USER");
     103                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.INVALID_USER);
    104104                                return false;
    105105                        }
  • TFP-WebServer/WebServer/src/WebAPI/APIs/Permissions/CommandPermissions.cs

    r434 r486  
    5858
    5959                        if (string.IsNullOrEmpty (id)) {
    60                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_COMMAND");
     60                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_COMMAND);
    6161                                return;
    6262                        }
     
    6464                        IConsoleCommand cmd = SdtdConsole.Instance.GetCommand (id);
    6565                        if (cmd == null) {
    66                                 SendEmptyResponse (_context, HttpStatusCode.NotFound, _jsonInputData, "INVALID_COMMAND");
     66                                SendEmptyResponse (_context, HttpStatusCode.NotFound, _jsonInputData, EApiErrorCode.UNKNOWN_COMMAND);
    6767                                return;
    6868                        }
    6969
    7070                        if (!JsonCommons.TryGetJsonField (_jsonInput, propertyPermissionLevel, out int permissionLevel)) {
    71                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_PERMISSION_LEVEL");
     71                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_OR_INVALID_PERMISSION_LEVEL);
    7272                                return;
    7373                        }
  • TFP-WebServer/WebServer/src/WebAPI/APIs/Permissions/CommandPermissions.openapi.yaml

    r485 r486  
    120120          $ref: './openapi.yaml#/components/responses/HttpEmptyEnvelopedResponse'
    121121        404:
    122           description: Specified command not found, errorCode will be 'INVALID_COMMAND'
     122          description: Specified command not found, errorCode will be 'UNKNOWN_COMMAND'
    123123          $ref: './openapi.yaml#/components/responses/HttpEmptyEnvelopedResponse'
    124124        403:
  • TFP-WebServer/WebServer/src/WebAPI/APIs/Permissions/RegisterUser.cs

    r485 r486  
    2727
    2828                        if (string.IsNullOrEmpty (token)) {
    29                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, null, "NO_TOKEN");
     29                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, null, EApiErrorCode.MISSING_TOKEN);
    3030                                return;
    3131                        }
    3232
    3333                        if (!UserRegistrationTokens.TryValidate (token, out UserRegistrationTokens.RegistrationData regData)) {
    34                                 SendEmptyResponse (_context, HttpStatusCode.NotFound, null, "INVALID_OR_EXPIRED_TOKEN");
     34                                SendEmptyResponse (_context, HttpStatusCode.NotFound, null, EApiErrorCode.INVALID_OR_EXPIRED_TOKEN);
    3535                                return;
    3636                        }
     
    5151                protected override void HandleRestPost (RequestContext _context, IDictionary<string, object> _jsonInput, byte[] _jsonInputData) {
    5252                        if (!JsonCommons.TryGetJsonField (_jsonInput, "token", out string token)) {
    53                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "MISSING_TOKEN");
     53                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.MISSING_TOKEN);
    5454                                return;
    5555                        }
    5656
    5757                        if (!JsonCommons.TryGetJsonField (_jsonInput, "username", out string username)) {
    58                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "MISSING_USERNAME");
     58                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.MISSING_USERNAME);
    5959                                return;
    6060                        }
    6161
    6262                        if (!JsonCommons.TryGetJsonField (_jsonInput, "password", out string password)) {
    63                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "MISSING_PASSWORD");
     63                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.MISSING_PASSWORD);
    6464                                return;
    6565                        }
    6666
    6767                        if (!UserRegistrationTokens.TryValidate (token, out UserRegistrationTokens.RegistrationData regData)) {
    68                                 SendEmptyResponse (_context, HttpStatusCode.Unauthorized, null, "INVALID_OR_EXPIRED_TOKEN");
     68                                SendEmptyResponse (_context, HttpStatusCode.Unauthorized, null, EApiErrorCode.INVALID_OR_EXPIRED_TOKEN);
    6969                                return;
    7070                        }
    7171
    7272                        if (!userValidationRegex.IsMatch (username)) {
    73                                 SendEmptyResponse (_context, HttpStatusCode.Unauthorized, _jsonInputData, "INVALID_USERNAME");
     73                                SendEmptyResponse (_context, HttpStatusCode.Unauthorized, _jsonInputData, EApiErrorCode.INVALID_USERNAME);
    7474                                return;
    7575                        }
    7676                       
    7777                        if (!passValidationRegex.IsMatch (password)) {
    78                                 SendEmptyResponse (_context, HttpStatusCode.Unauthorized, _jsonInputData, "INVALID_PASSWORD");
     78                                SendEmptyResponse (_context, HttpStatusCode.Unauthorized, _jsonInputData, EApiErrorCode.INVALID_PASSWORD);
    7979                                return;
    8080                        }
     
    8686                                    !Equals (existingMapping.CrossPlatformUser, regData.CrossPlatformUserId)) {
    8787                                        // Username already in use by another player
    88                                         SendEmptyResponse (_context, HttpStatusCode.Unauthorized, _jsonInputData, "DUPLICATE_USERNAME");
     88                                        SendEmptyResponse (_context, HttpStatusCode.Unauthorized, _jsonInputData, EApiErrorCode.DUPLICATE_USERNAME);
    8989                                        return;
    9090                                }
  • TFP-WebServer/WebServer/src/WebAPI/APIs/Permissions/RegisterUser.openapi.yaml

    r462 r486  
    102102                  - meta
    103103        400:
    104           description: Invalid request, errorCode will be 'NO_TOKEN'
     104          description: Invalid request, errorCode will be 'MISSING_TOKEN'
    105105          $ref: './openapi.yaml#/components/responses/HttpEmptyEnvelopedResponse'
    106106        404:
  • TFP-WebServer/WebServer/src/WebAPI/APIs/Permissions/UserPermissions.cs

    r434 r486  
    111111                        if (userId != null) {
    112112                                if (!JsonCommons.TryGetJsonField (_jsonInput, propertyPermissionLevel, out int permissionLevel)) {
    113                                         SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_PERMISSION_LEVEL");
     113                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_OR_INVALID_PERMISSION_LEVEL);
    114114                                        return;
    115115                                }
     
    120120                        } else {
    121121                                if (!JsonCommons.TryGetJsonField (_jsonInput, propertyPermissionLevelMods, out int permissionLevelMods)) {
    122                                         SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_PERMISSION_LEVEL_MODS");
     122                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_OR_INVALID_PERMISSION_LEVEL_MODS);
    123123                                        return;
    124124                                }
    125125
    126126                                if (!JsonCommons.TryGetJsonField (_jsonInput, propertyPermissionLevelNormal, out int permissionLevelNormal)) {
    127                                         SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_PERMISSION_LEVEL_NORMAL");
     127                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_OR_INVALID_PERMISSION_LEVEL_NORMAL);
    128128                                        return;
    129129                                }
  • TFP-WebServer/WebServer/src/WebAPI/APIs/Permissions/WebApiTokens.cs

    r434 r486  
    6262
    6363                        if (string.IsNullOrEmpty (id)) {
    64                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_NAME");
     64                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_NAME);
    6565                                return;
    6666                        }
    6767
    6868                        if (!JsonCommons.TryGetJsonField (_jsonInput, propertySecret, out string secret)) {
    69                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_SECRET");
     69                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_OR_INVALID_SECRET);
    7070                                return;
    7171                        }
    7272
    7373                        if (!JsonCommons.TryGetJsonField (_jsonInput, propertyPermissionLevel, out int permissionLevel)) {
    74                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_PERMISSION_LEVEL");
     74                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_OR_INVALID_PERMISSION_LEVEL);
    7575                                return;
    7676                        }
  • TFP-WebServer/WebServer/src/WebAPI/APIs/Permissions/WebModules.cs

    r435 r486  
    107107
    108108                        if (string.IsNullOrEmpty (id)) {
    109                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_MODULE");
     109                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_MODULE);
    110110                                return;
    111111                        }
    112112
    113113                        if (!AdminWebModules.Instance.IsKnownModule (id)) {
    114                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_MODULE");
     114                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.INVALID_MODULE);
    115115                                return;
    116116                        }
     
    120120                        if (_jsonInput.ContainsKey (propertyPermissionLevelGlobal)) {
    121121                                if (!JsonCommons.TryGetJsonField (_jsonInput, propertyPermissionLevelGlobal, out int permissionLevelGlobal)) {
    122                                         SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_PERMISSION_LEVEL_GLOBAL");
     122                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.INVALID_PERMISSION_LEVEL_GLOBAL);
    123123                                        return;
    124124                                }
     
    129129                        if (_jsonInput.TryGetValue (propertyPermissionLevelPerMethod, out object perLevelField)) {
    130130                                if (perLevelField is not IDictionary<string, object> perLevelObj) {
    131                                         SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_PERMISSION_LEVEL_PER_METHOD_PROPERTY");
     131                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.INVALID_PERMISSION_LEVEL_PER_METHOD_PROPERTY);
    132132                                        return;
    133133                                }
     
    135135                                foreach ((string property, object valueObj) in perLevelObj) {
    136136                                        if (!EnumUtils.TryParse (property, out ERequestMethod method, true)) {
    137                                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_METHOD_NAME");
     137                                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.INVALID_METHOD_NAME);
    138138                                                return;
    139139                                        }
    140140
    141141                                        if (module.LevelPerMethod == null || module.LevelPerMethod [(int)method] == AdminWebModules.MethodLevelNotSupported) {
    142                                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "UNSUPPORTED_METHOD");
     142                                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.UNSUPPORTED_METHOD);
    143143                                                return;
    144144                                        }
     
    148148                                        if (valueObj is string valueString) {
    149149                                                if (!valueString.EqualsCaseInsensitive (AdminWebModules.MethodLevelInheritKeyword)) {
    150                                                         SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_PERMISSION_STRING");
     150                                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.INVALID_PERMISSION_STRING);
    151151                                                        return;
    152152                                                }                                               
     
    157157                                                        permissionLevel = (int)valueDbl;
    158158                                                } catch (Exception) {
    159                                                         SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_PERMISSION_VALUE");
     159                                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.INVALID_PERMISSION_VALUE);
    160160                                                        return;
    161161                                                }
    162162                                        } else {
    163                                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_PERMISSION_VALUE_TYPE");
     163                                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.INVALID_PERMISSION_VALUE_TYPE);
    164164                                                return;
    165165                                        }
  • TFP-WebServer/WebServer/src/WebAPI/APIs/Permissions/WebUsers.cs

    r434 r486  
    6464
    6565                        if (!JsonCommons.TryGetJsonField (_jsonInput, propertyPassword, out string password)) {
    66                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_PASSWORD");
     66                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_OR_INVALID_PASSWORD);
    6767                                return;
    6868                        }
    6969
    7070                        if (!JsonCommons.TryGetJsonField (_jsonInput, propertyPlatformUserId, out IDictionary<string, object> userIdField)) {
    71                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_PLATFORM_USER_ID");
     71                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_PLATFORM_USER_ID);
    7272                                return;
    7373                        }
    7474
    7575                        if (!JsonCommons.TryReadPlatformUserIdentifier (userIdField, out PlatformUserIdentifierAbs platformUserId)) {
    76                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_PLATFORM_USER_ID");
     76                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.INVALID_PLATFORM_USER_ID);
    7777                                return;
    7878                        }
     
    8282                        if (JsonCommons.TryGetJsonField (_jsonInput, propertyCrossplatformUserId, out userIdField)) {
    8383                                if (!JsonCommons.TryReadPlatformUserIdentifier (userIdField, out crossplatformUserId)) {
    84                                         SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "INVALID_CROSSPLATFORM_USER_ID");
     84                                        SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.INVALID_CROSSPLATFORM_USER_ID);
    8585                                        return;
    8686                                }
     
    107107
    108108                        if (string.IsNullOrEmpty (id)) {
    109                                 SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_USERNAME");
     109                                SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, EApiErrorCode.NO_USERNAME);
    110110                                return false;
    111111                        }
  • TFP-WebServer/WebServer/src/WebAPI/AbsRestApi.cs

    r434 r486  
    174174                }
    175175
     176                protected static void SendEmptyResponse (RequestContext _context, HttpStatusCode _statusCode, byte[] _jsonInputData, EApiErrorCode _errorCode, Exception _exception = null) {
     177                        SendEmptyResponse (_context, _statusCode, _jsonInputData, _errorCode.ToStringCached (), _exception);
     178                }
     179
    176180#endregion
    177181        }
Note: See TracChangeset for help on using the changeset viewer.