Merge pull request #402 from ericchiang/static_users
server: add more validation to --no-db static file parsing
This commit is contained in:
commit
804d06c44e
2 changed files with 38 additions and 2 deletions
|
@ -184,6 +184,10 @@ func loadUsersFromReader(r io.Reader) (users []user.UserWithRemoteIdentities, pw
|
|||
user.User
|
||||
Password string `json:"password"`
|
||||
RemoteIdentities []user.RemoteIdentity `json:"remoteIdentities"`
|
||||
|
||||
// The old format stored all user data under the "user" key.
|
||||
// Attempt to detect that, and print an better error.
|
||||
OldUserFields map[string]string `json:"user"`
|
||||
}
|
||||
if err := json.NewDecoder(r).Decode(&configUsers); err != nil {
|
||||
return nil, nil, err
|
||||
|
@ -193,6 +197,10 @@ func loadUsersFromReader(r io.Reader) (users []user.UserWithRemoteIdentities, pw
|
|||
pwis = make([]user.PasswordInfo, len(configUsers))
|
||||
|
||||
for i, u := range configUsers {
|
||||
if u.OldUserFields != nil {
|
||||
return nil, nil, fmt.Errorf("Static user file is using an outdated format. Please refer to example in static/fixtures.")
|
||||
}
|
||||
|
||||
users[i] = user.UserWithRemoteIdentities{
|
||||
User: u.User,
|
||||
RemoteIdentities: u.RemoteIdentities,
|
||||
|
|
|
@ -15,6 +15,8 @@ func TestLoadUsers(t *testing.T) {
|
|||
expUsers []user.UserWithRemoteIdentities
|
||||
// userid -> plaintext password
|
||||
expPasswds map[string]string
|
||||
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
raw: `[
|
||||
|
@ -50,13 +52,39 @@ func TestLoadUsers(t *testing.T) {
|
|||
"elroy-id": "bones",
|
||||
},
|
||||
},
|
||||
{
|
||||
// using old format.
|
||||
raw: `[
|
||||
{
|
||||
"user": {
|
||||
"id": "elroy-id",
|
||||
"email": "elroy77@example.com",
|
||||
"displayName": "Elroy Jonez",
|
||||
"password": "bones"
|
||||
},
|
||||
"remoteIdentities": [
|
||||
{
|
||||
"connectorId": "local",
|
||||
"id": "elroy-id"
|
||||
}
|
||||
]
|
||||
}
|
||||
]`,
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
|
||||
for i, tt := range tests {
|
||||
users, pwInfos, err := loadUsersFromReader(strings.NewReader(tt.raw))
|
||||
if err != nil {
|
||||
if !tt.wantErr {
|
||||
t.Errorf("case %d: failed to load user: %v", i, err)
|
||||
return
|
||||
}
|
||||
continue
|
||||
}
|
||||
if tt.wantErr {
|
||||
t.Errorf("case %d: wanted parsing error, didn't get one", i)
|
||||
continue
|
||||
}
|
||||
|
||||
if diff := pretty.Compare(tt.expUsers, users); diff != "" {
|
||||
|
|
Reference in a new issue