diff --git a/bcrypt/verifier.go b/bcrypt/verifier.go new file mode 100644 index 0000000..e6cf07e --- /dev/null +++ b/bcrypt/verifier.go @@ -0,0 +1,15 @@ +package bcrypt + +import ( + "golang.org/x/crypto/bcrypt" +) + +// Verifier verifys passwords using Bcrypt +type Verifier struct { + cost int +} + +// Verify verifys a Password +func (bv *Verifier) Verify(password string, hashOnDb string) error { + return bcrypt.CompareHashAndPassword([]byte(hashOnDb), []byte(password)) +} diff --git a/cmd/budgeteer/main.go b/cmd/budgeteer/main.go index 4a6f941..2272244 100644 --- a/cmd/budgeteer/main.go +++ b/cmd/budgeteer/main.go @@ -1,6 +1,7 @@ package main import ( + "git.javil.eu/jacob1123/budgeteer/bcrypt" "git.javil.eu/jacob1123/budgeteer/config" "git.javil.eu/jacob1123/budgeteer/http" "git.javil.eu/jacob1123/budgeteer/jwt" @@ -13,13 +14,15 @@ func main() { panic("Could not load Config from config.json") } + bv := &bcrypt.Verifier{} db := postgres.Connect(cfg.DatabaseHost, cfg.DatabaseUser, cfg.DatabasePassword, cfg.DatabaseName) us := &postgres.UserService{DB: db} tv := &jwt.TokenVerifier{} h := &http.Handler{ - UserService: us, - TokenVerifier: tv, + UserService: us, + TokenVerifier: tv, + CredentialsVerifier: bv, } h.Serve() } diff --git a/http/http.go b/http/http.go index d44fe25..4e07811 100644 --- a/http/http.go +++ b/http/http.go @@ -11,8 +11,9 @@ import ( // Handler handles incoming requests type Handler struct { - UserService budgeteer.UserService - TokenVerifier budgeteer.TokenVerifier + UserService budgeteer.UserService + TokenVerifier budgeteer.TokenVerifier + CredentialsVerifier budgeteer.CredentialVerifier } const ( @@ -113,7 +114,7 @@ func (h *Handler) loginPost(c *gin.Context) { return } - if password != user.Password { + if err = h.CredentialsVerifier.Verify(password, user.Password); err != nil { c.AbortWithStatus(http.StatusUnauthorized) return } diff --git a/user.go b/user.go index 37ce172..7cd5a11 100644 --- a/user.go +++ b/user.go @@ -16,3 +16,8 @@ type UserService interface { CreateUser(u *User) error //DeleteUser(id int) error } + +// CredentialVerifier verifies the provided credentials +type CredentialVerifier interface { + Verify(password string, hashOnDb string) error +}