inou/lib/config.go

105 lines
2.5 KiB
Go

package lib
import (
"log"
"os"
"strings"
)
// Production paths - single source of truth
const (
DBPathDefault = "/tank/inou/data/inou.db"
KeyPathDefault = "/tank/inou/master.key"
configFile = "/tank/inou/anthropic.env"
)
// Init initializes all lib subsystems (crypto, database) with production defaults
func Init() error {
if err := CryptoInit(KeyPathDefault); err != nil {
return err
}
return DBInit(DBPathDefault)
}
var (
GeminiKey string = ""
AnthropicKey string = ""
FireworksKey string = ""
OpenRouterKey string = ""
SystemAccessorID string = "7b3a3ee1c2776dcd" // Default fallback
)
func ConfigInit() {
data, err := os.ReadFile(configFile)
if err != nil {
log.Printf("Warning: %s not found: %v", configFile, err)
} else {
for _, line := range strings.Split(string(data), "\n") {
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, "#") {
continue
}
parts := strings.SplitN(line, "=", 2)
if len(parts) != 2 {
continue
}
key := strings.TrimSpace(parts[0])
value := strings.TrimSpace(parts[1])
switch key {
case "GEMINI_API_KEY":
GeminiKey = value
case "ANTHROPIC_API_KEY":
AnthropicKey = value
case "FIREWORKS_API_KEY":
FireworksKey = value
case "OPENROUTER_API_KEY":
OpenRouterKey = value
case "SYSTEM_ACCESSOR_ID":
SystemAccessorID = value
}
}
}
// Fallback to environment variables if not set from file
if GeminiKey == "" {
GeminiKey = os.Getenv("GEMINI_API_KEY")
}
if AnthropicKey == "" {
AnthropicKey = os.Getenv("ANTHROPIC_API_KEY")
}
if FireworksKey == "" {
FireworksKey = os.Getenv("FIREWORKS_API_KEY")
}
if OpenRouterKey == "" {
OpenRouterKey = os.Getenv("OPENROUTER_API_KEY")
}
if SystemAccessorID == "" {
if envID := os.Getenv("SYSTEM_ACCESSOR_ID"); envID != "" {
SystemAccessorID = envID
}
}
// Load SMTP config
if smtp, err := os.ReadFile("/tank/inou/smtp.env"); err == nil {
for _, line := range strings.Split(string(smtp), "\n") {
parts := strings.SplitN(line, "=", 2)
if len(parts) != 2 { continue }
switch parts[0] {
case "SMTP_HOST": smtpHost = parts[1]
case "SMTP_PORT": smtpPort = parts[1]
case "SMTP_USER": smtpUser = parts[1]
case "SMTP_TOKEN": smtpPass = parts[1]
case "SMTP_FROM": smtpFrom = parts[1]
case "SMTP_FROM_NAME": smtpFromName = parts[1]
}
}
}
// Initialize SystemContext with loaded ID
SystemContext = &AccessContext{
IsSystem: true,
AccessorID: SystemAccessorID,
}
}