147 lines
4.8 KiB
Python
147 lines
4.8 KiB
Python
import hashlib
|
|
import time
|
|
|
|
import requests
|
|
|
|
from sslModel.base import sslBase
|
|
import public
|
|
|
|
|
|
class main(sslBase):
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
def __init_data(self, data):
|
|
self.api_url = 'https://api.west.cn/api/v2/domain/'
|
|
# 账号
|
|
self.user_name = data["user_name"]
|
|
# api 密码
|
|
self.api_password = data["api_password"]
|
|
self.headers = {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'}
|
|
|
|
def get_params(self):
|
|
timestamp = str(time.time() * 1000)
|
|
token = hashlib.md5((self.user_name + self.api_password + timestamp).encode("utf-8")).hexdigest()
|
|
return {"username": self.user_name, "token": token, "time": timestamp}
|
|
|
|
def _request(self, dns_id, body):
|
|
self.__init_data(self.get_dns_data(None)[dns_id])
|
|
params = self.get_params()
|
|
try:
|
|
res = requests.post(self.api_url, headers=self.headers, params=params, data=body)
|
|
|
|
if res.status_code != 200:
|
|
return False, res.text
|
|
json_data = res.json()
|
|
if json_data['result'] != 200:
|
|
return False, json_data['msg']
|
|
return True, json_data
|
|
except Exception as e:
|
|
return False, e
|
|
|
|
def get_dns_record(self, get):
|
|
domain_name, _, sub_domain = self.extract_zone(get.domain_name)
|
|
limit = "500"
|
|
p = "1"
|
|
if "limit" in get:
|
|
limit = str(get["limit"])
|
|
if "p" in get:
|
|
p = str(get["p"])
|
|
body = {
|
|
"domain": domain_name,
|
|
"act": "getdnsrecord",
|
|
"limit": limit,
|
|
"pageno": p,
|
|
}
|
|
try:
|
|
flag, res = self._request(get.dns_id, body)
|
|
|
|
data = {"list": [], "info": {"record_total": res['data']['total']}}
|
|
if not flag:
|
|
data = {}
|
|
for record in res['data']["items"]:
|
|
data["list"].append(
|
|
{
|
|
"RecordId": record["id"],
|
|
"name": record["item"] + "." + domain_name if record["item"] != "@" else domain_name,
|
|
"value": record["value"],
|
|
"line": record["line"] if record["line"] else "默认",
|
|
"ttl": record["ttl"],
|
|
"type": record["type"],
|
|
"status": "启用" if record["pause"] == 0 else "暂停",
|
|
"mx": "",
|
|
"updated_on": "",
|
|
"remark": "",
|
|
}
|
|
)
|
|
except Exception as e:
|
|
data = {}
|
|
self.set_record_data({domain_name: data})
|
|
return data
|
|
|
|
def create_dns_record(self, get):
|
|
domain_name, sub_domain, _ = self.extract_zone(get.domain_name)
|
|
record_type = 'TXT'
|
|
if 'record_type' in get:
|
|
record_type = get.record_type
|
|
body = {
|
|
"act": "adddnsrecord",
|
|
"domain": domain_name,
|
|
"host": sub_domain,
|
|
"type": record_type,
|
|
"value": get.domain_dns_value,
|
|
"ttl": "600",
|
|
"level": "10",
|
|
"line": "",
|
|
}
|
|
try:
|
|
flag, res = self._request(get.dns_id, body)
|
|
if not flag:
|
|
return public.returnMsg(False, '添加失败:{}'.format(res))
|
|
return public.returnMsg(True, "添加成功")
|
|
except Exception as e:
|
|
return public.returnMsg(False, '添加失败:{}'.format(e))
|
|
|
|
def delete_dns_record(self, get):
|
|
domain_name, _, sub_domain = self.extract_zone(get.domain_name)
|
|
|
|
body = {
|
|
"act": "deldnsrecord",
|
|
"domain": domain_name,
|
|
"id": get.RecordId,
|
|
}
|
|
try:
|
|
flag, res = self._request(get.dns_id, body)
|
|
if not flag:
|
|
return public.returnMsg(False, '删除失败:{}'.format(res))
|
|
return public.returnMsg(True, "删除成功")
|
|
except Exception as e:
|
|
return public.returnMsg(False, '删除失败:{}'.format(e))
|
|
|
|
def update_dns_record(self, get):
|
|
# 不能修改主机记录和类型
|
|
domain_name, sub_domain, _ = self.extract_zone(get.domain_name)
|
|
body = {
|
|
"act": "moddnsrecord",
|
|
"id": get.RecordId,
|
|
"domain": domain_name,
|
|
"host": sub_domain,
|
|
"type": get.record_type,
|
|
"value": get.domain_dns_value,
|
|
"level": "10",
|
|
"ttl": "600",
|
|
}
|
|
try:
|
|
flag, res = self._request(get.dns_id, body)
|
|
if not flag:
|
|
return public.returnMsg(False, '修改失败:{}'.format(res))
|
|
return public.returnMsg(True, "修改成功")
|
|
except Exception as e:
|
|
return public.returnMsg(False, '修改失败:{}'.format(e))
|
|
|
|
|
|
|
|
|
|
|