let { appKey, appSecret, consumerKey } = require('./credentials.json'); const fs = require('fs'); const Promise = require('bluebird'); const _ = require('lodash'); const ovh = require('ovh')({ endpoint: 'ovh-eu', appKey, appSecret, consumerKey }); function requestConsumerKey() { return ovh.requestPromised('POST', '/auth/credential', { 'accessRules': [ { 'method': 'GET', 'path': '/me'}, { 'method': 'GET', 'path': '/domain/zone'}, { 'method': 'GET', 'path': '/domain/zone/*'}, { 'method': 'GET', 'path': '/domain/zone/*/record'}, { 'method': 'GET', 'path': '/domain/zone/*/record/*'}, { 'method': 'POST', 'path': '/domain/zone/*/record'}, { 'method': 'POST', 'path': '/domain/zone/*/refresh'}, // { 'method': 'PUT', 'path': '/domain/*'}, // { 'method': 'DELETE', 'path': '/domain/*'} ] }) .then(function (credentials) { console.log('requestConsumerKey', credentials); consumerKey = credentials.consumerKey; fs.writeFileSync('credentials.json', JSON.stringify({ appKey, appSecret, consumerKey })); }) .catch(function (err) { console.log('requestConsumerKey err', err); //Return an error object like this {error: statusCode, message: message} }); } function readDomains() { console.log('readDomains'); return ovh.requestPromised('GET', '/domain/zone') .then(response => { console.log(response, typeof response, Object.prototype.toString.call(Object.values(response)) ); return Object.values(response); }) .catch(err => { console.log('readDomains ERR', err); throw err; }) } function readRecords(domain) { console.log('readRecords'); return ovh.requestPromised('GET', '/domain/zone/' + domain + '/record') .then(response => { return Object.values(response); }) .then(recordIds => Promise.map(recordIds, recordId => ovh.requestPromised('GET', '/domain/zone/' + domain + '/record/' + recordId) )) .then(response => { return Object.values(response); }) .catch(err => { console.log('readRecords ERR', err); throw err; }) } function readMe() { console.log('readMe'); return ovh.requestPromised('GET', '/me') .then(response => { console.log(response) }) .catch(err => { console.log(err); }) } function passLog(label) { return obj => { console.log(label, obj); return obj; } } if(consumerKey) { let domains; readDomains() .then(passLog('domains')) .then(_domains => { domains = _domains; return Promise.map(_domains, domain => readRecords(domain)); }) .then(passLog('subdomains')) .then(results => { // console.log('## results for all domains', results); results.forEach((recordsForDomain, index) => { const domain = domains[index]; console.log('### DOMAIN: ' + domain); const filtered = recordsForDomain.filter(r => (r.fieldType === 'A' || (r.fieldType === 'CNAME' && r.target === domain + '.'))); const lines = filtered.map(r => (r.subDomain + ' => ' + r.fieldType)); console.log(lines.join('\n')); }) }); // readCurrentConsumerKey(); } else { requestConsumerKey(); } function readCurrentConsumerKey(){ console.log('readCurrentConsumerKey'); return ovh.requestPromised('GET', '/auth/currentCredential') .then(response => { console.log(response) }) .catch(err => { console.log(err); }) }