Guest User

Untitled

a guest
Dec 15th, 2018
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. // NewUserAccount is used to create a new user account
  2. func (um *UserManager) NewUserAccount(username, password, email string, enterpriseEnabled bool) (*User, error) {
  3. user, err := um.FindByEmail(email)
  4. if err == nil {
  5. return nil, errors.New("email address already taken")
  6. }
  7. user, err = um.FindByUserName(username)
  8. if err == nil {
  9. return nil, errors.New("username is already taken")
  10. }
  11. hashedPass, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
  12. if err != nil {
  13. return nil, err
  14. }
  15. user = &User{
  16. UserName: username,
  17. EnterpriseEnabled: enterpriseEnabled,
  18. HashedPassword: hex.EncodeToString(hashedPass),
  19. EmailAddress: email,
  20. AccountEnabled: true,
  21. APIAccess: true,
  22. AdminAccess: false,
  23. Credits: 99999999, // this is temporary and will need to be removed before production
  24. }
  25. if check := um.DB.Create(user); check.Error != nil {
  26. return nil, check.Error
  27. }
  28. return user, nil
  29. }
  30.  
  31. // SignIn is used to authenticate a user, and check if their account is enabled.
  32. // Returns bool on succesful login, or false with an error on failure
  33. func (um *UserManager) SignIn(username, password string) (bool, error) {
  34. var user User
  35. if check := um.DB.Where("user_name = ?", username).First(&user); check.Error != nil {
  36. return false, check.Error
  37. }
  38. if !user.AccountEnabled {
  39. return false, errors.New("account is disabled")
  40. }
  41. validPassword, err := um.ComparePlaintextPasswordToHash(username, password)
  42. if err != nil {
  43. return false, err
  44. }
  45. if !validPassword {
  46. return false, errors.New("invalid password supplied")
  47. }
  48. return true, nil
  49. }
  50.  
  51. // ComparePlaintextPasswordToHash is a helper method used to validate a users password
  52. func (um *UserManager) ComparePlaintextPasswordToHash(username, password string) (bool, error) {
  53. var user User
  54. if check := um.DB.Where("user_name = ?", username).First(&user); check.Error != nil {
  55. return false, check.Error
  56. }
  57. passwordBytes, err := hex.DecodeString(user.HashedPassword)
  58. if err != nil {
  59. return false, err
  60. }
  61. err = bcrypt.CompareHashAndPassword(passwordBytes, []byte(password))
  62. if err != nil {
  63. return false, err
  64. }
  65. return true, nil
  66.  
  67. }
Add Comment
Please, Sign In to add comment