""" DNS 解析管理 API — 独立版本 部署在 101.132.183.138:32210 上,仅提供阿里云 DNS 解析管理 从 10.1.1.160 迁移而来,去掉了 Nginx/SSL 相关依赖 """ import os import logging from flask import Flask, request from dns_service import DnsService # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s [%(levelname)s] %(name)s: %(message)s' ) logger = logging.getLogger(__name__) app = Flask(__name__) app.config['JSON_AS_ASCII'] = False # 中文不转 Unicode # 初始化 DNS 服务(阿里云 AccessKey 从环境变量读取) dns_service = DnsService() # 默认域名 zone,通过环境变量配置,默认 zgitm.com DEFAULT_ZONE = os.environ.get('DNS_DEFAULT_ZONE', 'zgitm.com') # ═══════════════════════════════════════════════════════════ # 健康检查 # ═══════════════════════════════════════════════════════════ @app.route('/api/nginx/health', methods=['GET']) def health_check(): """健康检查""" ali_key = os.environ.get('Ali_Key', '') return { 'code': 0, 'message': 'DNS Manager API is running', 'data': { 'service': 'dns-api', 'version': '2.0', 'default_zone': DEFAULT_ZONE, 'ali_key_configured': bool(ali_key), } } # ═══════════════════════════════════════════════════════════ # DNS 解析管理接口 # ═══════════════════════════════════════════════════════════ @app.route('/api/nginx/dns/records', methods=['GET']) def list_dns_records(): """获取 DNS 解析记录列表""" try: zone = request.args.get('zone', DEFAULT_ZONE) rr = request.args.get('rr', None) rtype = request.args.get('type', None) records = dns_service.list_records(zone, rr_keyword=rr, record_type=rtype) return {'code': 0, 'message': 'success', 'data': records} except Exception as e: logger.error(f"获取DNS记录失败: {e}") return {'code': -1, 'message': str(e), 'data': []} @app.route('/api/nginx/dns/records', methods=['POST']) def add_dns_record(): """添加 DNS 解析记录""" try: body = request.get_json(force=True) zone = body.get('zone', DEFAULT_ZONE) rr = body.get('rr', '').strip() record_type = body.get('type', 'A').upper() value = body.get('value', '').strip() ttl = body.get('ttl', 600) if not rr: return {'code': -1, 'message': '主机记录(rr)不能为空'}, 400 if not value: return {'code': -1, 'message': '记录值(value)不能为空'}, 400 result = dns_service.add_record(zone, rr, record_type, value, ttl) return {'code': 0, 'message': f'{result["full_domain"]} 记录已添加', 'data': result} except Exception as e: logger.error(f"添加DNS记录失败: {e}") return {'code': -1, 'message': str(e)}, 500 @app.route('/api/nginx/dns/records/', methods=['DELETE']) def delete_dns_record(record_id): """删除 DNS 解析记录""" try: dns_service.delete_record(record_id) return {'code': 0, 'message': 'DNS记录已删除'} except Exception as e: logger.error(f"删除DNS记录失败: {e}") return {'code': -1, 'message': str(e)}, 500 @app.route('/api/nginx/dns/records/', methods=['PUT']) def update_dns_record(record_id): """修改 DNS 解析记录""" try: body = request.get_json(force=True) rr = body.get('rr', '@') record_type = body.get('type', 'A').upper() value = body.get('value', '').strip() ttl = body.get('ttl', 600) if not value: return {'code': -1, 'message': '记录值(value)不能为空'}, 400 dns_service.update_record(record_id, rr, record_type, value, ttl) return {'code': 0, 'message': 'DNS记录已更新'} except Exception as e: logger.error(f"修改DNS记录失败: {e}") return {'code': -1, 'message': str(e)}, 500 # ═══════════════════════════════════════════════════════════ # 启动入口 # ═══════════════════════════════════════════════════════════ if __name__ == '__main__': logger.info(f"DNS Manager API 启动在端口 32210, 默认 zone: {DEFAULT_ZONE}") app.run(host='0.0.0.0', port=32210, debug=False)