config

package
v0.119.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 4, 2026 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SaveWingConfig added in v0.34.0

func SaveWingConfig(dir string, cfg *WingConfig) error

SaveWingConfig writes wing.yaml to dir.

Types

type AllowKey added in v0.34.0

type AllowKey struct {
	Key    string `yaml:"key,omitempty"`     // base64 raw P-256 public key (optional)
	UserID string `yaml:"user_id,omitempty"` // relay user ID
	Email  string `yaml:"email,omitempty"`   // auto-set from relay, for display
}

AllowKey is an allowed user for wing access control.

type Config

type Config struct {
	Dir               string            `yaml:"-"`
	DefaultAgent      string            `yaml:"default_agent"`
	DefaultEmbedder   string            `yaml:"default_embedder"`
	WingID            string            `yaml:"wing_id"`
	Hostname          string            `yaml:"-"` // os.Hostname(), not persisted
	PollInterval      string            `yaml:"poll_interval"`
	DefaultMaxRetries int               `yaml:"max_retries"`
	RoostURL          string            `yaml:"roost_url"`
	Vars              map[string]string `yaml:"vars"`
}

func Load

func Load() (*Config, error)

func (*Config) DBPath

func (c *Config) DBPath() string

func (*Config) MemoryDir

func (c *Config) MemoryDir() string

func (*Config) RelayDBPath added in v0.16.1

func (c *Config) RelayDBPath() string

func (*Config) ResolveVars

func (c *Config) ResolveVars(s string) string

func (*Config) SkillsDir

func (c *Config) SkillsDir() string

type ICEServer added in v0.108.0

type ICEServer struct {
	URLs       []string `yaml:"urls" json:"urls"`
	Username   string   `yaml:"username,omitempty" json:"username,omitempty"`
	Credential string   `yaml:"credential,omitempty" json:"credential,omitempty"`
}

ICEServer is a STUN/TURN server configuration for WebRTC P2P connections.

type PathEntry added in v0.56.0

type PathEntry struct {
	Path    string   `yaml:"path" json:"path"`
	Members []string `yaml:"members,omitempty" json:"members,omitempty"`
}

PathEntry is a directory path with optional per-folder member ACLs. When Members is nil/empty, the path is visible to all authenticated users (legacy behavior). When Members is set, only those emails + owner/admin can access the path.

type PathList added in v0.56.0

type PathList []PathEntry

PathList is a list of PathEntry values that supports mixed YAML formats: plain strings ("~/repos") and mappings ({path: ~/repos, members: [...]}).

func (PathList) MarshalYAML added in v0.56.0

func (pl PathList) MarshalYAML() (any, error)

MarshalYAML serializes PathList: entries without members become plain strings (backwards compat).

func (PathList) PathsForUser added in v0.56.0

func (pl PathList) PathsForUser(email, orgRole string) []string

PathsForUser returns paths accessible to the given email/orgRole. Owner/admin get all paths. Members get only entries where their email is in Members (case-insensitive) or where Members is empty/nil (legacy open entries).

func (PathList) Strings added in v0.56.0

func (pl PathList) Strings() []string

Strings returns just the path strings (drop-in for existing callers that need []string).

func (*PathList) UnmarshalYAML added in v0.56.0

func (pl *PathList) UnmarshalYAML(value *yaml.Node) error

UnmarshalYAML handles both scalar strings and mapping nodes in a YAML sequence.

type WingConfig added in v0.34.0

type WingConfig struct {
	WingID         string     `yaml:"wing_id"`
	Label          string     `yaml:"label,omitempty"` // display name shown in the web UI
	Roost          string     `yaml:"roost,omitempty"`
	Org            string     `yaml:"org,omitempty"`
	Paths          PathList   `yaml:"paths,omitempty"`
	Root           string     `yaml:"root,omitempty"` // compat: folded into Paths on load
	Labels         []string   `yaml:"labels,omitempty"`
	EggConfig      string     `yaml:"egg_config,omitempty"`
	Conv           string     `yaml:"conv,omitempty"`
	Audit          bool       `yaml:"audit,omitempty"`
	Debug          bool       `yaml:"debug,omitempty"`
	Locked         bool       `yaml:"locked,omitempty"`   // explicit lock mode toggle
	AuthTTL        string     `yaml:"auth_ttl,omitempty"` // passkey auth token duration (default "1h")
	AllowKeys      []AllowKey `yaml:"allow_keys,omitempty"`
	Admins         []string   `yaml:"admins,omitempty"`          // emails with admin role (see all sessions, all paths)
	IdleTimeout    string     `yaml:"idle_timeout,omitempty"`    // kill sessions idle for this long (e.g. "4h")
	ConnectionMode string     `yaml:"connection_mode,omitempty"` // "relay" (default), "p2p", "p2p_only", "direct"

	// P2P / Direct mode settings
	ICEServers []ICEServer `yaml:"ice_servers,omitempty"` // STUN/TURN servers for WebRTC
	DirectPort int         `yaml:"direct_port,omitempty"` // port for direct WebSocket connections
	DirectTLS  bool        `yaml:"direct_tls,omitempty"`  // enable TLS for direct mode

	// JWT signing key for roost mode (base64-DER P-256 private key).
	// Auto-generated on first roost start. Server mode uses WT_JWT_KEY env instead.
	JWTKey string `yaml:"jwt_key,omitempty"`
}

WingConfig holds wing-specific settings persisted in ~/.wingthing/wing.yaml.

func LoadWingConfig added in v0.34.0

func LoadWingConfig(dir string) (*WingConfig, error)

LoadWingConfig reads wing.yaml from dir. If the file doesn't exist, it returns a zero-value config (no error). If a legacy wing-id file exists, the wing_id is seeded from it.

func (*WingConfig) IsAdmin added in v0.63.0

func (c *WingConfig) IsAdmin(email string) bool

IsAdmin returns true if email is in the Admins list (case-insensitive).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL