shell.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // 调用命令
  2. 'use strict';
  3. const Service = require('egg').Service;
  4. const exec = require('child_process').exec;
  5. const fs = require('fs');
  6. class ShellService extends Service {
  7. async shell(shellString) {
  8. console.log(shellString, 'shellString');
  9. return new Promise((resolve, reject) => {
  10. exec(shellString, function(error, stdout) {
  11. if (error) {
  12. reject(error);
  13. }
  14. resolve({ errcode: 0, errmsg: '', data: stdout && stdout.trim() });
  15. });
  16. });
  17. }
  18. // 解析ca证书
  19. async read({ filePath }) {
  20. return new Promise((resolve, reject) => {
  21. exec(`openssl x509 -in ${filePath} -noout -text -certopt no_header,no_version,no_extensions,no_sigdump,no_serial`, function(error, stdout) {
  22. if (error) {
  23. reject(error);
  24. }
  25. resolve({ errcode: 0, errmsg: '', data: stdout });
  26. });
  27. });
  28. }
  29. // 创建key
  30. async applykey({ pwatype, filePath }) {
  31. return new Promise((resolve, reject) => {
  32. // 创建密钥对
  33. exec(`pki --gen --type ${pwatype} ${pwatype === 'rsa' ? '--size 2048' : ''} --outform pem`, function(error, stdout) {
  34. if (error) {
  35. reject(error);
  36. }
  37. fs.writeFile(filePath, stdout, {}, function(err) {
  38. if (err) {
  39. reject(err);
  40. }
  41. resolve({ errmsg: '', errcode: 0 });
  42. });
  43. });
  44. });
  45. }
  46. async applyreq({ dn, keyPath, filePath }) {
  47. return new Promise((resolve, reject) => {
  48. // 创建申请书
  49. exec(`pki --req --type priv --in ${keyPath} \ --dn ${dn} \ --outform pem`, function(error, stdout) {
  50. if (error) {
  51. reject(error);
  52. }
  53. fs.writeFile(filePath, stdout, {}, function(err) {
  54. if (err) {
  55. fs.unlink(keyPath, function(err) {
  56. if (err) {
  57. reject(err);
  58. }
  59. });
  60. reject(err);
  61. }
  62. resolve({ errmsg: '', errcode: 0 });
  63. });
  64. });
  65. });
  66. }
  67. // 拆出key
  68. async keys({ fileName, password }) {
  69. return new Promise((resolve, reject) => {
  70. exec(`openssl pkcs12 -info -in ${fileName} -nodes -nocerts -password pass:${password}`, function(error, stdout) {
  71. if (error) {
  72. reject(error);
  73. }
  74. const srart = stdout.indexOf('-----BEGIN PRIVATE KEY-----');
  75. const data = stdout.slice(srart, stdout.length);
  76. resolve({ errcode: 0, errmsg: '', data });
  77. });
  78. });
  79. }
  80. // key格式转换
  81. async transform({ files, target }) {
  82. return new Promise((resolve, reject) => {
  83. exec(`openssl pkcs8 -in ${files} -traditional -out ${target} -nocrypt`, function(error, stdout) {
  84. if (error) {
  85. reject(error);
  86. }
  87. resolve({ errcode: 0, errmsg: '', data: stdout });
  88. });
  89. });
  90. }
  91. // 拆出证书
  92. async certs({ fileName, password }) {
  93. return new Promise((resolve, reject) => {
  94. exec(`openssl pkcs12 -info -in ${fileName} -password pass:${password} -nokeys -clcerts`, function(error, stdout) {
  95. if (error) {
  96. reject(error);
  97. }
  98. const srart = stdout.indexOf('-----BEGIN CERTIFICATE-----');
  99. const data = stdout.slice(srart, stdout.length);
  100. resolve({ errcode: 0, errmsg: '', data });
  101. });
  102. });
  103. }
  104. }
  105. module.exports = ShellService;