1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package main
import (
"context"
"strings"
"time"
"github.com/johnandersen777/socialweb-computer-kcp/internal/atprotorelaymain"
"github.com/johnandersen777/socialweb-computer-kcp/internal/clicfg"
)
var atprotoRelayOptions = []string{
"state-dir", "atproto-relay-listen", "atproto-relay-public-url", "atproto-relay-plc-url", "atproto-relay-allowed-hosts",
"atproto-relay-seed-hosts", "atproto-relay-recrawl-window", "atproto-relay-idle-after", "atproto-relay-max-backlog",
"atproto-relay-start-seq", "atproto-relay-insecure-http",
}
func runAtprotoRelay(ctx context.Context, a *app, vals clicfg.Values, rest []string) int {
const verb = "internal atproto-relay"
if len(rest) > 0 {
return a.fail(exitRefused, "%s: unexpected %q", verb, strings.Join(rest, " "))
}
durations := map[string]time.Duration{}
for _, name := range []string{"atproto-relay-recrawl-window", "atproto-relay-idle-after"} {
d, err := time.ParseDuration(vals.String(name))
if err != nil || d < 0 {
return a.fail(exitRefused, "%s: --%s wants a Go duration of 0 or more, got %q", verb, name, vals.String(name))
}
durations[name] = d
}
if vals.Int("atproto-relay-start-seq") < 0 || vals.Int("atproto-relay-max-backlog") < 0 {
return a.fail(exitRefused, "%s: --atproto-relay-start-seq and --atproto-relay-max-backlog want 0 or more", verb)
}
v := buildVersion(a.goos, a.goarch)
version := v.Version
if v.Revision != "" && !strings.Contains(version, v.Revision) {
version += " " + v.Revision
}
err := atprotorelaymain.Run(ctx, atprotorelaymain.Config{
Listen: vals.String("atproto-relay-listen"),
StateDir: vals.String("state-dir"),
PublicURL: vals.String("atproto-relay-public-url"),
PLCURL: vals.String("atproto-relay-plc-url"),
AllowedHosts: atprotorelaymain.SplitList(vals.String("atproto-relay-allowed-hosts")),
SeedHostsFile: vals.String("atproto-relay-seed-hosts"),
RecrawlWindow: durations["atproto-relay-recrawl-window"],
IdleAfter: durations["atproto-relay-idle-after"],
MaxBacklog: vals.Int("atproto-relay-max-backlog"),
StartSeq: int64(vals.Int("atproto-relay-start-seq")),
InsecureHTTP: vals.Bool("atproto-relay-insecure-http"),
Version: version,
Log: a.log.With("component", "atproto-relay"),
})
if err != nil {
return a.fail(exitFailed, "%s: %v", verb, err)
}
return exitOK
}