UNPKG

netcupdns

Version:

minimal JS wrapper for netcup DNS settings; easy dyndns;

133 lines (126 loc) 4.48 kB
exports.getSessionCredentials = getSessionCredentials; exports.insertOrOverwriteRecords = insertOrOverwriteRecords; exports.infoDnsRecords = infoDnsRecords; exports.updateDnsRecords = updateDnsRecords; exports.getRecordsByHostname = getRecordsByHostname; exports.getRecordsByType = getRecordsByType; exports.getRecordsByDestination = getRecordsByDestination; exports.deleteRecords = deleteRecords; const request = require("request-promise"); async function getSessionCredentials(apikey, apipassword, customernumber) { sessionCredentials = await request.post({ method: 'post', body: { action: "login", param: { apikey, apipassword, customernumber } }, json: true, url: 'https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON' }); sessionCredentials = sessionCredentials.responsedata; sessionCredentials.apikey = apikey; sessionCredentials.customernumber = customernumber; return sessionCredentials; } //takes record and inserts it; if record already exists (judged by hostname) it overwrites it async function insertOrOverwriteRecords(sessionCredentials, domainname, record) { let exists = await getRecordsByHostname(sessionCredentials, domainname, record.hostname) if (exists && exists.length != 0) { record.id = exists[0].id; return await updateDnsRecords(sessionCredentials, domainname, [record]); } else { return await updateDnsRecords(sessionCredentials, domainname, [record]); } } async function updateDnsRecords(sessionCredentials, domainname, dnsrecords) { return (await request.post({ method: 'post', body: { action: "updateDnsRecords", param: { domainname, apikey: sessionCredentials.apikey, apisessionid: sessionCredentials.apisessionid, customernumber: sessionCredentials.customernumber, dnsrecordset: { dnsrecords } } }, json: true, url: 'https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON' })).responsedata.dnsrecords; } //takes sessionCredentials and domainname; returns response of request async function infoDnsRecords(sessionCredentials, domainname) { return (await request.post({ method: 'post', body: { action: "infoDnsRecords", param: { domainname, apikey: sessionCredentials.apikey, apisessionid: sessionCredentials.apisessionid, customernumber: sessionCredentials.customernumber, } }, json: true, url: 'https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON' })).responsedata.dnsrecords } //takes single hostname as string; ('mail');returns array of matching records async function getRecordsByHostname(sessionCredentials, domainname, hostname) { const allRecords = await infoDnsRecords(sessionCredentials, domainname); if (allRecords) { let selected = []; for (let i = 0; i < allRecords.length; i++) { if (allRecords[i].hostname === hostname) { selected.push(allRecords[i]); } } return selected; } else { return false; } } //takes single type as string; ('AAAA'); returns array of matching records async function getRecordsByType(sessionCredentials, domainname, type) { const allRecords = await infoDnsRecords(sessionCredentials, domainname); if (allRecords) { let selected = []; for (let i = 0; i < allRecords.length; i++) { if (allRecords[i].type === type) { selected.push(allRecords[i]); } } return selected; } else { return false; } } //takes destination as string; returns array of matching records async function getRecordsByDestination(sessionCredentials, domainname, destination) { const allRecords = await infoDnsRecords(sessionCredentials, domainname); if (allRecords) { let selected = []; for (let i = 0; i < allRecords.length; i++) { if (allRecords[i].destination === destination) { selected.push(allRecords[i]); } } return selected; } else { return false; } } //takes array of records; deletes them; async function deleteRecords(sessionCredentials, domainname, recordsToDelete) { for (let i = 0; i < recordsToDelete.length; i++) { recordsToDelete[i].deleterecord = true; } return await updateDnsRecords(sessionCredentials, domainname, recordsToDelete); }