1
0
mirror of https://gitlab.crans.org/nounous/ghostream.git synced 2024-12-22 18:32:19 +00:00
ghostream/auth/basic/basic.go
2020-09-27 21:31:35 +02:00

45 lines
1020 B
Go

package basic
import (
"errors"
"golang.org/x/crypto/bcrypt"
)
// To generate bcrypt hashed password from Python,
// python3 -c 'import bcrypt; print(bcrypt.hashpw(b"PASSWORD", bcrypt.gensalt(rounds=15)).decode("ascii"))'
// Options holds package configuration
type Options struct {
// Username: hashedPassword
Credentials map[string]string
}
// Basic authentification backend
type Basic struct {
Cfg *Options
}
// Login hashs password and compare
// Returns (true, nil) if success
func (a Basic) Login(username string, password string) (bool, error) {
hash, ok := a.Cfg.Credentials[username]
if !ok {
return false, errors.New("user not found in credentials")
}
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
// Login succeeded if no error
return err == nil, err
}
// Close has no connection to close
func (a Basic) Close() {
}
// New instanciates a new Basic authentification backend
func New(cfg *Options) (Basic, error) {
backend := Basic{Cfg: cfg}
return backend, nil
}