# -*- coding: utf-8 -*- """ address_api.py """ from __future__ import print_function, unicode_literals, absolute_import, division from flask import request, g from playhouse.shortcuts import model_to_dict from domain_admin.enums.role_enum import RoleEnum from domain_admin.model.address_model import AddressModel from domain_admin.model.domain_model import DomainModel from domain_admin.service import domain_service, auth_service from domain_admin.utils.flask_ext.app_exception import AppException, DataNotFoundAppException, ForbiddenAppException @auth_service.permission(role=RoleEnum.USER) def get_address_list_by_domain_id(): """ 通过域名获取关联的主机地址列表 :return: @since v1.3.1 """ current_user_id = g.user_id domain_id = request.json['domain_id'] page = request.json.get('page', 1) size = request.json.get('size', 10) # check domain_row = DomainModel.select().where( DomainModel.id == domain_id, DomainModel.user_id == current_user_id ).first() if not domain_row: raise ForbiddenAppException() query = AddressModel.select().where( AddressModel.domain_id == domain_id, ) total = query.count() lst = [] if total > 0: rows = query.order_by( AddressModel.ssl_expire_days, AddressModel.id, ).paginate(page, size) lst = list(map(lambda m: model_to_dict( model=m, extra_attrs=[ 'ssl_start_date', 'ssl_expire_date', 'real_time_ssl_expire_days', 'update_time_label', ] ), rows)) return { "list": lst, "total": total } @auth_service.permission(role=RoleEnum.USER) def add_address(): """ 添加主机地址 :return: @since v1.3.1 """ current_user_id = g.user_id domain_id = request.json['domain_id'] host = request.json['host'] ssl_start_time = request.json.get('ssl_start_time') ssl_expire_time = request.json.get('ssl_expire_time') comment = request.json.get('comment') or '' # ssl_auto_update = request.json.get('ssl_auto_update', True) # ssl_expire_monitor = request.json.get('ssl_expire_monitor', True) # check domain_row = DomainModel.select().where( DomainModel.id == domain_id, DomainModel.user_id == current_user_id ).first() if not domain_row: raise ForbiddenAppException() data = { 'domain_id': domain_id, 'host': host, 'source': 1, 'comment': comment, } if not domain_row.auto_update: data['ssl_start_time'] = ssl_start_time data['ssl_expire_time'] = ssl_expire_time address_row = AddressModel.create(**data) if domain_row.auto_update: domain_service.update_address_row_info_with_sync_domain_row(address_row.id) else: domain_service.sync_address_info_to_domain_info(domain_row) @auth_service.permission(role=RoleEnum.USER) def delete_address_by_id(): """ 删除主机地址 :return: @since v1.3.1 """ current_user_id = g.user_id address_id = request.json['address_id'] # update to cert address_row = AddressModel.get_by_id(address_id) # check domain_row = DomainModel.select().where( DomainModel.id == address_row.domain_id, DomainModel.user_id == current_user_id ).first() if not domain_row: raise ForbiddenAppException() AddressModel.delete().where( AddressModel.id == address_id ).execute() domain_service.sync_address_info_to_domain_info(domain_row) @auth_service.permission(role=RoleEnum.USER) def delete_address_by_ids(): """ 批量删除主机地址 :return: @since v1.4.4 """ current_user_id = g.user_id address_ids = request.json['address_ids'] # update to cert address_rows = AddressModel.select( AddressModel.domain_id ).where( AddressModel.id.in_(address_ids) ) AddressModel.delete().where( AddressModel.id.in_(address_ids) ).execute() domain_ids = [row.domain_id for row in address_rows] domain_rows = DomainModel.select().where( DomainModel.id.in_(domain_ids), DomainModel.user_id == current_user_id ) for domain_row in domain_rows: domain_service.sync_address_info_to_domain_info(domain_row) @auth_service.permission(role=RoleEnum.USER) def get_address_by_id(): """ 获取主机地址 :return: @since v1.3.1 """ current_user_id = g.user_id address_id = request.json['address_id'] return AddressModel.get_by_id(address_id) @auth_service.permission(role=RoleEnum.USER) def update_address_by_id(): """ 更新主机地址 :return: @since v1.3.1 """ current_user_id = g.user_id address_id = request.json['address_id'] host = request.json['host'] ssl_start_time = request.json.get('ssl_start_time') ssl_expire_time = request.json.get('ssl_expire_time') comment = request.json.get('comment') or '' # ssl_auto_update = request.json.get('ssl_auto_update', True) # ssl_expire_monitor = request.json.get('ssl_expire_monitor', True) address_row = AddressModel.get_by_id(address_id) domain_row = DomainModel.get_by_id(address_row.domain_id) data = { 'host': host, 'comment': comment, } if not domain_row.auto_update: data['ssl_start_time'] = ssl_start_time data['ssl_expire_time'] = ssl_expire_time AddressModel.update(data).where( AddressModel.id == address_id ).execute() if domain_row.auto_update: domain_service.update_address_row_info_with_sync_domain_row(address_id) else: domain_service.sync_address_info_to_domain_info(domain_row) @auth_service.permission(role=RoleEnum.USER) def update_address_list_info_by_domain_id(): """ 更新主机地址信息 :return: @since v1.3.1 """ current_user_id = g.user_id domain_id = request.json['domain_id'] domain_row = DomainModel.get_by_id(domain_id) err = domain_service.update_domain_row(domain_row) if err: raise AppException(err) @auth_service.permission(role=RoleEnum.USER) def update_address_row_info_by_id(): """ 更新主机地址信息 :return: @since v1.3.1 """ current_user_id = g.user_id address_id = request.json['address_id'] domain_service.update_address_row_info_with_sync_domain_row(address_id)