Daplie DNS API - Dynamic DNS Server for Node.js
STOP: You probably want node-ddns
A Dynamic DNS (DDNS / DynDNS) API written in node.js.
This is one distinct part of a 3-part system.
- node-ddns (full stack demo)
- node-ddns-api (RESTful HTTP API)
- node-ddns-frontend (HTML5 Management App)
- node-ddns-service (UDP DNS Server)
Install
npm install --global rsa-compat git clone https://github.com/Daplie/node-ddns-api.gitpushd node-ddns-api/
Usage
You need to have an rsa keypair. You can generate one (even on Windows) using rsa-keygen-js
which is installed with rsa-compat
in the step above.
rsa-keygen-js
'use strict'; var fs = ;var path = ;var app = ; var ddnsPubPem = fs;var ddnsStore = ; var ddns = ; var plainPort = 3000;;
API
Each domain record is tied to a specific device.
Whenever a device is updated, all associated records for that device are also updated.
API Prefix
The standard API prefix is /api/com.daplie.ddns
, but this may be changed arbitrarily.
All of the examples below assume /api/com.daplie.ddns
Public
GET /public
returns all records which are publicly visible
"createdAt": "1459977507858" "device": "localhost" "host": "example.daplie.me" "id": "o7khWjafqw_2185sxEmWaiBQ42o" "name": "example.daplie.me" "registered": true "ttl": 300 "type": "A" "updatedAt": "1459977508125" "value": "127.0.0.1" "zone": "aj.daplie.me"
Authorized
Authorization happens via JWT token. The JWT contains the following fields:
"cn": "*.example.com" // example.com, .example.com, *.example.com, www.example.com
DNS Records
GET /records
returns all records for which the JWT matches thecn
fieldPOST /records
DELETE /records/:name/:type/:value/:device?
Device Records
POST /devices
accepts{ name: 'rpi3', addresses: { type: 'A', value: '127.0.0.1' } }
DELETE /devices/:name
delete a device and all attached domain recordsDELETE /devices/:name/:tld/:sld/:sub?
delete matching domain records from deviceDELETE /devices/:device/:domain
delete matching domain records from device
DDNS Updates
POST /ddns
accepts{ records: [{ registered: true, groupIdx: '...', type: 'A', host: 'sub.domain.tld', value: 127.0.0.1, ttl: 600, }] }
LICENSE
Dual-licensed MIT and Apache-2.0
See LICENSE