aboutsummaryrefslogtreecommitdiff
path: root/cmd/patreon-saasproxy/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/patreon-saasproxy/main.go')
-rw-r--r--cmd/patreon-saasproxy/main.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/cmd/patreon-saasproxy/main.go b/cmd/patreon-saasproxy/main.go
index cfe9717..b44a697 100644
--- a/cmd/patreon-saasproxy/main.go
+++ b/cmd/patreon-saasproxy/main.go
@@ -1,6 +1,7 @@
package main
import (
+ "context"
"encoding/base64"
"encoding/json"
"expvar"
@@ -14,6 +15,8 @@ import (
"github.com/facebookgo/flagenv"
_ "github.com/joho/godotenv/autoload"
"golang.org/x/oauth2"
+ "google.golang.org/protobuf/types/known/emptypb"
+ "google.golang.org/protobuf/types/known/timestamppb"
"gopkg.in/mxpv/patreon-go.v1"
"tailscale.com/client/tailscale"
"tailscale.com/hostinfo"
@@ -21,6 +24,7 @@ import (
"tailscale.com/tsnet"
"tailscale.com/tsweb"
"xeiaso.net/v4/internal"
+ "xeiaso.net/v4/internal/adminpb"
)
var (
@@ -110,6 +114,9 @@ func main() {
log.Fatal(err)
}
+ ph := adminpb.NewPatreonServer(s)
+ http.Handle(adminpb.PatreonPathPrefix, ph)
+
slog.Info("listening over tailscale", "hostname", *tailscaleHostname)
log.Fatal(http.Serve(ln, nil))
@@ -120,6 +127,21 @@ type Server struct {
cts oauth2.TokenSource
}
+func (s *Server) GetToken(ctx context.Context, _ *emptypb.Empty) (*adminpb.PatreonToken, error) {
+ token, err := s.cts.Token()
+ if err != nil {
+ slog.Error("token fetch failed", "err", err)
+ return nil, err
+ }
+
+ return &adminpb.PatreonToken{
+ AccessToken: token.AccessToken,
+ TokenType: token.TokenType,
+ RefreshToken: token.RefreshToken,
+ Expiry: timestamppb.New(token.Expiry),
+ }, nil
+}
+
func (s *Server) GiveToken(w http.ResponseWriter, r *http.Request) {
whois, err := s.lc.WhoIs(r.Context(), r.RemoteAddr)
if err != nil {