~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
58 lines · 2.3 KB Raw History
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
}