local_user_login.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package grpcapi
  2. import (
  3. config "github.com/OliveTin/OliveTin/internal/config"
  4. "github.com/alexedwards/argon2id"
  5. log "github.com/sirupsen/logrus"
  6. "runtime"
  7. )
  8. var defaultParams = argon2id.Params{
  9. Memory: 64 * 1024,
  10. Iterations: 4,
  11. Parallelism: uint8(runtime.NumCPU()),
  12. SaltLength: 16,
  13. KeyLength: 32,
  14. }
  15. func createHash(password string) (string, error) {
  16. hash, err := argon2id.CreateHash(password, &defaultParams)
  17. if err != nil {
  18. log.Fatal("Error creating hash: ", err)
  19. return "", err
  20. }
  21. return hash, nil
  22. }
  23. func comparePasswordAndHash(password, hash string) bool {
  24. match, err := argon2id.ComparePasswordAndHash(password, hash)
  25. if err != nil {
  26. log.Errorf("Error comparing password and hash: %v", err)
  27. return false
  28. }
  29. return match
  30. }
  31. func checkUserPassword(cfg *config.Config, username, password string) bool {
  32. for _, user := range cfg.AuthLocalUsers.Users {
  33. if user.Username == username {
  34. match := comparePasswordAndHash(password, user.Password)
  35. if match {
  36. return true
  37. } else {
  38. log.WithFields(log.Fields{
  39. "username": username,
  40. }).Warn("Password does not match for user")
  41. return false
  42. }
  43. }
  44. }
  45. log.WithFields(log.Fields{
  46. "username": username,
  47. }).Warn("Failed to check password for user, as username was not found")
  48. return false
  49. }