chore: login

This commit is contained in:
kekskurse 2025-03-18 00:32:35 +01:00
parent be92a9bfee
commit 47affd6fe5
5 changed files with 85 additions and 14 deletions

13
main.go
View file

@ -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)

View file

@ -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")
)

View file

@ -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),

View file

@ -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
}

View file

@ -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)