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()