diff --git a/dynoid/README.md b/dynoid/README.md index 5a7e3bd..a990b05 100644 --- a/dynoid/README.md +++ b/dynoid/README.md @@ -17,6 +17,9 @@ The [dynoid](<#dynoid>) package provides all of the functions needed to verify a In the case that you want to verify a token outside of an [http.Handler][handler] you can leverage the [Verifier](<#Verifier>) directly. +### HTTP Middleware + +The [dynoid/middleware](<#middleware>) package provides several `net/http` middleware that validate incoming requests are authenticated and adds the parsed token to the request context to be used further down the stack. ## Testing and Local Development @@ -332,13 +335,7 @@ func init() { func main() { verifier := dynoid.New(AUDIENCE) - verifier.IssuerCallback = func(issuer string) error { - if issuer != "https://oidc.heroku.local/spaces/test" { - return fmt.Errorf("unexpected issuer %q", issuer) - } - - return nil - } + verifier.IssuerCallback = dynoid.AllowHerokuHost("heroku.local") // heroku.com for production t, err := verifier.Verify(ctx, token) if err != nil { @@ -526,6 +523,56 @@ type Issuer struct { } ``` +
Example +

+ + + +```go +package main + +import ( + "context" + "fmt" + + "github.com/heroku/x/dynoid" + "github.com/heroku/x/dynoid/dynoidtest" +) + +const AUDIENCE = "testing" + +func main() { + ctx, iss, err := dynoidtest.NewWithContext(context.Background()) + if err != nil { + panic(err) + } + + if err := dynoidtest.GenerateDefaultFS(iss, AUDIENCE); err != nil { + panic(err) + } + + token, err := dynoid.ReadLocalToken(ctx, AUDIENCE) + if err != nil { + panic(err) + } + + fmt.Println(token.Subject.AppID) + fmt.Println(token.Subject.AppName) + fmt.Println(token.Subject.Dyno) +} +``` + +#### Output + +``` +00000000-0000-0000-0000-000000000001 +sushi +web.1 +``` + +

+
+ ### func [New]() diff --git a/dynoid/dynoidtest/example_test.go b/dynoid/dynoidtest/example_test.go new file mode 100644 index 0000000..9cdf6ac --- /dev/null +++ b/dynoid/dynoidtest/example_test.go @@ -0,0 +1,35 @@ +package dynoidtest_test + +import ( + "context" + "fmt" + + "github.com/heroku/x/dynoid" + "github.com/heroku/x/dynoid/dynoidtest" +) + +const AUDIENCE = "testing" + +func ExampleIssuer() { + ctx, iss, err := dynoidtest.NewWithContext(context.Background()) + if err != nil { + panic(err) + } + + if err := dynoidtest.GenerateDefaultFS(iss, AUDIENCE); err != nil { + panic(err) + } + + token, err := dynoid.ReadLocalToken(ctx, AUDIENCE) + if err != nil { + panic(err) + } + + fmt.Println(token.Subject.AppID) + fmt.Println(token.Subject.AppName) + fmt.Println(token.Subject.Dyno) + // Output: + // 00000000-0000-0000-0000-000000000001 + // sushi + // web.1 +} diff --git a/dynoid/example_test.go b/dynoid/example_test.go index 47220b5..9d89d99 100644 --- a/dynoid/example_test.go +++ b/dynoid/example_test.go @@ -22,13 +22,7 @@ func init() { func ExampleVerifier() { verifier := dynoid.New(AUDIENCE) - verifier.IssuerCallback = func(issuer string) error { - if issuer != "https://oidc.heroku.local/spaces/test" { - return fmt.Errorf("unexpected issuer %q", issuer) - } - - return nil - } + verifier.IssuerCallback = dynoid.AllowHerokuHost("heroku.local") // heroku.com for production t, err := verifier.Verify(ctx, token) if err != nil {