(token string)
| 300 | } |
| 301 | |
| 302 | func (s *storage) LoadRefresh(token string) (*osin.AccessData, error) { |
| 303 | tokenType, id, tokenKey, err := auth.SplitToken(token) |
| 304 | if err != nil { |
| 305 | return nil, err |
| 306 | } |
| 307 | if tokenType != auth.RefreshToken { |
| 308 | return nil, errNoRefreshToken.New() |
| 309 | } |
| 310 | data, err := s.loadAccess(id) |
| 311 | if err != nil { |
| 312 | return nil, err |
| 313 | } |
| 314 | valid, err := auth.Validate(data.RefreshToken, tokenKey) |
| 315 | if !valid || err != nil { |
| 316 | return nil, errInvalidToken.New() |
| 317 | } |
| 318 | if userSessionIDs := data.UserData.(userData).UserSessionIdentifiers; userSessionIDs.GetSessionId() != "" { |
| 319 | err = s.store.Transact(s.ctx, func(ctx context.Context, st oauth_store.Interface) error { |
| 320 | session, err := st.GetSession(ctx, userSessionIDs.GetUserIds(), userSessionIDs.GetSessionId()) |
| 321 | if err != nil { |
| 322 | if errors.IsNotFound(err) { |
| 323 | return errSessionExpired.WithCause(err) |
| 324 | } |
| 325 | return err |
| 326 | } |
| 327 | if expiresAt := ttnpb.StdTime(session.ExpiresAt); expiresAt != nil && expiresAt.Before(time.Now()) { |
| 328 | return errSessionExpired.New() |
| 329 | } |
| 330 | return nil |
| 331 | }) |
| 332 | if err != nil { |
| 333 | return nil, err |
| 334 | } |
| 335 | } |
| 336 | return data, nil |
| 337 | } |
| 338 | |
| 339 | func (s *storage) RemoveRefresh(token string) error { |
| 340 | if tokenType, id, _, err := auth.SplitToken(token); err == nil { |
nothing calls this directly
no test coverage detected