func (store *MongoStorage) createAccessData(copyFrom *AccessData, osinData *osin.AccessData) *osin.AccessData { if copyFrom.AccessData != nil { osinAccessData := store.createAccessData(copyFrom.AccessData, &osin.AccessData{}) osinData.AccessData = osinAccessData } osinData.AccessToken = copyFrom.AccessToken osinData.RefreshToken = copyFrom.RefreshToken osinData.ExpiresIn = copyFrom.ExpiresIn osinData.Scope = copyFrom.Scope osinData.RedirectUri = copyFrom.RedirectUri osinData.CreatedAt = copyFrom.CreatedAt osinData.UserData = copyFrom.UserData client, err := store.GetClientWithUserData(copyFrom.UserData) if err != nil || client == nil { osinData.Client = &osin.DefaultClient{} } else { osinData.Client = client } authorizeData, err := store.GetAuthorizeDataWithUserData(copyFrom.UserData) if err != nil || client == nil { osinData.AuthorizeData = &osin.AuthorizeData{} } else { osinData.AuthorizeData = authorizeData } return osinData }
// 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 }
func (old *AccessData) transfer() *osin.AccessData { var accessData osin.AccessData = osin.AccessData{} accessData.Client = &old.Client accessData.AccessToken = old.AccessToken accessData.RefreshToken = old.RefreshToken accessData.ExpiresIn = old.ExpiresIn accessData.Scope = old.Scope accessData.RedirectUri = old.RedirectUri accessData.CreatedAt = old.CreatedAt accessData.UserData = old.UserData return &accessData }