Files
HellreigN/agent/main.go
T
2026-04-04 05:11:09 +03:00

68 lines
1.8 KiB
Go

package main
import (
"context"
"log"
"os"
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/client"
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/commander"
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/config"
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/mtls"
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/registration"
)
func main() {
cfgPath := os.Getenv("CONFIG_FILE")
if cfgPath == "" {
cfgPath = "/etc/hellreign-agent/config.yml"
}
cfg, err := config.Load(cfgPath)
if err != nil {
log.Fatalf("Failed to load config: %v", err)
}
log.Printf("Agent label: %s", cfg.Label)
if cfg.RegistrationToken == "" {
log.Fatal("No registration token provided")
}
// Generate key and CSR
key, csrPEM, err := registration.GenerateKeyAndCSR(cfg.Label)
if err != nil {
log.Fatalf("Failed to generate key and CSR: %v", err)
}
log.Println("Generated ECDSA key pair and CSR")
// Register with backend
certs, err := registration.Register(cfg.BackendURL, cfg.RegistrationToken, csrPEM)
if err != nil {
log.Fatalf("Failed to register: %v", err)
}
log.Println("Successfully registered, received certificates")
// Save certificates
if err := registration.SaveCerts(cfg.CertDir, certs, key); err != nil {
log.Fatalf("Failed to save certificates: %v", err)
}
log.Printf("Certificates saved to %s", cfg.CertDir)
log.Println("Agent registration complete")
err = func() error {
creds, err := mtls.LoadMTLSCredentials(certs.CACertPEM, certs.ClientCertPEM, certs.ClientKeyPEM)
if err != nil {
return err
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
cmdexe := new(commander.CommandExecutor)
ccli := client.New(cmdexe, cfg.RegistrationToken)
return ccli.HandleCommands(ctx, cfg.BackendURL, creds)
}()
if err != nil {
log.Fatalf("Failed to generate key and CSR: %v", err)
}
}