hanayo/vendor/github.com/RangelReale/osin/storage_test.go
2019-02-23 13:29:15 +00:00

159 lines
3.4 KiB
Go

package osin
import (
"strconv"
"time"
)
type TestingStorage struct {
clients map[string]Client
authorize map[string]*AuthorizeData
access map[string]*AccessData
refresh map[string]string
}
func NewTestingStorage() *TestingStorage {
r := &TestingStorage{
clients: make(map[string]Client),
authorize: make(map[string]*AuthorizeData),
access: make(map[string]*AccessData),
refresh: make(map[string]string),
}
r.clients["1234"] = &DefaultClient{
Id: "1234",
Secret: "aabbccdd",
RedirectUri: "http://localhost:14000/appauth",
}
r.clients["public-client"] = &DefaultClient{
Id: "public-client",
RedirectUri: "http://localhost:14000/appauth",
}
r.authorize["9999"] = &AuthorizeData{
Client: r.clients["1234"],
Code: "9999",
ExpiresIn: 3600,
CreatedAt: time.Now(),
RedirectUri: "http://localhost:14000/appauth",
}
r.access["9999"] = &AccessData{
Client: r.clients["1234"],
AuthorizeData: r.authorize["9999"],
AccessToken: "9999",
ExpiresIn: 3600,
CreatedAt: time.Now(),
}
r.access["r9999"] = &AccessData{
Client: r.clients["1234"],
AuthorizeData: r.authorize["9999"],
AccessData: r.access["9999"],
AccessToken: "9999",
RefreshToken: "r9999",
ExpiresIn: 3600,
CreatedAt: time.Now(),
}
r.refresh["r9999"] = "9999"
return r
}
func (s *TestingStorage) Clone() Storage {
return s
}
func (s *TestingStorage) Close() {
}
func (s *TestingStorage) GetClient(id string) (Client, error) {
if c, ok := s.clients[id]; ok {
return c, nil
}
return nil, ErrNotFound
}
func (s *TestingStorage) SetClient(id string, client Client) error {
s.clients[id] = client
return nil
}
func (s *TestingStorage) SaveAuthorize(data *AuthorizeData) error {
s.authorize[data.Code] = data
return nil
}
func (s *TestingStorage) LoadAuthorize(code string) (*AuthorizeData, error) {
if d, ok := s.authorize[code]; ok {
return d, nil
}
return nil, ErrNotFound
}
func (s *TestingStorage) RemoveAuthorize(code string) error {
delete(s.authorize, code)
return nil
}
func (s *TestingStorage) SaveAccess(data *AccessData) error {
s.access[data.AccessToken] = data
if data.RefreshToken != "" {
s.refresh[data.RefreshToken] = data.AccessToken
}
return nil
}
func (s *TestingStorage) LoadAccess(code string) (*AccessData, error) {
if d, ok := s.access[code]; ok {
return d, nil
}
return nil, ErrNotFound
}
func (s *TestingStorage) RemoveAccess(code string) error {
delete(s.access, code)
return nil
}
func (s *TestingStorage) LoadRefresh(code string) (*AccessData, error) {
if d, ok := s.refresh[code]; ok {
return s.LoadAccess(d)
}
return nil, ErrNotFound
}
func (s *TestingStorage) RemoveRefresh(code string) error {
delete(s.refresh, code)
return nil
}
// Predictable testing token generation
type TestingAuthorizeTokenGen struct {
counter int64
}
func (a *TestingAuthorizeTokenGen) GenerateAuthorizeToken(data *AuthorizeData) (ret string, err error) {
a.counter++
return strconv.FormatInt(a.counter, 10), nil
}
type TestingAccessTokenGen struct {
acounter int64
rcounter int64
}
func (a *TestingAccessTokenGen) GenerateAccessToken(data *AccessData, generaterefresh bool) (accesstoken string, refreshtoken string, err error) {
a.acounter++
accesstoken = strconv.FormatInt(a.acounter, 10)
if generaterefresh {
a.rcounter++
refreshtoken = "r" + strconv.FormatInt(a.rcounter, 10)
}
return
}