github.com/gofiber/fiber/v2@v2.47.0/middleware/csrf/manager.go (about)

     1  package csrf
     2  
     3  import (
     4  	"sync"
     5  	"time"
     6  
     7  	"github.com/gofiber/fiber/v2"
     8  	"github.com/gofiber/fiber/v2/internal/memory"
     9  	"github.com/gofiber/fiber/v2/utils"
    10  )
    11  
    12  // go:generate msgp
    13  // msgp -file="manager.go" -o="manager_msgp.go" -tests=false -unexported
    14  type item struct{}
    15  
    16  //msgp:ignore manager
    17  type manager struct {
    18  	pool    sync.Pool
    19  	memory  *memory.Storage
    20  	storage fiber.Storage
    21  }
    22  
    23  func newManager(storage fiber.Storage) *manager {
    24  	// Create new storage handler
    25  	manager := &manager{
    26  		pool: sync.Pool{
    27  			New: func() interface{} {
    28  				return new(item)
    29  			},
    30  		},
    31  	}
    32  	if storage != nil {
    33  		// Use provided storage if provided
    34  		manager.storage = storage
    35  	} else {
    36  		// Fallback too memory storage
    37  		manager.memory = memory.New()
    38  	}
    39  	return manager
    40  }
    41  
    42  // get raw data from storage or memory
    43  func (m *manager) getRaw(key string) []byte {
    44  	var raw []byte
    45  	if m.storage != nil {
    46  		raw, _ = m.storage.Get(key) //nolint:errcheck // TODO: Do not ignore error
    47  	} else {
    48  		raw, _ = m.memory.Get(key).([]byte) //nolint:errcheck // TODO: Do not ignore error
    49  	}
    50  	return raw
    51  }
    52  
    53  // set data to storage or memory
    54  func (m *manager) setRaw(key string, raw []byte, exp time.Duration) {
    55  	if m.storage != nil {
    56  		_ = m.storage.Set(key, raw, exp) //nolint:errcheck // TODO: Do not ignore error
    57  	} else {
    58  		// the key is crucial in crsf and sometimes a reference to another value which can be reused later(pool/unsafe values concept), so a copy is made here
    59  		m.memory.Set(utils.CopyString(key), raw, exp)
    60  	}
    61  }