scripts/share/add_records.py

105 lines
3.7 KiB
Python

from lib.all import *
from cloudflare_manager import *
from namesilo_manager import *
import ningx_proxy_manager as npm
import string
import random
cf_manager = CloudflareManager()
ns_manager = NameSiloMgr()
service_name = 'log'
log_dir = '.'
logger = Logger(service_name, log_dir=log_dir)
def generate_random_string(length):
letters = string.ascii_lowercase + string.digits
return ''.join(random.choice(letters) for _ in range(length))
def proc():
# 获取所有cloudflare zone
cf_zones_resp = json.loads(cf_manager.zone_list().json())
cf_zones = safe_get_list(cf_zones_resp, "result")
cf_domain_zone_map = dict()
for cf_zone in cf_zones:
domain = safe_get_str(cf_zone, "name")
cf_domain_zone_map[domain] = cf_zone
# for k, v in cf_domain_zone_map.items():
# print(k, v)
# 获取nginx证书
ng_cert_map = npm.get_all_cert_map()
# for k, v in ng_cert_map.items():
# print(k, v)
col_share_url = MongoDB(
host="mongodb://root:Wishpal2024@dds-bp1da1ddd62bede41.mongodb.rds.aliyuncs.com:3717,dds-bp1da1ddd62bede42.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-77304659",
port=3717,
db="share",
collection="share_url"
)
for domain, cf_zone in cf_domain_zone_map.items():
# 添加cf域名解析
zone_id = safe_get_str(cf_zone, "id")
if len(zone_id) <= 0:
continue
# print(zone_id)
# 获取域名对应的证书id
cert = safe_get_dict(ng_cert_map, domain)
cert_id = safe_get_int(cert, "id")
# print(zone_id, cert_id)
# 分享域名
share_l2_names = list()
for i in range(50):
random_str = generate_random_string(random.randint(8, 12))
share_l2_names.append(random_str)
# 要添加nginx域名解析的域名
need_add_nginx_anal_l2_names = list()
for l2_name in share_l2_names:
try:
cf_add_record_ret = json.loads(cf_manager.add_record(zone_id, "47.242.233.23", l2_name, "A").json())
ret_id = safe_get_str(cf_add_record_ret, "id")
if len(ret_id) <= 0:
logger.Error("cf_add_record fail, domain: {}, l2_name: {}, ret: {}".format(domain, l2_name, cf_add_record_ret))
continue
need_add_nginx_anal_l2_names.append(l2_name)
except Exception as e:
logger.Error("cf_add_record panic, domain: {}, l2_name: {}, err: {}".format(domain, l2_name, str(e)))
# 添加nginx域名解析
need_add_nginx_anal_domain_names = list()
for l2_name in need_add_nginx_anal_l2_names:
need_add_nginx_anal_domain_names.append("{}.{}".format(l2_name, domain))
batch_add_records_ret = npm.batch_add_records(need_add_nginx_anal_domain_names, "172.17.219.45", 3001, cert_id)
logger.Info("batch_add_records ok, len: {}, domains: {}, ret: {}".format(
len(need_add_nginx_anal_domain_names), need_add_nginx_anal_domain_names, batch_add_records_ret
))
# 添加mongodb
docs = list()
for domain_name in need_add_nginx_anal_domain_names:
doc = {
"_id": domain_name,
"ct": int(time.time()),
"ut": 0,
"status": "000",
"api_res": "",
"use_cnt": 0,
"domain": domain,
"l2_name": domain_name[:domain_name.find(".")],
}
docs.append(doc)
mongo_ret = col_share_url.insert_many(docs)
logger.Info("len(insert_ids): {}, ids: {}".format(len(mongo_ret.inserted_ids), mongo_ret.inserted_ids))
col_share_url.close()
proc()