Files
trufflehog/pkg/analyzer/analyzers/launchdarkly/models.go
2025-07-04 14:11:53 +05:00

113 lines
2.8 KiB
Go

package launchdarkly
import "sync"
var (
MetadataKey = "key"
// resource types
applicationKey = "Application"
repositoryKey = "Repository"
projectKey = "Project"
environmentKey = "Environment"
experimentKey = "Experiment"
holdoutsKey = "Holdout"
membersKey = "Member"
destinationsKey = "Destination"
templatesKey = "Templates"
teamsKey = "Teams"
webhooksKey = "Webhooks"
featureFlagsKey = "Feature Flags"
)
type SecretInfo struct {
User User
Permissions []string
mu sync.RWMutex
Resources []Resource
}
// User is the information about the user to whom the token belongs
type User struct {
AccountID string // account id. It is the owner id of token as well
MemberID string
Name string
Role string // role of caller
Email string
Token Token
}
// Token is the token details
type Token struct {
ID string // id of the token
Name string // name of the token
CustomRoles []CustomRole // custom roles assigned to the token
InlineRole []Policy // any policy statements maybe used in place of a built-in custom role
Role string // role of token
IsServiceToken bool // is a service token or not
APIVersion int // default api version assigned to the token
}
// CustomRole is a flexible policies providing fine-grained access control to everything in launch darkly
type CustomRole struct {
ID string
Key string
Name string
Polices []Policy
BasePermission string
AssignedToMembers int
AssignedToTeams int
}
// policy is a set of statements
type Policy struct {
Resources []string
NotResources []string
Actions []string
NotActions []string
Effect string
}
type Resource struct {
ID string
Name string
Permission string
Type string
ParentResource *Resource
MetaData map[string]string
}
// appendResource append resource to secret info resources list
func (s *SecretInfo) appendResource(resource Resource) {
s.mu.Lock()
defer s.mu.Unlock()
s.Resources = append(s.Resources, resource)
}
// listResourceByType returns a list of resources matching the given type.
func (s *SecretInfo) listResourceByType(resourceType string) []Resource {
s.mu.RLock()
defer s.mu.RUnlock()
resources := make([]Resource, 0, len(s.Resources))
for _, resource := range s.Resources {
if resource.Type == resourceType {
resources = append(resources, resource)
}
}
return resources
}
// hasCustomRoles check if token has any custom roles assigned
func (t Token) hasCustomRoles() bool {
return len(t.CustomRoles) > 0
}
// hasInlineRole check if token has any inline roles
func (t Token) hasInlineRole() bool {
return len(t.InlineRole) > 0
}