diff --git a/Project/android/app/build.gradle.kts b/Project/android/app/build.gradle.kts index 2b70e88..4af4e43 100644 --- a/Project/android/app/build.gradle.kts +++ b/Project/android/app/build.gradle.kts @@ -50,6 +50,7 @@ android { } dependencies { + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9") implementation("androidx.compose.material:material:1.6.4") implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1") diff --git a/Project/android/app/src/main/java/sae/android/sae_2a/VM/LoginViewModel.kt b/Project/android/app/src/main/java/sae/android/sae_2a/VM/LoginViewModel.kt new file mode 100644 index 0000000..e3a3eac --- /dev/null +++ b/Project/android/app/src/main/java/sae/android/sae_2a/VM/LoginViewModel.kt @@ -0,0 +1,28 @@ +package sae.android.sae_2a.VM + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope + +import kotlinx.coroutines.launch +import sae.android.sae_2a.data.LoginRepository +import sae.android.sae_2a.data.LoginResponse + +class LoginViewModel( + private val loginRepository: LoginRepository +): ViewModel() { + + fun login( token: String) { + viewModelScope.launch { + val jsonBody = "{ token: \"$token\"}" + val result = try { + loginRepository.makeLoginRequest(jsonBody) + } catch(e: Exception) { + sae.android.sae_2a.data.Result.Error(Exception("Network request failed")) + } + when (result) { + is sae.android.sae_2a.data.Result.Success -> print("sucess") + else -> ("error") + } + } +} +} \ No newline at end of file diff --git a/Project/android/app/src/main/java/sae/android/sae_2a/data/LoginRepository.kt b/Project/android/app/src/main/java/sae/android/sae_2a/data/LoginRepository.kt new file mode 100644 index 0000000..e10d39b --- /dev/null +++ b/Project/android/app/src/main/java/sae/android/sae_2a/data/LoginRepository.kt @@ -0,0 +1,47 @@ +package sae.android.sae_2a.data + +import android.provider.ContactsContract.CommonDataKinds.Website.URL +import org.json.JSONObject +import java.io.InputStream +import java.net.HttpURLConnection +import java.net.URL + +class LoginResponseParser { + fun parse(inputStream: InputStream): LoginResponse { + val responseString = inputStream.bufferedReader().use { it.readText() } + // Supposons que la réponse du serveur soit un JSON contenant une clé "token" + val jsonObject = JSONObject(responseString) + val token = jsonObject.getString("token") + return LoginResponse(token) + } +} + +data class LoginResponse( + val token: String +) + +sealed class Result { + data class Success(val data: T) : Result() + data class Error(val exception: Exception) : Result() +} +class LoginRepository(private val responseParser: LoginResponseParser) { + + private val loginUrl = "https://codefirst.iut.uca.fr/containers/antoinejourdain-api_container/Auth/token" + + // Function that makes the network request, blocking the current thread + fun makeLoginRequest( + jsonBody: String + ): Result { + val url = URL(loginUrl) + (url.openConnection() as? HttpURLConnection)?.run { + requestMethod = "POST" + setRequestProperty("Content-Type", "application/json; utf-8") + setRequestProperty("Accept", "application/json") + doOutput = true + outputStream.write(jsonBody.toByteArray()) + return Result.Success(responseParser.parse(inputStream)) + } + return Result.Error(Exception("Cannot open HttpURLConnection")) + } + + }