// LoadAccess retrieves access data by token. osin.Client information MUST be loaded together. // osin.AuthorizeData and osin.AccessData DON'T NEED to be loaded if not easily available. // Optionally can return error if expired. func (s *OAuth2Storage) LoadAccess(token string) (*osin.AccessData, error) { oad := new(OAuth2AccessData) if err := Db().Model(OAuth2AccessData{}).Where(&OAuth2AccessData{AccessToken: token}).Scan(oad); err != nil { return nil, errors.New("LoadAccess: AccessToken not found") } var ret osin.AccessData ret.CreatedAt = oad.CreatedAt ret.ExpiresIn = int32(oad.ExpiresIn) if ret.IsExpired() { return nil, errors.New("Access token expired") } if client, err := s.GetClient(strconv.FormatUint(oad.ClientID, 10)); err == nil { ret.Client = client } else { return nil, err } ret.AccessToken = token ret.Scope = oad.Scope ret.RedirectUri = oad.RedirectURI ret.UserData = oad.UserID if oad.RefreshTokenID.Valid { var refreshToken OAuth2RefreshToken if err := Db().First(&refreshToken, uint64(oad.RefreshTokenID.Int64)); err != nil { return nil, err } ret.RefreshToken = refreshToken.Token } return &ret, nil }