Skip to content
File

Blob: cmd/client/ls.go

go74 lines
1package client
2 
3import (
4 "context"
5 "net"
6 "os"
7 "os/signal"
8 "syscall"
9 
10 "go.miragespace.co/specter/tun/client"
11 "go.miragespace.co/specter/tun/client/dialer"
12 
13 "github.com/quic-go/quic-go"
14 "github.com/urfave/cli/v3"
15 "go.uber.org/zap"
16)
17 
18func cmdLs(ctx context.Context, cmd *cli.Command) error {
19 logger := cmd.Root().Metadata["logger"].(*zap.Logger)
20 
21 cfg, err := client.NewConfig(cmd.String("config"))
22 if err != nil {
23 return err
24 }
25 
26 parsed, err := dialer.ParseApex(cfg.Apex)
27 if err != nil {
28 return err
29 }
30 
31 s := make(chan os.Signal, 1)
32 signal.Notify(s, syscall.SIGHUP)
33 
34 listener, err := net.ListenPacket("udp", ":0")
35 if err != nil {
36 return err
37 }
38 defer listener.Close()
39 
40 quicTransport := &quic.Transport{Conn: listener}
41 defer quicTransport.Close()
42 
43 _, transport := createTransport(cmd, transportCfg{
44 logger: logger,
45 quicTp: quicTransport,
46 apex: parsed,
47 })
48 defer transport.Stop()
49 
50 c, err := client.NewClient(ctx, client.ClientConfig{
51 Logger: logger,
52 Configuration: cfg,
53 ServerTransport: transport,
54 ReloadSignal: s,
55 })
56 if err != nil {
57 return err
58 }
59 defer c.Close()
60 
61 if err := c.Register(ctx); err != nil {
62 return err
63 }
64 
65 hostnames, err := c.GetRegisteredHostnames(ctx)
66 if err != nil {
67 return err
68 }
69 
70 c.FormatList(hostnames, os.Stdout)
71 
72 return nil
73}