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() *OauthClient {
25 b, err := os.ReadFile("./jwks.json")
26 if err != nil {
27 panic(err)
28 }
29
30 k, err := ParseKeyFromBytes(b)
31 if err != nil {
32 panic(err)
33 }
34
35 c, err := NewOauthClient(OauthClientArgs{
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
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 := 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 := 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.Resp["expires_in"])
111 assert.NotEmpty(parResp.Resp["request_uri"])
112}