mirror of https://github.com/portainer/portainer
30 lines
911 B
Go
30 lines
911 B
Go
|
package apikey
|
||
|
|
||
|
import (
|
||
|
"crypto/rand"
|
||
|
"io"
|
||
|
|
||
|
portainer "github.com/portainer/portainer/api"
|
||
|
)
|
||
|
|
||
|
// APIKeyService represents a service for managing API keys.
|
||
|
type APIKeyService interface {
|
||
|
HashRaw(rawKey string) []byte
|
||
|
GenerateApiKey(user portainer.User, description string) (string, *portainer.APIKey, error)
|
||
|
GetAPIKeys(userID portainer.UserID) ([]portainer.APIKey, error)
|
||
|
GetDigestUserAndKey(digest []byte) (portainer.User, portainer.APIKey, error)
|
||
|
UpdateAPIKey(apiKey *portainer.APIKey) error
|
||
|
DeleteAPIKey(apiKeyID portainer.APIKeyID) error
|
||
|
InvalidateUserKeyCache(userId portainer.UserID) bool
|
||
|
}
|
||
|
|
||
|
// generateRandomKey generates a random key of specified length
|
||
|
// source: https://github.com/gorilla/securecookie/blob/master/securecookie.go#L515
|
||
|
func generateRandomKey(length int) []byte {
|
||
|
k := make([]byte, length)
|
||
|
if _, err := io.ReadFull(rand.Reader, k); err != nil {
|
||
|
return nil
|
||
|
}
|
||
|
return k
|
||
|
}
|