mirror of
https://github.com/lnbits/lnbits.git
synced 2025-04-07 03:18:10 +02:00
feat: basic filter
This commit is contained in:
parent
96649fb31c
commit
bce5628648
@ -1,8 +1,8 @@
|
||||
from typing import Optional
|
||||
|
||||
from lnbits.core.db import db
|
||||
from lnbits.core.models import AuditEntry
|
||||
from lnbits.db import Connection
|
||||
from lnbits.core.models import AuditEntry, AuditFilters
|
||||
from lnbits.db import Connection, Filters, Page
|
||||
|
||||
|
||||
async def create_audit_entry(
|
||||
@ -10,3 +10,16 @@ async def create_audit_entry(
|
||||
conn: Optional[Connection] = None,
|
||||
) -> None:
|
||||
await (conn or db).insert("audit", entry)
|
||||
|
||||
|
||||
async def get_audit_entries(
|
||||
filters: Optional[Filters[AuditFilters]] = None,
|
||||
conn: Optional[Connection] = None,
|
||||
) -> Page[AuditEntry]:
|
||||
return await (conn or db).fetch_page(
|
||||
"SELECT * from audit",
|
||||
[],
|
||||
{},
|
||||
filters=filters,
|
||||
model=AuditEntry,
|
||||
)
|
||||
|
@ -1,4 +1,4 @@
|
||||
from .audit import AuditEntry
|
||||
from .audit import AuditEntry, AuditFilters
|
||||
from .lnurl import CreateLnurl, CreateLnurlAuth, PayLnurlWData
|
||||
from .misc import (
|
||||
BalanceDelta,
|
||||
@ -44,6 +44,7 @@ from .webpush import CreateWebPushSubscription, WebPushSubscription
|
||||
__all__ = [
|
||||
# audit
|
||||
"AuditEntry",
|
||||
"AuditFilters",
|
||||
# lnurl
|
||||
"CreateLnurl",
|
||||
"CreateLnurlAuth",
|
||||
|
@ -5,6 +5,7 @@ from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from lnbits.db import FilterModel
|
||||
from lnbits.settings import settings
|
||||
|
||||
|
||||
@ -23,8 +24,27 @@ class AuditEntry(BaseModel):
|
||||
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
|
||||
|
||||
def __init__(self, **data):
|
||||
super.__init__(**data)
|
||||
if settings.lnbits_audit_retention_days > 0:
|
||||
self.delete_at = self.created_at + timedelta(
|
||||
days=settings.lnbits_audit_retention_days
|
||||
)
|
||||
super().__init__(**data)
|
||||
retention_days = max(0, settings.lnbits_audit_retention_days) or 365
|
||||
self.delete_at = self.created_at + timedelta(days=retention_days)
|
||||
|
||||
|
||||
class AuditFilters(FilterModel):
|
||||
__search_fields__ = [
|
||||
"ip_address",
|
||||
"user_id",
|
||||
"path",
|
||||
"route_path",
|
||||
"request_method",
|
||||
"response_code",
|
||||
]
|
||||
__sort_fields__ = [
|
||||
"duration",
|
||||
]
|
||||
|
||||
ip_address: Optional[str] = None
|
||||
user_id: Optional[str] = None
|
||||
path: Optional[str] = None
|
||||
route_path: Optional[str] = None
|
||||
request_method: Optional[str] = None
|
||||
response_code: Optional[str] = None
|
||||
|
@ -527,7 +527,9 @@ class AuditSettings(LNbitsSettings):
|
||||
|
||||
# List of HTTP methods to be included. Empty lists means all.
|
||||
# Options (case-sensitive): GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS
|
||||
lnbits_audit_http_methods: list[str] = Field(default=[])
|
||||
lnbits_audit_http_methods: list[str] = Field(
|
||||
default=["POST", "PUT", "PATCH", "DELETE"]
|
||||
)
|
||||
|
||||
# List of HTTP codes to be included (regex match). Empty lists means all.
|
||||
lnbits_audit_http_response_codes: list[str] = Field(default=[])
|
||||
|
Loading…
x
Reference in New Issue
Block a user