Add user management interface
This commit is contained in:
parent
6cd5b1bc5e
commit
6f906ccae4
8 changed files with 124 additions and 8 deletions
|
@ -12,7 +12,7 @@ import (
|
|||
"golang.org/x/crypto/scrypt"
|
||||
)
|
||||
|
||||
type user struct {
|
||||
type User struct {
|
||||
ID int `sql:"type:serial"`
|
||||
Username string `sql:"type:varchar(255),unique"`
|
||||
Password []byte
|
||||
|
@ -25,7 +25,7 @@ func (db *pgDB) AddUser(name string, pass string) error {
|
|||
if !validUserName(name) {
|
||||
return errors.New("Invalid user name")
|
||||
}
|
||||
num, err := db.sql.Model(&user{}).Where("lower(username) = lower(?)", name).Count()
|
||||
num, err := db.sql.Model(&User{}).Where("lower(username) = lower(?)", name).Count()
|
||||
if err != nil {
|
||||
log.Error("Error on database checking user ", name, ": ", err)
|
||||
return errors.New("An error happen on the database")
|
||||
|
@ -43,7 +43,7 @@ func (db *pgDB) AddUser(name string, pass string) error {
|
|||
}
|
||||
|
||||
func (db *pgDB) AddRawUser(name string, hpass []byte, salt []byte, role string) error {
|
||||
u := user{
|
||||
u := User{
|
||||
Username: name,
|
||||
Password: hpass,
|
||||
Salt: salt,
|
||||
|
@ -53,13 +53,21 @@ func (db *pgDB) AddRawUser(name string, hpass []byte, salt []byte, role string)
|
|||
}
|
||||
|
||||
func (db *pgDB) GetRole(name string) (string, error) {
|
||||
var u user
|
||||
var u User
|
||||
err := db.sql.Model(&u).Where("username = ?", name).Select()
|
||||
return u.Role, err
|
||||
}
|
||||
|
||||
func (db *pgDB) SetRole(name, role string) error {
|
||||
_, err := db.sql.Model(&User{}).
|
||||
Set("role = ?", role).
|
||||
Where("username = ?", name).
|
||||
Update()
|
||||
return err
|
||||
}
|
||||
|
||||
func (db *pgDB) ValidPassword(name string, pass string) bool {
|
||||
var u user
|
||||
var u User
|
||||
err := db.sql.Model(&u).Where("lower(username) = lower(?)", name).Select()
|
||||
if err != nil {
|
||||
return false
|
||||
|
@ -73,7 +81,7 @@ func (db *pgDB) ValidPassword(name string, pass string) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
_, err = db.sql.Model(&user{}).
|
||||
_, err = db.sql.Model(&User{}).
|
||||
Set("last_login = CURRENT_TIMESTAMP").
|
||||
Where("id = ?", u.ID).
|
||||
Update()
|
||||
|
@ -88,13 +96,19 @@ func (db *pgDB) SetPassword(name string, pass string) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = db.sql.Model(&user{}).
|
||||
_, err = db.sql.Model(&User{}).
|
||||
Set("password = ?, salt = ?", hash, salt).
|
||||
Where("username = ?", name).
|
||||
Update()
|
||||
return err
|
||||
}
|
||||
|
||||
func (db *pgDB) ListUsers() ([]User, error) {
|
||||
var users []User
|
||||
err := db.sql.Model(&users).Select()
|
||||
return users, err
|
||||
}
|
||||
|
||||
func validUserName(name string) bool {
|
||||
switch name {
|
||||
case "", "admin", "webmaster", "postmaster", "info", "root", "news":
|
||||
|
|
Reference in a new issue