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}