package main import ( "dwelling-files/internal/handlers" "dwelling-files/pkg/server" "flag" "fmt" "log" "net/netip" "os" "os/signal" "strings" "syscall" ) var listenAddress *string = flag.String("listen", "/var/run/dwelling-files/f.sock", "listen address (ip:port|unix_path)") var directoryPath *string = flag.String("path", "/srv/ftp", "path to file share") var showVersion *bool = flag.Bool("v", false, "show version") func main() { flag.Parse() log.SetFlags(0) if *showVersion { fmt.Println("dwelling-files ver. 22.26.0\nCopyright (c) 2022 Alexander \"Arav\" Andreev ") return } hand := handlers.New(directoryPath) srv := server.NewHttpServer() srv.ServeStatic("/assets/*filepath", hand.AssetsFS()) srv.GET("/robots.txt", hand.Robots) srv.GET("/*filepath", hand.Index) var network string if !strings.ContainsRune(*listenAddress, ':') { network = "unix" defer os.Remove(*listenAddress) } else { ap, err := netip.ParseAddrPort(*listenAddress) if err != nil { log.Fatalln(err) } if ap.Addr().Is4() { network = "tcp4" } else if ap.Addr().Is6() { network = "tcp6" } } if err := srv.Start(network, *listenAddress); err != nil { log.Fatalln(err) } doneSignal := make(chan os.Signal, 1) signal.Notify(doneSignal, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) <-doneSignal if err := srv.Stop(); err != nil { log.Fatalln(err) } }