mirror of https://github.com/dexidp/dex.git
15 changed files with 780 additions and 31 deletions
@ -0,0 +1,93 @@ |
|||||||
|
package repo |
||||||
|
|
||||||
|
import ( |
||||||
|
"encoding/base64" |
||||||
|
"net/url" |
||||||
|
"os" |
||||||
|
"testing" |
||||||
|
"time" |
||||||
|
|
||||||
|
"github.com/coreos/go-oidc/oidc" |
||||||
|
"github.com/go-gorp/gorp" |
||||||
|
"github.com/kylelemons/godebug/pretty" |
||||||
|
|
||||||
|
"github.com/coreos/dex/db" |
||||||
|
"github.com/coreos/dex/refresh" |
||||||
|
"github.com/coreos/dex/user" |
||||||
|
) |
||||||
|
|
||||||
|
func newRefreshRepo(t *testing.T, users []user.UserWithRemoteIdentities, clients []oidc.ClientIdentity) refresh.RefreshTokenRepo { |
||||||
|
var dbMap *gorp.DbMap |
||||||
|
if dsn := os.Getenv("DEX_TEST_DSN"); dsn == "" { |
||||||
|
dbMap = db.NewMemDB() |
||||||
|
} else { |
||||||
|
dbMap = connect(t) |
||||||
|
} |
||||||
|
if _, err := db.NewUserRepoFromUsers(dbMap, users); err != nil { |
||||||
|
t.Fatalf("Unable to add users: %v", err) |
||||||
|
} |
||||||
|
if _, err := db.NewClientIdentityRepoFromClients(dbMap, clients); err != nil { |
||||||
|
t.Fatalf("Unable to add clients: %v", err) |
||||||
|
} |
||||||
|
return db.NewRefreshTokenRepo(dbMap) |
||||||
|
} |
||||||
|
|
||||||
|
func TestRefreshTokenRepo(t *testing.T) { |
||||||
|
clientID := "client1" |
||||||
|
userID := "user1" |
||||||
|
clients := []oidc.ClientIdentity{ |
||||||
|
{ |
||||||
|
Credentials: oidc.ClientCredentials{ |
||||||
|
ID: clientID, |
||||||
|
Secret: base64.URLEncoding.EncodeToString([]byte("secret-2")), |
||||||
|
}, |
||||||
|
Metadata: oidc.ClientMetadata{ |
||||||
|
RedirectURIs: []url.URL{ |
||||||
|
url.URL{Scheme: "https", Host: "client1.example.com", Path: "/callback"}, |
||||||
|
}, |
||||||
|
}, |
||||||
|
}, |
||||||
|
} |
||||||
|
users := []user.UserWithRemoteIdentities{ |
||||||
|
{ |
||||||
|
User: user.User{ |
||||||
|
ID: userID, |
||||||
|
Email: "Email-1@example.com", |
||||||
|
CreatedAt: time.Now().Truncate(time.Second), |
||||||
|
}, |
||||||
|
RemoteIdentities: []user.RemoteIdentity{ |
||||||
|
{ |
||||||
|
ConnectorID: "IDPC-1", |
||||||
|
ID: "RID-1", |
||||||
|
}, |
||||||
|
}, |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
repo := newRefreshRepo(t, users, clients) |
||||||
|
tok, err := repo.Create(userID, clientID) |
||||||
|
if err != nil { |
||||||
|
t.Fatalf("failed to create refresh token: %v", err) |
||||||
|
} |
||||||
|
if tokUserID, err := repo.Verify(clientID, tok); err != nil { |
||||||
|
t.Errorf("Could not verify token: %v", err) |
||||||
|
} else if tokUserID != userID { |
||||||
|
t.Errorf("Verified token returned wrong user id, want=%s, got=%s", userID, tokUserID) |
||||||
|
} |
||||||
|
|
||||||
|
if userClients, err := repo.ClientsWithRefreshTokens(userID); err != nil { |
||||||
|
t.Errorf("Failed to get the list of clients the user was logged into: %v", err) |
||||||
|
} else { |
||||||
|
if diff := pretty.Compare(userClients, clients); diff == "" { |
||||||
|
t.Errorf("Clients user logged into: want did not equal got %s", diff) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if err := repo.RevokeTokensForClient(userID, clientID); err != nil { |
||||||
|
t.Errorf("Failed to revoke refresh token: %v", err) |
||||||
|
} |
||||||
|
|
||||||
|
if _, err := repo.Verify(clientID, tok); err == nil { |
||||||
|
t.Errorf("Token which should have been revoked was verified") |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue