Monorepo for Tangled
tangled.org
1package server
2
3import (
4 "net/http"
5
6 atcrypto "github.com/bluesky-social/indigo/atproto/crypto"
7 "github.com/bluesky-social/indigo/atproto/auth/oauth"
8 "tangled.org/core/idresolver"
9 "tangled.org/core/knot2/config"
10)
11
12func newAtClientApp(cfg *config.Config) *oauth.ClientApp {
13 idResolver := idresolver.DefaultResolver(cfg.PlcUrl)
14 scopes := []string{"atproto", "identity:*"}
15 var oauthConfig oauth.ClientConfig
16 if cfg.Dev {
17 oauthConfig = oauth.NewLocalhostConfig(
18 cfg.Uri()+"/oauth/callback",
19 scopes,
20 )
21 } else {
22 oauthConfig = oauth.NewPublicConfig(
23 cfg.Uri()+"/oauth/client-metadata.json",
24 cfg.Uri()+"/oauth/callback",
25 scopes,
26 )
27 }
28 priv, err := atcrypto.ParsePrivateMultibase(cfg.OAuth.ClientSecret)
29 if err != nil {
30 panic(err)
31 }
32 if err := oauthConfig.SetClientSecret(priv, cfg.OAuth.ClientKid); err != nil {
33 panic(err)
34 }
35 // we can just use in-memory auth store
36 clientApp := oauth.NewClientApp(&oauthConfig, oauth.NewMemStore())
37 clientApp.Dir = idResolver.Directory()
38 clientApp.Resolver.Client.Transport = http.DefaultTransport
39 return clientApp
40}