An atproto PDS written in Go

add a fallback proxy config

Changed files
+11
cmd
cocoon
server
+5
cmd/cocoon/main.go
···
EnvVars: []string{"COCOON_BLOCKSTORE_VARIANT"},
Value: "sqlite",
},
+
&cli.StringFlag{
+
Name: "fallback-proxy",
+
EnvVars: []string{"COCOON_FALLBACK_PROXY"},
+
},
},
Commands: []*cli.Command{
runServe,
···
},
SessionSecret: cmd.String("session-secret"),
BlockstoreVariant: server.MustReturnBlockstoreVariant(cmd.String("blockstore-variant")),
+
FallbackProxy: cmd.String("fallback-proxy"),
})
if err != nil {
fmt.Printf("error creating cocoon: %v", err)
+3
server/handle_proxy.go
···
func (s *Server) getAtprotoProxyEndpointFromRequest(e echo.Context) (string, string, error) {
svc := e.Request().Header.Get("atproto-proxy")
+
if svc == "" && s.config.FallbackProxy != "" {
+
svc = s.config.FallbackProxy
+
}
svcPts := strings.Split(svc, "#")
if len(svcPts) != 2 {
+3
server/server.go
···
oauthProvider *provider.Provider
evtman *events.EventManager
passport *identity.Passport
+
fallbackProxy string
dbName string
s3Config *S3Config
···
SmtpEmail string
SmtpName string
BlockstoreVariant BlockstoreVariant
+
FallbackProxy string
}
type CustomValidator struct {
···
SmtpName: args.SmtpName,
SmtpEmail: args.SmtpEmail,
BlockstoreVariant: args.BlockstoreVariant,
+
FallbackProxy: args.FallbackProxy,
},
evtman: events.NewEventManager(events.NewMemPersister()),
passport: identity.NewPassport(h, identity.NewMemCache(10_000)),