mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-08-16 07:56:12 +03:00
Analog of what we have for Lua, Python support is now added by this commit. This is very experimental.
57 lines
1.3 KiB
Python
Executable File
57 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from __future__ import print_function
|
|
import sys
|
|
|
|
# Needs to be singlenton ?
|
|
class Singleton(object):
|
|
_instances = {}
|
|
"""
|
|
def __new__(class_, *args, **kwargs):
|
|
if class_ not in class_._instances:
|
|
class_._instances[class_] = super(Singleton, class_).__new__(class_, *args, **kwargs)
|
|
return class_._instances[class_]
|
|
"""
|
|
|
|
class ModSecurity():
|
|
def __init__(self):
|
|
self.default_attr = ["default_attr", "name", "modsecCore"]
|
|
self.name = None
|
|
self.modsecCore = None
|
|
|
|
def setModSecurityCore(self, cb):
|
|
self.modsecCore = cb
|
|
self.log(8, "Log attached");
|
|
return True
|
|
|
|
def log(self, level, msg):
|
|
if self.modsecCore == None:
|
|
print("ModSecurity Python: ", str(level) + " " + str(msg), file=sys.stderr)
|
|
else:
|
|
self.modsecCore.log(level, msg)
|
|
return True
|
|
|
|
def __getattribute__(self, key):
|
|
v = None
|
|
try:
|
|
v = object.__getattribute__(self, key)
|
|
if hasattr(v, '__get__'):
|
|
return v.__get__(None, self)
|
|
except:
|
|
if self.modsecCore != None:
|
|
v = self.modsecCore.getVariable(key)
|
|
|
|
return v
|
|
|
|
def __setattr__(self, name, value):
|
|
self.__dict__[name] = value
|
|
|
|
if name not in self.default_attr:
|
|
if self.modsecCore != None:
|
|
self.modsecCore.setVariable("tx." + name, value)
|
|
|
|
|
|
"""
|
|
TODO: transformation
|
|
"""
|