package auth import ( "fmt" "github.com/aziis98/lupus-lite/database" "github.com/aziis98/lupus-lite/model" "github.com/aziis98/lupus-lite/util" "golang.org/x/crypto/bcrypt" ) type memAuth struct { db database.Database sessions map[string]string } func (auth *memAuth) Register(username, password string) error { passwordBCrypt, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return err } return auth.db.CreateUser(model.User{ Username: username, PasswordBCrypt: passwordBCrypt, }) } func (auth *memAuth) Login(username, password string) (string, error) { user, err := auth.db.GetUser(username) if err != nil { return "", err } if err := bcrypt.CompareHashAndPassword(user.PasswordBCrypt, []byte(password)); err != nil { return "", err } token := util.GenerateRandomString(16) auth.sessions[token] = username return token, nil } func (auth *memAuth) UserForSession(token string) (string, error) { username, ok := auth.sessions[token] if !ok { return "", fmt.Errorf(`invalid session token`) } return username, nil } func (auth *memAuth) GetUser(username string) (model.User, error) { return auth.db.GetUser(username) }