Hitesh
5 years ago
2 changed files with 96 additions and 52 deletions
@ -1,77 +1,121 @@ |
|||
'use strict'; |
|||
|
|||
var request; |
|||
var defaults = {}; |
|||
var defaults = { |
|||
baseUrl: 'https://api.dnsimple.com/v2/' |
|||
}; |
|||
|
|||
module.exports.create = function(config) { |
|||
var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, ''); |
|||
var token = config.token; |
|||
var account = config.account; |
|||
|
|||
function api(method, path, form) { |
|||
var req = { |
|||
method: method, |
|||
url: baseUrl + path, |
|||
headers: { |
|||
Authorization: 'Bearer ' + token, |
|||
'Content-Type': 'application/json' |
|||
}, |
|||
json: true, |
|||
form: form |
|||
}; |
|||
return request(req).then(function(resp) { |
|||
if (2 !== Math.floor(resp.statusCode / 100)) { |
|||
console.error(resp.statusCode, req.url); |
|||
console.error(); |
|||
console.error('Request:'); |
|||
console.error(req); |
|||
console.error(); |
|||
console.error('Response:'); |
|||
console.error(resp.body); |
|||
console.error(); |
|||
throw new Error( |
|||
'Error response. Check token, baseUrl, domains, etc.' |
|||
); |
|||
} |
|||
return resp; |
|||
}); |
|||
} |
|||
|
|||
return { |
|||
init: function(opts) { |
|||
request = opts.request; |
|||
return null; |
|||
}, |
|||
zones: function(data) { |
|||
<<<<<<< HEAD |
|||
// console.info('List Zones', data);
|
|||
return api('GET', '/' + account + '/zones') |
|||
.then(function(resp) { |
|||
return resp['body']['data'].map(function(elem) { |
|||
// console.log('DEBUG >>> elem.name: ' + elem.name);
|
|||
return elem.name; |
|||
return api('GET', '/' + account + '/zones').then(function(resp) { |
|||
return resp['body']['data'].map(function(elem) { |
|||
//console.log('DEBUG >>> elem.name: ' + elem.name);
|
|||
return elem.name; |
|||
}); |
|||
}); |
|||
======= |
|||
//console.info('List Zones', data);
|
|||
throw Error('listing zones not implemented'); |
|||
>>>>>>> parent of 16db087... integration tests passed |
|||
}, |
|||
set: function(data) { |
|||
// console.info('Add TXT', data);
|
|||
throw Error('setting TXT not implemented'); |
|||
}, |
|||
remove: function(data) { |
|||
// console.info('Remove TXT', data);
|
|||
throw Error('removing TXT not implemented'); |
|||
var ch = data.challenge; |
|||
var txt = ch.dnsAuthorization; |
|||
|
|||
return api( |
|||
'POST', |
|||
'/' + account + '/zones/' + ch.dnsZone + '/records', |
|||
{ |
|||
name: '', |
|||
type: 'TXT', |
|||
content: txt |
|||
} |
|||
).then(function(resp) { |
|||
if (resp.statusCode === 201) { |
|||
return true; |
|||
} |
|||
throw new Error( |
|||
'record did not set. check subdomain, api key, etc' |
|||
); |
|||
}); |
|||
}, |
|||
get: function(data) { |
|||
// console.info('List TXT', data);
|
|||
<<<<<<< HEAD |
|||
|
|||
return api('GET', '/' + account + '/zones/' + data.challenge.dnsZone + '/records') |
|||
.then(function(resp) { |
|||
|
|||
var record = resp.body.data.filter(function (record) { |
|||
return data.challenge.dnsAuthorization === record.content; |
|||
})[0]; |
|||
|
|||
if(txtRecord) return { dnsAuthorization: record.content }; |
|||
else return null; |
|||
|
|||
}); |
|||
return api( |
|||
'GET', |
|||
'/' + account + '/zones/' + data.challenge.dnsZone + '/records' |
|||
).then(function(resp) { |
|||
var record = resp.body.data.filter(function(record) { |
|||
return data.challenge.dnsAuthorization === record.content; |
|||
})[0]; |
|||
|
|||
if (record) return { dnsAuthorization: record.content }; |
|||
else return null; |
|||
}); |
|||
}, |
|||
remove: function(data) { |
|||
return api( |
|||
'GET', |
|||
'/' + account + '/zones/' + data.challenge.dnsZone + '/records' |
|||
).then(function(resp) { |
|||
var record = resp.body.data.filter(function(record) { |
|||
return data.challenge.dnsAuthorization === record.content; |
|||
})[0]; |
|||
|
|||
return api('GET', '/' + account + '/zones/' + data.challenge.dnsZone + '/records') |
|||
.then(function(resp) { |
|||
|
|||
var record = resp.body.data.filter(function (record) { |
|||
return data.challenge.dnsAuthorization === record.content; |
|||
})[0]; |
|||
|
|||
if(record) { |
|||
return api('DELETE', '/' + account + '/zones/' + data.challenge.dnsZone + '/records/' + record.id) |
|||
.then(function(resp) { |
|||
// console.info('DEBUG >>> resp: ', JSON.stringify(resp, null, 2));
|
|||
return true; |
|||
}); |
|||
} |
|||
else { |
|||
throw new Error('Txt Record not found for removal'); |
|||
} |
|||
}); |
|||
======= |
|||
throw Error('listing TXTs not implemented'); |
|||
>>>>>>> parent of 16db087... integration tests passed |
|||
if (record) { |
|||
return api( |
|||
'DELETE', |
|||
'/' + |
|||
account + |
|||
'/zones/' + |
|||
data.challenge.dnsZone + |
|||
'/records/' + |
|||
record.id |
|||
).then(function(resp) { |
|||
// console.info('DEBUG >>> resp: ', JSON.stringify(resp, null, 2));
|
|||
return true; |
|||
}); |
|||
} else { |
|||
throw new Error('Txt Record not found for removal'); |
|||
} |
|||
}); |
|||
} |
|||
}; |
|||
}; |
|||
|
Loading…
Reference in new issue