Monorepo for Tangled
tangled.org
1package pulls
2
3import (
4 "bytes"
5 "compress/gzip"
6 "fmt"
7 "io"
8 "log/slog"
9
10 "tangled.org/core/appview/config"
11 "tangled.org/core/appview/db"
12 pulls_indexer "tangled.org/core/appview/indexer/pulls"
13 "tangled.org/core/appview/mentions"
14 "tangled.org/core/appview/models"
15 "tangled.org/core/appview/notify"
16 "tangled.org/core/appview/oauth"
17 "tangled.org/core/appview/pages"
18 "tangled.org/core/appview/reporesolver"
19 "tangled.org/core/appview/validator"
20 "tangled.org/core/idresolver"
21 "tangled.org/core/ogre"
22 "tangled.org/core/rbac"
23
24 indigoxrpc "github.com/bluesky-social/indigo/xrpc"
25)
26
27const ApplicationGzip = "application/gzip"
28
29type Pulls struct {
30 oauth *oauth.OAuth
31 repoResolver *reporesolver.RepoResolver
32 pages *pages.Pages
33 idResolver *idresolver.Resolver
34 mentionsResolver *mentions.Resolver
35 db *db.DB
36 config *config.Config
37 notifier notify.Notifier
38 enforcer *rbac.Enforcer
39 logger *slog.Logger
40 validator *validator.Validator
41 indexer *pulls_indexer.Indexer
42 ogreClient *ogre.Client
43}
44
45func New(
46 oauth *oauth.OAuth,
47 repoResolver *reporesolver.RepoResolver,
48 pages *pages.Pages,
49 resolver *idresolver.Resolver,
50 mentionsResolver *mentions.Resolver,
51 db *db.DB,
52 config *config.Config,
53 notifier notify.Notifier,
54 enforcer *rbac.Enforcer,
55 validator *validator.Validator,
56 indexer *pulls_indexer.Indexer,
57 logger *slog.Logger,
58) *Pulls {
59 return &Pulls{
60 oauth: oauth,
61 repoResolver: repoResolver,
62 pages: pages,
63 idResolver: resolver,
64 mentionsResolver: mentionsResolver,
65 db: db,
66 config: config,
67 notifier: notifier,
68 enforcer: enforcer,
69 logger: logger,
70 validator: validator,
71 indexer: indexer,
72 ogreClient: ogre.NewClient(config.Ogre.Host),
73 }
74}
75
76func (s *Pulls) knotClient(host string) *indigoxrpc.Client {
77 scheme := "https"
78 if s.config.Core.Dev {
79 scheme = "http"
80 }
81 return &indigoxrpc.Client{Host: fmt.Sprintf("%s://%s", scheme, host)}
82}
83
84func gz(s string) io.Reader {
85 var b bytes.Buffer
86 w := gzip.NewWriter(&b)
87 w.Write([]byte(s))
88 w.Close()
89 return &b
90}
91
92func ptrPullState(s models.PullState) *models.PullState { return &s }