Ignore:
Timestamp:
Aug 11, 2021, 6:22:03 PM (3 years ago)
Author:
alloc
Message:

Web:

  • Added SSE (ServerSentEvents) subsystem
  • Added log endpoint to SSE. Less heavy weight and more responsive way of watching the server log
  • Bunch of refactoring
File:
1 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/MapRendering/Web/Handlers/ApiHandler.cs

    r351 r367  
    44using System.Reflection;
    55using AllocsFixes.NetConnections.Servers.Web.API;
    6 using UnityEngine.Profiling;
    76
    87namespace AllocsFixes.NetConnections.Servers.Web.Handlers {
    98        public class ApiHandler : PathHandler {
    109                private readonly Dictionary<string, WebAPI> apis = new CaseInsensitiveStringDictionary<WebAPI> ();
    11                 private readonly string staticPart;
    1210
    13                 public ApiHandler (string _staticPart, string _moduleName = null) : base (_moduleName) {
    14                         staticPart = _staticPart;
     11                public ApiHandler (string _moduleName = null) : base (_moduleName) {
    1512
    1613                        foreach (Type t in Assembly.GetExecutingAssembly ().GetTypes ()) {
     
    1916                                        if (ctor != null) {
    2017                                                WebAPI apiInstance = (WebAPI) ctor.Invoke (new object [0]);
    21                                                 addApi (apiInstance.Name, apiInstance);
     18                                                addApi (apiInstance);
    2219                                        }
    2320                                }
    2421                        }
    2522
    26                         // Add dummy types
    27                         Type dummy_t = typeof (Null);
    28                         ConstructorInfo dummy_ctor = dummy_t.GetConstructor (new Type [0]);
    29                         if (dummy_ctor != null) {
    30                                 WebAPI dummy_apiInstance = (WebAPI) dummy_ctor.Invoke (new object[0]);
    31 
    32                                 // Permissions that don't map to a real API
    33                                 addApi ("viewallclaims", dummy_apiInstance);
    34                                 addApi ("viewallplayers", dummy_apiInstance);
    35                         }
     23                        // Permissions that don't map to a real API
     24                        addApi (new Null ("viewallclaims"));
     25                        addApi (new Null ("viewallplayers"));
    3626                }
    3727
    38                 private void addApi (string _apiName, WebAPI _api) {
    39                         apis.Add (_apiName, _api);
    40                         WebPermissions.Instance.AddKnownModule ("webapi." + _apiName, _api.DefaultPermissionLevel ());
     28                private void addApi (WebAPI _api) {
     29                        apis.Add (_api.Name, _api);
     30                        WebPermissions.Instance.AddKnownModule ("webapi." + _api.Name, _api.DefaultPermissionLevel ());
    4131                }
    4232
    4333#if ENABLE_PROFILER
    44                 private static readonly CustomSampler apiHandlerSampler = CustomSampler.Create ("API_Handler");
     34                private static readonly UnityEngine.Profiling.CustomSampler apiHandlerSampler = UnityEngine.Profiling.CustomSampler.Create ("API_Handler");
    4535#endif
    4636
    4737                public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
    4838                        int _permissionLevel) {
    49                         string apiName = _req.Url.AbsolutePath.Remove (0, staticPart.Length);
     39                        string apiName = _req.Url.AbsolutePath.Remove (0, urlBasePath.Length);
    5040
    51                         WebAPI api;
    52                         if (!apis.TryGetValue (apiName, out api)) {
    53                                 Log.Out ("Error in ApiHandler.HandleRequest(): No handler found for API \"" + apiName + "\"");
     41                        if (!apis.TryGetValue (apiName, out WebAPI api)) {
     42                                Log.Out ($"Error in {nameof(ApiHandler)}.HandleRequest(): No handler found for API \"{apiName}\"");
    5443                                _resp.StatusCode = (int) HttpStatusCode.NotFound;
    5544                                return;
    5645                        }
    5746
    58                         if (!AuthorizeForCommand (apiName, _user, _permissionLevel)) {
     47                        if (!AuthorizeForApi (apiName, _permissionLevel)) {
    5948                                _resp.StatusCode = (int) HttpStatusCode.Forbidden;
    6049                                if (_user != null) {
    61                                         //Log.Out ("ApiHandler: user '{0}' not allowed to execute '{1}'", user.SteamID, apiName);
     50                                        //Log.Out ($"{nameof(ApiHandler)}: user '{user.SteamID}' not allowed to execute '{apiName}'");
    6251                                }
    6352
     
    7463#endif
    7564                        } catch (Exception e) {
    76                                 Log.Error ("Error in ApiHandler.HandleRequest(): Handler {0} threw an exception:", api.Name);
     65                                Log.Error ($"Error in {nameof(ApiHandler)}.HandleRequest(): Handler {api.Name} threw an exception:");
    7766                                Log.Exception (e);
    7867                                _resp.StatusCode = (int) HttpStatusCode.InternalServerError;
     
    8069                }
    8170
    82                 private bool AuthorizeForCommand (string _apiName, WebConnection _user, int _permissionLevel) {
     71                private bool AuthorizeForApi (string _apiName, int _permissionLevel) {
    8372                        return WebPermissions.Instance.ModuleAllowedWithLevel ("webapi." + _apiName, _permissionLevel);
    8473                }
Note: See TracChangeset for help on using the changeset viewer.