app.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. let { appKey, appSecret, consumerKey } = require('./credentials.json');
  2. const fs = require('fs');
  3. const Promise = require('bluebird');
  4. const _ = require('lodash');
  5. const ovh = require('ovh')({
  6. endpoint: 'ovh-eu',
  7. appKey,
  8. appSecret,
  9. consumerKey
  10. });
  11. function requestConsumerKey() {
  12. return ovh.requestPromised('POST', '/auth/credential', {
  13. 'accessRules': [
  14. { 'method': 'GET', 'path': '/me'},
  15. { 'method': 'GET', 'path': '/domain/zone'},
  16. { 'method': 'GET', 'path': '/domain/zone/*'},
  17. { 'method': 'GET', 'path': '/domain/zone/*/record'},
  18. { 'method': 'GET', 'path': '/domain/zone/*/record/*'},
  19. { 'method': 'POST', 'path': '/domain/zone/*/record'},
  20. { 'method': 'POST', 'path': '/domain/zone/*/refresh'},
  21. // { 'method': 'PUT', 'path': '/domain/*'},
  22. // { 'method': 'DELETE', 'path': '/domain/*'}
  23. ]
  24. })
  25. .then(function (credentials) {
  26. console.log('requestConsumerKey', credentials);
  27. consumerKey = credentials.consumerKey;
  28. fs.writeFileSync('credentials.json', JSON.stringify({
  29. appKey, appSecret, consumerKey
  30. }));
  31. })
  32. .catch(function (err) {
  33. console.log('requestConsumerKey err', err);
  34. //Return an error object like this {error: statusCode, message: message}
  35. });
  36. }
  37. function readDomains() {
  38. console.log('readDomains');
  39. return ovh.requestPromised('GET', '/domain/zone')
  40. .then(response => {
  41. console.log(response, typeof response, Object.prototype.toString.call(Object.values(response)) );
  42. return Object.values(response);
  43. })
  44. .catch(err => {
  45. console.log('readDomains ERR', err);
  46. throw err;
  47. })
  48. }
  49. function readRecords(domain) {
  50. console.log('readRecords');
  51. return ovh.requestPromised('GET', '/domain/zone/' + domain + '/record')
  52. .then(response => {
  53. return Object.values(response);
  54. })
  55. .then(recordIds => Promise.map(recordIds,
  56. recordId => ovh.requestPromised('GET', '/domain/zone/' + domain + '/record/' + recordId)
  57. ))
  58. .then(response => {
  59. return Object.values(response);
  60. })
  61. .catch(err => {
  62. console.log('readRecords ERR', err);
  63. throw err;
  64. })
  65. }
  66. function readMe() {
  67. console.log('readMe');
  68. return ovh.requestPromised('GET', '/me')
  69. .then(response => {
  70. console.log(response)
  71. })
  72. .catch(err => {
  73. console.log(err);
  74. })
  75. }
  76. function passLog(label) {
  77. return obj => {
  78. console.log(label, obj);
  79. return obj;
  80. }
  81. }
  82. if(consumerKey) {
  83. let domains;
  84. readDomains()
  85. .then(passLog('domains'))
  86. .then(_domains => {
  87. domains = _domains;
  88. return Promise.map(_domains, domain => readRecords(domain));
  89. })
  90. .then(passLog('subdomains'))
  91. .then(results => {
  92. // console.log('## results for all domains', results);
  93. results.forEach((recordsForDomain, index) => {
  94. const domain = domains[index];
  95. console.log('### DOMAIN: ' + domain);
  96. const filtered = recordsForDomain.filter(r => (r.fieldType === 'A' || (r.fieldType === 'CNAME' && r.target === domain + '.')));
  97. const lines = filtered.map(r => (r.subDomain + ' => ' + r.fieldType));
  98. console.log(lines.join('\n'));
  99. })
  100. });
  101. // readCurrentConsumerKey();
  102. }
  103. else {
  104. requestConsumerKey();
  105. }
  106. function readCurrentConsumerKey(){
  107. console.log('readCurrentConsumerKey');
  108. return ovh.requestPromised('GET', '/auth/currentCredential')
  109. .then(response => {
  110. console.log(response)
  111. })
  112. .catch(err => {
  113. console.log(err);
  114. })
  115. }