|
|
|
|
@ -3,37 +3,124 @@ package main
|
|
|
|
|
import ( |
|
|
|
|
"testing" |
|
|
|
|
|
|
|
|
|
"github.com/coreos/dex/connector/mock" |
|
|
|
|
"github.com/coreos/dex/connector/oidc" |
|
|
|
|
"github.com/coreos/dex/storage" |
|
|
|
|
"github.com/coreos/dex/storage/sql" |
|
|
|
|
"github.com/ghodss/yaml" |
|
|
|
|
"github.com/kylelemons/godebug/pretty" |
|
|
|
|
|
|
|
|
|
yaml "gopkg.in/yaml.v2" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func TestUnmarshalClients(t *testing.T) { |
|
|
|
|
data := `staticClients: |
|
|
|
|
var _ = yaml.YAMLToJSON |
|
|
|
|
|
|
|
|
|
func TestUnmarshalConfig(t *testing.T) { |
|
|
|
|
rawConfig := []byte(` |
|
|
|
|
issuer: http://127.0.0.1:5556/dex
|
|
|
|
|
storage: |
|
|
|
|
type: sqlite3 |
|
|
|
|
config: |
|
|
|
|
file: examples/dex.db |
|
|
|
|
|
|
|
|
|
web: |
|
|
|
|
http: 127.0.0.1:5556 |
|
|
|
|
staticClients: |
|
|
|
|
- id: example-app |
|
|
|
|
redirectURIs: |
|
|
|
|
- 'http://127.0.0.1:5555/callback'
|
|
|
|
|
name: 'Example App' |
|
|
|
|
secret: ZXhhbXBsZS1hcHAtc2VjcmV0 |
|
|
|
|
` |
|
|
|
|
var c Config |
|
|
|
|
if err := yaml.Unmarshal([]byte(data), &c); err != nil { |
|
|
|
|
t.Fatal(err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
wantClients := []storage.Client{ |
|
|
|
|
{ |
|
|
|
|
ID: "example-app", |
|
|
|
|
Name: "Example App", |
|
|
|
|
Secret: "ZXhhbXBsZS1hcHAtc2VjcmV0", |
|
|
|
|
RedirectURIs: []string{ |
|
|
|
|
"http://127.0.0.1:5555/callback", |
|
|
|
|
connectors: |
|
|
|
|
- type: mockCallback |
|
|
|
|
id: mock |
|
|
|
|
name: Example |
|
|
|
|
- type: oidc |
|
|
|
|
id: google |
|
|
|
|
name: Google |
|
|
|
|
config: |
|
|
|
|
issuer: https://accounts.google.com
|
|
|
|
|
# Config values starting with a "$" will read from the environment. |
|
|
|
|
clientID: $GOOGLE_CLIENT_ID |
|
|
|
|
clientSecret: $GOOGLE_CLIENT_SECRET |
|
|
|
|
redirectURI: http://127.0.0.1:5556/dex/callback/google
|
|
|
|
|
|
|
|
|
|
enablePasswordDB: true |
|
|
|
|
staticPasswords: |
|
|
|
|
- email: "admin@example.com" |
|
|
|
|
# bcrypt hash of the string "password" |
|
|
|
|
hash: "$2a$10$33EMT0cVYVlPy6WAMCLsceLYjWhuHpbz5yuZxu/GAFj03J9Lytjuy" |
|
|
|
|
username: "admin" |
|
|
|
|
userID: "08a8684b-db88-4b73-90a9-3cd1661f5466" |
|
|
|
|
- email: "foo@example.com"
|
|
|
|
|
# base64'd value of the same bcrypt hash above. We want to be able to parse both of these |
|
|
|
|
hash: "JDJhJDEwJDMzRU1UMGNWWVZsUHk2V0FNQ0xzY2VMWWpXaHVIcGJ6NXl1Wnh1L0dBRmowM0o5THl0anV5" |
|
|
|
|
username: "foo" |
|
|
|
|
userID: "41331323-6f44-45e6-b3b9-2c4b60c02be5" |
|
|
|
|
`) |
|
|
|
|
|
|
|
|
|
want := Config{ |
|
|
|
|
Issuer: "http://127.0.0.1:5556/dex", |
|
|
|
|
Storage: Storage{ |
|
|
|
|
Type: "sqlite3", |
|
|
|
|
Config: &sql.SQLite3{ |
|
|
|
|
File: "examples/dex.db", |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
Web: Web{ |
|
|
|
|
HTTP: "127.0.0.1:5556", |
|
|
|
|
}, |
|
|
|
|
StaticClients: []storage.Client{ |
|
|
|
|
{ |
|
|
|
|
ID: "example-app", |
|
|
|
|
Secret: "ZXhhbXBsZS1hcHAtc2VjcmV0", |
|
|
|
|
Name: "Example App", |
|
|
|
|
RedirectURIs: []string{ |
|
|
|
|
"http://127.0.0.1:5555/callback", |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
Connectors: []Connector{ |
|
|
|
|
{ |
|
|
|
|
Type: "mockCallback", |
|
|
|
|
ID: "mock", |
|
|
|
|
Name: "Example", |
|
|
|
|
Config: &mock.CallbackConfig{}, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
Type: "oidc", |
|
|
|
|
ID: "google", |
|
|
|
|
Name: "Google", |
|
|
|
|
Config: &oidc.Config{ |
|
|
|
|
Issuer: "https://accounts.google.com", |
|
|
|
|
ClientID: "$GOOGLE_CLIENT_ID", |
|
|
|
|
ClientSecret: "$GOOGLE_CLIENT_SECRET", |
|
|
|
|
RedirectURI: "http://127.0.0.1:5556/dex/callback/google", |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
EnablePasswordDB: true, |
|
|
|
|
StaticPasswords: []password{ |
|
|
|
|
{ |
|
|
|
|
Email: "admin@example.com", |
|
|
|
|
Hash: []byte("$2a$10$33EMT0cVYVlPy6WAMCLsceLYjWhuHpbz5yuZxu/GAFj03J9Lytjuy"), |
|
|
|
|
Username: "admin", |
|
|
|
|
UserID: "08a8684b-db88-4b73-90a9-3cd1661f5466", |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
Email: "foo@example.com", |
|
|
|
|
Hash: []byte("$2a$10$33EMT0cVYVlPy6WAMCLsceLYjWhuHpbz5yuZxu/GAFj03J9Lytjuy"), |
|
|
|
|
Username: "foo", |
|
|
|
|
UserID: "41331323-6f44-45e6-b3b9-2c4b60c02be5", |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if diff := pretty.Compare(wantClients, c.StaticClients); diff != "" { |
|
|
|
|
t.Errorf("did not get expected clients: %s", diff) |
|
|
|
|
var c Config |
|
|
|
|
if err := yaml.Unmarshal(rawConfig, &c); err != nil { |
|
|
|
|
t.Fatalf("failed to decode config: %v", err) |
|
|
|
|
} |
|
|
|
|
if diff := pretty.Compare(c, want); diff != "" { |
|
|
|
|
t.Errorf("got!=want: %s", diff) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|