mirror of
https://github.com/NewFuture/DDNS.git
synced 2022-04-19 20:24:44 +00:00
feat(ttl): support ttl and update schema #14
This commit is contained in:
+4
-3
@@ -31,7 +31,7 @@ class Config:
|
||||
ID = "id"
|
||||
TOKEN = "TOKEN"
|
||||
PROXY = None # 代理设置
|
||||
TTL = 600
|
||||
TTL = None
|
||||
|
||||
|
||||
class API:
|
||||
@@ -71,6 +71,7 @@ def request(param=None, **params):
|
||||
"""
|
||||
if param:
|
||||
params.update(param)
|
||||
params = dict((k, params[k]) for k in params if params[k] is not None)
|
||||
params = signature(params)
|
||||
info("%s: %s", API.SITE, params)
|
||||
|
||||
@@ -156,7 +157,7 @@ def update_record(domain, value, record_type='A'):
|
||||
if record["Value"] != value:
|
||||
debug(sub, record)
|
||||
res = request(Action="UpdateDomainRecord", RecordId=rid,
|
||||
Value=value, RR=sub, Type=record_type)
|
||||
Value=value, RR=sub, Type=record_type, TTL=Config.TTL)
|
||||
if res:
|
||||
# update records
|
||||
get_records.records[main][rid]["Value"] = value
|
||||
@@ -167,7 +168,7 @@ def update_record(domain, value, record_type='A'):
|
||||
result[rid] = domain
|
||||
else: # https://help.aliyun.com/document_detail/29772.html
|
||||
res = request(Action="AddDomainRecord", DomainName=main,
|
||||
Value=value, RR=sub, Type=record_type)
|
||||
Value=value, RR=sub, Type=record_type, TTL=Config.TTL)
|
||||
if res:
|
||||
# update records INFO
|
||||
rid = res.get('RecordId')
|
||||
|
||||
+5
-4
@@ -25,7 +25,7 @@ class Config:
|
||||
ID = "AUTH EMAIL" # CloudFlare 验证的是用户Email,等同于其他平台的userID
|
||||
TOKEN = "API KEY"
|
||||
PROXY = None # 代理设置
|
||||
TTL = 600
|
||||
TTL = None
|
||||
|
||||
|
||||
class API:
|
||||
@@ -39,7 +39,8 @@ def request(method, action, param=None, **params):
|
||||
"""
|
||||
if param:
|
||||
params.update(param)
|
||||
|
||||
|
||||
params = dict((k, params[k]) for k in params if params[k] is not None)
|
||||
info("%s/%s : %s", API.SITE, action, params)
|
||||
if Config.PROXY:
|
||||
conn = HTTPSConnection(Config.PROXY)
|
||||
@@ -135,7 +136,7 @@ def update_record(domain, value, record_type="A"):
|
||||
for (rid, record) in records.items():
|
||||
if record['content'] != value:
|
||||
res = request('PUT', '/' + zoneid + '/dns_records/' + record['id'],
|
||||
type=record_type, content=value, name=domain)
|
||||
type=record_type, content=value, name=domain, ttl=Config.TTL)
|
||||
if res:
|
||||
get_records.records[cache_key][rid]['content'] = value
|
||||
result[rid] = res.get("name")
|
||||
@@ -146,7 +147,7 @@ def update_record(domain, value, record_type="A"):
|
||||
else: # create
|
||||
# https://api.cloudflare.com/#dns-records-for-a-zone-create-dns-record
|
||||
res = request('POST', '/' + zoneid + '/dns_records',
|
||||
type=record_type, name=domain, content=value, proxied=False, ttl=600)
|
||||
type=record_type, name=domain, content=value, proxied=False, ttl=Config.TTL)
|
||||
if res:
|
||||
get_records.records[cache_key][res['id']] = res
|
||||
result = res
|
||||
|
||||
+5
-4
@@ -31,7 +31,7 @@ class Config:
|
||||
ID = "id"
|
||||
TOKEN = "TOKEN"
|
||||
PROXY = None # 代理设置
|
||||
TTL = 600
|
||||
TTL = None
|
||||
|
||||
|
||||
class API:
|
||||
@@ -65,6 +65,7 @@ def request(action, param=None, **params):
|
||||
"""
|
||||
if param:
|
||||
params.update(param)
|
||||
params = dict((k, params[k]) for k in params if params[k] is not None)
|
||||
params = signature(params)
|
||||
info("%s/api/%s/ : params:%s", API.SITE, action, params)
|
||||
|
||||
@@ -81,7 +82,7 @@ def request(action, param=None, **params):
|
||||
conn.close()
|
||||
|
||||
if response.status < 200 or response.status >= 300:
|
||||
warning('%s : error[%d]:%s', action, response.status, result)
|
||||
warning('%s : error[%d]:%s', action, response.status, result)
|
||||
raise Exception(result)
|
||||
else:
|
||||
data = jsondecode(result)
|
||||
@@ -155,7 +156,7 @@ def update_record(domain, value, record_type='A'):
|
||||
if record["value"] != value:
|
||||
debug(sub, record)
|
||||
res = request("record/modify", domainID=domain_id,
|
||||
recordID=rid, newvalue=value)
|
||||
recordID=rid, newvalue=value, newTTL=Config.TTL)
|
||||
if res:
|
||||
# update records
|
||||
get_records.records[main][rid]["value"] = value
|
||||
@@ -166,7 +167,7 @@ def update_record(domain, value, record_type='A'):
|
||||
result[rid] = domain
|
||||
else:
|
||||
res = request("record/create", domainID=domain_id,
|
||||
value=value, host=sub, type=record_type)
|
||||
value=value, host=sub, type=record_type, TTL=Config.TTL)
|
||||
if res:
|
||||
# update records INFO
|
||||
rid = res.get('recordID')
|
||||
|
||||
+3
-3
@@ -25,7 +25,7 @@ class Config:
|
||||
ID = "token id"
|
||||
TOKEN = "token key"
|
||||
PROXY = None # 代理设置
|
||||
TTL = 600
|
||||
TTL = None
|
||||
|
||||
|
||||
class API:
|
||||
@@ -42,7 +42,7 @@ def request(action, param=None, **params):
|
||||
"""
|
||||
if param:
|
||||
params.update(param)
|
||||
|
||||
params = dict((k, params[k]) for k in params if params[k] is not None)
|
||||
params.update({API.TOKEN_PARAM: '***', 'format': 'json'})
|
||||
info("%s/%s : %s", API.SITE, action, params)
|
||||
params[API.TOKEN_PARAM] = "%s,%s" % (Config.ID, Config.TOKEN)
|
||||
@@ -161,7 +161,7 @@ def update_record(domain, value, record_type="A"):
|
||||
if record["value"] != value:
|
||||
debug(sub, record)
|
||||
res = request('Record.Modify', record_id=did, record_line=record["line"].replace("Default", "default").encode(
|
||||
"utf-8"), value=value, sub_domain=sub, domain_id=domainid, record_type=record_type)
|
||||
"utf-8"), value=value, sub_domain=sub, domain_id=domainid, record_type=record_type, ttl=Config.TTL)
|
||||
if res:
|
||||
get_records.records[domainid][did]["value"] = value
|
||||
result[did] = res.get("record")
|
||||
|
||||
@@ -51,7 +51,7 @@ def get_config(key=None, default=None, path="config.json"):
|
||||
error(' Config file `%s` does not exist!' % path)
|
||||
with open(path, 'w') as configfile:
|
||||
configure = {
|
||||
"$schema": "https://ddns.newfuture.cc/schema/v2.json",
|
||||
"$schema": "https://ddns.newfuture.cc/schema/v2.8.json",
|
||||
"id": "YOUR ID or EAMIL for DNS Provider",
|
||||
"token": "YOUR TOKEN or KEY for DNS Provider",
|
||||
"dns": "dnspod",
|
||||
@@ -65,6 +65,7 @@ def get_config(key=None, default=None, path="config.json"):
|
||||
],
|
||||
"index4": "default",
|
||||
"index6": "default",
|
||||
"ttl": None,
|
||||
"proxy": None,
|
||||
"debug": False,
|
||||
}
|
||||
@@ -159,7 +160,9 @@ def main():
|
||||
# Dynamicly import the dns module as configuration
|
||||
dns_provider = str(get_config('dns', 'dnspod').lower())
|
||||
dns = getattr(__import__('dns', fromlist=[dns_provider]), dns_provider)
|
||||
dns.Config.ID, dns.Config.TOKEN = get_config('id'), get_config('token')
|
||||
dns.Config.ID = get_config('id')
|
||||
dns.Config.TOKEN = get_config('token')
|
||||
dns.Config.TTL = get_config('ttl')
|
||||
if get_config('debug'):
|
||||
ip.DEBUG = get_config('debug')
|
||||
basicConfig(
|
||||
|
||||
+14
@@ -117,6 +117,20 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"ttl": {
|
||||
"$id": "/properties/ttl",
|
||||
"type": [
|
||||
"number",
|
||||
"null"
|
||||
],
|
||||
"title": "TTL",
|
||||
"description": "设置DNS TTL,默认不填读取DNS服务商的配置",
|
||||
"default": null,
|
||||
"examples": [
|
||||
600,
|
||||
null
|
||||
]
|
||||
},
|
||||
"proxy": {
|
||||
"$id": "/properties/proxy",
|
||||
"type": [
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema",
|
||||
"$id": "https://ddns.newfuture.cc/schema/v2.8.json",
|
||||
"description": "DNS 配置文件 https://github.com/NewFuture/DDNS",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"$schema": {
|
||||
"type": "string",
|
||||
"title": "please use https://ddns.newfuture.cc/schema/v2.8.json",
|
||||
"description": "请更换为 https://ddns.newfuture.cc/schema/v2.8.json",
|
||||
"default": "https://ddns.newfuture.cc/schema/v2.8.json",
|
||||
"enum": [
|
||||
"https://ddns.newfuture.cc/schema/v2.8.json",
|
||||
"http://ddns.newfuture.cc/schema/v2.8.json",
|
||||
"./schema/v2.8.json"
|
||||
]
|
||||
},
|
||||
"id": {
|
||||
"$id": "/properties/id",
|
||||
"type": "string",
|
||||
"title": "ID or Email",
|
||||
"description": "DNS服务API认证的ID或者邮箱"
|
||||
},
|
||||
"token": {
|
||||
"$id": "/properties/token",
|
||||
"type": "string",
|
||||
"title": "API Token",
|
||||
"description": "DNS服务商的访问Token或者Key"
|
||||
},
|
||||
"dns": {
|
||||
"$id": "/properties/dns",
|
||||
"type": "string",
|
||||
"title": "DNS Provider",
|
||||
"description": "dns服务商:阿里为alidns,DNS.COM为dnscom,DNSPOD国际版为(dnspod_com),cloudflare,HE.net为he",
|
||||
"default": "dnspod",
|
||||
"examples": [
|
||||
"dnspod",
|
||||
"alidns",
|
||||
"cloudflare"
|
||||
],
|
||||
"enum": [
|
||||
"dnspod",
|
||||
"alidns",
|
||||
"cloudflare",
|
||||
"dnspod_com",
|
||||
"dnscom",
|
||||
"he"
|
||||
]
|
||||
},
|
||||
"ipv4": {
|
||||
"$id": "/properties/ipv4",
|
||||
"title": "IPv4 domain list",
|
||||
"description": "待更新的IPv4 域名列表",
|
||||
"type": "array",
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"$id": "/properties/ipv4/items",
|
||||
"title": "ipv4 domain for DDNS",
|
||||
"type": "string",
|
||||
"pattern": "^([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,18}$",
|
||||
"examples": [
|
||||
"newfuture.cc",
|
||||
"ipv4.example.newfuture.cc"
|
||||
]
|
||||
}
|
||||
},
|
||||
"ipv6": {
|
||||
"$id": "/properties/ipv6",
|
||||
"type": "array",
|
||||
"title": "IPv6 domain list",
|
||||
"description": "待更新的IPv6 域名列表",
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"$id": "/properties/ipv6/items",
|
||||
"title": "The ipv6 domain for DDNS",
|
||||
"type": "string",
|
||||
"pattern": "^([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,6}$",
|
||||
"examples": [
|
||||
"newfuture.cc",
|
||||
"ipv6.example.newfuture.cc"
|
||||
]
|
||||
}
|
||||
},
|
||||
"index4": {
|
||||
"$id": "/properties/index4",
|
||||
"type": [
|
||||
"string",
|
||||
"integer",
|
||||
"boolean"
|
||||
],
|
||||
"title": "IPv4 address Setting",
|
||||
"description": "本机 IPv4 获取方式设置",
|
||||
"default": "default",
|
||||
"examples": [
|
||||
"default",
|
||||
"public",
|
||||
0,
|
||||
1,
|
||||
"192\\\\.168\\\\..*",
|
||||
false
|
||||
]
|
||||
},
|
||||
"index6": {
|
||||
"$id": "/properties/index6",
|
||||
"type": [
|
||||
"string",
|
||||
"integer",
|
||||
"boolean"
|
||||
],
|
||||
"title": "IPv6 address Setting",
|
||||
"description": "本机 IPv6 获取方式设置",
|
||||
"default": "default",
|
||||
"examples": [
|
||||
"default",
|
||||
"public",
|
||||
0,
|
||||
1,
|
||||
"2404:f801:10:.*",
|
||||
false
|
||||
]
|
||||
},
|
||||
"ttl": {
|
||||
"$id": "/properties/ttl",
|
||||
"type": [
|
||||
"number",
|
||||
"null"
|
||||
],
|
||||
"title": "TTL",
|
||||
"description": "设置DNS TTL,默认不填读取DNS服务商的配置",
|
||||
"default": null,
|
||||
"examples": [
|
||||
600,
|
||||
null
|
||||
]
|
||||
},
|
||||
"proxy": {
|
||||
"$id": "/properties/proxy",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
],
|
||||
"title": "HTTP Proxy Setting",
|
||||
"description": "DIRECT表示直连,多个代理分号(;)分割逐个尝试直到成功",
|
||||
"pattern": "^[a-zA-Z0-9\\-;_:\\.]*$",
|
||||
"examples": [
|
||||
"127.0.0.1:1080;DIRECT"
|
||||
]
|
||||
},
|
||||
"debug": {
|
||||
"$id": "/properties/debug",
|
||||
"type": "boolean",
|
||||
"title": "Enable Debug Mode",
|
||||
"description": "是否启用调试模式显示更多信息",
|
||||
"default": false,
|
||||
"examples": [
|
||||
false,
|
||||
true
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"id",
|
||||
"token"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
+2
-2
@@ -31,10 +31,10 @@
|
||||
"$id": "/properties/dns",
|
||||
"type": "string",
|
||||
"title": "DNS Provider",
|
||||
"description": "dns服务商:阿里为alidns,DNS.COM为dnscom,DNSPOD国际版为dnspod_com,cloudflare,HE.net为he",
|
||||
"description": "dns服务商:阿里为alidns,DNS.COM为dnscom,DNSPOD国际版为dnspod_com,cloudflare",
|
||||
"default": "dnspod",
|
||||
"examples": ["dnspod", "alidns", "cloudflare"],
|
||||
"enum": ["dnspod", "alidns", "cloudflare", "dnspod_com", "dnscom", "he"]
|
||||
"enum": ["dnspod", "alidns", "cloudflare", "dnspod_com", "dnscom"]
|
||||
},
|
||||
"ipv4": {
|
||||
"$id": "/properties/ipv4",
|
||||
|
||||
Reference in New Issue
Block a user