Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
WafAction.cs
1using System;
3using System.Reflection;
4using System.Threading.Tasks;
5using System.Xml;
7using Waher.Events;
10
12{
16 public abstract class WafAction : IWafAction
17 {
18 private static readonly Dictionary<string, IWafAction> actionTypes = GetActionTypes();
19
20 private readonly string id;
21 private readonly WafAction parent;
22 private readonly WebApplicationFirewall document;
23
27 public WafAction()
28 {
29 }
30
37 public WafAction(XmlElement Xml, WafAction Parent, WebApplicationFirewall Document)
38 {
39 this.id = XML.Attribute(Xml, "id");
40 this.parent = Parent;
41 this.document = Document;
42
43 if (!string.IsNullOrEmpty(this.id))
44 Document.RegisterAction(this);
45 }
46
50 public abstract string LocalName { get; }
51
55 public string Id => this.id;
56
60 public WebApplicationFirewall Document => this.document;
61
69 public abstract WafAction Create(XmlElement Xml, WafAction Parent, WebApplicationFirewall Document);
70
71 private static Dictionary<string, IWafAction> GetActionTypes()
72 {
73 Dictionary<string, IWafAction> Result = new Dictionary<string, IWafAction>();
74
75 foreach (Type ActionType in Types.GetTypesImplementingInterface(typeof(IWafAction)))
76 {
77 ConstructorInfo CI = Types.GetDefaultConstructor(ActionType);
78 if (CI is null)
79 continue;
80
81 IWafAction Action = (IWafAction)CI.Invoke(Array.Empty<object>());
82
83 if (Result.ContainsKey(Action.LocalName))
84 Log.Error("Duplicate WAF action definition: " + Action.LocalName);
85 else
86 Result[Action.LocalName] = Action;
87 }
88
89 return Result;
90 }
91
99 public static WafAction Parse(XmlElement Xml, WafAction Parent, WebApplicationFirewall Document)
100 {
101 if (Xml is null)
102 throw new ArgumentNullException(nameof(Xml));
103
104 if (Xml.NamespaceURI != WebApplicationFirewall.Namespace)
105 throw new Exception("Invalid WAF namespace.");
106
107 if (!actionTypes.TryGetValue(Xml.LocalName, out IWafAction Action))
108 throw new Exception("Unrecognized WAF action: " + Xml.LocalName);
109
110 return Action.Create(Xml, Parent, Document);
111 }
112
116 public virtual void Prepare()
117 {
118 // Do nothing by default.
119 }
120
126 public abstract Task<WafResult?> Review(ProcessingState State);
127
131 protected static readonly TimeSpan fiveMinutes = TimeSpan.FromMinutes(5);
132 }
133}
Helps with common XML-related tasks.
Definition: XML.cs:21
static string Attribute(XmlElement E, string Name)
Gets the value of an XML attribute.
Definition: XML.cs:1062
Static class managing the application event log. Applications and services log events on this static ...
Definition: Log.cs:14
static void Error(string Message, string Object, string Actor, string EventId, EventLevel Level, string Facility, string Module, string StackTrace, params KeyValuePair< string, object >[] Tags)
Logs an error event.
Definition: Log.cs:692
Static class that dynamically manages types and interfaces available in the runtime environment.
Definition: Types.cs:15
static Type[] GetTypesImplementingInterface(string InterfaceFullName)
Gets all types implementing a given interface.
Definition: Types.cs:85
static ConstructorInfo GetDefaultConstructor(Type Type)
Gets the default constructor of a type, if one exists.
Definition: Types.cs:1742
Contains the current state of a review process.
Abstract base class for Web Application Firewall actions.
Definition: WafAction.cs:17
abstract string LocalName
XML Local Name for the XML element defining the action.
Definition: WafAction.cs:50
static WafAction Parse(XmlElement Xml, WafAction Parent, WebApplicationFirewall Document)
Parses an XML Element defining a WAF action.
Definition: WafAction.cs:99
WebApplicationFirewall Document
Web Application Firewall document.
Definition: WafAction.cs:60
abstract Task< WafResult?> Review(ProcessingState State)
Reviews the processing state, and returns a WAF result, if any.
WafAction(XmlElement Xml, WafAction Parent, WebApplicationFirewall Document)
Abstract base class for Web Application Firewall actions.
Definition: WafAction.cs:37
virtual void Prepare()
Prepares the node for processing.
Definition: WafAction.cs:116
WafAction()
Abstract base class for Web Application Firewall actions.
Definition: WafAction.cs:27
string Id
ID of action in document, if any.
Definition: WafAction.cs:55
abstract WafAction Create(XmlElement Xml, WafAction Parent, WebApplicationFirewall Document)
Creates a WAF action from its XML definition.
static readonly TimeSpan fiveMinutes
Five minutes time span.
Definition: WafAction.cs:131
Web Application Firewall for HttpServer.
const string Namespace
http://waher.se/Schema/WAF.xsd
interface for Web Application Firewall actions.
Definition: IWafAction.cs:11