cert.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. }
  21. func FirstCert(confName string) (c Cert, err error) {
  22. err = db.First(&c, &Cert{
  23. Filename: confName,
  24. }).Error
  25. return
  26. }
  27. func FirstOrCreateCert(confName string) (c Cert, err error) {
  28. err = db.FirstOrCreate(&c, &Cert{Filename: confName}).Error
  29. return
  30. }
  31. func (c *Cert) Insert() error {
  32. return db.Create(c).Error
  33. }
  34. func GetAutoCertList() (c []Cert) {
  35. var t []Cert
  36. db.Where("auto_cert", AutoCertEnabled).Find(&t)
  37. // check if this domain is enabled
  38. enabledConfig, err := os.ReadDir(nginx.GetConfPath("sites-enabled"))
  39. if err != nil {
  40. return
  41. }
  42. enabledConfigMap := make(map[string]bool)
  43. for i := range enabledConfig {
  44. enabledConfigMap[enabledConfig[i].Name()] = true
  45. }
  46. for _, v := range t {
  47. if enabledConfigMap[v.Filename] == true {
  48. c = append(c, v)
  49. }
  50. }
  51. return
  52. }
  53. func GetCertList(name, domain string) (c []Cert) {
  54. tx := db
  55. if name != "" {
  56. tx = tx.Where("name LIKE ? or domain LIKE ?", "%"+name+"%", "%"+name+"%")
  57. }
  58. if domain != "" {
  59. tx = tx.Where("domain LIKE ?", "%"+domain+"%")
  60. }
  61. tx.Find(&c)
  62. return
  63. }
  64. func FirstCertByID(id int) (c Cert, err error) {
  65. err = db.First(&c, id).Error
  66. return
  67. }
  68. func (c *Cert) Updates(n *Cert) error {
  69. return db.Model(&Cert{}).Where("filename", c.Filename).Updates(n).Error
  70. }
  71. func (c *Cert) Remove() error {
  72. return db.Where("filename", c.Filename).Delete(c).Error
  73. }