diff --git a/Pilz.Net/Api/ApiResult.cs b/Pilz.Net/Api/ApiResult.cs index 5f51a6a..1f22287 100644 --- a/Pilz.Net/Api/ApiResult.cs +++ b/Pilz.Net/Api/ApiResult.cs @@ -23,4 +23,6 @@ public record class ApiResult( public static ApiResult ServiceUnavailable() => new(HttpStatusCode.ServiceUnavailable); public static ApiResult UnavailableForLegalReasons() => new(HttpStatusCode.UnavailableForLegalReasons); + + public static ApiResult InternalServerError() => new(HttpStatusCode.InternalServerError); } \ No newline at end of file diff --git a/Pilz.Net/Api/ApiServer.cs b/Pilz.Net/Api/ApiServer.cs index d54577d..3c720f4 100644 --- a/Pilz.Net/Api/ApiServer.cs +++ b/Pilz.Net/Api/ApiServer.cs @@ -159,6 +159,8 @@ public class ApiServer(string apiUrl) : IApiServer isAuthenticated = CheckAuthentication(authKeyDecoded); else authKeyDecoded = null!; + if (attribute.RequiesAuth && !isAuthenticated) + return new(ApiResult.Unauthorized(), null); // Get required infos Log.Debug("Find other infos"); @@ -177,7 +179,7 @@ public class ApiServer(string apiUrl) : IApiServer Log.Debug("Invoke handler"); var parameters = BuildParameters(handler, () => message, () => new(message, isAuthenticated, authKeyDecoded)); if (handler.DynamicInvoke(parameters) is not ApiResult result) - return null; + return new(ApiResult.InternalServerError(), null); // Return result without message Log.Debug("Check message"); @@ -187,10 +189,10 @@ public class ApiServer(string apiUrl) : IApiServer // Serializer Log.Debug("Serialize message"); if (serializer.Serialize(result.Message) is not string resultStr) - return null; + return new(ApiResult.InternalServerError(), null); // Return result with message - Log.Debug("Finish result"); + Log.Debug("Complete result"); return new(result, resultStr); }