v8.2: Refactor ServiceInstall API validation.

Replaced `ServiceInstallFromApi` with `ServiceInstall` for API validation in installation views and function parameters. Simplified the `ServiceInstall` class by removing duplicate attributes and making list and dict attributes optional.
pull/399/head
Aidaho 2024-10-09 21:08:06 +03:00
parent 7fdc977bc2
commit ddaa3bf2dd
4 changed files with 13 additions and 22 deletions

View File

@ -221,21 +221,12 @@ class ServerInstall(BaseModel):
class ServiceInstall(BaseModel):
cluster_id: Optional[int] = None
servers: List[ServerInstall]
services: Dict[str, HAClusterService]
checker: Optional[bool] = 0
metrics: Optional[bool] = 0
auto_start: Optional[bool] = 0
syn_flood: Optional[bool] = 0
class ServiceInstallFromApi(BaseModel):
checker: Optional[bool] = 0
metrics: Optional[bool] = 0
auto_start: Optional[bool] = 0
syn_flood: Optional[bool] = 0
servers: Optional[List[ServerInstall]] = None
services: Optional[Dict[str, HAClusterService]] = None
checker: Optional[bool] = 0
metrics: Optional[bool] = 0
auto_start: Optional[bool] = 0
syn_flood: Optional[bool] = 0
docker: Optional[bool] = 0

View File

@ -18,7 +18,7 @@ import app.modules.server.server as server_mod
import app.modules.roxywi.common as roxywi_common
from app.modules.server.ssh import return_ssh_keys_path
from app.modules.roxywi.class_models import ServiceInstall, HAClusterRequest, HaproxyGlobalRequest, \
HaproxyDefaultsRequest, HaproxyConfigRequest, ServiceInstallFromApi
HaproxyDefaultsRequest, HaproxyConfigRequest
def generate_udp_inv(listener_id: int, action: str) -> object:
@ -427,7 +427,7 @@ def _create_default_config_in_db(server_id: int) -> None:
add_sql.insert_new_section(server_id, 'listen', 'stats', stats_config)
def install_service(service: str, json_data: Union[str, ServiceInstall, HAClusterRequest, ServiceInstallFromApi], cluster_id: int = None) -> dict:
def install_service(service: str, json_data: Union[str, ServiceInstall, HAClusterRequest], cluster_id: int = None) -> dict:
generate_functions = {
'haproxy': generate_haproxy_inv,
'nginx': generate_service_inv,

View File

@ -662,7 +662,7 @@ $( function() {
});
$("#" + section_type + "_blacklist_checkbox").click(function () {
if ($('#frontend_blacklist_checkbox').is(':checked')) {
if ($("#" + section_type + "_blacklist_checkbox").is(':checked')) {
$("#" + section_type + "_blacklist-hide").show("fast");
$("#" + section_type + "_blacklist-hide-input").attr('required', true);
} else {
@ -672,7 +672,7 @@ $( function() {
});
$("#" + section_type + "_whitelist_checkbox").click(function () {
if ($('#frontend_whitelist_checkbox').is(':checked')) {
if ($("#" + section_type + "_whitelist_checkbox").is(':checked')) {
$("#" + section_type + "_whitelist-hide").show("fast");
$("#" + section_type + "_whitelist-hide-input").attr('required', true);
} else {

View File

@ -10,7 +10,7 @@ import app.modules.db.service as service_sql
import app.modules.service.installation as service_mod
from app.middleware import get_user_params, check_services, page_for_admin, check_group
from app.modules.common.common_classes import SupportClass
from app.modules.roxywi.class_models import ServiceInstallFromApi, IdStrResponse, BaseResponse, ServerInstall, HAClusterService
from app.modules.roxywi.class_models import ServiceInstall, IdStrResponse, BaseResponse, ServerInstall, HAClusterService
from app.views.service.views import ServiceView
@ -81,8 +81,8 @@ class InstallView(MethodView):
methods = ['POST', 'PUT', 'DELETE']
decorators = [jwt_required(), get_user_params(), check_services, page_for_admin(level=3), check_group()]
@validate(body=ServiceInstallFromApi)
def post(self, service: Literal['haproxy', 'nginx', 'apache', 'keepalived'], server_id: Union[int, str, None], body: ServiceInstallFromApi):
@validate(body=ServiceInstall)
def post(self, service: Literal['haproxy', 'nginx', 'apache', 'keepalived'], server_id: Union[int, str, None], body: ServiceInstall):
"""
Install a specific service.
---
@ -147,8 +147,8 @@ class InstallView(MethodView):
return output
return IdStrResponse(id=f'{server_id}-{service}').model_dump(mode='json'), 201
@validate(body=ServiceInstallFromApi)
def put(self, service: Literal['haproxy', 'nginx', 'apache', 'keepalived'], server_id: Union[int, str, None], body: ServiceInstallFromApi):
@validate(body=ServiceInstall)
def put(self, service: Literal['haproxy', 'nginx', 'apache', 'keepalived'], server_id: Union[int, str, None], body: ServiceInstall):
"""
Update service Tools settings.
---