chore: entferne AuthApiClient, AuthTokenManager und DeviceInitializationConfig.jvm, da diese nicht mehr benötigt werden

This commit is contained in:
2026-04-19 15:57:59 +02:00
parent dc66dfb537
commit 8a3ef98c44
36 changed files with 294 additions and 81 deletions
@@ -1,4 +1,6 @@
package at.mocode.frontend.core.auth.data
package at.mocode.frontend.core.auth.data.local
import at.mocode.frontend.core.auth.data.remote.AuthApiClient
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -117,7 +119,7 @@ class AuthTokenManager {
}
/**
* Get current JWT token
* Get the current JWT token
*/
fun getToken(): String? = currentToken
@@ -147,7 +149,7 @@ class AuthTokenManager {
}
/**
* Get user ID from token
* Get user ID from a token
*/
fun getUserId(): String? = tokenPayload?.sub
@@ -1,4 +1,6 @@
package at.mocode.frontend.core.auth.data
package at.mocode.frontend.core.auth.data.remote
import at.mocode.frontend.core.auth.utils.PkceHelper
import at.mocode.frontend.core.domain.AppConstants
import at.mocode.frontend.core.network.PlatformConfig
@@ -1,7 +1,7 @@
package at.mocode.frontend.core.auth.di
import at.mocode.frontend.core.auth.data.AuthApiClient
import at.mocode.frontend.core.auth.data.AuthTokenManager
import at.mocode.frontend.core.auth.data.remote.AuthApiClient
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
import at.mocode.frontend.core.auth.presentation.LoginViewModel
import at.mocode.frontend.core.domain.AppConstants
import at.mocode.frontend.core.network.TokenProvider
@@ -1,4 +1,4 @@
package at.mocode.frontend.core.auth.data
package at.mocode.frontend.core.auth.domain.service
/**
* Ergebnis eines OIDC-Callback-Empfangs (Authorization Code + State).
@@ -2,7 +2,14 @@ package at.mocode.frontend.core.auth.presentation
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import at.mocode.frontend.core.auth.data.*
import at.mocode.frontend.core.auth.data.local.AuthState
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
import at.mocode.frontend.core.auth.data.remote.AuthApiClient
import at.mocode.frontend.core.auth.domain.service.OidcCallbackResult
import at.mocode.frontend.core.auth.domain.service.consumePendingOidcCallback
import at.mocode.frontend.core.auth.domain.service.getOidcRedirectUri
import at.mocode.frontend.core.auth.domain.service.launchOidcFlow
import at.mocode.frontend.core.auth.utils.PkceHelper
import at.mocode.frontend.core.domain.AppConstants
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -1,4 +1,4 @@
package at.mocode.frontend.core.auth.data
package at.mocode.frontend.core.auth.utils
import kotlin.random.Random
@@ -1,6 +1,6 @@
@file:Suppress("REDUNDANT_CALL_OF_CONVERSION_METHOD")
package at.mocode.frontend.core.auth.data
package at.mocode.frontend.core.auth.utils
/**
* Reines Kotlin SHA-256 nach FIPS 180-4.
@@ -1,4 +1,4 @@
package at.mocode.frontend.core.auth.data
package at.mocode.frontend.core.auth.domain.service
import com.sun.net.httpserver.HttpServer
import kotlinx.coroutines.CompletableDeferred
@@ -8,6 +8,7 @@ import kotlinx.coroutines.withTimeoutOrNull
import java.awt.Desktop
import java.net.InetSocketAddress
import java.net.URI
import kotlin.time.Duration.Companion.milliseconds
/**
* JVM-Implementierung: öffnet den System-Browser und startet einen lokalen
@@ -71,7 +72,7 @@ actual suspend fun launchOidcFlow(
}
// Warten auf Callback (max. 5 Minuten)
return withTimeoutOrNull(5 * 60 * 1000L) {
return withTimeoutOrNull((5 * 60 * 1000L).milliseconds) {
deferred.await()
} ?: run {
server.stop(0)
@@ -1,4 +1,4 @@
package at.mocode.frontend.core.auth.data
package at.mocode.frontend.core.auth.domain.service
/**
* Wasm-Implementierung für OIDC Redirect.
@@ -1,6 +1,10 @@
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.deviceinitialization.domain
package at.mocode.frontend.features.device.initialization.data.local
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
expect object DeviceInitializationSettingsManager {
fun saveSettings(settings: DeviceInitializationSettings)
@@ -0,0 +1,13 @@
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.device.initialization.di
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
import at.mocode.frontend.features.device.initialization.presentation.DeviceInitializationViewModel
import org.koin.dsl.module
val deviceInitializationModule = module {
factory { (onComplete: (DeviceInitializationSettings) -> Unit) ->
DeviceInitializationViewModel(get(), onComplete)
}
}
@@ -1,4 +1,9 @@
package at.mocode.frontend.features.deviceinitialization.domain
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.device.initialization.domain
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
/**
* Validierungslogik für den Geräte-Initialisierungs-Wizard.
@@ -29,7 +34,6 @@ object DeviceInitializationValidator {
fun canContinue(settings: DeviceInitializationSettings): Boolean {
val basicValid = isNameValid(settings.deviceName) &&
isKeyValid(settings.sharedKey) &&
(if (settings.networkRole == NetworkRole.MASTER) isBackupPathValid(settings.backupPath) else true) &&
isSyncIntervalValid(settings.syncInterval)
if (!basicValid) return false
@@ -1,4 +1,7 @@
package at.mocode.frontend.features.deviceinitialization.domain
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.device.initialization.domain.model
import kotlinx.serialization.Serializable
@@ -1,4 +1,12 @@
package at.mocode.frontend.features.deviceinitialization.presentation
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.device.initialization.presentation
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
@@ -20,7 +28,7 @@ import androidx.compose.ui.input.key.*
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationValidator
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
@Composable
fun DeviceInitializationScreen(
@@ -0,0 +1,19 @@
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.device.initialization.presentation
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
import at.mocode.frontend.core.network.discovery.DiscoveredService
data class DeviceInitializationUiState(
val currentStep: Int = 0,
val settings: DeviceInitializationSettings = DeviceInitializationSettings(),
val discoveredMasters: List<DiscoveredService> = emptyList(),
val isProcessing: Boolean = false,
val error: String? = null
)
@@ -1,11 +1,16 @@
package at.mocode.frontend.features.deviceinitialization.presentation
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.device.initialization.presentation
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import at.mocode.frontend.core.network.discovery.NetworkDiscoveryService
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings
import at.mocode.frontend.features.deviceinitialization.domain.ExpectedClient
import at.mocode.frontend.features.deviceinitialization.domain.NetworkRole
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
@@ -1,4 +1,12 @@
package at.mocode.frontend.features.deviceinitialization.presentation
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.device.initialization.presentation
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
import androidx.compose.foundation.layout.*
import androidx.compose.material3.MaterialTheme
@@ -10,7 +18,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.key.*
import androidx.compose.ui.unit.dp
import at.mocode.frontend.features.deviceinitialization.domain.NetworkRole
@Composable
fun NetworkRoleSelector(
@@ -1,10 +0,0 @@
package at.mocode.frontend.features.deviceinitialization.di
import at.mocode.frontend.features.deviceinitialization.presentation.DeviceInitializationViewModel
import org.koin.dsl.module
val deviceInitializationModule = module {
factory { (onComplete: (at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings) -> Unit) ->
DeviceInitializationViewModel(get(), onComplete)
}
}
@@ -1,12 +0,0 @@
package at.mocode.frontend.features.deviceinitialization.presentation
import at.mocode.frontend.core.network.discovery.DiscoveredService
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings
data class DeviceInitializationUiState(
val currentStep: Int = 0,
val settings: DeviceInitializationSettings = DeviceInitializationSettings(),
val discoveredMasters: List<DiscoveredService> = emptyList(),
val isProcessing: Boolean = false,
val error: String? = null
)
@@ -1,5 +1,9 @@
package at.mocode.frontend.features.deviceinitialization.domain
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.device.initialization.data.local
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
import kotlinx.serialization.json.Json
import java.io.File
@@ -1,4 +1,12 @@
package at.mocode.frontend.features.deviceinitialization.presentation
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.device.initialization.presentation
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardActions
@@ -29,8 +37,7 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.unit.dp
import at.mocode.frontend.core.designsystem.components.MsEnumDropdown
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationValidator
import at.mocode.frontend.features.deviceinitialization.domain.NetworkRole
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
import java.io.File
import javax.swing.JFileChooser
import javax.swing.UIManager
@@ -1,7 +1,10 @@
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.deviceinitialization.domain
package at.mocode.frontend.features.device.initialization.data.local
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
import kotlinx.browser.localStorage
import kotlinx.serialization.json.Json
@@ -21,7 +24,7 @@ actual object DeviceInitializationSettingsManager {
actual fun loadSettings(): DeviceInitializationSettings? {
val content = localStorage.getItem(SETTINGS_KEY) ?: return null
return try {
json.decodeFromString<DeviceInitializationSettings>(DeviceInitializationSettings.serializer(), content)
json.decodeFromString(DeviceInitializationSettings.serializer(), content)
} catch (e: Exception) {
println("Fehler beim Laden der Einstellungen (WasmJS): ${e.message}")
null
@@ -1,4 +1,12 @@
package at.mocode.frontend.features.deviceinitialization.presentation
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
package at.mocode.frontend.features.device.initialization.presentation
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@@ -13,7 +21,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.unit.dp
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationValidator
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
@Composable
actual fun DeviceInitializationConfig(
@@ -1,6 +1,6 @@
package at.mocode.frontend.features.profile.data
import at.mocode.frontend.core.auth.data.AuthTokenManager
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
import at.mocode.frontend.core.network.PlatformConfig
import io.ktor.client.*
import io.ktor.client.call.*
@@ -6,7 +6,7 @@ import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import at.mocode.core.domain.serialization.UuidSerializer
import at.mocode.frontend.core.auth.data.AuthTokenManager
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
import at.mocode.frontend.core.network.NetworkConfig
import io.ktor.client.*
@@ -5,7 +5,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import at.mocode.frontend.core.auth.data.AuthTokenManager
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
import at.mocode.frontend.core.domain.repository.MasterdataRepository
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
import at.mocode.frontend.core.domain.zns.ZnsImportState
@@ -2,11 +2,5 @@
"deviceName": "Meldestelle",
"sharedKey": "Password",
"backupPath": "/mocode/meldestelle/docs/temp",
"networkRole": "MASTER",
"expectedClients": [
{
"name": "Richter-Turm",
"role": "RICHTER"
}
]
"networkRole": "MASTER"
}
@@ -10,12 +10,12 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import at.mocode.desktop.navigation.DesktopNavigationPort
import at.mocode.desktop.screens.layout.DesktopMainLayout
import at.mocode.frontend.core.auth.data.AuthTokenManager
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
import at.mocode.frontend.core.auth.presentation.LoginScreen
import at.mocode.frontend.core.auth.presentation.LoginViewModel
import at.mocode.frontend.core.designsystem.theme.AppTheme
import at.mocode.frontend.core.navigation.AppScreen
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettingsManager
import at.mocode.frontend.features.device.initialization.data.local.DeviceInitializationSettingsManager
import org.koin.compose.koinInject
import org.koin.compose.viewmodel.koinViewModel
@@ -1,13 +1,13 @@
package at.mocode.desktop.di
import at.mocode.desktop.navigation.DesktopNavigationPort
import at.mocode.frontend.core.auth.data.AuthTokenManager
import at.mocode.desktop.repository.DesktopMasterdataRepository
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
import at.mocode.frontend.core.domain.models.User
import at.mocode.frontend.core.domain.repository.MasterdataRepository
import at.mocode.frontend.core.navigation.CurrentUserProvider
import at.mocode.frontend.core.navigation.DeepLinkHandler
import at.mocode.frontend.core.navigation.NavigationPort
import at.mocode.desktop.repository.DesktopMasterdataRepository
import at.mocode.frontend.core.domain.repository.MasterdataRepository
import org.koin.dsl.module
/**
@@ -12,7 +12,7 @@ import at.mocode.frontend.core.localdb.localDbModule
import at.mocode.frontend.core.network.networkModule
import at.mocode.frontend.core.sync.di.syncModule
import at.mocode.frontend.features.billing.di.billingModule
import at.mocode.frontend.features.deviceinitialization.di.deviceInitializationModule
import at.mocode.frontend.features.device.initialization.di.deviceInitializationModule
import at.mocode.frontend.features.nennung.di.nennungFeatureModule
import at.mocode.frontend.features.pferde.di.pferdeModule
import at.mocode.frontend.features.profile.di.profileModule
@@ -25,9 +25,12 @@ import at.mocode.desktop.screens.management.VeranstalterDetail
import at.mocode.desktop.screens.management.VeranstalterVerwaltungScreen
import at.mocode.desktop.screens.nennung.NennungsEingangScreen
import at.mocode.desktop.screens.profile.FunktionaerProfil
import at.mocode.desktop.screens.veranstaltung.*
import at.mocode.desktop.screens.veranstaltung.details.*
import at.mocode.desktop.screens.veranstaltung.wizards.*
import at.mocode.desktop.screens.veranstaltung.VeranstaltungVerwaltung
import at.mocode.desktop.screens.veranstaltung.details.VeranstaltungKonfig
import at.mocode.desktop.screens.veranstaltung.details.VeranstaltungProfilScreen
import at.mocode.desktop.screens.veranstaltung.wizards.TurnierWizard
import at.mocode.desktop.screens.veranstaltung.wizards.VeranstalterAnlegenWizard
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
import at.mocode.frontend.core.designsystem.theme.AppColors
import at.mocode.frontend.core.designsystem.theme.Dimens
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
@@ -36,12 +39,12 @@ import at.mocode.frontend.core.network.ConnectivityTracker
import at.mocode.frontend.core.network.discovery.NetworkDiscoveryService
import at.mocode.frontend.features.billing.presentation.BillingScreen
import at.mocode.frontend.features.billing.presentation.BillingViewModel
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettingsManager
import at.mocode.frontend.features.deviceinitialization.presentation.DeviceInitializationScreen
import at.mocode.frontend.features.deviceinitialization.presentation.DeviceInitializationViewModel
import at.mocode.frontend.features.nennung.presentation.NennungViewModel
import at.mocode.frontend.features.device.initialization.data.local.DeviceInitializationSettingsManager
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
import at.mocode.frontend.features.device.initialization.presentation.DeviceInitializationScreen
import at.mocode.frontend.features.device.initialization.presentation.DeviceInitializationViewModel
import at.mocode.frontend.features.nennung.presentation.NennungManagementScreen
import at.mocode.frontend.features.nennung.presentation.NennungViewModel
import at.mocode.frontend.features.pferde.presentation.PferdeScreen
import at.mocode.frontend.features.pferde.presentation.PferdeViewModel
import at.mocode.frontend.features.profile.presentation.ProfileScreen
@@ -535,7 +538,7 @@ private fun DesktopContentArea(
DeviceInitializationSettingsManager.saveSettings(finalSettings)
// Vision_04: Sicherheitsschlüssel als Token setzen, damit Cloud-Suche funktioniert
val authTokenManager =
org.koin.core.context.GlobalContext.get().get<at.mocode.frontend.core.auth.data.AuthTokenManager>()
org.koin.core.context.GlobalContext.get().get<AuthTokenManager>()
authTokenManager.setToken(finalSettings.sharedKey)
onSettingsChange(finalSettings)
onNavigate(AppScreen.VeranstaltungVerwaltung)