Skip to content

Commit

Permalink
cmd: add amano and stealthmountain
Browse files Browse the repository at this point in the history
Signed-off-by: Xe Iaso <[email protected]>
  • Loading branch information
Xe committed Oct 25, 2024
1 parent 797eec6 commit afa4bc6
Show file tree
Hide file tree
Showing 34 changed files with 726 additions and 544 deletions.
20 changes: 20 additions & 0 deletions Earthfile
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ aerial:

SAVE IMAGE --push ghcr.io/xe/x/aerial:latest

amano:
FROM +runtime

COPY +everything/bin/amano /app/bin/amano
CMD ["/app/bin/amano"]

LABEL org.opencontainers.image.source="https://github.com/Xe/x"

SAVE IMAGE --push ghcr.io/xe/x/amano:latest

aura:
FROM +runtime

Expand Down Expand Up @@ -140,6 +150,16 @@ sapientwindex:

SAVE IMAGE --push ghcr.io/xe/x/sapientwindex:latest

stealthmountain:
FROM +runtime

COPY +everything/bin/stealthmountain /app/bin/stealthmountain
CMD ["/app/bin/stealthmountain"]

LABEL org.opencontainers.image.source="https://github.com/Xe/x"

SAVE IMAGE --push ghcr.io/xe/x/stealthmountain:latest

todayinmarch2020:
FROM +runtime

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
32 changes: 2 additions & 30 deletions cmd/sanguisuga/main.go → cmd/_old/sanguisuga/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ import (
irc "github.com/thoj/go-ircevent"
"go.jetpack.io/tyson"
"honnef.co/go/transmission"
"tailscale.com/hostinfo"
"tailscale.com/jsondb"
"tailscale.com/tsnet"
"within.website/x/internal"
Expand All @@ -42,7 +41,6 @@ var (
dbLoc = flag.String("db-loc", "./data.json", "path to data file")
tysonConfig = flag.String("tyson-config", "./config.ts", "path to configuration secrets (TySON)")
externalSeed = flag.Bool("external-seed", false, "try to external seed?")
tsnetVerbose = flag.Bool("tsnet-verbose", false, "enable verbose tsnet logging")

crcCheckCLI = flag.Bool("crc-check", false, "if true, check args[0] against hash args[1]")

Expand Down Expand Up @@ -82,7 +80,6 @@ func ParseTorrentAnnouncement(input string) (*TorrentAnnouncement, error) {

func main() {
internal.HandleStartup()
hostinfo.SetApp("within.website/x/cmd/sanguisuga")

if *crcCheckCLI {
if flag.NArg() != 2 {
Expand Down Expand Up @@ -137,34 +134,10 @@ func main() {
if c.Tailscale.DataDir != nil {
dataDir = *c.Tailscale.DataDir
}

srv := &tsnet.Server{
Dir: dataDir,
AuthKey: c.Tailscale.Authkey,
Hostname: c.Tailscale.Hostname,
Logf: func(string, ...any) {},
}

if *tsnetVerbose {
srv.Logf = slog.NewLogLogger(slog.Default().Handler().WithAttrs([]slog.Attr{slog.String("from", "tsnet")}), slog.LevelDebug).Printf
}

if err := srv.Start(); err != nil {
log.Fatalf("can't start tsnet server: %v", err)
}

go func() {
ln, err := srv.Listen("tcp", ":80")
if err != nil {
log.Fatalf("can't listen on tsnet: %v", err)
}
defer ln.Close()

log.Fatal(http.Serve(ln, http.DefaultServeMux))
}()
_ = dataDir

cl := &transmission.Client{
Client: srv.HTTPClient(),
Client: http.DefaultClient,
Endpoint: c.Transmission.URL,
Username: c.Transmission.User,
Password: c.Transmission.Password,
Expand Down Expand Up @@ -206,7 +179,6 @@ func main() {
db: db,
bot: bot,
tnet: tnet,
srv: srv,

animeInFlight: map[string]*SubspleaseAnnouncement{},
}
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
112 changes: 112 additions & 0 deletions cmd/amano/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package main

import (
"context"
"flag"
"fmt"
"log/slog"
"os"
"sync"
"time"

jetstreamClient "github.com/bluesky-social/jetstream/pkg/client"
"github.com/bluesky-social/jetstream/pkg/client/schedulers/parallel"
jsModels "github.com/bluesky-social/jetstream/pkg/models"
"github.com/goccy/go-json"
"github.com/nats-io/nats.go"
"within.website/x/internal"
)

var (
jetStreamURL = flag.String("jetstream-url", "wss://jetstream2.us-east.bsky.network/subscribe", "Jetstream server to subscribe to")
natsURL = flag.String("nats-url", "nats://localhost:4222", "nats url")
)

func main() {
internal.HandleStartup()

slog.Info("starting up",
"jetstream-url", jetStreamURL,
"nats-url", natsURL,
)

nc, err := nats.Connect(*natsURL)
if err != nil {
slog.Error("can't connect to NATS", "err", err)
os.Exit(1)
}
defer nc.Close()
slog.Info("connected to NATS")

jsCfg := jetstreamClient.DefaultClientConfig()
jsCfg.WebsocketURL = *jetStreamURL

jscli, err := jetstreamClient.NewClient(
jsCfg,
slog.With("aspect", "jetstream"),
parallel.NewScheduler(
1,
"amano",
slog.With("aspect", "fan-out"),
handleEvent(nc),
),
)
if err != nil {
slog.Error("can't set up jetstream client", "err", err)
os.Exit(1)
}
defer jscli.Scheduler.Shutdown()

now := time.Now().UnixNano()
if err := jscli.ConnectAndRead(context.Background(), &now); err != nil {
slog.Error("can't connect to jetstream", "err", err)
os.Exit(1)
}

slog.Info("connected to jetstream")

mu := sync.Mutex{}
mu.Lock()
mu.Lock()
}

func handleEvent(nc *nats.Conn) func(ctx context.Context, ev *jsModels.Event) error {
return func(ctx context.Context, ev *jsModels.Event) error {
switch ev.Kind {
case "account":
data, err := json.Marshal(ev.Account)
if err != nil {
return fmt.Errorf("can't marshal account event: %w", err)
}

if err := nc.Publish("amano:account", data); err != nil {
return fmt.Errorf("can't publish account event: %w", err)
}
case "identity":
data, err := json.Marshal(ev.Identity)
if err != nil {
return fmt.Errorf("can't marshal identity event: %w", err)
}

if err := nc.Publish("amano:identity", data); err != nil {
return fmt.Errorf("can't publish identity event: %w", err)
}
case "commit":
subject := fmt.Sprintf("amano:commit:%s", ev.Commit.Collection)
data, err := json.Marshal(ev.Commit)
if err != nil {
return fmt.Errorf("can't marshal commit event: %w", err)
}

m := nats.NewMsg(subject)
m.Data = data
m.Header.Set("bsky-actor-did", ev.Did)

if err := nc.PublishMsg(m); err != nil {
return fmt.Errorf("can't publish %q event: %w", subject, err)
}
}

return nil
}
}
152 changes: 152 additions & 0 deletions cmd/stealthmountain/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
package main

import (
"context"
"flag"
"fmt"
"log/slog"
"os"
"regexp"
"time"

comatproto "github.com/bluesky-social/indigo/api/atproto"
bskyData "github.com/bluesky-social/indigo/api/bsky"
jsModels "github.com/bluesky-social/jetstream/pkg/models"
bsky "github.com/danrusei/gobot-bsky"
"github.com/goccy/go-json"
"github.com/nats-io/nats.go"
"within.website/x/internal"
)

const (
PostTopic = "amano:commit:app.bsky.feed.post"
)

var (
blueskyAuthkey = flag.String("bsky-authkey", "", "Bluesky authkey")
blueskyHandle = flag.String("bsky-handle", "", "Bluesky handle")
blueskyPDS = flag.String("bsky-pds", "https://bsky.social", "Bluesky PDS")
natsURL = flag.String("nats-url", "nats://localhost:4222", "nats url")

sneakPeakRegex = regexp.MustCompile("(?i)sneak peak")
)

func main() {
internal.HandleStartup()

slog.Info("starting up",
"have-bsky-authkey", *blueskyAuthkey != "",
"bsky-handle", *blueskyHandle,
"bsky-pds", *blueskyPDS,
"nats-url", *natsURL,
)

nc, err := nats.Connect(*natsURL)
if err != nil {
slog.Error("can't connect to NATS", "err", err)
os.Exit(1)
}
defer nc.Close()
slog.Info("connected to NATS")

ctx, cancel := context.WithCancel(context.Background())
defer cancel()

bsAgent, err := bskyAuth(ctx, *blueskyPDS, *blueskyHandle, *blueskyAuthkey)
if err != nil {
slog.Error("can't auth to bluesky", "err", err)
os.Exit(1)
}

sub, err := nc.SubscribeSync(PostTopic)
if err != nil {
slog.Error("can't subscribe to post feed", "err", err)
os.Exit(1)
}
defer sub.Drain()

for {
m, err := sub.NextMsg(time.Second)
if err != nil {
slog.Error("can't read message", "err", err)
continue
}

var commit jsModels.Commit
if err := json.Unmarshal(m.Data, &commit); err != nil {
slog.Error("can't unmarshal commit", "err", err)
continue
}

if commit.Operation == "delete" {
continue
}

var post bskyData.FeedPost
if err := json.Unmarshal(commit.Record, &post); err != nil {
slog.Error("can't unmarshal post", "err", err)
continue
}

if sneakPeakRegex.MatchString(post.Text) {
actorID := m.Header.Get("bsky-actor-did")
slog.Info("found a stealth mountain!", "id", commit.Rev, "actor", actorID)
reply, err := bsky.NewPostBuilder(`I think you mean "sneak peek"`).Build()
if err != nil {
slog.Error("can't build reply post", "err", err)
}
parent := comatproto.RepoStrongRef{
LexiconTypeID: "app.bsky.feed.post",
Uri: fmt.Sprintf("at://%s/app.bsky.feed.post/%s", actorID, commit.RKey),
Cid: commit.CID,
}
root := parent

if post.Reply != nil {
root = *post.Reply.Root
}

reply.Reply = &bskyData.FeedPost_ReplyRef{
Parent: &parent,
Root: &root,
}

reply.CreatedAt = time.Now().UTC().Format(time.RFC3339)

cid, uri, err := bsAgent.PostToFeed(ctx, reply)
if err != nil {
slog.Error("cannot post to feed", "err", err)
continue
}

slog.Info("posted to bluesky", "bluesky_cid", cid, "bluesky_uri", uri)
}
}
}

func bskyAuth(ctx context.Context, pds, handle, authkey string) (*bsky.BskyAgent, error) {
bluesky := bsky.NewAgent(ctx, pds, handle, authkey)
if err := bluesky.Connect(ctx); err != nil {
slog.Error("failed to connect to bluesky", "err", err)
return nil, err
}

go func() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
t := time.NewTicker(5 * time.Minute)
defer t.Stop()
for range t.C {
if err := bluesky.Connect(ctx); err != nil {
slog.Error("can't reauth to bluesky", "err", err)
}
}
}()

if err := bluesky.Connect(ctx); err != nil {
slog.Error("failed to connect to bluesky", "err", err)
return nil, err
}

return &bluesky, nil
}
2 changes: 0 additions & 2 deletions cmd/within.website/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (

"github.com/a-h/templ"
"go.jetpack.io/tyson"
"tailscale.com/tsweb"
"within.website/x/internal"
"within.website/x/web/vanity"
"within.website/x/xess"
Expand Down Expand Up @@ -83,7 +82,6 @@ func main() {
}

xess.Mount(mux)
mux.HandleFunc("/debug/varz", tsweb.VarzHandler)

mux.Handle("/{$}", templ.Handler(
xess.Base(
Expand Down
Loading

0 comments on commit afa4bc6

Please sign in to comment.