Files
2026-07-13 12:31:34 +08:00

174 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
"""
@File : host_api.py
@Date : 2023-07-29
"""
from flask import request, g
from playhouse.shortcuts import model_to_dict
from domain_admin.config import DEFAULT_SSH_PORT
from domain_admin.enums.role_enum import RoleEnum
from domain_admin.log import logger
from domain_admin.model.host_model import HostModel
from domain_admin.service import auth_service
from domain_admin.utils.flask_ext.app_exception import DataNotFoundAppException
@auth_service.permission(role=RoleEnum.USER)
def add_host():
"""
添加主机
:return:
"""
current_user_id = g.user_id
host = request.json['host']
port = request.json.get('port') or DEFAULT_SSH_PORT
user = request.json['user']
auth_type = request.json['auth_type']
private_key = request.json['private_key']
password = request.json['password']
dns_id = request.json.get('dns_id', 0)
row = HostModel.create(
user_id=current_user_id,
host=host,
port=int(port),
user=user,
auth_type=auth_type,
private_key=private_key,
password=password,
dns_id=dns_id
)
return row
@auth_service.permission(role=RoleEnum.USER)
def update_host_by_id():
"""
更新主机
:return:
"""
current_user_id = g.user_id
host_id = request.json['host_id']
host = request.json['host']
port = request.json.get('port') or DEFAULT_SSH_PORT
user = request.json['user']
password = request.json['password']
auth_type = request.json['auth_type']
private_key = request.json['private_key']
dns_id = request.json.get('dns_id', 0)
# check data
host_row = HostModel.select().where(
HostModel.id == host_id,
HostModel.user_id == current_user_id
).first()
if not host_row:
raise DataNotFoundAppException()
HostModel.update(
host=host,
port=int(port),
user=user,
password=password,
auth_type=auth_type,
private_key=private_key,
dns_id=dns_id
).where(
HostModel.id == host_row.id
).execute()
@auth_service.permission(role=RoleEnum.USER)
def get_host_by_id():
"""
获取主机
:return:
"""
current_user_id = g.user_id
host_id = request.json['host_id']
# check data
host_row = HostModel.select().where(
HostModel.id == host_id,
HostModel.user_id == current_user_id
).first()
if not host_row:
raise DataNotFoundAppException()
host_row.password = ''
host_row.private_key = ''
return host_row
@auth_service.permission(role=RoleEnum.USER)
def delete_host_by_id():
"""
移除主机
:return:
"""
current_user_id = g.user_id
host_id = request.json['host_id']
# check data
host_row = HostModel.select().where(
HostModel.id == host_id,
HostModel.user_id == current_user_id
).first()
if not host_row:
raise DataNotFoundAppException()
return HostModel.delete_by_id(host_row.id)
@auth_service.permission(role=RoleEnum.USER)
def get_host_list():
"""
主机列表
:return:
"""
current_user_id = g.user_id
page = request.json.get('page', 1)
size = request.json.get('size', 10)
keyword = request.json.get('keyword')
host = request.json.get('host')
query = HostModel.select().where(
HostModel.user_id == current_user_id
)
if keyword:
query = query.where(HostModel.host.contains(keyword))
if host:
query = query.where(HostModel.host == host)
total = query.count()
rows = query.order_by(
HostModel.create_time.desc(),
HostModel.id.desc()
).paginate(page, size)
lst = list(map(lambda m: model_to_dict(model=m), rows))
for row in lst:
row['password'] = ''
row['private_key'] = ''
return {
'list': lst,
'total': total,
}