Files

46 lines
1.2 KiB
JavaScript
Raw Permalink Normal View History

2026-05-14 14:20:51 -04:00
const { Etcd3 } = require("etcd3");
const client = new Etcd3({
hosts: 'http://127.0.0.1:2379',
});
2026-05-14 11:15:30 -04:00
2026-05-14 16:00:59 -04:00
// Converts a FQDN to a path usable by CoreDNS
2026-05-14 14:20:51 -04:00
function DomainToCoreDNS(domain) {
const prefix = "/skydns/";
const parts = domain.split(".");
if (parts.length < 2) return false;
const path = parts.reverse().join("/");
return prefix + path;
2026-05-14 11:15:30 -04:00
}
2026-05-14 16:00:59 -04:00
// Inverse of DomainToCoreDNS
function CoreDNSToDomain(corednsDomain) {
corednsDomain = corednsDomain.substring(8);
2026-05-14 16:02:11 -04:00
const parts = corednsDomain.split("/");
2026-05-14 16:00:59 -04:00
if (parts.length < 2) return false;
const path = parts.reverse().join(".");
return path;
}
2026-05-14 14:47:48 -04:00
2026-05-14 16:00:59 -04:00
async function GetAllRecords(domain) {
2026-05-14 14:51:10 -04:00
const prefix = DomainToCoreDNS(domain);
2026-05-14 14:20:51 -04:00
if (!prefix) throw new Error("Invalid domain");
const kvs = await client.getAll().prefix(prefix).strings();
return kvs;
2026-05-14 11:15:30 -04:00
}
2026-05-14 14:20:51 -04:00
async function RegisterNewDomain(domain) {
const prefix = DomainToCoreDNS(domain);
2026-05-14 14:32:57 -04:00
if (!prefix) throw new Error("Invalid domain");
2026-05-14 11:15:30 -04:00
2026-05-14 14:32:57 -04:00
const key = `${prefix}`;
2026-05-14 17:18:48 -04:00
const value = JSON.stringify({ host: '10.66.66.1', ttl: 300 });
2026-05-14 11:15:30 -04:00
2026-05-14 14:20:51 -04:00
await client.put(key).value(value);
2026-05-14 11:15:30 -04:00
}
module.exports = {
2026-05-14 16:00:59 -04:00
CoreDNSToDomain,
2026-05-14 14:21:46 -04:00
GetAllRecords,
RegisterNewDomain
2026-05-14 11:15:30 -04:00
}