diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-10-02 15:07:26 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-10-02 15:07:26 -0400 |
| commit | 21a3c8b3d0f500f5d2ff2d97e74897975ff9a39e (patch) | |
| tree | 78bbc5d692622740c2a1a3167b9940645e425920 | |
| parent | 6f8f5c8d7169c31bb379124bf488b89556469745 (diff) | |
| download | xesite-21a3c8b3d0f500f5d2ff2d97e74897975ff9a39e.tar.xz xesite-21a3c8b3d0f500f5d2ff2d97e74897975ff9a39e.zip | |
cmd/xesite: add mi poking when builds are done
Signed-off-by: Xe Iaso <me@xeiaso.net>
| -rw-r--r-- | cmd/xesite/main.go | 2 | ||||
| -rw-r--r-- | internal/lume/lume.go | 25 | ||||
| -rw-r--r-- | internal/mi/mi.go | 53 |
3 files changed, 80 insertions, 0 deletions
diff --git a/cmd/xesite/main.go b/cmd/xesite/main.go index 566678b..3316f3f 100644 --- a/cmd/xesite/main.go +++ b/cmd/xesite/main.go @@ -29,6 +29,7 @@ var ( gitBranch = flag.String("git-branch", "main", "Git branch to clone") gitRepo = flag.String("git-repo", "https://github.com/Xe/site", "Git repository to clone") githubSecret = flag.String("github-secret", "", "GitHub secret to use for webhooks") + miToken = flag.String("mi-token", "", "Token to use for the mi API") patreonSaasProxyURL = flag.String("patreon-saasproxy-url", "http://patreon-saasproxy/give-token", "URL to use for the patreon saasproxy") siteURL = flag.String("site-url", "https://xeiaso.net/", "URL to use for the site") tsnetHostname = flag.String("tailscale-hostname", "xesite", "Tailscale hostname to use") @@ -80,6 +81,7 @@ func main() { Development: *devel, PatreonClient: pc, DataDir: *dataDir, + MiToken: *miToken, }) if err != nil { log.Fatal(err) diff --git a/internal/lume/lume.go b/internal/lume/lume.go index b22e7d6..294f42c 100644 --- a/internal/lume/lume.go +++ b/internal/lume/lume.go @@ -19,6 +19,7 @@ import ( "gopkg.in/mxpv/patreon-go.v1" "tailscale.com/metrics" "xeiaso.net/v4/internal/config" + "xeiaso.net/v4/internal/mi" ) var ( @@ -67,6 +68,8 @@ type FS struct { opt *Options conf *config.Config + miClient *mi.Client + fs fs.FS lock sync.RWMutex } @@ -119,6 +122,7 @@ type Options struct { URL string PatreonClient *patreon.Client DataDir string + MiToken string } func New(ctx context.Context, o *Options) (*FS, error) { @@ -154,6 +158,11 @@ func New(ctx context.Context, o *Options) (*FS, error) { } } + if o.MiToken != "" { + fs.miClient = mi.New(o.MiToken, "xeiaso.net/v4/internal/lume "+os.Args[0]) + slog.Info("mi integration enabled") + } + conf, err := config.Load(filepath.Join(fs.repoDir, "config.dhall")) if err != nil { log.Fatal(err) @@ -165,6 +174,14 @@ func New(ctx context.Context, o *Options) (*FS, error) { return nil, err } + if fs.miClient != nil { + go func() { + if err := fs.miClient.Refresh(); err != nil { + slog.Error("failed to refresh mi", "err", err) + } + }() + } + return fs, nil } @@ -217,6 +234,14 @@ func (f *FS) Update(ctx context.Context) error { return err } + if f.miClient != nil { + go func() { + if err := f.miClient.Refresh(); err != nil { + slog.Error("failed to refresh mi", "err", err) + } + }() + } + return nil } diff --git a/internal/mi/mi.go b/internal/mi/mi.go new file mode 100644 index 0000000..67134fd --- /dev/null +++ b/internal/mi/mi.go @@ -0,0 +1,53 @@ +package mi + +import ( + "errors" + "net/http" +) + +type Client struct { + cli *http.Client + baseURL string + headers http.Header +} + +func New(token string, userAgent string) *Client { + headers := http.Header{} + headers.Set("Authorization", token) + headers.Set("User-Agent", userAgent) + + cli := &http.Client{} + + return &Client{ + cli: cli, + baseURL: "https://mi.within.website", + headers: headers, + } +} + +func (c *Client) Refresh() error { + if c == nil { + return nil + } + + req, err := http.NewRequest("POST", c.baseURL+"/api/blog/refresh", nil) + if err != nil { + return err + } + + for k, v := range c.headers { + req.Header[k] = v + } + + resp, err := c.cli.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return errors.New("non-200 status code") + } + + return nil +} |
