config

package
v1.40.0 Latest Latest
Warning

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

Go to latest
Published: Jul 2, 2025 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package config provides configuration management for agentapi-proxy using viper.

Configuration can be loaded from:

  • JSON files (backward compatibility)
  • YAML files
  • Environment variables with AGENTAPI_ prefix

Environment variable examples:

AGENTAPI_START_PORT=8080
AGENTAPI_AUTH_ENABLED=true
AGENTAPI_AUTH_STATIC_ENABLED=true
AGENTAPI_AUTH_STATIC_HEADER_NAME=X-API-Key
AGENTAPI_AUTH_STATIC_KEYS_FILE=/path/to/keys.json
AGENTAPI_AUTH_GITHUB_ENABLED=true
AGENTAPI_AUTH_GITHUB_BASE_URL=https://api.github.com
AGENTAPI_AUTH_GITHUB_TOKEN_HEADER=Authorization
AGENTAPI_AUTH_GITHUB_OAUTH_CLIENT_ID=your_client_id
AGENTAPI_AUTH_GITHUB_OAUTH_CLIENT_SECRET=your_client_secret
AGENTAPI_AUTH_GITHUB_OAUTH_SCOPE=read:user read:org
AGENTAPI_AUTH_GITHUB_USER_MAPPING_DEFAULT_ROLE=user
AGENTAPI_PERSISTENCE_ENABLED=true
AGENTAPI_PERSISTENCE_BACKEND=file
AGENTAPI_PERSISTENCE_FILE_PATH=./sessions.json
AGENTAPI_PERSISTENCE_S3_BUCKET=my-bucket
AGENTAPI_PERSISTENCE_S3_REGION=us-east-1
AGENTAPI_ENABLE_MULTIPLE_USERS=true

Configuration file search paths:

  • Current directory
  • $HOME/.agentapi/
  • /etc/agentapi/

Configuration file names: config.json, config.yaml, config.yml

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func LoadAuthConfigFromFile added in v1.9.1

func LoadAuthConfigFromFile(config *Config, filename string) error

LoadAuthConfigFromFile loads auth configuration from an external file (e.g., ConfigMap)

Types

type APIKey added in v0.13.0

type APIKey struct {
	Key         string   `json:"key" mapstructure:"key"`
	UserID      string   `json:"user_id" mapstructure:"user_id"`
	Role        string   `json:"role" mapstructure:"role"`
	Permissions []string `json:"permissions" mapstructure:"permissions"`
	CreatedAt   string   `json:"created_at" mapstructure:"created_at"`
	ExpiresAt   string   `json:"expires_at,omitempty" mapstructure:"expires_at"`
}

APIKey represents an API key configuration

func (*APIKey) HasPermission added in v0.13.0

func (apiKey *APIKey) HasPermission(permission string) bool

HasPermission checks if a user has a specific permission

type AuthConfig added in v0.13.0

type AuthConfig struct {
	Enabled bool              `json:"enabled" mapstructure:"enabled"`
	Static  *StaticAuthConfig `json:"static,omitempty" mapstructure:"static"`
	GitHub  *GitHubAuthConfig `json:"github,omitempty" mapstructure:"github"`
}

AuthConfig represents authentication configuration

type AuthConfigOverride added in v1.9.1

type AuthConfigOverride struct {
	GitHub *GitHubAuthConfigOverride `json:"github,omitempty" yaml:"github,omitempty"`
}

AuthConfigOverride represents auth configuration overrides from external file

type Config

type Config struct {
	// StartPort is the starting port for agentapi servers
	StartPort int `json:"start_port" mapstructure:"start_port"`
	// Auth represents authentication configuration
	Auth AuthConfig `json:"auth" mapstructure:"auth"`
	// Persistence represents session persistence configuration
	Persistence PersistenceConfig `json:"persistence" mapstructure:"persistence"`
	// EnableMultipleUsers enables user-specific directory isolation
	EnableMultipleUsers bool `json:"enable_multiple_users" mapstructure:"enable_multiple_users"`
	// AuthConfigFile is the path to an external auth configuration file (e.g., from ConfigMap)
	AuthConfigFile string `json:"auth_config_file" mapstructure:"auth_config_file"`
}

Config represents the proxy configuration

func DefaultConfig

func DefaultConfig() *Config

DefaultConfig returns a default configuration

func LoadConfig

func LoadConfig(filename string) (*Config, error)

LoadConfig loads configuration using viper with support for JSON, YAML, and environment variables

func LoadConfigLegacy added in v1.9.1

func LoadConfigLegacy(filename string) (*Config, error)

LoadConfigLegacy loads configuration from a JSON file (legacy method)

func (*Config) ValidateAPIKey added in v0.13.0

func (c *Config) ValidateAPIKey(key string) (*APIKey, bool)

ValidateAPIKey validates an API key and returns user information

type GitHubAuthConfig added in v1.0.0

type GitHubAuthConfig struct {
	Enabled     bool               `json:"enabled" mapstructure:"enabled"`
	BaseURL     string             `json:"base_url" mapstructure:"base_url"`
	TokenHeader string             `json:"token_header" mapstructure:"token_header"`
	UserMapping GitHubUserMapping  `json:"user_mapping" mapstructure:"user_mapping"`
	OAuth       *GitHubOAuthConfig `json:"oauth,omitempty" mapstructure:"oauth"`
}

GitHubAuthConfig represents GitHub OAuth authentication

type GitHubAuthConfigOverride added in v1.9.1

type GitHubAuthConfigOverride struct {
	UserMapping *GitHubUserMapping `json:"user_mapping,omitempty" yaml:"user_mapping,omitempty"`
}

GitHubAuthConfigOverride represents GitHub auth configuration overrides

type GitHubOAuthConfig added in v1.9.1

type GitHubOAuthConfig struct {
	ClientID     string `json:"client_id" mapstructure:"client_id"`
	ClientSecret string `json:"client_secret" mapstructure:"client_secret"`
	Scope        string `json:"scope" mapstructure:"scope"`
	BaseURL      string `json:"base_url,omitempty" mapstructure:"base_url"`
}

GitHubOAuthConfig represents GitHub OAuth2 configuration

type GitHubUserMapping added in v1.0.0

type GitHubUserMapping struct {
	DefaultRole        string                  `json:"default_role" mapstructure:"default_role" yaml:"default_role"`
	DefaultPermissions []string                `json:"default_permissions" mapstructure:"default_permissions" yaml:"default_permissions"`
	TeamRoleMapping    map[string]TeamRoleRule `json:"team_role_mapping" mapstructure:"team_role_mapping" yaml:"team_role_mapping"`
}

GitHubUserMapping represents user role mapping configuration

type PersistenceConfig added in v1.0.0

type PersistenceConfig struct {
	Enabled               bool   `json:"enabled" mapstructure:"enabled"`
	Backend               string `json:"backend" mapstructure:"backend"` // "file", "sqlite", "postgres", "s3"
	FilePath              string `json:"file_path" mapstructure:"file_path"`
	SyncInterval          int    `json:"sync_interval_seconds" mapstructure:"sync_interval_seconds"`
	EncryptSecrets        bool   `json:"encrypt_sensitive_data" mapstructure:"encrypt_sensitive_data"`
	SessionRecoveryMaxAge int    `json:"session_recovery_max_age_hours" mapstructure:"session_recovery_max_age_hours"` // Max age in hours for session recovery

	// S3-specific configuration
	S3Bucket    string `json:"s3_bucket" mapstructure:"s3_bucket"`
	S3Region    string `json:"s3_region" mapstructure:"s3_region"`
	S3Prefix    string `json:"s3_prefix" mapstructure:"s3_prefix"`
	S3Endpoint  string `json:"s3_endpoint" mapstructure:"s3_endpoint"` // For custom S3-compatible services
	S3AccessKey string `json:"s3_access_key" mapstructure:"s3_access_key"`
	S3SecretKey string `json:"s3_secret_key" mapstructure:"s3_secret_key"`
}

PersistenceConfig represents session persistence configuration

type StaticAuthConfig added in v1.0.0

type StaticAuthConfig struct {
	Enabled    bool     `json:"enabled" mapstructure:"enabled"`
	APIKeys    []APIKey `json:"api_keys" mapstructure:"api_keys"`
	KeysFile   string   `json:"keys_file" mapstructure:"keys_file"`
	HeaderName string   `json:"header_name" mapstructure:"header_name"`
}

StaticAuthConfig represents static API key authentication

type TeamRoleRule added in v1.0.0

type TeamRoleRule struct {
	Role        string   `json:"role" mapstructure:"role" yaml:"role"`
	Permissions []string `json:"permissions" mapstructure:"permissions" yaml:"permissions"`
}

TeamRoleRule represents a team-based role rule

Jump to

Keyboard shortcuts

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