61 lines
2.2 KiB
Go
61 lines
2.2 KiB
Go
// \\ SPIKE: Secure your secrets with SPIFFE. — https://spike.ist/
|
|
// \\\\\ Copyright 2024-present SPIKE contributors.
|
|
// \\\\\\\ SPDX-License-Identifier: Apache-2.0
|
|
|
|
package data
|
|
|
|
import (
|
|
"regexp"
|
|
"time"
|
|
)
|
|
|
|
type PolicyPermission string
|
|
|
|
// PermissionRead gives permission to read secrets.
|
|
// This DOES NOT include listing secrets.
|
|
const PermissionRead PolicyPermission = "read"
|
|
|
|
// PermissionWrite gives permission to write (including
|
|
// create, update and delete) secrets.
|
|
const PermissionWrite PolicyPermission = "write"
|
|
|
|
// PermissionList gives permission to list available secrets or resources.
|
|
const PermissionList PolicyPermission = "list"
|
|
|
|
// PermissionExecute grants the ability to execute specified resources.
|
|
// One such resource is encryption and decryption operations that
|
|
// don't necessarily persist anything but execute an internal command.
|
|
const PermissionExecute PolicyPermission = "execute"
|
|
|
|
// PermissionSuper gives superuser permissions.
|
|
// The user is the alpha and the omega.
|
|
const PermissionSuper PolicyPermission = "super"
|
|
|
|
// Policy represents a security policy applied within SPIKE.
|
|
// It includes details such as ID, name, patterns, permissions, and metadata.
|
|
type Policy struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
SPIFFEIDPattern string `json:"spiffiedPattern"`
|
|
PathPattern string `json:"pathPattern"`
|
|
Permissions []PolicyPermission `json:"permissions"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
CreatedBy string `json:"createdBy"`
|
|
|
|
// Unexported fields won't be serialized to JSON
|
|
IDRegex *regexp.Regexp `json:"-"`
|
|
PathRegex *regexp.Regexp `json:"-"`
|
|
}
|
|
|
|
// PolicySpec defines the specification of a policy configuration.
|
|
// Name specifies the name of the policy.
|
|
// SpiffeIDPattern specifies the SPIFFE ID regex pattern for the policy.
|
|
// PathPattern defines the path regex pattern associated with the policy.
|
|
// Permissions lists the permissions granted by the policy.
|
|
type PolicySpec struct {
|
|
Name string `yaml:"name"`
|
|
SpiffeIDPattern string `yaml:"spiffeidPattern"`
|
|
PathPattern string `yaml:"pathPattern"`
|
|
Permissions []PolicyPermission `json:"permissions"`
|
|
}
|