package lishwist import ( "fmt" "golang.org/x/crypto/bcrypt" ) func (sm *SessionManager) Login(username, password string) (*Session, error) { user, err := getUserByName(username) if err != nil { return nil, fmt.Errorf("Failed to fetch user: %w", err) } if user == nil { return nil, 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, err } session, err := sm.createSession(user) if err != nil { return nil, fmt.Errorf("Couldn't create session: %w", err) } return session, nil }