Kotlin-Auth-Kern für native Android-Apps (Pendant zu ManaCore) — Apache-2.0, Spiegel des Vereins mana.
Find a file
2026-06-08 15:04:38 +02:00
gradle mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
src feat(auth): register, password-reset, 2FA-verify (additiv, 0.4.0) 2026-06-08 14:46:05 +02:00
.editorconfig mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
.gitignore mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
build.gradle.kts feat(auth): register, password-reset, 2FA-verify (additiv, 0.4.0) 2026-06-08 14:46:05 +02:00
CHANGELOG.md feat(auth): register, password-reset, 2FA-verify (additiv, 0.4.0) 2026-06-08 14:46:05 +02:00
gradle.properties mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
gradlew mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
gradlew.bat mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
README.md mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
settings.gradle.kts mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00

mana-kotlin-core

Wiederverwendbarer Kotlin-Kern für die nativen Android-Apps von mana e.V. Das Kotlin-Pendant zu ManaCore aus mana-swift-core.

Reine Kotlin/JVM-Library (kein Android-SDK), damit sie unabhängig gebaut/getestet und später optional KMP-fähig gemacht werden kann. Die Android-App konsumiert sie als normale Maven-Dependency.

Was drin ist (v0.1)

  • auth.AuthClient — Login/Refresh/Logout gegen mana-auth (/api/v1/auth/*). Portiert das Resilienz-Verhalten aus dem Swift-Core: Single-Flight-Refresh, proaktiver Refresh vor Ablauf, Soft-Fail (Tokens nur bei tatsächlich invalidierter Sitzung wischen, nicht bei 5xx/429).
  • auth.TokenStore — plattform-neutrale Token-Persistenz (Interface). Android-App implementiert das über DataStore+Keystore; InMemoryTokenStore für Tests.
  • auth.Jwt — liest exp/sub/tier aus dem Token (ohne Signatur- Prüfung — die ist Server-Sache via JWKS).
  • net.AuthenticatedApi — Bearer-Transport mit einmaligem 401-Refresh-Retry, für die verbleibenden REST-Endpunkte (Marketplace, /me, dsgvo …).
  • net.manaHttpClient / net.ManaJson — Ktor-Client-Factory + geteilte Json-Konfiguration.
  • model — Deck, Card (5 text-only Typen), Tier.

Was NICHT drin ist (bewusst)

User-eigene Decks/Cards/Reviews laufen seit dem Event-Sync-Cutover (2026-05-20) komplett über Event-Sync (sync2.mana.how), nicht über REST. Die Server-CRUD-Endpunkte sind 410 Gone. Dieser Kern deckt nur Auth + den authentifizierten REST-Transport ab; der Daten-Layer kommt in mana-kotlin-event-sync (Phase 2 des Android-Plans).

SOT-Plan: mana/docs/playbooks/WORDECK_ANDROID_GREENFIELD.md.

Bauen & Testen

# JDK kommt aus Android Studio (JBR); kein System-JDK nötig:
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
./gradlew test

Veröffentlichen (Forgejo Packages)

./gradlew publish \
  -PforgejoToken=<token> \
  -PforgejoPackagesUrl=https://git.mana.how/api/packages/till/maven

Stack: Kotlin 2.1 · Ktor 3 · kotlinx.serialization · coroutines · kotlinx.datetime. Ziel-Bytecode: JVM 17 (AGP/compileSdk-36-kompatibel).