Upload images to your PDS and get instant CDN URLs via images.blue
1package auth
2
3import (
4 _ "embed"
5 "encoding/json"
6 "strings"
7
8 "github.com/bluesky-social/indigo/atproto/auth/oauth"
9)
10
11// NOTE: if the server-side metadata changes, this file will also need to change.
12//
13//go:embed client-metadata.json
14var metadataJson []byte
15
16type ClientMetadata struct {
17 ClientID string `json:"client_id"`
18 ClientName string `json:"client_name"`
19 SubjectType string `json:"subject_type"`
20 ClientURI string `json:"client_uri"`
21 RedirectURIs []string `json:"redirect_uris"`
22 GrantTypes []string `json:"grant_types"`
23 ResponseTypes []string `json:"response_types"`
24 ApplicationType string `json:"application_type"`
25 DpopBoundAccessTokens bool `json:"dpop_bound_access_tokens"`
26 JwksURI string `json:"jwks_uri"`
27 Scope string `json:"scope"`
28 TokenEndpointAuthMethod string `json:"token_endpoint_auth_method"`
29 TokenEndpointAuthSigningAlg string `json:"token_endpoint_auth_signing_alg"`
30}
31
32func GetClientMetadata() ClientMetadata {
33 var cm ClientMetadata
34 json.Unmarshal(metadataJson, &cm)
35 return cm
36}
37
38// GetClientConfig returns the OAuth client configuration for indigo
39func GetClientConfig() oauth.ClientConfig {
40 metadata := GetClientMetadata()
41
42 // Split space-separated scopes from metadata into slice
43 scopes := strings.Fields(metadata.Scope)
44
45 return oauth.NewPublicConfig(
46 metadata.ClientID,
47 metadata.RedirectURIs[0],
48 scopes,
49 )
50}