certdir.go 909 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package missinggo
  2. import (
  3. "crypto/tls"
  4. "log"
  5. "os"
  6. "path/filepath"
  7. "strings"
  8. )
  9. func LoadCertificateDir(dir string) (certs []tls.Certificate, err error) {
  10. d, err := os.Open(dir)
  11. if err != nil {
  12. return
  13. }
  14. defer d.Close()
  15. const defaultPEMFile = "default.pem"
  16. if p := filepath.Join(dir, defaultPEMFile); FilePathExists(p) {
  17. cert, err := tls.LoadX509KeyPair(p, p)
  18. if err == nil {
  19. certs = append(certs, cert)
  20. } else {
  21. log.Printf("error loading default certicate: %s", err)
  22. }
  23. }
  24. files, err := d.Readdir(-1)
  25. if err != nil {
  26. return
  27. }
  28. for _, f := range files {
  29. if f.Name() == defaultPEMFile {
  30. continue
  31. }
  32. if !strings.HasSuffix(f.Name(), ".pem") {
  33. continue
  34. }
  35. p := filepath.Join(dir, f.Name())
  36. cert, err := tls.LoadX509KeyPair(p, p)
  37. if err != nil {
  38. log.Printf("error loading key pair from %q: %s", p, err)
  39. continue
  40. }
  41. certs = append(certs, cert)
  42. }
  43. return
  44. }