paulbsd-salt/states/apt/templates/apt.go
2023-07-15 19:53:46 +02:00

60 lines
1.1 KiB
Go

package main
import (
"context"
"fmt"
"net"
"time"
"github.com/pion/mdns"
"golang.org/x/net/ipv4"
)
type Proxy struct {
SCHEME string
HOSTNAME string
PORT int
}
func (p *Proxy) Format() string {
if p.PORT == 0 {
return fmt.Sprintf(TMPL_WITHOUT_PORT, p.SCHEME, p.HOSTNAME)
} else {
return fmt.Sprintf(TMPL, p.SCHEME, p.HOSTNAME, p.PORT)
}
}
var DEFAULT_PORT = 8000
var DEFAULT_PROXY = Proxy{SCHEME: "https", HOSTNAME: "apt.paulbsd.com", PORT: 0}
const TMPL = "%s://%s:%d"
const TMPL_WITHOUT_PORT = "%s://%s"
func main() {
addr, err := net.ResolveUDPAddr("udp", mdns.DefaultAddress)
if err != nil {
panic(err)
}
l, err := net.ListenUDP("udp4", addr)
if err != nil {
panic(err)
}
server, err := mdns.Server(ipv4.NewPacketConn(l), &mdns.Config{})
if err != nil {
panic(err)
}
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
defer cancel()
_, src, err := server.Query(ctx, "apt.local")
if err != nil {
var res = DEFAULT_PROXY
fmt.Println(res.Format())
return
}
var res = Proxy{SCHEME: "http", HOSTNAME: src.String(), PORT: DEFAULT_PORT}
fmt.Println(res.Format())
}