1 var REG_NONE = NewRegistrar("none");
 
   2 var REG_GANDI = NewRegistrar("gandi_v5");
 
   3 var PROVIDER = NewDnsProvider("cloudflare");
 
   9 var QUALIFY = function (name) {
 
  10   return name + "." + DOMAIN + ".";
 
  13 function loadTemplate(template) {
 
  14   return function (domain, registrar) {
 
  16     REGISTRAR = registrar;
 
  18     require("src/" + template + ".js");
 
  23  * Create A, optional AAAA, and optional HTTPS (SVCB) records for an OSM web service,
 
  24  * with optional Cloudflare proxy support.
 
  26  * @param {string} name                - Hostname (e.g. "www").
 
  27  * @param {string[]} servers           - Required array of servers.
 
  28  * @param {Object} [options]           - Optional settings for HTTPS and Cloudflare.
 
  29  * @param {boolean} [options.h1=false]  - If true, sets HTTPS apn=http1.1
 
  30  * @param {boolean} [options.h2=true]  - If true, sets HTTPS apn=h2
 
  31  * @param {boolean} [options.h3=false]  - If true, sets HTTPS apn=h3
 
  32  * @param {boolean} [options.cfproxy=false] - If true, enables Cloudflare proxy on A/AAAA.
 
  35 function osm_web_service(
 
  41   // If servers is a string, convert to a single-element array
 
  42   if (typeof servers === "string") {
 
  46   if (options === undefined) {
 
  50   // Set default values for options.h1, options.h2, and options.h3
 
  51   options.h1 = options.h1 !== undefined ? options.h1 : false;
 
  52   options.h2 = options.h2 !== undefined ? options.h2 : true;
 
  53   options.h3 = options.h3 !== undefined ? options.h3 : false;
 
  59   servers.forEach(function(serverName) {
 
  60     if (IPV4[serverName]) {
 
  61       ipv4s.push(IPV4[serverName]);
 
  62       if (!options.cfproxy) {
 
  63         records.push(A(name, IPV4[serverName]));
 
  65         records.push(A(name, IPV4[serverName], CF_PROXY_ON));
 
  68     if (IPV6[serverName]) {
 
  69       ipv6s.push(IPV6[serverName]);
 
  70       if (!options.cfproxy) {
 
  71         records.push(AAAA(name, IPV6[serverName]));
 
  73         records.push(AAAA(name, IPV6[serverName], CF_PROXY_ON));
 
  78   if (ipv4s.length === 0 && ipv6s.length === 0) {
 
  79     throw new Error("An IPv4 or IPv6 address is required for " + name + " service");
 
  83   // Build a parameter string for DNSControl HTTPS() syntax.
 
  84   // Example: "ipv4hint=1.2.3.4,1.2.3.5 ipv6hint=2001:db8::1,2001:db8::2 alpn=h2"
 
  87   if (ipv4s.length > 0) {
 
  88     // Join IPv4 addresses with comma+space
 
  89     paramParts.push("ipv4hint=" + ipv4s.join(","));
 
  91   if (ipv6s.length > 0) {
 
  92     // Join IPv6 addresses with comma+space
 
  93     paramParts.push("ipv6hint=" + ipv6s.join(","));
 
  96   if (options.h1 || options.h2 || options.h3) {
 
  97     var paramPartsALPN = [];
 
  99       paramPartsALPN.push("h3");
 
 102       paramPartsALPN.push("h2");
 
 105       paramPartsALPN.push("http/1.1");
 
 107     paramParts.push("alpn=" + paramPartsALPN.join(","));
 
 110   // Join the parts with a space
 
 111   var paramString = paramParts.join(" ");
 
 113   // Create the HTTPS record with 4 arguments
 
 114   records.push(HTTPS(name, 1, ".", paramString));
 
 120 // Ensure that the reverse DNS records are in RFC 4183 notation
 
 121 REVCOMPAT("rfc4183");
 
 123 var IPV4 = require("src/ipv4.json");
 
 124 var IPV6 = require("src/ipv6.json");
 
 126 var HOST_RECORDS = [];
 
 128 for (var name in IPV4) {
 
 129   HOST_RECORDS.push(A(name, IPV4[name]));
 
 132 for (var name in IPV6) {
 
 133   HOST_RECORDS.push(AAAA(name, IPV6[name]));
 
 136 var OPENSTREETMAP = loadTemplate("openstreetmap");
 
 138 require("include/sshfp.js");
 
 139 require("include/nominatim.js");
 
 142   require("include/geo.js");
 
 144   var GEO_NS_RECORDS = [];
 
 147 OPENSTREETMAP("openstreetmap.org", REG_GANDI);
 
 148 OPENSTREETMAP("openstreetmap.com", REG_GANDI);
 
 149 OPENSTREETMAP("openstreetmap.net", REG_GANDI);
 
 150 OPENSTREETMAP("openstreetmap.ca", REG_GANDI);
 
 151 OPENSTREETMAP("openstreetmap.eu", REG_NONE);
 
 152 OPENSTREETMAP("openstreetmap.pro", REG_GANDI);
 
 153 OPENSTREETMAP("openstreetmap.gay", REG_GANDI);
 
 154 OPENSTREETMAP("openstreetmaps.org", REG_GANDI);
 
 155 OPENSTREETMAP("osm.org", REG_GANDI);
 
 156 OPENSTREETMAP("openmaps.org", REG_GANDI);
 
 157 OPENSTREETMAP("openstreetmap.io", REG_GANDI);
 
 158 OPENSTREETMAP("osm.io", REG_GANDI);
 
 159 OPENSTREETMAP("openstreetmap.li", REG_GANDI);
 
 160 OPENSTREETMAP("openworldmap.org", REG_GANDI);
 
 161 OPENSTREETMAP("freeosm.org", REG_GANDI);
 
 162 OPENSTREETMAP("open-maps.org", REG_GANDI);
 
 163 OPENSTREETMAP("open-maps.com", REG_GANDI);
 
 164 OPENSTREETMAP("osmbugs.org", REG_GANDI);
 
 165 OPENSTREETMAP("openstreetmap.ai", REG_GANDI);
 
 166 OPENSTREETMAP("openstreetmap.am", REG_GANDI);
 
 167 OPENSTREETMAP("openstreetmap.fi", REG_GANDI);
 
 168 OPENSTREETMAP("openstreetmap.gr", REG_GANDI);
 
 169 OPENSTREETMAP("openstreetmap.me", REG_GANDI);
 
 170 OPENSTREETMAP("openstreetmap.mx", REG_GANDI);
 
 171 OPENSTREETMAP("openstreetmap.pe", REG_GANDI);
 
 172 OPENSTREETMAP("openstreetmap.ph", REG_GANDI);
 
 173 OPENSTREETMAP("openstreetmap.sg", REG_GANDI);
 
 174 OPENSTREETMAP("openstreetmap.tv", REG_GANDI);
 
 175 OPENSTREETMAP("openstreetmap.wales", REG_GANDI);
 
 176 OPENSTREETMAP("openstreetmapdata.org", REG_GANDI);
 
 178 // Disable due to registration issue
 
 179 // OPENSTREETMAP("openstreetmap.al", REG_NONE);
 
 181 D_EXTEND("openstreetmap.org",
 
 182   CNAME("_acme-challenge.tile", "bxve5ryiwwv7woiraq.fastly-validations.com.", TTL("10m")),
 
 184   // Uptime site at StatusCake
 
 185   CNAME("uptime", "uptimessl-new.statuscake.com."),
 
 194   CNAME("_acme-challenge.tile", "21gvdfyyxjoc4lmsem.fastly-validations.com.", TTL("10m")),
 
 200 // Mastodon redirects to en.osm.town
 
 201 var OPENSTREETMAP_TOWN = loadTemplate("openstreetmap-town");
 
 202 OPENSTREETMAP_TOWN("openstreetmap.town", REG_GANDI);
 
 204 // Domain owned by Amanda McCann
 
 207 // Managed independently by Guillaume Rischard
 
 211 var OSM_LI = loadTemplate("osm-li");
 
 213 OSM_LI("osm.li", REG_GANDI);
 
 215 var OPENSTREETMAP_NZ = loadTemplate("openstreetmap-nz");
 
 217 OPENSTREETMAP_NZ("openstreetmap.nz", REG_GANDI);
 
 218 OPENSTREETMAP_NZ("openstreetmap.org.nz", REG_GANDI);
 
 220 var OPENSTREETMAP_UK = loadTemplate("openstreetmap-uk");
 
 222 OPENSTREETMAP_UK("openstreetmap.uk", REG_GANDI);
 
 223 OPENSTREETMAP_UK("openstreetmap.org.uk", REG_GANDI);
 
 224 OPENSTREETMAP_UK("openstreetmap.co.uk", REG_GANDI);
 
 226 var OPENSTREETMAP_ZA = loadTemplate("openstreetmap-za");
 
 228 OPENSTREETMAP_ZA("openstreetmap.org.za", REG_NONE);
 
 229 OPENSTREETMAP_ZA("osm.org.za", REG_NONE);
 
 231 var OSMFOUNDATION = loadTemplate("osmfoundation");
 
 233 OSMFOUNDATION("osmfoundation.org", REG_GANDI);
 
 235 var STATEOFTHEMAP = loadTemplate("stateofthemap");
 
 237 STATEOFTHEMAP("stateofthemap.org", REG_GANDI);
 
 238 STATEOFTHEMAP("stateofthemap.com", REG_GANDI);
 
 239 STATEOFTHEMAP("sotm.org", REG_GANDI);
 
 241 // The domain is registation is managed by FOSSGIS.de
 
 242 var STATEOFTHEMAP_EU = loadTemplate("stateofthemap-eu");
 
 243 STATEOFTHEMAP_EU("stateofthemap.eu", REG_NONE);
 
 245 // State of the Map Madagascar
 
 246 var OPENSTREETMAP_MG = loadTemplate("openstreetmap-mg");
 
 247 OPENSTREETMAP_MG("openstreetmap.mg", REG_GANDI);
 
 249 var OPENGEODATA = loadTemplate("opengeodata");
 
 250 OPENGEODATA("opengeodata.org", REG_GANDI);
 
 252 var SWITCH2OSM = loadTemplate("switch2osm");
 
 254 SWITCH2OSM("switch2osm.org", REG_GANDI);
 
 255 SWITCH2OSM("switch2osm.com", REG_GANDI);
 
 257 var OSM2PGSQL = loadTemplate("osm2pgsql");
 
 259 OSM2PGSQL("osm2pgsql.org", REG_GANDI);
 
 260 OSM2PGSQL("osm2pgsql.com", REG_GANDI);
 
 262 var IDEDITOR = loadTemplate("ideditor");
 
 264 IDEDITOR("ideditor.com", REG_GANDI);
 
 266 var OSMWIKI = loadTemplate("osm-wiki");
 
 267 OSMWIKI("osm.wiki", REG_GANDI);
 
 269 var PTR_HE_AMS_IPV4 = loadTemplate("ptr_he_ams_ipv4");
 
 271 PTR_HE_AMS_IPV4(REV("184.104.179.128/27"), REG_NONE);
 
 273 var PTR_HE_AMS_IPV6 = loadTemplate("ptr_he_ams_ipv6");
 
 275 PTR_HE_AMS_IPV6(REV("2001:470:1:fa1::/64"), REG_NONE);
 
 277 var PTR_HE_DUB_IPV4 = loadTemplate("ptr_he_dub_ipv4");
 
 279 PTR_HE_DUB_IPV4(REV("184.104.226.96/27"), REG_NONE);
 
 281 var PTR_HE_DUB_IPV6 = loadTemplate("ptr_he_dub_ipv6");
 
 283 PTR_HE_DUB_IPV6(REV("2001:470:1:b3b::/64"), REG_NONE);
 
 285 var PTR_EQUINIX_AMS_IPV4 = loadTemplate("ptr_equinix_ams_ipv4");
 
 287 PTR_EQUINIX_AMS_IPV4(REV("82.199.86.96/27"), REG_NONE);
 
 289 var PTR_EQUINIX_AMS_IPV6 = loadTemplate("ptr_equinix_ams_ipv6");
 
 291 PTR_EQUINIX_AMS_IPV6(REV("2001:4d78:500:5e3::/64"), REG_NONE);
 
 293 var PTR_EQUINIX_DUB_IPV4 = loadTemplate("ptr_equinix_dub_ipv4");
 
 295 PTR_EQUINIX_DUB_IPV4(REV("87.252.214.96/27"), REG_NONE);
 
 297 var PTR_EQUINIX_DUB_IPV6 = loadTemplate("ptr_equinix_dub_ipv6");
 
 299 PTR_EQUINIX_DUB_IPV6(REV("2001:4d78:fe03:1c::/64"), REG_NONE);
 
 301 // No immediate plans
 
 302 // External DNS and hosting still up
 
 303 // freethepostcode.org
 
 305 // External DNS and hosting
 
 306 // openstreetmap.cymru