| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | 
							- package httpd
 
- import (
 
- 	"crypto/tls"
 
- 	"sync"
 
- 	"github.com/drakkan/sftpgo/ldapauthserver/logger"
 
- )
 
- type certManager struct {
 
- 	certPath string
 
- 	keyPath  string
 
- 	sync.RWMutex
 
- 	cert *tls.Certificate
 
- }
 
- func (m *certManager) loadCertificate() error {
 
- 	newCert, err := tls.LoadX509KeyPair(m.certPath, m.keyPath)
 
- 	if err != nil {
 
- 		logger.Warn(logSender, "", "unable to load https certificate: %v", err)
 
- 		return err
 
- 	}
 
- 	logger.Debug(logSender, "", "https certificate successfully loaded")
 
- 	m.Lock()
 
- 	defer m.Unlock()
 
- 	m.cert = &newCert
 
- 	return nil
 
- }
 
- func (m *certManager) GetCertificateFunc() func(*tls.ClientHelloInfo) (*tls.Certificate, error) {
 
- 	return func(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) {
 
- 		m.RLock()
 
- 		defer m.RUnlock()
 
- 		return m.cert, nil
 
- 	}
 
- }
 
- func newCertManager(certificateFile, certificateKeyFile string) (*certManager, error) {
 
- 	manager := &certManager{
 
- 		cert:     nil,
 
- 		certPath: certificateFile,
 
- 		keyPath:  certificateKeyFile,
 
- 	}
 
- 	err := manager.loadCertificate()
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	return manager, nil
 
- }
 
 
  |