passthrow HttpListenerContext

This commit is contained in:
2025-05-14 15:02:52 +02:00
parent 07f4dd2dca
commit c46b968562
2 changed files with 11 additions and 10 deletions

View File

@@ -1,13 +1,14 @@
namespace Pilz.Net.Api; using System.Net;
public class ApiAuthCheckEventArgs(string authKey, Delegate? handler) : EventArgs namespace Pilz.Net.Api;
public class ApiAuthCheckEventArgs(string authKey, Delegate? handler, HttpListenerContext context) : EventArgs
{ {
private bool hasDenyed; private bool hasDenyed;
public HttpListenerContext Context { get; } = context;
public Delegate? Handler { get; } = handler; public Delegate? Handler { get; } = handler;
public string AuthKey { get; } = authKey; public string AuthKey { get; } = authKey;
public bool Valid { get; set; } public bool Valid { get; set; }
public void Deny() public void Deny()

View File

@@ -437,7 +437,7 @@ public class ApiServer : IApiServer
// Handle message // Handle message
Log.Debug("Handle mssage"); Log.Debug("Handle mssage");
if (HandleMessage(context, path, query, context.Request.HttpMethod, handler, contentJson, authKey) is not PrivateApiResult result) if (HandleMessage(context, path, query, handler, contentJson, authKey) is not PrivateApiResult result)
{ {
Log.Warn("Request couldn't be handled"); Log.Warn("Request couldn't be handled");
close(); close();
@@ -470,13 +470,13 @@ public class ApiServer : IApiServer
close(); close();
} }
protected virtual PrivateApiResult? HandleMessage(HttpListenerContext context, string url, string? query, string method, PrivateMessageHandler handler, string? json, string? authKey) protected virtual PrivateApiResult? HandleMessage(HttpListenerContext context, string url, string? query, PrivateMessageHandler handler, string? json, string? authKey)
{ {
// Check authentication // Check authentication
Log.Debug("Check authentication"); Log.Debug("Check authentication");
var isAuthenticated = false; var isAuthenticated = false;
if (!string.IsNullOrWhiteSpace(authKey) && DecodeAuthKey(authKey) is string authKeyDecoded) if (!string.IsNullOrWhiteSpace(authKey) && DecodeAuthKey(authKey) is string authKeyDecoded)
isAuthenticated = CheckAuthentication(authKeyDecoded, handler.Handler); isAuthenticated = CheckAuthentication(authKeyDecoded, handler.Handler, context);
else else
authKeyDecoded = null!; authKeyDecoded = null!;
if (handler.Attribute.RequiesAuth && !isAuthenticated) if (handler.Attribute.RequiesAuth && !isAuthenticated)
@@ -497,7 +497,7 @@ public class ApiServer : IApiServer
// Invoke handler // Invoke handler
Log.Debug("Invoke handler"); Log.Debug("Invoke handler");
var parameters = BuildParameters(url, query, handler, () => message, () => new(message, isAuthenticated, authKeyDecoded, url, method, context)); var parameters = BuildParameters(url, query, handler, () => message, () => new(message, isAuthenticated, authKeyDecoded, url, context.Request.HttpMethod, context));
if (handler.Handler.DynamicInvoke(parameters) is not ApiResult result) if (handler.Handler.DynamicInvoke(parameters) is not ApiResult result)
return new(ApiResult.InternalServerError(), null); return new(ApiResult.InternalServerError(), null);
@@ -573,11 +573,11 @@ public class ApiServer : IApiServer
return Serializer; return Serializer;
} }
protected virtual bool CheckAuthentication(string authKey, Delegate? handler) protected virtual bool CheckAuthentication(string authKey, Delegate? handler, HttpListenerContext context)
{ {
if (OnCheckAuthentication != null) if (OnCheckAuthentication != null)
{ {
var args = new ApiAuthCheckEventArgs(authKey, handler); var args = new ApiAuthCheckEventArgs(authKey, handler, context);
OnCheckAuthentication?.Invoke(this, args); OnCheckAuthentication?.Invoke(this, args);
return args.Valid; return args.Valid;
} }