Add password encryption for User.
Took 25 minutes
This commit is contained in:
parent
2b68799544
commit
341c845c80
@ -1,10 +1,14 @@
|
||||
package sam
|
||||
|
||||
import (
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
// Users
|
||||
type User struct {
|
||||
ID uint64
|
||||
Username string
|
||||
Password string `json:"-"`
|
||||
Password []byte `json:"-"`
|
||||
|
||||
changed []string
|
||||
}
|
||||
@ -35,14 +39,20 @@ func (u *User) SetUsername(value string) *User {
|
||||
}
|
||||
return u
|
||||
}
|
||||
func (u *User) GetPassword() string {
|
||||
return u.Password
|
||||
|
||||
func (u *User) SetPassword(value string) error {
|
||||
if !u.ValidatePassword(value) {
|
||||
if encrypted, err := bcrypt.GenerateFromPassword([]byte(value), bcrypt.DefaultCost); err != nil {
|
||||
return err
|
||||
} else {
|
||||
u.Password = encrypted
|
||||
u.changed = append(u.changed, "password")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u *User) SetPassword(value string) *User {
|
||||
if u.Password != value {
|
||||
u.changed = append(u.changed, "password")
|
||||
u.Password = value
|
||||
}
|
||||
return u
|
||||
func (u User) ValidatePassword(value string) bool {
|
||||
return bcrypt.CompareHashAndPassword(u.Password, []byte(value)) == nil
|
||||
}
|
||||
|
||||
24
sam/user.structs_test.go
Normal file
24
sam/user.structs_test.go
Normal file
@ -0,0 +1,24 @@
|
||||
package sam
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestUser_SetPassword(t *testing.T) {
|
||||
const dummyPwd = "Lorem ipsum dolor sit amet, consectetur adipiscing elit..."
|
||||
dummy := &User{}
|
||||
initChLen := len(dummy.changed)
|
||||
dummy.SetPassword(dummyPwd)
|
||||
|
||||
if dummyPwd == string(dummy.Password) {
|
||||
t.Error("Internal password value should be encrypted")
|
||||
}
|
||||
|
||||
if len(dummy.changed) <= initChLen {
|
||||
t.Error("Password change should be recorded")
|
||||
}
|
||||
|
||||
if !dummy.ValidatePassword(dummyPwd) {
|
||||
t.Error("Revalidating password should succeed")
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user