Files
shorefront/backend/app/schemas.py

247 lines
4.6 KiB
Python

from datetime import datetime
from typing import Optional
from pydantic import BaseModel
# --- Auth ---
class UserOut(BaseModel):
id: int
username: str
email: str
is_active: bool
model_config = {"from_attributes": True}
# --- Config ---
class ConfigCreate(BaseModel):
name: str
description: str = ""
is_active: bool = True
class ConfigUpdate(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
is_active: Optional[bool] = None
class ConfigOut(BaseModel):
id: int
name: str
description: str
is_active: bool
created_at: datetime
updated_at: datetime
owner_id: int
model_config = {"from_attributes": True}
# --- Zone ---
class ZoneCreate(BaseModel):
name: str
type: str
options: str = ""
class ZoneUpdate(BaseModel):
name: Optional[str] = None
type: Optional[str] = None
options: Optional[str] = None
class ZoneOut(BaseModel):
id: int
config_id: int
name: str
type: str
options: str
model_config = {"from_attributes": True}
# --- Interface ---
class InterfaceCreate(BaseModel):
name: str
zone_id: Optional[int] = None
broadcast: str = ""
options: str = ""
class InterfaceUpdate(BaseModel):
name: Optional[str] = None
zone_id: Optional[int] = None
broadcast: Optional[str] = None
options: Optional[str] = None
class InterfaceOut(BaseModel):
id: int
config_id: int
name: str
zone_id: Optional[int]
broadcast: str
options: str
model_config = {"from_attributes": True}
# --- Policy ---
class PolicyCreate(BaseModel):
src_zone_id: Optional[int] = None
dst_zone_id: Optional[int] = None
policy: str
log_level: str = ""
comment: str = ""
position: int = 0
class PolicyUpdate(BaseModel):
src_zone_id: Optional[int] = None
dst_zone_id: Optional[int] = None
policy: Optional[str] = None
log_level: Optional[str] = None
comment: Optional[str] = None
position: Optional[int] = None
class PolicyOut(BaseModel):
id: int
config_id: int
src_zone_id: Optional[int]
dst_zone_id: Optional[int]
policy: str
log_level: str
comment: str
position: int
model_config = {"from_attributes": True}
# --- Rule ---
class RuleCreate(BaseModel):
action: str
src_zone_id: Optional[int] = None
dst_zone_id: Optional[int] = None
src_ip: str = ""
dst_ip: str = ""
proto: str = ""
dport: str = ""
sport: str = ""
comment: str = ""
position: int = 0
class RuleUpdate(BaseModel):
action: Optional[str] = None
src_zone_id: Optional[int] = None
dst_zone_id: Optional[int] = None
src_ip: Optional[str] = None
dst_ip: Optional[str] = None
proto: Optional[str] = None
dport: Optional[str] = None
sport: Optional[str] = None
comment: Optional[str] = None
position: Optional[int] = None
class RuleOut(BaseModel):
id: int
config_id: int
action: str
src_zone_id: Optional[int]
dst_zone_id: Optional[int]
src_ip: str
dst_ip: str
proto: str
dport: str
sport: str
comment: str
position: int
model_config = {"from_attributes": True}
# --- Snat ---
class SnatCreate(BaseModel):
source_network: str
out_interface: str
to_address: str = ""
comment: str = ""
class SnatUpdate(BaseModel):
source_network: Optional[str] = None
out_interface: Optional[str] = None
to_address: Optional[str] = None
comment: Optional[str] = None
class SnatOut(BaseModel):
id: int
config_id: int
source_network: str
out_interface: str
to_address: str
comment: str
model_config = {"from_attributes": True}
# --- Host ---
class HostCreate(BaseModel):
zone_id: int
interface: str
subnet: str
options: str = ""
class HostUpdate(BaseModel):
zone_id: Optional[int] = None
interface: Optional[str] = None
subnet: Optional[str] = None
options: Optional[str] = None
class HostOut(BaseModel):
id: int
config_id: int
zone_id: int
interface: str
subnet: str
options: str
model_config = {"from_attributes": True}
# --- Param ---
class ParamCreate(BaseModel):
name: str
value: str
class ParamUpdate(BaseModel):
name: Optional[str] = None
value: Optional[str] = None
class ParamOut(BaseModel):
id: int
config_id: int
name: str
value: str
model_config = {"from_attributes": True}
# --- Generate ---
class GenerateOut(BaseModel):
zones: str
interfaces: str
policy: str
rules: str
snat: str
hosts: str
params: str