feat: add Pydantic schemas
This commit is contained in:
206
backend/app/schemas.py
Normal file
206
backend/app/schemas.py
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
from typing import Optional
|
||||||
|
from pydantic import BaseModel, EmailStr
|
||||||
|
|
||||||
|
|
||||||
|
# --- Auth ---
|
||||||
|
class UserCreate(BaseModel):
|
||||||
|
username: str
|
||||||
|
email: EmailStr
|
||||||
|
password: str
|
||||||
|
|
||||||
|
|
||||||
|
class UserOut(BaseModel):
|
||||||
|
id: int
|
||||||
|
username: str
|
||||||
|
email: str
|
||||||
|
is_active: bool
|
||||||
|
|
||||||
|
model_config = {"from_attributes": True}
|
||||||
|
|
||||||
|
|
||||||
|
class LoginRequest(BaseModel):
|
||||||
|
username: str
|
||||||
|
password: str
|
||||||
|
|
||||||
|
|
||||||
|
# --- 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: int
|
||||||
|
options: str = ""
|
||||||
|
|
||||||
|
|
||||||
|
class InterfaceUpdate(BaseModel):
|
||||||
|
name: Optional[str] = None
|
||||||
|
zone_id: Optional[int] = None
|
||||||
|
options: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
|
class InterfaceOut(BaseModel):
|
||||||
|
id: int
|
||||||
|
config_id: int
|
||||||
|
name: str
|
||||||
|
zone_id: int
|
||||||
|
options: str
|
||||||
|
|
||||||
|
model_config = {"from_attributes": True}
|
||||||
|
|
||||||
|
|
||||||
|
# --- Policy ---
|
||||||
|
class PolicyCreate(BaseModel):
|
||||||
|
src_zone_id: int
|
||||||
|
dst_zone_id: int
|
||||||
|
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: int
|
||||||
|
dst_zone_id: 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}
|
||||||
|
|
||||||
|
|
||||||
|
# --- Masq ---
|
||||||
|
class MasqCreate(BaseModel):
|
||||||
|
source_network: str
|
||||||
|
out_interface: str
|
||||||
|
to_address: str = ""
|
||||||
|
comment: str = ""
|
||||||
|
|
||||||
|
|
||||||
|
class MasqUpdate(BaseModel):
|
||||||
|
source_network: Optional[str] = None
|
||||||
|
out_interface: Optional[str] = None
|
||||||
|
to_address: Optional[str] = None
|
||||||
|
comment: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
|
class MasqOut(BaseModel):
|
||||||
|
id: int
|
||||||
|
config_id: int
|
||||||
|
source_network: str
|
||||||
|
out_interface: str
|
||||||
|
to_address: str
|
||||||
|
comment: str
|
||||||
|
|
||||||
|
model_config = {"from_attributes": True}
|
||||||
|
|
||||||
|
|
||||||
|
# --- Generate ---
|
||||||
|
class GenerateOut(BaseModel):
|
||||||
|
zones: str
|
||||||
|
interfaces: str
|
||||||
|
policy: str
|
||||||
|
rules: str
|
||||||
|
masq: str
|
||||||
Reference in New Issue
Block a user