...
1
21
22 package oauth2
23
24 import (
25 "context"
26 "time"
27
28 "github.com/ory/fosite"
29 )
30
31 type HandleHelper struct {
32 AccessTokenStrategy AccessTokenStrategy
33 AccessTokenStorage AccessTokenStorage
34 AccessTokenLifespan time.Duration
35 RefreshTokenLifespan time.Duration
36 }
37
38 func (h *HandleHelper) IssueAccessToken(ctx context.Context, requester fosite.AccessRequester, responder fosite.AccessResponder) error {
39 token, signature, err := h.AccessTokenStrategy.GenerateAccessToken(ctx, requester)
40 if err != nil {
41 return err
42 } else if err := h.AccessTokenStorage.CreateAccessTokenSession(ctx, signature, requester.Sanitize([]string{})); err != nil {
43 return err
44 }
45
46 responder.SetAccessToken(token)
47 responder.SetTokenType("bearer")
48 responder.SetExpiresIn(getExpiresIn(requester, fosite.AccessToken, h.AccessTokenLifespan, time.Now().UTC()))
49 responder.SetScopes(requester.GetGrantedScopes())
50 return nil
51 }
52
53 func getExpiresIn(r fosite.Requester, key fosite.TokenType, defaultLifespan time.Duration, now time.Time) time.Duration {
54 if r.GetSession().GetExpiresAt(key).IsZero() {
55 return defaultLifespan
56 }
57 return time.Duration(r.GetSession().GetExpiresAt(key).UnixNano() - now.UnixNano())
58 }
59
View as plain text