4
0

local_user_login.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package api
  2. import (
  3. "runtime"
  4. config "github.com/OliveTin/OliveTin/internal/config"
  5. "github.com/alexedwards/argon2id"
  6. log "github.com/sirupsen/logrus"
  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 createHash(password string) (string, error) {
  24. return CreateHash(password)
  25. }
  26. func comparePasswordAndHash(password, hash string) bool {
  27. match, err := argon2id.ComparePasswordAndHash(password, hash)
  28. if err != nil {
  29. log.Errorf("Error comparing password and hash: %v", err)
  30. return false
  31. }
  32. return match
  33. }
  34. func checkUserPassword(cfg *config.Config, username, password string) bool {
  35. for _, user := range cfg.AuthLocalUsers.Users {
  36. if user.Username == username {
  37. match := comparePasswordAndHash(password, user.Password)
  38. if match {
  39. return true
  40. } else {
  41. log.WithFields(log.Fields{
  42. "username": username,
  43. }).Warn("Password does not match for user")
  44. return false
  45. }
  46. }
  47. }
  48. log.WithFields(log.Fields{
  49. "username": username,
  50. }).Warn("Failed to check password for user, as username was not found")
  51. return false
  52. }