Add authentication check to secure ping action and propagate auth state in PingScreen
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Successful in 8m16s
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Successful in 7m38s
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Successful in 2m58s
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Successful in 1m46s

This commit is contained in:
2026-03-16 23:35:49 +01:00
parent 04f8f2aae1
commit 4344d04ff9
3 changed files with 15 additions and 5 deletions
@@ -22,8 +22,10 @@ import at.mocode.frontend.core.designsystem.theme.Dimens
@Composable
fun PingScreen(
viewModel: PingViewModel,
onBack: () -> Unit = {}
onBack: () -> Unit = {},
isAuthenticated: Boolean = false
) {
viewModel.isAuthenticated = isAuthenticated
val uiState = viewModel.uiState
// Wir nutzen jetzt das globale Theme (Hintergrund kommt vom Theme)
@@ -51,7 +53,7 @@ fun PingScreen(
.fillMaxHeight()
.padding(end = Dimens.SpacingS)
) {
ActionToolbar(viewModel)
ActionToolbar(viewModel, isAuthenticated)
Spacer(Modifier.height(Dimens.SpacingS))
StatusGrid(uiState)
}
@@ -131,7 +133,7 @@ private fun StatusBadge(text: String, color: Color) {
}
@Composable
private fun ActionToolbar(viewModel: PingViewModel) {
private fun ActionToolbar(viewModel: PingViewModel, isAuthenticated: Boolean) {
// Wrap buttons to avoid overflow on small screens
Row(
modifier = Modifier.fillMaxWidth(),
@@ -139,7 +141,7 @@ private fun ActionToolbar(viewModel: PingViewModel) {
) {
DenseButton(text = "Simple", onClick = { viewModel.performSimplePing() })
DenseButton(text = "Enhanced", onClick = { viewModel.performEnhancedPing() })
DenseButton(text = "Secure", onClick = { viewModel.performSecurePing() })
DenseButton(text = "Secure", onClick = { viewModel.performSecurePing() }, enabled = isAuthenticated)
DenseButton(text = "Health", onClick = { viewModel.performHealthCheck() })
DenseButton(
text = "Sync",
@@ -41,6 +41,8 @@ class PingViewModel(
var uiState by mutableStateOf(PingUiState())
private set
var isAuthenticated: Boolean = false
private fun addLog(source: String, message: String, isError: Boolean = false) {
val now = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())
val timeString = "${now.hour.toString().padStart(2, '0')}:${now.minute.toString().padStart(2, '0')}:${
@@ -108,6 +110,10 @@ class PingViewModel(
}
fun performSecurePing() {
if (!isAuthenticated) {
addLog("SecurePing", "Not authenticated request blocked.", isError = true)
return
}
viewModelScope.launch {
uiState = uiState.copy(isLoading = true, errorMessage = null)
addLog("SecurePing", "Sending authenticated request...")