regex checked by hyperscan directly with error messages

This commit is contained in:
Domingo Dirutigliano
2025-02-18 21:20:19 +01:00
parent a87003d875
commit 5ef38df66a
5 changed files with 70 additions and 8 deletions

View File

@@ -1,5 +1,4 @@
from base64 import b64decode
import re
import secrets
import sqlite3
from fastapi import APIRouter, Response, HTTPException
@@ -9,6 +8,7 @@ from modules.nfregex.firewall import STATUS, FirewallManager
from utils.sqlite import SQLite
from utils import ip_parse, refactor_name, socketio_emit, PortType
from utils.models import ResetRequest, StatusMessageModel
from modules.nfregex.firegex import test_regex_validity
class ServiceModel(BaseModel):
status: str
@@ -299,10 +299,9 @@ async def regex_disable(regex_id: int):
@app.post('/regexes', response_model=StatusMessageModel)
async def add_new_regex(form: RegexAddForm):
"""Add a new regex"""
try:
re.compile(b64decode(form.regex))
except Exception:
raise HTTPException(status_code=400, detail="Invalid regex")
regex_correct, message = await test_regex_validity(b64decode(form.regex))
if not regex_correct:
raise HTTPException(status_code=400, detail=f"Invalid regex: {message}")
try:
db.query("INSERT INTO regexes (service_id, regex, mode, is_case_sensitive, active ) VALUES (?, ?, ?, ?, ?);",
form.service_id, form.regex, form.mode, form.is_case_sensitive, True if form.active is None else form.active )