mirror of
https://github.com/telanflow/mps.git
synced 2025-09-26 20:41:25 +08:00
44 lines
850 B
Go
44 lines
850 B
Go
package cert
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"fmt"
|
|
"strings"
|
|
"sync"
|
|
)
|
|
|
|
var DefaultMemProvider = NewMemProvider()
|
|
|
|
// MemProvider A simple in-memory certificate cache
|
|
type MemProvider struct {
|
|
cache map[string]*tls.Certificate
|
|
rw sync.RWMutex
|
|
}
|
|
|
|
// Create a MemProvider
|
|
func NewMemProvider() *MemProvider {
|
|
return &MemProvider{
|
|
cache: make(map[string]*tls.Certificate),
|
|
rw: sync.RWMutex{},
|
|
}
|
|
}
|
|
|
|
// Get the certificate for the Host from the cache
|
|
func (m *MemProvider) Get(host string) (cert *tls.Certificate, err error) {
|
|
var ok bool
|
|
cert, ok = m.cache[strings.TrimSpace(host)]
|
|
if !ok {
|
|
err = fmt.Errorf("cert not exist")
|
|
}
|
|
return
|
|
}
|
|
|
|
// Set the Host certificate to the cache
|
|
func (m *MemProvider) Set(host string, cert *tls.Certificate) error {
|
|
host = strings.TrimSpace(host)
|
|
m.rw.Lock()
|
|
m.cache[host] = cert
|
|
m.rw.Unlock()
|
|
return nil
|
|
}
|