Add user management interface

This commit is contained in:
Las Zenow 2018-04-08 10:55:13 +00:00
parent 6cd5b1bc5e
commit 6f906ccae4
8 changed files with 124 additions and 8 deletions

View file

@ -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":