102 lines
3.5 KiB
Go
102 lines
3.5 KiB
Go
package configuration
|
|
|
|
import (
|
|
"fmt"
|
|
"git.cin.su/m/Assistant/contracts/secrets"
|
|
"git.cin.su/m/Assistant/platform/ids"
|
|
)
|
|
|
|
type SettingDefinitionID ids.StableID
|
|
type SettingAssignmentID ids.StableID
|
|
type ConfigurationRevision ids.Revision
|
|
type ValueType string
|
|
type ResolutionMode string
|
|
type SettingLifecycle string
|
|
type SettingSource string
|
|
|
|
const (
|
|
ValueString ValueType = "STRING"
|
|
ValueInteger ValueType = "INTEGER"
|
|
ValueBoolean ValueType = "BOOLEAN"
|
|
ValueSecretRef ValueType = "SECRET_REF"
|
|
ResolutionMostSpecific ResolutionMode = "MOST_SPECIFIC_WINS"
|
|
ResolutionFirstHuman ResolutionMode = "FIRST_EXPLICIT_HUMAN_WINS"
|
|
ResolutionMergeList ResolutionMode = "MERGE_LIST"
|
|
SettingActive SettingLifecycle = "ACTIVE"
|
|
SettingDeprecated SettingLifecycle = "DEPRECATED"
|
|
SettingRetired SettingLifecycle = "RETIRED"
|
|
SourceHumanDirective SettingSource = "HUMAN_DIRECTIVE"
|
|
SourceMigrated SettingSource = "MIGRATED_CONFIG"
|
|
SourceSkillDefault SettingSource = "SKILL_DEFAULT"
|
|
SourceSystemDefault SettingSource = "SYSTEM_DEFAULT"
|
|
SourceGovernedChange SettingSource = "GOVERNED_CHANGE"
|
|
)
|
|
|
|
type SettingDefinition struct {
|
|
ID SettingDefinitionID
|
|
OwnerNamespace string
|
|
StableKey string
|
|
Revision ConfigurationRevision
|
|
ValueType ValueType
|
|
DefaultValue string
|
|
Sensitivity string
|
|
Lifecycle SettingLifecycle
|
|
RecordedAtUnixMillis int64
|
|
}
|
|
type ScopeSelector struct {
|
|
PrincipalRef string
|
|
RequiredContextBindings []string
|
|
ActivityRef string
|
|
SkillRef string
|
|
TaskRef string
|
|
SessionRef string
|
|
TemporaryOverride bool
|
|
}
|
|
type SettingAssignment struct {
|
|
ID SettingAssignmentID
|
|
PrincipalID string
|
|
DefinitionRef string
|
|
DefinitionRevision ConfigurationRevision
|
|
Revision ConfigurationRevision
|
|
Selector ScopeSelector
|
|
TypedValue string
|
|
SecretRef *secrets.CredentialRef
|
|
EffectiveFromUnixMillis int64
|
|
EffectiveUntilUnixMillis *int64
|
|
Source SettingSource
|
|
SourceRef string
|
|
Lifecycle SettingLifecycle
|
|
RecordedAtUnixMillis int64
|
|
}
|
|
type EffectiveSetting struct {
|
|
DefinitionRef string
|
|
Value string
|
|
WinningAssignmentRef string
|
|
ResolutionTrace []string
|
|
}
|
|
type BootstrapConfig struct {
|
|
NodeIdentity string
|
|
ControlDatabaseLocator string
|
|
RootSecretResolverLocator string
|
|
RecoveryLocator string
|
|
}
|
|
|
|
// ConversationalConfigurationCommand is an intent, not an assignment. Only
|
|
// Configuration may turn a SET command into durable state.
|
|
|
|
func (d SettingDefinition) Validate() error {
|
|
if d.ID == "" || d.OwnerNamespace == "" || d.StableKey == "" || !ids.Revision(d.Revision).Valid() || d.ValueType == "" || d.Lifecycle == "" || d.RecordedAtUnixMillis < 1 {
|
|
return fmt.Errorf("invalid setting definition")
|
|
}
|
|
return nil
|
|
}
|
|
func (a SettingAssignment) Validate() error {
|
|
if a.ID == "" || a.PrincipalID == "" || a.DefinitionRef == "" || !ids.Revision(a.Revision).Valid() || a.Source == "" || a.Lifecycle == "" || a.RecordedAtUnixMillis < 1 {
|
|
return fmt.Errorf("invalid setting assignment")
|
|
}
|
|
if a.SecretRef != nil && a.TypedValue != "" {
|
|
return fmt.Errorf("secret assignment must not contain typed value")
|
|
}
|
|
return nil
|
|
}
|