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