github.com/caddyserver/caddy/v2/modules/caddytls/standardstek
No package summary is available.
Package
Files: 1. Third party imports: 0. Imports from organisation: 0. Tests: 0. Benchmarks: 0.
Vars
var (
lastRotation time.Time
keys [][32]byte
mutex sync.RWMutex // protects keys and lastRotation
)
Interface guard
var _ caddytls.STEKProvider = (*standardSTEKProvider)(nil)
Types
standardSTEKProvider
This type doesn't have documentation.
type standardSTEKProvider struct {
stekConfig *caddytls.SessionTicketService
timer *time.Timer
}
Functions
func (*standardSTEKProvider) Initialize
Initialize sets the configuration for s and returns the starting keys.
func (s *standardSTEKProvider) Initialize(config *caddytls.SessionTicketService) ([][32]byte, error) {
// keep a reference to the config; we'll need it when rotating keys
s.stekConfig = config
itvl := time.Duration(s.stekConfig.RotationInterval)
mutex.Lock()
defer mutex.Unlock()
// if this is our first rotation or we are overdue
// for one, perform a rotation immediately; otherwise,
// we assume that the keys are non-empty and fresh
since := time.Since(lastRotation)
if lastRotation.IsZero() || since > itvl {
var err error
keys, err = s.stekConfig.RotateSTEKs(keys)
if err != nil {
return nil, err
}
since = 0 // since this is overdue or is the first rotation, use full interval
lastRotation = time.Now()
}
// create timer for the remaining time on the interval;
// this timer is cleaned up only when Next() returns
s.timer = time.NewTimer(itvl - since)
return keys, nil
}
Cognitive complexity: 4
, Cyclomatic complexity: 4
func (*standardSTEKProvider) Next
Next returns a channel which transmits the latest session ticket keys.
func (s *standardSTEKProvider) Next(doneChan <-chan struct{}) <-chan [][32]byte {
keysChan := make(chan [][32]byte)
go s.rotate(doneChan, keysChan)
return keysChan
}
Cognitive complexity: 1
, Cyclomatic complexity: 1
func (standardSTEKProvider) CaddyModule
CaddyModule returns the Caddy module information.
func (standardSTEKProvider) CaddyModule() caddy.ModuleInfo {
return caddy.ModuleInfo{
ID: "tls.stek.standard",
New: func() caddy.Module { return new(standardSTEKProvider) },
}
}
Cognitive complexity: 2
, Cyclomatic complexity: 1
Private functions
func init
init ()
func rotate
rotate rotates keys on a regular basis, sending each updated set of keys down keysChan, until doneChan is closed.
rotate (doneChan <-chan struct{}, keysChan chan<- [][32]byte)
References: debug.Stack, log.Printf, time.Duration.