diff --git a/data/actionsmap/yunohost.yml b/data/actionsmap/yunohost.yml index 0374bce7b..2c9788a28 100644 --- a/data/actionsmap/yunohost.yml +++ b/data/actionsmap/yunohost.yml @@ -291,6 +291,17 @@ domain: extra: pattern: *pattern_domain + ### domain_generate_dns_config() + generate_dns_configuration: + action_help: Generate DNS configuration for a domain + api: GET /domains//dns_config + configuration: + lock: false + authenticate: all + arguments: + domain: + help: Target domain + ### domain_info() # info: # action_help: Get domain informations diff --git a/src/yunohost/domain.py b/src/yunohost/domain.py index 53b938356..d1490810f 100644 --- a/src/yunohost/domain.py +++ b/src/yunohost/domain.py @@ -218,3 +218,36 @@ def domain_remove(auth, domain, force=False): hook_callback('post_domain_remove', args=[domain]) msignals.display(m18n.n('domain_deleted'), 'success') + + +def domain_generate_dns_configuration(auth, domain): + """ + Generate DNS configuration for a domain + + Keyword argument: + domain -- Domain name + """ + + ip4 = urlopen("http://ip.yunohost.org").read().strip() + + result = "@ 1400 IN A {ip4}\n* 900 IN A {ip4}\n".format(ip4=ip4) + + ip6 = None + + try: + ip6 = urlopen("http://ip6.yunohost.org").read().strip() + except Exception: + pass + else: + result += "@ 1400 IN A {ip6}\n* 900 IN AAAA {ip6}\n".format(ip6=ip6) + + result += "\n_xmpp-client._tcp 14400 IN SRV 0 5 5222 {domain}.\n_xmpp-server._tcp 14400 IN SRV 0 5 5269 {domain}.\n".format(domain=domain) + + result += "@ 1400 IN MX 10 {domain}.tld.\n".format(domain=domain) + + if ip6 is None: + result += '@ 1400 IN TXT "v=spf1 a mx ip4:{ip4} -all"\n'.format(ip4=ip4) + else: + result += '@ 1400 IN TXT "v=spf1 a mx ip4:{ip4} ip6:{ip6} -all"\n'.format(ip4=ip4, ip6=ip6) + + return result