package lishwist import ( "fmt" "golang.org/x/crypto/bcrypt" ) type ErrorInvalidCredentials error func Login(username, password string) (*Session, error) { user, err := getUserByName(username) if err != nil { return nil, ErrorInvalidCredentials(fmt.Errorf("Failed to fetch user: %w", err)) } if user == nil { return nil, ErrorInvalidCredentials(fmt.Errorf("User not found by name: %s", username)) } passHash, err := user.getPassHash() if err != nil { return nil, fmt.Errorf("Failed to get password hash: %w", err) } err = bcrypt.CompareHashAndPassword(passHash, []byte(password)) if err != nil { return nil, ErrorInvalidCredentials(fmt.Errorf("Password compare failed: %w", err)) } return &Session{*user}, nil }