X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/95159e5585762c06c654945070ba54262b7dcec9..7bd6f5adda126bbe7caf94330e08d9adf0e66466:/hotline/account.go diff --git a/hotline/account.go b/hotline/account.go index 3ad0687..39ea974 100644 --- a/hotline/account.go +++ b/hotline/account.go @@ -5,7 +5,6 @@ import ( "fmt" "golang.org/x/crypto/bcrypt" "io" - "log" "slices" ) @@ -15,16 +14,26 @@ type Account struct { Login string `yaml:"Login"` Name string `yaml:"Name"` Password string `yaml:"Password"` - Access accessBitmap `yaml:"Access"` + Access AccessBitmap `yaml:"Access"` + FileRoot string `yaml:"FileRoot"` readOffset int // Internal offset to track read progress } +func NewAccount(login, name, password string, access AccessBitmap) *Account { + return &Account{ + Login: login, + Name: name, + Password: HashAndSalt([]byte(password)), + Access: access, + } +} + // Read implements io.Reader interface for Account func (a *Account) Read(p []byte) (int, error) { fields := []Field{ NewField(FieldUserName, []byte(a.Name)), - NewField(FieldUserLogin, encodeString([]byte(a.Login))), + NewField(FieldUserLogin, EncodeString([]byte(a.Login))), NewField(FieldUserAccess, a.Access[:]), } @@ -55,12 +64,9 @@ func (a *Account) Read(p []byte) (int, error) { return n, nil } -// hashAndSalt generates a password hash from a users obfuscated plaintext password -func hashAndSalt(pwd []byte) string { - hash, err := bcrypt.GenerateFromPassword(pwd, bcrypt.MinCost) - if err != nil { - log.Println(err) - } +// HashAndSalt generates a password hash from a users obfuscated plaintext password +func HashAndSalt(pwd []byte) string { + hash, _ := bcrypt.GenerateFromPassword(pwd, bcrypt.MinCost) return string(hash) }