Skip to content

Commit 93bb521

Browse files
Aeneas Rekkas (arekkas)arekkas
authored andcommitted
sdk: improve consent api and docs
1 parent 63f8dc4 commit 93bb521

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

sdk/consent.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ func (c *ChallengeClaims) Valid() error {
6464

6565
// VerifyChallenge verifies a consent challenge and either returns the challenge's claims if it is valid, or an
6666
// error if it is not.
67+
//
68+
// claims, err := c.VerifyChallenge(challenge)
69+
// if err != nil {
70+
// // The challenge is invalid, or the signing key could not be retrieved
71+
// }
72+
// // ...
6773
func (c *Consent) VerifyChallenge(challenge string) (*ChallengeClaims, error) {
6874
var claims ChallengeClaims
6975
t, err := jwt.ParseWithClaims(challenge, &claims, func(t *jwt.Token) (interface{}, error) {
@@ -95,7 +101,24 @@ func (c *Consent) VerifyChallenge(challenge string) (*ChallengeClaims, error) {
95101
return &claims, err
96102
}
97103

104+
// DenyConsent can be used to indicate that the user denied consent. Returns a redirect url or an error
105+
// if the challenge is invalid.
106+
//
107+
// redirectUrl, _ := c.DenyConsent(challenge)
108+
// http.Redirect(w, r, redirectUrl, http.StatusFound)
109+
func (c *Consent) DenyConsent(challenge string) (string, error) {
110+
claims, err := c.VerifyChallenge(challenge)
111+
if err != nil {
112+
return "", err
113+
}
114+
115+
return fmt.Sprintf("%s&consent=denied", claims.RedirectURL), nil
116+
}
117+
98118
// GenerateResponse generates a consent response and returns the consent response token, or an error if it is invalid.
119+
//
120+
// redirectUrl, _ := c.GenerateResponse(challenge)
121+
// http.Redirect(w, r, redirectUrl, http.StatusFound)
99122
func (c *Consent) GenerateResponse(r *ResponseRequest) (string, error) {
100123
challenge, err := c.VerifyChallenge(r.Challenge)
101124
if err != nil {
@@ -130,5 +153,5 @@ func (c *Consent) GenerateResponse(r *ResponseRequest) (string, error) {
130153
return "", errors.WithStack(err)
131154
}
132155

133-
return fmt.Sprintf("%s.%s", encoded, signature), nil
156+
return fmt.Sprintf("%s&consent=%s.%s", challenge.RedirectURL, encoded, signature), nil
134157
}

sdk/consent_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ func TestConsentHelper(t *testing.T) {
3636

3737
ar := fosite.NewAuthorizeRequest()
3838
ar.Client = &fosite.DefaultClient{ID: "foobarclient"}
39-
challenge, err := s.IssueChallenge(ar, "/lightyear", &sessions.Session{Values: map[interface{}]interface{}{}})
39+
challenge, err := s.IssueChallenge(ar, "http://hydra/oauth2/auth?client_id=foobarclient", &sessions.Session{Values: map[interface{}]interface{}{}})
4040
require.Nil(t, err)
4141

4242
claims, err := c.VerifyChallenge(challenge)
4343
require.Nil(t, err)
4444
assert.Equal(t, claims.Audience, "foobarclient")
45-
assert.Equal(t, claims.RedirectURL, "/lightyear")
45+
assert.Equal(t, claims.RedirectURL, "http://hydra/oauth2/auth?client_id=foobarclient")
4646
assert.NotEmpty(t, claims.ID)
4747

4848
resp, err := c.GenerateResponse(&ResponseRequest{
@@ -53,7 +53,7 @@ func TestConsentHelper(t *testing.T) {
5353
require.Nil(t, err)
5454

5555
var dec map[string]interface{}
56-
result, err := base64.RawURLEncoding.DecodeString(strings.Split(resp, ".")[1])
56+
result, err := base64.RawURLEncoding.DecodeString(strings.Split(strings.Replace(resp, "http://hydra/oauth2/auth?client_id=foobarclient&consent=", "", -1), ".")[1])
5757
require.Nil(t, err)
5858

5959
require.Nil(t, json.Unmarshal(result, &dec))

0 commit comments

Comments
 (0)