this repo has no description
1package oauth
2
3import (
4 "context"
5 "fmt"
6 "io"
7 "net/http"
8 "os"
9 "testing"
10
11 "github.com/haileyok/atproto-oauth-golang/helpers"
12 _ "github.com/joho/godotenv/autoload"
13 "github.com/stretchr/testify/assert"
14)
15
16var (
17 ctx = context.Background()
18 oauthClient = newTestOauthClient()
19 serverUrlRoot = os.Getenv("OAUTH_TEST_SERVER_URL_ROOT")
20 serverMetadataUrl = fmt.Sprintf("%s/oauth/client-metadata.json", serverUrlRoot)
21 serverCallbackUrl = fmt.Sprintf("%s/callback", serverUrlRoot)
22 pdsUrl = os.Getenv("OAUTH_TEST_PDS_URL")
23)
24
25func newTestOauthClient() *Client {
26 b, err := os.ReadFile("./jwks.json")
27 if err != nil {
28 panic(err)
29 }
30
31 k, err := helpers.ParseJWKFromBytes(b)
32 if err != nil {
33 panic(err)
34 }
35
36 c, err := NewClient(ClientArgs{
37 ClientJwk: k,
38 ClientId: serverMetadataUrl,
39 RedirectUri: serverCallbackUrl,
40 })
41 if err != nil {
42 panic(err)
43 }
44
45 // make sure the server is running
46 req, err := http.NewRequest("GET", serverMetadataUrl, nil)
47 if err != nil {
48 panic(err)
49 }
50
51 resp, err := http.DefaultClient.Do(req)
52 if err != nil {
53 panic(fmt.Errorf("could not connect to test server. are you sure you started it?"))
54 }
55 defer resp.Body.Close()
56
57 io.Copy(io.Discard, resp.Body)
58
59 return c
60}
61
62func TestResolvePDSAuthServer(t *testing.T) {
63 assert := assert.New(t)
64
65 authServer, err := oauthClient.ResolvePdsAuthServer(ctx, pdsUrl)
66
67 assert.NoError(err)
68 assert.NotEmpty(authServer)
69 assert.Equal(pdsUrl, authServer)
70}
71
72func TestFetchAuthServerMetadata(t *testing.T) {
73 assert := assert.New(t)
74
75 meta, err := oauthClient.FetchAuthServerMetadata(ctx, pdsUrl)
76
77 assert.NoError(err)
78 assert.IsType(&OauthAuthorizationMetadata{}, meta)
79}
80
81func TestGenerateKey(t *testing.T) {
82 assert := assert.New(t)
83
84 prefix := "testing"
85 _, err := helpers.GenerateKey(&prefix)
86 assert.NoError(err)
87}
88
89func TestSendParAuthRequest(t *testing.T) {
90 assert := assert.New(t)
91
92 authserverUrl, err := oauthClient.ResolvePdsAuthServer(ctx, pdsUrl)
93 meta, err := oauthClient.FetchAuthServerMetadata(ctx, pdsUrl)
94 if err != nil {
95 panic(err)
96 }
97
98 prefix := "testing"
99 dpopPriv, err := helpers.GenerateKey(&prefix)
100 if err != nil {
101 panic(err)
102 }
103
104 parResp, err := oauthClient.SendParAuthRequest(ctx, authserverUrl, meta, "transition:generic", "atproto", dpopPriv)
105 if err != nil {
106 panic(err)
107 }
108
109 assert.NoError(err)
110 assert.Equal(float64(299), parResp.ExpiresIn)
111 assert.NotEmpty(parResp.RequestUri)
112}