Skip to content

Commit

Permalink
Fix examples (#184)
Browse files Browse the repository at this point in the history
  • Loading branch information
sergiught committed Nov 21, 2022
1 parent 0aec1d2 commit f743be6
Show file tree
Hide file tree
Showing 7 changed files with 137 additions and 93 deletions.
2 changes: 1 addition & 1 deletion examples/gin-example/go.mod
Expand Up @@ -3,7 +3,7 @@ module example.com/gin
go 1.19

require (
github.com/auth0/go-jwt-middleware/v2 v2.0.1
github.com/auth0/go-jwt-middleware/v2 v2.1.0
github.com/gin-gonic/gin v1.8.1
)

Expand Down
15 changes: 15 additions & 0 deletions examples/http-example/go.mod
@@ -0,0 +1,15 @@
module example.com/http

go 1.19

require (
github.com/auth0/go-jwt-middleware/v2 v2.1.0
gopkg.in/square/go-jose.v2 v2.6.0
)

replace github.com/auth0/go-jwt-middleware/v2 => ./../../

require (
github.com/pkg/errors v0.9.1 // indirect
golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 // indirect
)
11 changes: 11 additions & 0 deletions examples/http-example/go.sum
@@ -0,0 +1,11 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 h1:SLP7Q4Di66FONjDJbCYrCRrh97focO6sLogHO7/g8F0=
golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI=
gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
75 changes: 36 additions & 39 deletions examples/http-example/main_test.go
Expand Up @@ -9,40 +9,8 @@ import (
"gopkg.in/square/go-jose.v2/jwt"
)

func buildJWTForTesting(t *testing.T, username string) string {
t.Helper()

key := jose.SigningKey{
Algorithm: jose.HS256,
Key: signingKey,
}
signer, err := jose.NewSigner(key, (&jose.SignerOptions{}).WithType("JWT"))
if err != nil {
t.Fatalf("could not build signer: %s", err.Error())
}

claims := jwt.Claims{
Issuer: issuer,
Audience: audience,
}
customClaims := CustomClaimsExample{
Username: username,
}

token, err := jwt.Signed(signer).
Claims(claims).
Claims(customClaims).
CompactSerialize()

if err != nil {
t.Fatalf("could not build token: %s", err.Error())
}

return token
}

func TestHandler(t *testing.T) {
tests := []struct {
testCases := []struct {
name string
username string
wantStatusCode int
Expand All @@ -59,24 +27,53 @@ func TestHandler(t *testing.T) {
},
}

for _, test := range tests {
for _, test := range testCases {
t.Run(test.name, func(t *testing.T) {
req, err := http.NewRequest(http.MethodGet, "", nil)
request, err := http.NewRequest(http.MethodGet, "", nil)
if err != nil {
t.Fatal(err)
}

token := buildJWTForTesting(t, test.username)
req.Header.Set("Authorization", "Bearer "+token)
request.Header.Set("Authorization", "Bearer "+token)

rr := httptest.NewRecorder()
responseRecorder := httptest.NewRecorder()

mainHandler := setupHandler()
mainHandler.ServeHTTP(rr, req)
mainHandler.ServeHTTP(responseRecorder, request)

if want, got := test.wantStatusCode, rr.Code; want != got {
if want, got := test.wantStatusCode, responseRecorder.Code; want != got {
t.Fatalf("wanted status code %d, but got status code %d", want, got)
}
})
}
}

func buildJWTForTesting(t *testing.T, username string) string {
t.Helper()

key := jose.SigningKey{
Algorithm: jose.HS256,
Key: signingKey,
}

signer, err := jose.NewSigner(key, (&jose.SignerOptions{}).WithType("JWT"))
if err != nil {
t.Fatalf("could not build signer: %s", err.Error())
}

claims := jwt.Claims{
Issuer: issuer,
Audience: audience,
}
customClaims := CustomClaimsExample{
Username: username,
}

token, err := jwt.Signed(signer).Claims(claims).Claims(customClaims).CompactSerialize()
if err != nil {
t.Fatalf("could not build token: %s", err.Error())
}

return token
}
15 changes: 15 additions & 0 deletions examples/http-jwks-example/go.mod
@@ -0,0 +1,15 @@
module example.com/http-jwks

go 1.19

require (
github.com/auth0/go-jwt-middleware/v2 v2.1.0
gopkg.in/square/go-jose.v2 v2.6.0
)

replace github.com/auth0/go-jwt-middleware/v2 => ./../../

require (
github.com/pkg/errors v0.9.1 // indirect
golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 // indirect
)
11 changes: 11 additions & 0 deletions examples/http-jwks-example/go.sum
@@ -0,0 +1,11 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 h1:SLP7Q4Di66FONjDJbCYrCRrh97focO6sLogHO7/g8F0=
golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI=
gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
101 changes: 48 additions & 53 deletions examples/http-jwks-example/main_test.go
Expand Up @@ -10,46 +10,10 @@ import (

"gopkg.in/square/go-jose.v2"
"gopkg.in/square/go-jose.v2/jwt"

"github.com/auth0/go-jwt-middleware/v2/internal/oidc"
)

func buildJWTForTesting(t *testing.T, jwk *jose.JSONWebKey, issuer, subject string, audience []string) string {
t.Helper()

key := jose.SigningKey{
Algorithm: jose.SignatureAlgorithm(jwk.Algorithm),
Key: jwk,
}
signer, err := jose.NewSigner(key, (&jose.SignerOptions{}).WithType("JWT"))
if err != nil {
t.Fatalf("could not build signer: %s", err.Error())
}

claims := jwt.Claims{
Issuer: issuer,
Audience: audience,
Subject: subject,
}

token, err := jwt.Signed(signer).
Claims(claims).
CompactSerialize()

if err != nil {
t.Fatalf("could not build token: %s", err.Error())
}

return token
}

func TestHandler(t *testing.T) {
jwk := generateJWK(t)

testServer := setupTestServer(t, jwk)
defer testServer.Close()

tests := []struct {
testCases := []struct {
name string
subject string
wantStatusCode int
Expand All @@ -66,22 +30,27 @@ func TestHandler(t *testing.T) {
},
}

for _, test := range tests {
jwk := generateJWK(t)

testServer := setupTestServer(t, jwk)
defer testServer.Close()

for _, test := range testCases {
t.Run(test.name, func(t *testing.T) {
req, err := http.NewRequest(http.MethodGet, "", nil)
request, err := http.NewRequest(http.MethodGet, "", nil)
if err != nil {
t.Fatal(err)
}

token := buildJWTForTesting(t, jwk, testServer.URL, test.subject, []string{"my-audience"})
req.Header.Set("Authorization", "Bearer "+token)
request.Header.Set("Authorization", "Bearer "+token)

rr := httptest.NewRecorder()
responseRecorder := httptest.NewRecorder()

mainHandler := setupHandler(testServer.URL, []string{"my-audience"})
mainHandler.ServeHTTP(rr, req)
mainHandler.ServeHTTP(responseRecorder, request)

if want, got := test.wantStatusCode, rr.Code; want != got {
if want, got := test.wantStatusCode, responseRecorder.Code; want != got {
t.Fatalf("wanted status code %d, but got status code %d", want, got)
}
})
Expand All @@ -104,25 +73,24 @@ func generateJWK(t *testing.T) *jose.JSONWebKey {
}
}

func setupTestServer(
t *testing.T,
jwk *jose.JSONWebKey,
) (server *httptest.Server) {
func setupTestServer(t *testing.T, jwk *jose.JSONWebKey) (server *httptest.Server) {
t.Helper()

var handler http.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch r.URL.String() {
case "/.well-known/openid-configuration":
wk := oidc.WellKnownEndpoints{JWKSURI: server.URL + "/.well-known/jwks.json"}
err := json.NewEncoder(w).Encode(wk)
if err != nil {
wk := struct {
JWKSURI string `json:"jwks_uri"`
}{
JWKSURI: server.URL + "/.well-known/jwks.json",
}
if err := json.NewEncoder(w).Encode(wk); err != nil {
t.Fatal(err)
}
case "/.well-known/jwks.json":
err := json.NewEncoder(w).Encode(jose.JSONWebKeySet{
if err := json.NewEncoder(w).Encode(jose.JSONWebKeySet{
Keys: []jose.JSONWebKey{jwk.Public()},
})
if err != nil {
}); err != nil {
t.Fatal(err)
}
default:
Expand All @@ -132,3 +100,30 @@ func setupTestServer(

return httptest.NewServer(handler)
}

func buildJWTForTesting(t *testing.T, jwk *jose.JSONWebKey, issuer, subject string, audience []string) string {
t.Helper()

key := jose.SigningKey{
Algorithm: jose.SignatureAlgorithm(jwk.Algorithm),
Key: jwk,
}

signer, err := jose.NewSigner(key, (&jose.SignerOptions{}).WithType("JWT"))
if err != nil {
t.Fatalf("could not build signer: %s", err.Error())
}

claims := jwt.Claims{
Issuer: issuer,
Audience: audience,
Subject: subject,
}

token, err := jwt.Signed(signer).Claims(claims).CompactSerialize()
if err != nil {
t.Fatalf("could not build token: %s", err.Error())
}

return token
}

0 comments on commit f743be6

Please sign in to comment.