go-asink/asinkd/users.go

36 lines
500 B
Go
Raw Normal View History

package main
import (
"crypto/sha256"
"fmt"
)
type UserRole uint32
const (
//User roles
ADMIN = 1 << iota
NORMAL
)
type User struct {
Id int64
Username string
PWHash string
Role UserRole
}
func HashPassword(pw string) string {
hashfn := sha256.New()
hashfn.Write([]byte(pw))
return fmt.Sprintf("%x", hashfn.Sum(nil))
}
func (u *User) ValidPassword(pw string) bool {
return HashPassword(pw) == u.PWHash
}
func (u *User) IsAdmin() bool {
return u.Role&ADMIN == ADMIN
}