cert.go 2.2 KB

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