69 lines
1.3 KiB
Go
69 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
_ "embed"
|
|
"flag"
|
|
"fmt"
|
|
"lash"
|
|
"lash/internal/app"
|
|
"lash/internal/errx"
|
|
share "lash/internal/shareLink"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/grandcat/zeroconf"
|
|
)
|
|
|
|
var versionFlag = flag.Bool("version", false, "Print out version and exit.")
|
|
|
|
var port = flag.Int("p", 1337, "Set the port for LASH exchanges.")
|
|
var numberOfShares = flag.Int("n", -1, "Number of shares to allow before killing the server.")
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
if *versionFlag {
|
|
fmt.Print("lash/vxc v", lash.Version)
|
|
return
|
|
}
|
|
|
|
ctx := lash.LashContext{
|
|
N: *numberOfShares,
|
|
}
|
|
|
|
srv := app.New(&ctx)
|
|
|
|
server := http.Server{
|
|
Addr: fmt.Sprintf(":%d", *port),
|
|
Handler: srv,
|
|
}
|
|
|
|
host, err := os.Hostname()
|
|
if err != nil {
|
|
errx.FatalPerror(err)
|
|
}
|
|
|
|
zeroServer, err := zeroconf.Register(
|
|
host,
|
|
"_http._tcp",
|
|
"local.",
|
|
*port,
|
|
[]string{"path=/"},
|
|
nil,
|
|
)
|
|
defer zeroServer.Shutdown()
|
|
|
|
if err != nil {
|
|
errx.FatalPerror(err)
|
|
}
|
|
|
|
// TODO(vxc): Make this more portable
|
|
errx.Log("Your share link is http://%s.local:%d", host, *port)
|
|
errx.Log("Your share link is %s", share.GenerateShareLink(*port))
|
|
errx.Log("Your token is \033[1;92m%s\033[0m", lash.Token)
|
|
errx.Log("starting server at http://0.0.0.0:%d", *port)
|
|
if err := server.ListenAndServe(); err != nil {
|
|
errx.FatalPerror(err)
|
|
}
|
|
}
|