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}