package models import ( "fmt" "golang.org/x/crypto/bcrypt" ) // UserLogin Object to recive user credentials in JSON format type UserLogin struct { Username string `json:"username" form:"username"` Password string `json:"password" form:"password"` } // User holds information about an user type User struct { ID int64 `xorm:"int(11) autoincr not null unique pk"` Name string `xorm:"varchar(250)"` Username string `xorm:"varchar(250) not null"` Password string `xorm:"varchar(250) not null"` Email string `xorm:"varchar(250) not null"` Created int64 `xorm:"created"` Updated int64 `xorm:"updated"` } // TableName returns the table name for users func (User) TableName() string { return "users" } // HashPassword hashes a password func HashPassword(password string) (string, error) { bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14) return string(bytes), err } // CheckUserCredentials checks user credentials func CheckUserCredentials(u UserLogin) (User, error) { // Check if the user exists var user = User{Username: u.Username} exists, err := x.Get(&user) if err != nil { return User{}, err } if !exists { return User{}, fmt.Errorf("user does not exist") } // Check the users password err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(u.Password)) if err != nil { return User{}, err } return user, nil }