forked from mystiq/dex
a418e1c4e7
adds a client manager to handle business logic, leaving the repo for basic crud operations. Also adds client to the test script
81 lines
2.3 KiB
Go
81 lines
2.3 KiB
Go
package integration
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
|
|
"github.com/coreos/go-oidc/key"
|
|
"github.com/go-gorp/gorp"
|
|
"github.com/jonboulle/clockwork"
|
|
|
|
"github.com/coreos/dex/connector"
|
|
"github.com/coreos/dex/db"
|
|
"github.com/coreos/dex/user"
|
|
"github.com/coreos/dex/user/manager"
|
|
)
|
|
|
|
var (
|
|
clock = clockwork.NewFakeClock()
|
|
|
|
testIssuerURL = url.URL{Scheme: "https", Host: "auth.example.com"}
|
|
testClientID = "client.example.com"
|
|
testClientSecret = base64.URLEncoding.EncodeToString([]byte("secret"))
|
|
testRedirectURL = url.URL{Scheme: "https", Host: "client.example.com", Path: "/redirect"}
|
|
testBadRedirectURL = url.URL{Scheme: "https", Host: "bad.example.com", Path: "/redirect"}
|
|
testResetPasswordURL = url.URL{Scheme: "https", Host: "auth.example.com", Path: "/resetPassword"}
|
|
testPrivKey, _ = key.GeneratePrivateKey()
|
|
)
|
|
|
|
type tokenHandlerTransport struct {
|
|
Handler http.Handler
|
|
Token string
|
|
}
|
|
|
|
func (t *tokenHandlerTransport) RoundTrip(r *http.Request) (*http.Response, error) {
|
|
r.Header.Set("Authorization", fmt.Sprintf("Bearer %s", t.Token))
|
|
w := httptest.NewRecorder()
|
|
t.Handler.ServeHTTP(w, r)
|
|
resp := http.Response{
|
|
StatusCode: w.Code,
|
|
Header: w.Header(),
|
|
Body: ioutil.NopCloser(w.Body),
|
|
}
|
|
return &resp, nil
|
|
}
|
|
|
|
// TODO(ericchiang): Replace DbMap with storage interface. See #278
|
|
|
|
func makeUserObjects(users []user.UserWithRemoteIdentities, passwords []user.PasswordInfo) (*gorp.DbMap, user.UserRepo, user.PasswordInfoRepo, *manager.UserManager) {
|
|
dbMap := db.NewMemDB()
|
|
ur := func() user.UserRepo {
|
|
repo, err := db.NewUserRepoFromUsers(dbMap, users)
|
|
if err != nil {
|
|
panic("Failed to create user repo: " + err.Error())
|
|
}
|
|
return repo
|
|
}()
|
|
pwr := func() user.PasswordInfoRepo {
|
|
repo, err := db.NewPasswordInfoRepoFromPasswordInfos(dbMap, passwords)
|
|
if err != nil {
|
|
panic("Failed to create password info repo: " + err.Error())
|
|
}
|
|
return repo
|
|
}()
|
|
|
|
ccr := func() connector.ConnectorConfigRepo {
|
|
repo := db.NewConnectorConfigRepo(dbMap)
|
|
c := []connector.ConnectorConfig{&connector.LocalConnectorConfig{ID: "local"}}
|
|
if err := repo.Set(c); err != nil {
|
|
panic(err)
|
|
}
|
|
return repo
|
|
}()
|
|
|
|
um := manager.NewUserManager(ur, pwr, ccr, db.TransactionFactory(dbMap), manager.ManagerOptions{})
|
|
um.Clock = clock
|
|
return dbMap, ur, pwr, um
|
|
}
|