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}