| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- """IP条目池维护接口。"""
- from __future__ import annotations
- from flask import request
- from dms.api.v1.blueprint import api_v1
- from dms.common.errors import InvalidArgumentError
- from dms.common.pagination import PageRequest
- from dms.common.response import success_response
- from dms.security.decorators import admin_required, bearer_auth_required
- from dms.services.ip_entry_service import (
- create_ip_entry,
- delete_ip_entry,
- list_ip_entries,
- update_ip_entry,
- )
- def _integer_query(name: str, default: int) -> int:
- raw_value = request.args.get(name)
- if raw_value is None or raw_value == "":
- return default
- try:
- return int(raw_value)
- except ValueError as exc:
- raise InvalidArgumentError(f"{name}必须是整数") from exc
- def _json_body():
- if not request.is_json:
- raise InvalidArgumentError("请求体必须是JSON对象")
- body = request.get_json(silent=True)
- if not isinstance(body, dict):
- raise InvalidArgumentError("请求体必须是JSON对象")
- return body
- def _parse_entry_id(value: str) -> int:
- if not value.isdecimal() or int(value) <= 0:
- raise InvalidArgumentError("id必须是正整数形式的字符串ID")
- return int(value)
- def _parse_delete_row_version(value: str | None) -> int:
- if value is None or not value.isdecimal():
- raise InvalidArgumentError("rowVersion必须是非负整数")
- return int(value)
- @api_v1.get("/ip-entries")
- @bearer_auth_required
- @admin_required
- def ip_entries():
- return success_response(
- list_ip_entries(
- keyword=request.args.get("keyword"),
- page_request=PageRequest(
- page=_integer_query("page", 1),
- page_size=_integer_query("pageSize", 20),
- ),
- )
- )
- @api_v1.post("/ip-entries")
- @bearer_auth_required
- @admin_required
- def create_ip_entry_route():
- return success_response(create_ip_entry(_json_body()), status=201)
- @api_v1.put("/ip-entries/<id>")
- @bearer_auth_required
- @admin_required
- def update_ip_entry_route(id: str):
- return success_response(update_ip_entry(_parse_entry_id(id), _json_body()))
- @api_v1.delete("/ip-entries/<id>")
- @bearer_auth_required
- @admin_required
- def delete_ip_entry_route(id: str):
- return success_response(
- delete_ip_entry(
- _parse_entry_id(id),
- _parse_delete_row_version(request.args.get("rowVersion")),
- )
- )
|