61 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
|   Zone setup for DNS-01 ACME challenge
 | |
| 
 | |
|   This code executed once per domain.
 | |
|   Future changes makes traefik via PowerDNS API
 | |
| */
 | |
| 
 | |
| -- This var must be set in psql args
 | |
| SET vars.domain TO :'ACME_DOMAIN';
 | |
| 
 | |
| DO $_$
 | |
| DECLARE
 | |
|   v_domain    text := 'acme-' || current_setting('vars.domain'); -- domain name
 | |
|   v_ns        text := 'ns.'   || current_setting('vars.domain'); -- master DNS host
 | |
|   v_ns_admin  text := 'admin.'|| current_setting('vars.domain'); -- master DNS admin email
 | |
| 
 | |
|   v_refresh   int  :=  10800;
 | |
|   v_retry     int  :=   3600;
 | |
|   v_expire    int  := 604800;
 | |
|   v_ttl       int  :=   1800;
 | |
| 
 | |
|   v_domain_id integer;  -- internal domain id
 | |
|   v_stamp     text;     -- zone timestamp
 | |
|   v_stamp_old text;     -- previous zone SOA timestamp
 | |
|   v_soa       text;     -- zone SOA
 | |
| 
 | |
| BEGIN
 | |
| 
 | |
|   IF v_domain = 'acme-' THEN
 | |
|     RAISE NOTICE 'ACME_DOMAIN is not set. Skipping acme zone setup';
 | |
|     RETURN;
 | |
|   END IF;
 | |
| 
 | |
|   RAISE NOTICE 'Setup acme zone % for nameserver %',v_domain,v_ns;
 | |
| 
 | |
|   SELECT INTO v_domain_id id FROM domains WHERE name = v_domain;
 | |
|   IF FOUND THEN
 | |
|     -- no any changes needed after creation
 | |
|     RAISE NOTICE 'Zone already exists. Skipping';
 | |
|     RETURN;
 | |
|   END IF;
 | |
| 
 | |
|   INSERT INTO domains (name, type) VALUES
 | |
|     (v_domain, 'NATIVE')
 | |
|     RETURNING id INTO v_domain_id
 | |
|   ;
 | |
| 
 | |
|   INSERT INTO domainmetadata(domain_id, kind, content) VALUES
 | |
|     (v_domain_id, 'SOA-EDIT-API', 'INCREASE')
 | |
|   ;
 | |
| 
 | |
|   v_stamp := soa_upd();
 | |
|   v_soa := concat_ws(' ', v_ns, v_ns_admin, v_stamp, v_refresh, v_retry, v_expire, v_ttl);
 | |
| 
 | |
|   INSERT INTO records (domain_id, name, ttl, type, prio, content) VALUES 
 | |
|     (v_domain_id, v_domain, 60,  'SOA', 0, v_soa)
 | |
|   , (v_domain_id, v_domain, 1800, 'NS', 0, v_ns)
 | |
|   ;
 | |
| END;
 | |
| $_$;
 |