cert.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package api
  2. import (
  3. "encoding/json"
  4. "github.com/0xJacky/Nginx-UI/server/settings"
  5. "github.com/0xJacky/Nginx-UI/server/tool"
  6. "github.com/0xJacky/Nginx-UI/server/tool/nginx"
  7. "github.com/gin-gonic/gin"
  8. "github.com/gorilla/websocket"
  9. "log"
  10. "net/http"
  11. "os"
  12. )
  13. func CertInfo(c *gin.Context) {
  14. domain := c.Param("domain")
  15. key, err := tool.GetCertInfo(domain)
  16. if err != nil {
  17. ErrHandler(c, err)
  18. return
  19. }
  20. c.JSON(http.StatusOK, gin.H{
  21. "subject_name": key.Subject.CommonName,
  22. "issuer_name": key.Issuer.CommonName,
  23. "not_after": key.NotAfter,
  24. "not_before": key.NotBefore,
  25. })
  26. }
  27. func IssueCert(c *gin.Context) {
  28. domain := c.Param("domain")
  29. var upGrader = websocket.Upgrader{
  30. CheckOrigin: func(r *http.Request) bool {
  31. return true
  32. },
  33. }
  34. // upgrade http to websocket
  35. ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
  36. if err != nil {
  37. log.Println(err)
  38. return
  39. }
  40. defer func(ws *websocket.Conn) {
  41. err := ws.Close()
  42. if err != nil {
  43. log.Println(err)
  44. return
  45. }
  46. }(ws)
  47. for {
  48. // read
  49. mt, message, err := ws.ReadMessage()
  50. if err != nil {
  51. break
  52. }
  53. if string(message) == "go" {
  54. var m []byte
  55. if settings.ServerSettings.Demo {
  56. m, _ = json.Marshal(gin.H{
  57. "status": "error",
  58. "message": "this feature is not available in demo",
  59. })
  60. _ = ws.WriteMessage(mt, m)
  61. return
  62. }
  63. err = tool.IssueCert(domain)
  64. if err != nil {
  65. log.Println(err)
  66. m, err = json.Marshal(gin.H{
  67. "status": "error",
  68. "message": err.Error(),
  69. })
  70. if err != nil {
  71. log.Println(err)
  72. return
  73. }
  74. err = ws.WriteMessage(mt, m)
  75. if err != nil {
  76. log.Println(err)
  77. return
  78. }
  79. return
  80. }
  81. sslCertificatePath := nginx.GetNginxConfPath("ssl/" + domain + "/fullchain.cer")
  82. _, err = os.Stat(sslCertificatePath)
  83. if err != nil {
  84. log.Println(err)
  85. return
  86. }
  87. log.Println("[found]", "fullchain.cer")
  88. m, err = json.Marshal(gin.H{
  89. "status": "success",
  90. "message": "[found] fullchain.cer",
  91. })
  92. if err != nil {
  93. log.Println(err)
  94. return
  95. }
  96. err = ws.WriteMessage(mt, m)
  97. if err != nil {
  98. log.Println(err)
  99. return
  100. }
  101. sslCertificateKeyPath := nginx.GetNginxConfPath("ssl/" + domain + "/" + domain + ".key")
  102. _, err = os.Stat(sslCertificateKeyPath)
  103. if err != nil {
  104. log.Println(err)
  105. return
  106. }
  107. log.Println("[found]", "cert key")
  108. m, err = json.Marshal(gin.H{
  109. "status": "success",
  110. "message": "[found] cert key",
  111. })
  112. if err != nil {
  113. log.Println(err)
  114. }
  115. err = ws.WriteMessage(mt, m)
  116. if err != nil {
  117. log.Println(err)
  118. }
  119. log.Println("申请成功")
  120. m, err = json.Marshal(gin.H{
  121. "status": "success",
  122. "message": "申请成功",
  123. "ssl_certificate": sslCertificatePath,
  124. "ssl_certificate_key": sslCertificateKeyPath,
  125. })
  126. if err != nil {
  127. log.Println(err)
  128. }
  129. err = ws.WriteMessage(mt, m)
  130. if err != nil {
  131. log.Println(err)
  132. }
  133. }
  134. }
  135. }