Skip to content

Commit 0215a9a

Browse files
committed
feat: update getCurrentUser method to require token and refactor session handling
1 parent 39f8c24 commit 0215a9a

5 files changed

Lines changed: 39 additions & 21 deletions

File tree

.idea/deploymentTargetSelector.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/mirage/bob1/data/dto/AuthDto.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ data class RegisterRequestDto(
1818
@Serializable
1919
data class LoginResponseDto(val token: String, val expiresTime: Long)
2020

21+
/** Returned by POST /api/auth/generate-biometric-token */
22+
@Serializable
23+
data class bioTokenGenerateResponseDto(val token: String)
24+
25+
2126
@Serializable
2227
data class UserDto(
2328
val id: String,

app/src/main/java/com/mirage/bob1/data/local/SessionManager.kt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,28 +69,32 @@ class SessionManager(
6969
runCatching {
7070
fetchRemoteUser()?.onSuccess { freshUser ->
7171
// Keep the existing expiresTime when updating the session profile
72-
saveSession(freshUser, token, expiresTime)
72+
saveToken(token, expiresTime)
73+
saveSession(freshUser)
7374
}
7475
}
7576
}
7677
}
7778
}.onFailure { clearSession() }
7879
}
7980

80-
fun saveToken(token: String) {
81-
_token.value = token
82-
}
83-
84-
fun saveSession(user: User, token: String, expiresTime: Long) {
81+
fun saveToken(token: String, expiresTime: Long) {
8582
runCatching {
8683
val encrypted = keystore.encrypt(sessionConfig, token)
8784
prefs.edit()
8885
.putString("token_ct", encrypted.ciphertext)
8986
.putString("token_iv", encrypted.iv)
9087
.putLong("token_expires_at", expiresTime)
91-
.putString("user_json", Json.encodeToString(UserDto.fromDomain(user)))
9288
.apply()
9389
_token.value = token
90+
}
91+
}
92+
93+
fun saveSession(user: User) {
94+
runCatching {
95+
prefs.edit()
96+
.putString("user_json", Json.encodeToString(UserDto.fromDomain(user)))
97+
.apply()
9498
_user.value = user
9599
}
96100
}

app/src/main/java/com/mirage/bob1/data/remote/AuthAPI.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@ internal class AuthAPI(private val client: HttpClient) {
2525
suspend fun logout(): HttpResponse =
2626
client.post("/api/auth/logout")
2727

28-
suspend fun getCurrentUser(): UserDto =
29-
client.get("/api/auth/me").body()
28+
suspend fun getCurrentUser(token: String): UserDto =
29+
client.get("/api/auth/me") {
30+
header("Authorization", "Bearer $token")
31+
}.body()
3032

3133
/**
3234
* Requests a long-lived biometric token from the server (requires a valid
3335
* session JWT). The returned token is stored encrypted on-device and later
3436
* replayed at [biometricLogin] — credentials never touch the client again.
3537
*/
36-
suspend fun generateBiometricToken(): LoginResponseDto =
38+
suspend fun generateBiometricToken(): bioTokenGenerateResponseDto =
3739
client.get("/api/auth/generate-biometric-token").body()
3840

3941
/**

app/src/main/java/com/mirage/bob1/data/repository/AuthRepositoryImpl.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,19 @@ internal class AuthRepositoryImpl(
1414

1515
override suspend fun login(email: String, password: String): Result<User> = runCatching {
1616
val response = authAPI.login(LoginRequestDto(email, password))
17-
val user = authAPI.getCurrentUser().toDomain()
18-
session.saveSession(user, response.token, response.expiresTime)
17+
session.saveToken(response.token, response.expiresTime)
18+
val user = authAPI.getCurrentUser(response.token).toDomain()
19+
session.saveSession(user)
1920
user
2021
}
2122

2223
override suspend fun loginWithBiometric(): Result<User> = runCatching {
2324
val bioToken = session.getBiometricToken()
2425
?: error("Aucun token biométrique enregistré.")
2526
val response = authAPI.biometricLogin(bioToken)
26-
val user = authAPI.getCurrentUser().toDomain()
27-
session.saveSession(user, response.token, response.expiresTime)
27+
session.saveToken(response.token, response.expiresTime)
28+
val user = authAPI.getCurrentUser(response.token).toDomain()
29+
session.saveSession(user)
2830
user
2931
}
3032

@@ -54,21 +56,19 @@ internal class AuthRepositoryImpl(
5456
)
5557
// Auto-login after registering
5658
val response = authAPI.login(LoginRequestDto(email, password))
57-
val user = authAPI.getCurrentUser().toDomain()
58-
session.saveSession(user, response.token, response.expiresTime)
59+
session.saveToken(response.token, response.expiresTime)
60+
val user = authAPI.getCurrentUser(response.token).toDomain()
61+
session.saveSession(user)
5962
user
6063
}
6164

6265
override suspend fun logout(): Result<Unit> = runCatching {
63-
if (session.hasBiometricToken()) {
64-
runCatching { authAPI.removeBiometricToken() }
65-
session.clearBiometricToken()
66-
}
6766
authAPI.logout()
6867
session.clearSession()
6968
}
7069

7170
override suspend fun getCurrentUser(): Result<User> = runCatching {
72-
authAPI.getCurrentUser().toDomain()
71+
val token = session.currentToken() ?: error("Aucun token de session disponible.")
72+
authAPI.getCurrentUser(token).toDomain()
7373
}
7474
}

0 commit comments

Comments
 (0)