Files
honeydany/main.go

73 lines
1.3 KiB
Go

package main
import (
"context"
"flag"
"fmt"
"log"
"os"
"os/signal"
"syscall"
"time"
"honeydany/app"
)
func main() {
cfgPath := flag.String("config", "config.json", "path to config.json")
flag.Parse()
for {
// ensure config exists (auto-generate default if missing)
if err := app.EnsureConfig(*cfgPath); err != nil {
log.Fatalf("ensure config: %v", err)
}
cfg, err := app.LoadConfig(*cfgPath)
if err != nil {
log.Fatalf("load config: %v", err)
}
a, err := app.NewApp(cfg)
if err != nil {
log.Fatalf("create app: %v", err)
}
ctx, cancel := context.WithCancel(context.Background())
// handle signals and restart
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
var shouldRestart bool
go func() {
select {
case <-sigCh:
fmt.Println("signal received, shutting down")
cancel()
a.Shutdown()
case <-a.RestartChan():
fmt.Println("restart requested, reloading configuration")
shouldRestart = true
cancel()
a.Shutdown()
}
}()
if err := a.Run(ctx); err != nil {
log.Fatalf("app run: %v", err)
}
cancel()
if !shouldRestart {
break
}
fmt.Println("restarting honeypot...")
time.Sleep(1 * time.Second) // Brief pause before restart
}
fmt.Println("honeypot stopped")
}