diff --git a/main.go b/main.go index 2e37203..21a0643 100644 --- a/main.go +++ b/main.go @@ -25,11 +25,12 @@ func main() { } type gloableConfig struct { - UserStoreConfig userstore.Config `env:", prefix=USERSTORE_"` - Port int `env:"PORT, default=8080"` - SMTPConfig smtpclient.SMTPConfig `env:", prefix=SMTP_"` - WebConfig web.WebConfig `env:", prefix=WEB_"` - DummyDatabase bool `env:"DUMMY_DATABASE"` + UserStoreConfig userstore.Config `env:", prefix=USERSTORE_"` + Port int `env:"PORT, default=8080"` + SMTPConfig smtpclient.SMTPConfig `env:", prefix=SMTP_"` + WebConfig web.WebConfig `env:", prefix=WEB_"` + MiniauthConfig miniauth.MiniauthConfig `env:", prefix=MINIAUTH_"` + DummyDatabase bool `env:"DUMMY_DATABASE"` } func config() gloableConfig { @@ -71,7 +72,7 @@ func setupRouter(cfg gloableConfig) *gin.Engine { sc := smtpclient.NewSMTPClient(cfg.SMTPConfig) - ma := miniauth.NewMiniauth(us, sc) + ma := miniauth.NewMiniauth(cfg.MiniauthConfig, us, sc) webServer := web.NewWeb(cfg.WebConfig, ma) webServer.RegisterRoutes(routesWeb) diff --git a/pkg/miniauth/error.go b/pkg/miniauth/error.go index e3b8aaf..8a401ee 100644 --- a/pkg/miniauth/error.go +++ b/pkg/miniauth/error.go @@ -9,4 +9,5 @@ var ( ErrMailAddressInvalide = errors.New("email address invalide") ErrCantCreateUser = errors.New("cant create user") ErrCantSendMail = errors.New("cant send mail") + ErrLoginFailed = errors.New("cant login") ) diff --git a/pkg/miniauth/miniauth.go b/pkg/miniauth/miniauth.go index 54b26ea..25436d1 100644 --- a/pkg/miniauth/miniauth.go +++ b/pkg/miniauth/miniauth.go @@ -12,13 +12,18 @@ import ( "github.com/rs/zerolog" ) -type Miniauth struct { - store userstore.Store - log zerolog.Logger - smtp smtpclient.SMTPClient +type MiniauthConfig struct { + LoginWithNotApprovedMail bool `env:"LOGIN_WITH_NOT_APPROVED_MAIL"` } -func NewMiniauth(us userstore.Store, sm smtpclient.SMTPClient) Miniauth { +type Miniauth struct { + store userstore.Store + log zerolog.Logger + smtp smtpclient.SMTPClient + config MiniauthConfig +} + +func NewMiniauth(conf MiniauthConfig, us userstore.Store, sm smtpclient.SMTPClient) Miniauth { m := Miniauth{} m.store = us m.smtp = sm @@ -73,6 +78,16 @@ func (m Miniauth) RegisterUser(username string, email string, password string) e return nil } +func (m Miniauth) UserLogin(username, password string) error { + log := m.log.With().Str("func", "RegisterUser").Str("username", username).Logger() + _, err := m.store.UserCheckPassword(username, password) + if err != nil { + return utils.WrapError(ErrLoginFailed, err, log) + } + + return nil +} + func (m Miniauth) checkPasswordForRegistration(password string) error { passwordValidator := validator.New( validator.MinLength(15, nil), diff --git a/pkg/miniauth/miniauth_test.go b/pkg/miniauth/miniauth_test.go index 024ae29..d8b43a7 100644 --- a/pkg/miniauth/miniauth_test.go +++ b/pkg/miniauth/miniauth_test.go @@ -183,11 +183,61 @@ func TestUserAndMailIsDeletedIfMailCantBeSend(t *testing.T) { assert.False(t, res, "should not found user") } +func TestLogin(t *testing.T) { + ma := getMiniAuth(t) + err := ma.RegisterUser("kekskurser", "foobar@example.com", "oDzry!!!YPEtHuofKE9hnea8TLTe2Doabi6ddy") + assert.Nil(t, err) + + tts := []struct { + name string + username string + password string + ExpectErr error + EcpectErrString string + config MiniauthConfig + }{ + { + name: "login-successfull", + username: "kekskurser", + password: "oDzry!!!YPEtHuofKE9hnea8TLTe2Doabi6ddy", + }, + { + name: "login-failed-user-not-found", + username: "kekstest", + password: "oDzry!!!YPEtHuofKE9hnea8TLTe2Doabi6ddy", + ExpectErr: ErrLoginFailed, + EcpectErrString: "cant login: cant execute query: sql: no rows in result set", + }, + { + name: "login-failed-user-not-found", + username: "kekskurser", + password: "oDzry!!!YPEtHuofKE9hnea8TLTe2Doabi6ddyTEST", + ExpectErr: ErrLoginFailed, + EcpectErrString: "cant login: user password dont match: crypto/bcrypt: hashedPassword is not the hash of the given password", + }, + } + + for _, tt := range tts { + t.Run(tt.name, func(t *testing.T) { + ma.config = tt.config + err := ma.UserLogin(tt.username, tt.password) + if tt.ExpectErr == nil { + assert.Nil(t, err) + return + } + assert.ErrorIs(t, err, tt.ExpectErr) + assert.Equal(t, tt.EcpectErrString, err.Error()) + }) + } +} + func getMiniAuth(t *testing.T) Miniauth { us, err := userstore.NewDummyStore() assert.Nil(t, err, "[setup] should be abel to creat dummy store") + config := MiniauthConfig{} + sc := smtpclient.NewDummySMTPClient() - m := NewMiniauth(us, sc) + m := NewMiniauth(config, us, sc) return m } diff --git a/pkg/web/web_test.go b/pkg/web/web_test.go index eccb3df..ba70a1a 100644 --- a/pkg/web/web_test.go +++ b/pkg/web/web_test.go @@ -17,10 +17,12 @@ func TestRegistrationDisabled(t *testing.T) { webConfig := WebConfig{} webConfig.PublicRegistration = false + config := miniauth.MiniauthConfig{} + us, err := userstore.NewDummyStore() assert.Nil(t, err, "[setup] should be abel to create userstore") sc := smtpclient.NewDummySMTPClient() - web := NewWeb(webConfig, miniauth.NewMiniauth(us, sc)) + web := NewWeb(webConfig, miniauth.NewMiniauth(config, us, sc)) router := gin.New() loadTemplates(router) @@ -40,10 +42,12 @@ func TestRegistrationDisabledOnPost(t *testing.T) { webConfig := WebConfig{} webConfig.PublicRegistration = false + config := miniauth.MiniauthConfig{} + us, err := userstore.NewDummyStore() assert.Nil(t, err, "[setup] should be abel to create userstore") sc := smtpclient.NewDummySMTPClient() - web := NewWeb(webConfig, miniauth.NewMiniauth(us, sc)) + web := NewWeb(webConfig, miniauth.NewMiniauth(config, us, sc)) router := gin.New() loadTemplates(router)