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