cert.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package api
  2. import (
  3. "github.com/0xJacky/Nginx-UI/server/model"
  4. "github.com/0xJacky/Nginx-UI/server/pkg/cert"
  5. "github.com/0xJacky/Nginx-UI/server/pkg/nginx"
  6. "github.com/gin-gonic/gin"
  7. "github.com/gorilla/websocket"
  8. "log"
  9. "net/http"
  10. "os"
  11. )
  12. func IssueCert(c *gin.Context) {
  13. domain := c.Param("domain")
  14. var upGrader = websocket.Upgrader{
  15. CheckOrigin: func(r *http.Request) bool {
  16. return true
  17. },
  18. }
  19. // upgrade http to websocket
  20. ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
  21. if err != nil {
  22. log.Println(err)
  23. return
  24. }
  25. defer func(ws *websocket.Conn) {
  26. err := ws.Close()
  27. if err != nil {
  28. log.Println("defer websocket close err", err)
  29. }
  30. }(ws)
  31. // read
  32. mt, message, err := ws.ReadMessage()
  33. if err != nil {
  34. log.Println(err)
  35. return
  36. }
  37. if mt == websocket.TextMessage && string(message) == "go" {
  38. err = cert.IssueCert(domain)
  39. if err != nil {
  40. log.Println(err)
  41. err = ws.WriteJSON(gin.H{
  42. "status": "error",
  43. "message": err.Error(),
  44. })
  45. if err != nil {
  46. log.Println(err)
  47. return
  48. }
  49. return
  50. }
  51. sslCertificatePath := nginx.GetNginxConfPath("ssl/" + domain + "/fullchain.cer")
  52. _, err = os.Stat(sslCertificatePath)
  53. if err != nil {
  54. log.Println(err)
  55. return
  56. }
  57. log.Println("[found]", "fullchain.cer")
  58. err = ws.WriteJSON(gin.H{
  59. "status": "success",
  60. "message": "[found] fullchain.cer",
  61. })
  62. if err != nil {
  63. log.Println(err)
  64. return
  65. }
  66. sslCertificateKeyPath := nginx.GetNginxConfPath("ssl/" + domain + "/" + domain + ".key")
  67. _, err = os.Stat(sslCertificateKeyPath)
  68. if err != nil {
  69. log.Println(err)
  70. return
  71. }
  72. log.Println("[found]", "cert key")
  73. err = ws.WriteJSON(gin.H{
  74. "status": "success",
  75. "message": "[found] Certificate Key",
  76. })
  77. if err != nil {
  78. log.Println(err)
  79. return
  80. }
  81. certModel, err := model.FirstCert(domain)
  82. if err != nil {
  83. log.Println(err)
  84. return
  85. }
  86. err = certModel.Updates(&model.Cert{
  87. SSLCertificatePath: sslCertificatePath,
  88. })
  89. if err != nil {
  90. log.Println(err)
  91. return
  92. }
  93. err = ws.WriteJSON(gin.H{
  94. "status": "success",
  95. "message": "Issued certificate successfully",
  96. "ssl_certificate": sslCertificatePath,
  97. "ssl_certificate_key": sslCertificateKeyPath,
  98. })
  99. if err != nil {
  100. log.Println(err)
  101. return
  102. }
  103. }
  104. }