make stuff nonstatic
This commit is contained in:
@@ -2,14 +2,25 @@
|
||||
|
||||
namespace SimpleHttpServer.Types;
|
||||
|
||||
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
|
||||
public abstract class BaseEndpointCheckAttribute : Attribute {
|
||||
|
||||
public BaseEndpointCheckAttribute() { }
|
||||
|
||||
public abstract class InternalEndpointCheckAttribute : Attribute {
|
||||
/// <summary>
|
||||
/// Executed when the endpoint is invoked. The endpoint invocation is skipped if any of the checks fail.
|
||||
/// </summary>
|
||||
/// <returns>True to allow invocation, false to prevent.</returns>
|
||||
public abstract bool Check(HttpListenerRequest req);
|
||||
internal abstract void SetInstance(object? instance);
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
|
||||
public abstract class BaseEndpointCheckAttribute<T> : InternalEndpointCheckAttribute {
|
||||
/// <summary>
|
||||
/// A reference to the instance of the class that this attribute is attached to.
|
||||
/// Will be null iff an class factory was passed in <see cref="HttpServer.RegisterEndpointsFromType{T}(Func{T}?)"/>.
|
||||
/// </summary>
|
||||
protected internal T? EndpointClassInstance { get; internal set; } = default;
|
||||
public BaseEndpointCheckAttribute() { }
|
||||
internal override void SetInstance(object? instance) {
|
||||
if (instance != null)
|
||||
EndpointClassInstance = (T?) instance;
|
||||
}
|
||||
}
|
||||
@@ -7,12 +7,17 @@ internal readonly struct EndpointInvocationInfo {
|
||||
|
||||
internal readonly MethodInfo methodInfo;
|
||||
internal readonly List<QueryParameterInfo> queryParameters;
|
||||
internal readonly BaseEndpointCheckAttribute[] requiredChecks;
|
||||
internal readonly InternalEndpointCheckAttribute[] requiredChecks;
|
||||
/// <summary>
|
||||
/// a reference to the object in which this method is defined (or null if the class is static)
|
||||
/// </summary>
|
||||
internal readonly object? typeInstanceReference;
|
||||
|
||||
public EndpointInvocationInfo(MethodInfo methodInfo, List<QueryParameterInfo> queryParameters, BaseEndpointCheckAttribute[] requiredChecks) {
|
||||
public EndpointInvocationInfo(MethodInfo methodInfo, List<QueryParameterInfo> queryParameters, InternalEndpointCheckAttribute[] requiredChecks, object? typeInstanceReference) {
|
||||
this.methodInfo = methodInfo ?? throw new ArgumentNullException(nameof(methodInfo));
|
||||
this.queryParameters = queryParameters ?? throw new ArgumentNullException(nameof(queryParameters));
|
||||
this.requiredChecks = requiredChecks;
|
||||
this.typeInstanceReference = typeInstanceReference;
|
||||
}
|
||||
|
||||
public readonly bool CheckAll(HttpListenerRequest req) => requiredChecks.All(x => x.Check(req));
|
||||
|
||||
Reference in New Issue
Block a user