Password policy (#82268)
* add password service interface * add password service implementation * add tests for password service * add password service wiring * add feature toggle * Rework from service interface to static function * Replace previous password validations * Add codeowners to password service * add error logs * update config files --------- Co-authored-by: Karl Persson <kalle.persson@grafana.com>
This commit is contained in:
@@ -209,7 +209,7 @@ func TestIntegrationUserDataAccess(t *testing.T) {
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, result.Email, "usertest@test.com")
|
||||
require.Equal(t, result.Password, "")
|
||||
require.Equal(t, string(result.Password), "")
|
||||
require.Len(t, result.Rands, 10)
|
||||
require.Len(t, result.Salt, 10)
|
||||
require.False(t, result.IsDisabled)
|
||||
@@ -218,7 +218,7 @@ func TestIntegrationUserDataAccess(t *testing.T) {
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, result.Email, "usertest@test.com")
|
||||
require.Equal(t, result.Password, "")
|
||||
require.Equal(t, string(result.Password), "")
|
||||
require.Len(t, result.Rands, 10)
|
||||
require.Len(t, result.Salt, 10)
|
||||
require.False(t, result.IsDisabled)
|
||||
@@ -230,7 +230,7 @@ func TestIntegrationUserDataAccess(t *testing.T) {
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, result.Email, "usertest@test.com")
|
||||
require.Equal(t, result.Password, "")
|
||||
require.Equal(t, string(result.Password), "")
|
||||
require.Len(t, result.Rands, 10)
|
||||
require.Len(t, result.Salt, 10)
|
||||
require.False(t, result.IsDisabled)
|
||||
@@ -243,7 +243,7 @@ func TestIntegrationUserDataAccess(t *testing.T) {
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, result.Email, "usertest@test.com")
|
||||
require.Equal(t, result.Password, "")
|
||||
require.Equal(t, string(result.Password), "")
|
||||
require.Len(t, result.Rands, 10)
|
||||
require.Len(t, result.Salt, 10)
|
||||
require.False(t, result.IsDisabled)
|
||||
@@ -252,7 +252,7 @@ func TestIntegrationUserDataAccess(t *testing.T) {
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Equal(t, result.Email, "usertest@test.com")
|
||||
require.Equal(t, result.Password, "")
|
||||
require.Equal(t, string(result.Password), "")
|
||||
require.Len(t, result.Rands, 10)
|
||||
require.Len(t, result.Salt, 10)
|
||||
require.False(t, result.IsDisabled)
|
||||
|
||||
@@ -72,11 +72,16 @@ func ProvideService(
|
||||
func (s *Service) GetUsageStats(ctx context.Context) map[string]any {
|
||||
stats := map[string]any{}
|
||||
caseInsensitiveLoginVal := 0
|
||||
basicAuthStrongPasswordPolicyVal := 0
|
||||
if s.cfg.CaseInsensitiveLogin {
|
||||
caseInsensitiveLoginVal = 1
|
||||
}
|
||||
if s.cfg.BasicAuthStrongPasswordPolicy {
|
||||
basicAuthStrongPasswordPolicyVal = 1
|
||||
}
|
||||
|
||||
stats["stats.case_insensitive_login.count"] = caseInsensitiveLoginVal
|
||||
stats["stats.password_policy.count"] = basicAuthStrongPasswordPolicyVal
|
||||
|
||||
count, err := s.store.CountUserAccountsWithEmptyRole(ctx)
|
||||
if err != nil {
|
||||
@@ -161,11 +166,11 @@ func (s *Service) Create(ctx context.Context, cmd *user.CreateUserCommand) (*use
|
||||
usr.Rands = rands
|
||||
|
||||
if len(cmd.Password) > 0 {
|
||||
encodedPassword, err := util.EncodePassword(cmd.Password, usr.Salt)
|
||||
encodedPassword, err := util.EncodePassword(string(cmd.Password), usr.Salt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
usr.Password = encodedPassword
|
||||
usr.Password = user.Password(encodedPassword)
|
||||
}
|
||||
|
||||
_, err = s.store.Insert(ctx, usr)
|
||||
|
||||
@@ -219,13 +219,15 @@ func TestMetrics(t *testing.T) {
|
||||
|
||||
userService.cfg = setting.NewCfg()
|
||||
userService.cfg.CaseInsensitiveLogin = true
|
||||
userService.cfg.BasicAuthStrongPasswordPolicy = true
|
||||
|
||||
stats := userService.GetUsageStats(context.Background())
|
||||
assert.NotEmpty(t, stats)
|
||||
|
||||
assert.Len(t, stats, 2, stats)
|
||||
assert.Len(t, stats, 3, stats)
|
||||
assert.Equal(t, 1, stats["stats.case_insensitive_login.count"])
|
||||
assert.Equal(t, int64(1), stats["stats.user.role_none.count"])
|
||||
assert.Equal(t, 1, stats["stats.password_policy.count"])
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user