saveHosts.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /**
  2. * @author oldj
  3. * @blog https://oldj.net
  4. */
  5. 'use strict'
  6. const version = require('../../version').version
  7. const paths = require('../paths')
  8. const io = require('../io')
  9. const jsbeautify = require('js-beautify').js_beautify
  10. const apply = require('../apply')
  11. const sudo = require('../sudo')
  12. const makeOutHosts = require('../makeOutHosts')
  13. const cleanData = require('../cleanData')
  14. const checkAllRemoteHostses = require('./checkAllRemoteHostses')
  15. function tryToApply (svr, cnt, pswd) {
  16. return new Promise((resolve, reject) => {
  17. return apply(cnt, pswd)
  18. .then(() => resolve())
  19. .catch(e => {
  20. if (e !== 'need_sudo') {
  21. reject(e)
  22. return
  23. }
  24. sudo(svr)
  25. .then(pswd => {
  26. return tryToApply(svr, cnt, pswd)
  27. .then(() => resolve())
  28. .catch(e => reject(e))
  29. })
  30. .catch(e => reject(e))
  31. })
  32. })
  33. }
  34. module.exports = (svr, list) => {
  35. return checkAllRemoteHostses(svr, list)
  36. .then(list => cleanData(list))
  37. .then(list => {
  38. let fn = paths.data_path
  39. let data = {
  40. list,
  41. version
  42. }
  43. let cnt = JSON.stringify(data)
  44. cnt = jsbeautify(cnt, {
  45. indent_size: 2
  46. })
  47. let out = makeOutHosts(list)
  48. // try to update system hosts
  49. return tryToApply(svr, out)
  50. .then(() => io.pWriteFile(fn, cnt))
  51. .then(() => list)
  52. })
  53. }