Go API Documentation

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

Uses: time.Duration, time.NewTimer, time.Now, time.Since.

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.