main.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package main
  2. import (
  3. "fahi/pkg/config"
  4. "fahi/pkg/web"
  5. "fahi/pkg/wg"
  6. "os"
  7. "os/signal"
  8. "syscall"
  9. log "github.com/sirupsen/logrus"
  10. )
  11. func main() {
  12. if os.Geteuid() != 0 {
  13. log.Fatal("please run LTWG as root")
  14. }
  15. cfg, err := config.LoadOrCreate()
  16. if err != nil {
  17. log.Fatalf("failed to load or create config: %v", err)
  18. }
  19. logLevel, err := log.ParseLevel(cfg.LogLevel)
  20. if err != nil {
  21. log.Fatalf("failed to parse log level: %v", err)
  22. }
  23. log.SetLevel(logLevel)
  24. wgIface, err := wg.New(cfg)
  25. if err != nil {
  26. log.Fatalf("failed to init wireguard: %v", err)
  27. }
  28. defer wgIface.Close()
  29. err = wgIface.Create()
  30. if err != nil {
  31. log.Errorf("failed to create wireguard: %v", err)
  32. return
  33. }
  34. termCh := make(chan os.Signal, 1)
  35. signal.Notify(termCh, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGTSTP)
  36. go func() {
  37. select {
  38. case <-termCh:
  39. }
  40. log.Info("shutdown signal received")
  41. wgIface.Close()
  42. os.Exit(1)
  43. }()
  44. err = web.Serve(cfg, wgIface)
  45. if err != nil {
  46. log.Errorf("failed to web server: %v", err)
  47. }
  48. }