cert.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package model
  2. import (
  3. "github.com/0xJacky/Nginx-UI/server/pkg/nginx"
  4. "github.com/lib/pq"
  5. "os"
  6. )
  7. const (
  8. AutoCertEnabled = 1
  9. AutoCertDisabled = -1
  10. )
  11. type CertDomains []string
  12. type Cert struct {
  13. Model
  14. Name string `json:"name"`
  15. Domains pq.StringArray `json:"domains" gorm:"type:text[]"`
  16. Filename string `json:"filename"`
  17. SSLCertificatePath string `json:"ssl_certificate_path"`
  18. SSLCertificateKeyPath string `json:"ssl_certificate_key_path"`
  19. AutoCert int `json:"auto_cert"`
  20. Log string `json:"log"`
  21. }
  22. func FirstCert(confName string) (c Cert, err error) {
  23. err = db.First(&c, &Cert{
  24. Filename: confName,
  25. }).Error
  26. return
  27. }
  28. func FirstOrCreateCert(confName string) (c Cert, err error) {
  29. err = db.FirstOrCreate(&c, &Cert{Filename: confName}).Error
  30. return
  31. }
  32. func (c *Cert) Insert() error {
  33. return db.Create(c).Error
  34. }
  35. func GetAutoCertList() (c []*Cert) {
  36. var t []*Cert
  37. db.Where("auto_cert", AutoCertEnabled).Find(&t)
  38. // check if this domain is enabled
  39. enabledConfig, err := os.ReadDir(nginx.GetConfPath("sites-enabled"))
  40. if err != nil {
  41. return
  42. }
  43. enabledConfigMap := make(map[string]bool)
  44. for i := range enabledConfig {
  45. enabledConfigMap[enabledConfig[i].Name()] = true
  46. }
  47. for _, v := range t {
  48. if enabledConfigMap[v.Filename] == true {
  49. c = append(c, v)
  50. }
  51. }
  52. return
  53. }
  54. func GetCertList(name, domain string) (c []Cert) {
  55. tx := db
  56. if name != "" {
  57. tx = tx.Where("name LIKE ? or domain LIKE ?", "%"+name+"%", "%"+name+"%")
  58. }
  59. if domain != "" {
  60. tx = tx.Where("domain LIKE ?", "%"+domain+"%")
  61. }
  62. tx.Find(&c)
  63. return
  64. }
  65. func FirstCertByID(id int) (c Cert, err error) {
  66. err = db.First(&c, id).Error
  67. return
  68. }
  69. func (c *Cert) Updates(n *Cert) error {
  70. return db.Model(&Cert{}).Where("id", c.ID).Updates(n).Error
  71. }
  72. func (c *Cert) ClearLog() {
  73. db.Model(&Cert{}).Where("id", c.ID).Update("log", "")
  74. }
  75. func (c *Cert) Remove() error {
  76. if c.Filename == "" {
  77. return db.Delete(c).Error
  78. }
  79. return db.Where("filename", c.Filename).Delete(c).Error
  80. }