From 739bd2924cb93620874f1fbff43c9d4baaef9cf7 Mon Sep 17 00:00:00 2001 From: Victor Vrantchan Date: Sun, 28 Aug 2016 20:29:56 -0400 Subject: [PATCH] add tests for set password --- kitserver/http_auth_test.go | 14 ---------- kitserver/service_users.go | 26 +++++++++++++++++- kitserver/service_users_test.go | 47 +++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 15 deletions(-) diff --git a/kitserver/http_auth_test.go b/kitserver/http_auth_test.go index efdbdb410a..8275978445 100644 --- a/kitserver/http_auth_test.go +++ b/kitserver/http_auth_test.go @@ -141,20 +141,6 @@ func TestLogin(t *testing.T) { } } -var testUsers = map[string]kolide.UserPayload{ - "admin1": { - Username: stringPtr("admin1"), - Password: stringPtr("foobar"), - Email: stringPtr("admin1@example.com"), - Admin: boolPtr(true), - }, - "user1": { - Username: stringPtr("user1"), - Password: stringPtr("foobar"), - Email: stringPtr("user1@example.com"), - }, -} - func createTestUsers(t *testing.T, svc kolide.UserService) { ctx := context.Background() for _, tt := range testUsers { diff --git a/kitserver/service_users.go b/kitserver/service_users.go index 9c6cc86b2e..25ebd3e280 100644 --- a/kitserver/service_users.go +++ b/kitserver/service_users.go @@ -22,6 +22,31 @@ func (s service) NewUser(ctx context.Context, p kolide.UserPayload) (*kolide.Use return user, nil } +func (s service) User(ctx context.Context, id uint) (*kolide.User, error) { + return s.ds.UserByID(id) +} + +func (s service) SetPassword(ctx context.Context, userID uint, password string) error { + user, err := s.User(ctx, userID) + if err != nil { + return err + } + hashed, salt, err := hashPassword(password, s.saltKeySize, s.bcryptCost) + if err != nil { + return err + } + user.Salt = salt + user.Password = hashed + return s.saveUser(user) +} + +// saves user in datastore. +// doesn't need to be exposed to the transport +// the service should expose actions for modifying a user instead +func (s service) saveUser(user *kolide.User) error { + return s.ds.SaveUser(user) +} + func userFromPayload(p kolide.UserPayload, keySize, cost int) (*kolide.User, error) { hashed, salt, err := hashPassword(*p.Password, keySize, cost) if err != nil { @@ -62,7 +87,6 @@ func generateRandomText(keySize int) (string, error) { if err != nil { return "", err } - return base64.StdEncoding.EncodeToString(key), nil } diff --git a/kitserver/service_users_test.go b/kitserver/service_users_test.go index f789568af7..a8501acbfc 100644 --- a/kitserver/service_users_test.go +++ b/kitserver/service_users_test.go @@ -84,6 +84,53 @@ func TestCreateUser(t *testing.T) { } } +func TestSetUserPassword(t *testing.T) { + ds, _ := datastore.New("mock", "") + svc, _ := NewService(ds) + createTestUsers(t, svc) + + var passwordChangeTests = []struct { + username string + currentPassword string + newPassword string + err error + }{ + { + username: "admin1", + currentPassword: *testUsers["admin1"].Password, + newPassword: "123cat!", + }, + } + + ctx := context.Background() + for _, tt := range passwordChangeTests { + user, err := ds.User(tt.username) + if err != nil { + t.Fatal(err) + } + + err = svc.SetPassword(ctx, user.ID, tt.newPassword) + if err != nil { + t.Fatal(err) + } + + } +} + +var testUsers = map[string]kolide.UserPayload{ + "admin1": { + Username: stringPtr("admin1"), + Password: stringPtr("foobar"), + Email: stringPtr("admin1@example.com"), + Admin: boolPtr(true), + }, + "user1": { + Username: stringPtr("user1"), + Password: stringPtr("foobar"), + Email: stringPtr("user1@example.com"), + }, +} + func stringPtr(s string) *string { return &s }