package session import ( "context" "fmt" "gitea.perlbach24.de/scripte/nexarch/internal/auth" "gitea.perlbach24.de/scripte/nexarch/internal/user" ) // LoginAndCreateSession prueft die Anmeldedaten mit demselben timing-safen // bcrypt-Vergleich wie IAM-02s LoginService (kein zweiter Credential-Check), // erzeugt bei Erfolg aber eine widerrufbare Sitzung statt eines // zustandslosen JWT — das ist der Bearer-Token fuer diese Selbstbedienungs- // Funktion. func LoginAndCreateSession(ctx context.Context, users *user.TenantUserStore, sessions *Store, email, password, deviceInfo, ip string) (sessionToken string, err error) { creds, err := users.GetByEmailForAuth(ctx, email) if err != nil { return "", fmt.Errorf("anmeldedaten pruefen: %w", err) } if creds.User.Status != user.StatusActive { return "", fmt.Errorf("konto nicht aktiv") } // Wiederverwendung von IAM-02s timing-safem bcrypt-Vergleich, kein // zweiter Passwort-Pruefmechanismus. if !auth.VerifyPassword(creds.PasswordHash, password) { return "", fmt.Errorf("anmeldedaten ungueltig") } _, sessionToken, err = sessions.Create(ctx, creds.User.ID, deviceInfo, ip) if err != nil { return "", fmt.Errorf("sitzung anlegen: %w", err) } return sessionToken, nil }