netcupdns
Version:
minimal JS wrapper for netcup DNS settings; easy dyndns;
133 lines (126 loc) • 4.48 kB
JavaScript
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);
}