api_cert.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package admin
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io"
  6. "net/http"
  7. "os"
  8. "github.com/bjdgyc/anylink/base"
  9. "github.com/bjdgyc/anylink/dbdata"
  10. )
  11. func CustomCert(w http.ResponseWriter, r *http.Request) {
  12. cert, _, err := r.FormFile("cert")
  13. if err != nil {
  14. RespError(w, RespInternalErr, err)
  15. return
  16. }
  17. key, _, err := r.FormFile("key")
  18. if err != nil {
  19. RespError(w, RespInternalErr, err)
  20. return
  21. }
  22. certFile, err := os.OpenFile(base.Cfg.CertFile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0600)
  23. if err != nil {
  24. RespError(w, RespInternalErr, err)
  25. return
  26. }
  27. defer certFile.Close()
  28. if _, err := io.Copy(certFile, cert); err != nil {
  29. RespError(w, RespInternalErr, err)
  30. return
  31. }
  32. keyFile, err := os.OpenFile(base.Cfg.CertKey, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0600)
  33. if err != nil {
  34. RespError(w, RespInternalErr, err)
  35. return
  36. }
  37. defer keyFile.Close()
  38. if _, err := io.Copy(keyFile, key); err != nil {
  39. RespError(w, RespInternalErr, err)
  40. return
  41. }
  42. if tlscert, _, err := dbdata.ParseCert(); err != nil {
  43. RespError(w, RespInternalErr, fmt.Sprintf("证书不合法,请重新上传:%v", err))
  44. return
  45. } else {
  46. dbdata.LoadCertificate(tlscert)
  47. }
  48. RespSucess(w, "上传成功")
  49. }
  50. func GetCertSetting(w http.ResponseWriter, r *http.Request) {
  51. sess := dbdata.GetXdb().NewSession()
  52. defer sess.Close()
  53. data := &dbdata.SettingLetsEncrypt{}
  54. if err := dbdata.SettingGet(data); err != nil {
  55. dbdata.SettingSessAdd(sess, data)
  56. RespError(w, RespInternalErr, err)
  57. }
  58. userData := &dbdata.LegoUserData{}
  59. if err := dbdata.SettingGet(userData); err != nil {
  60. dbdata.SettingSessAdd(sess, userData)
  61. }
  62. RespSucess(w, data)
  63. }
  64. func CreatCert(w http.ResponseWriter, r *http.Request) {
  65. if err := r.ParseForm(); err != nil {
  66. http.Error(w, err.Error(), http.StatusBadRequest)
  67. return
  68. }
  69. body, err := io.ReadAll(r.Body)
  70. if err != nil {
  71. RespError(w, RespInternalErr, err)
  72. return
  73. }
  74. defer r.Body.Close()
  75. config := &dbdata.SettingLetsEncrypt{}
  76. if err := json.Unmarshal(body, config); err != nil {
  77. RespError(w, RespInternalErr, err)
  78. return
  79. }
  80. if err := dbdata.SettingSet(config); err != nil {
  81. RespError(w, RespInternalErr, err)
  82. return
  83. }
  84. client := dbdata.LeGoClient{}
  85. if err := client.NewClient(config); err != nil {
  86. base.Error(err)
  87. RespError(w, RespInternalErr, fmt.Sprintf("获取证书失败:%v", err))
  88. return
  89. }
  90. if err := client.GetCert(config.Domain); err != nil {
  91. base.Error(err)
  92. RespError(w, RespInternalErr, fmt.Sprintf("获取证书失败:%v", err))
  93. return
  94. }
  95. RespSucess(w, "生成证书成功")
  96. }