From a3fa213f97284ed09c2889103f905c3064832e17 Mon Sep 17 00:00:00 2001 From: Haeeul Date: Mon, 6 Feb 2023 00:02:43 +0900 Subject: [PATCH] [feat] #224 Add automatic login function --- .../android/data/remote/RemoteDataSource.kt | 3 +++ .../data/remote/RemoteDataSourceImpl.kt | 4 ++++ .../data/remote/network/ScentsNoteService.kt | 6 ++++++ .../data/remote/network/TokenAuthenticator.kt | 19 ++++++------------- .../android/data/repository/SignRepository.kt | 2 ++ .../data/vo/request/RequestNewToken.kt | 6 ++++++ .../android/data/vo/response/ResponseBase.kt | 6 ++++++ 7 files changed, 33 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/com/scentsnote/android/data/vo/request/RequestNewToken.kt diff --git a/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSource.kt b/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSource.kt index 657b5d2a..735a5fe0 100644 --- a/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSource.kt +++ b/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSource.kt @@ -12,6 +12,9 @@ interface RemoteDataSource { // sign in suspend fun postLoginInfo(body: RequestLogin): ResponseLogin + // auth - new token + suspend fun getNewToken(body: RequestNewToken): String + // survey suspend fun getSeries(): MutableList suspend fun getSurveyPerfume(token: String): MutableList diff --git a/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSourceImpl.kt b/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSourceImpl.kt index ea543f2b..79e4f5ea 100644 --- a/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSourceImpl.kt +++ b/app/src/main/java/com/scentsnote/android/data/remote/RemoteDataSourceImpl.kt @@ -122,4 +122,8 @@ class RemoteDataSourceImpl : RemoteDataSource{ override suspend fun getVersion(apkVersion: String): Boolean { return api.getVersion(apkVersion).data } + + override suspend fun getNewToken(body: RequestNewToken): String { + return api.getNewToken(body).data + } } \ No newline at end of file diff --git a/app/src/main/java/com/scentsnote/android/data/remote/network/ScentsNoteService.kt b/app/src/main/java/com/scentsnote/android/data/remote/network/ScentsNoteService.kt index 9cc2a546..67e7cf26 100644 --- a/app/src/main/java/com/scentsnote/android/data/remote/network/ScentsNoteService.kt +++ b/app/src/main/java/com/scentsnote/android/data/remote/network/ScentsNoteService.kt @@ -193,4 +193,10 @@ interface ScentsNoteService { suspend fun getVersion( @Query("apkversion") apkVersion : String ):ResponseBase + + // auth - new token + @POST("auth/reissue") + suspend fun getNewToken( + @Body body : RequestNewToken + ):ResponseOpBase } \ No newline at end of file diff --git a/app/src/main/java/com/scentsnote/android/data/remote/network/TokenAuthenticator.kt b/app/src/main/java/com/scentsnote/android/data/remote/network/TokenAuthenticator.kt index 4f7cd916..deb42942 100644 --- a/app/src/main/java/com/scentsnote/android/data/remote/network/TokenAuthenticator.kt +++ b/app/src/main/java/com/scentsnote/android/data/remote/network/TokenAuthenticator.kt @@ -1,11 +1,9 @@ package com.scentsnote.android.data.remote.network import androidx.annotation.Nullable -import com.google.gson.JsonObject import com.scentsnote.android.data.local.preference.SharedPreferencesManager import com.scentsnote.android.data.repository.SignRepository -import com.scentsnote.android.data.vo.request.RequestLogin -import com.scentsnote.android.data.vo.response.ResponseLogin +import com.scentsnote.android.data.vo.request.RequestNewToken import kotlinx.coroutines.runBlocking import okhttp3.Authenticator import okhttp3.Request @@ -20,18 +18,13 @@ class TokenAuthenticator(private val prefManager: SharedPreferencesManager) : Au @Nullable override fun authenticate(route: Route?, response: Response): Request? { try { - val loginInfo = RequestLogin(prefManager.userEmail,prefManager.userPassword) - val tokenResponse: ResponseLogin = - runBlocking { - signRepository.postLoginInfo(loginInfo) + val loginInfo = RequestNewToken(prefManager.accessToken, prefManager.refreshToken) + val newToken = runBlocking { + signRepository.getNewToken(loginInfo) } - tokenResponse.let { - prefManager.accessToken = it.token - prefManager.refreshToken = it.refreshToken - } - - return getNewRequest(response.request(), prefManager.accessToken) + prefManager.accessToken = newToken!! + return getNewRequest(response.request(), newToken) } catch (throwable: Throwable) { when (throwable) { diff --git a/app/src/main/java/com/scentsnote/android/data/repository/SignRepository.kt b/app/src/main/java/com/scentsnote/android/data/repository/SignRepository.kt index a0f727d5..687cfc07 100644 --- a/app/src/main/java/com/scentsnote/android/data/repository/SignRepository.kt +++ b/app/src/main/java/com/scentsnote/android/data/repository/SignRepository.kt @@ -3,6 +3,7 @@ package com.scentsnote.android.data.repository import com.scentsnote.android.data.remote.RemoteDataSource import com.scentsnote.android.data.remote.RemoteDataSourceImpl import com.scentsnote.android.data.vo.request.RequestLogin +import com.scentsnote.android.data.vo.request.RequestNewToken import com.scentsnote.android.data.vo.request.RequestRegister class SignRepository { @@ -12,4 +13,5 @@ class SignRepository { suspend fun getValidateNickname(nickname : String) = remoteDataSource.getValidateNickname(nickname) suspend fun postRegisterInfo(body: RequestRegister) = remoteDataSource.postRegisterInfo(body) suspend fun postLoginInfo(body : RequestLogin) = remoteDataSource.postLoginInfo(body) + suspend fun getNewToken(body: RequestNewToken) = remoteDataSource.getNewToken(body) } \ No newline at end of file diff --git a/app/src/main/java/com/scentsnote/android/data/vo/request/RequestNewToken.kt b/app/src/main/java/com/scentsnote/android/data/vo/request/RequestNewToken.kt new file mode 100644 index 00000000..194ca3c6 --- /dev/null +++ b/app/src/main/java/com/scentsnote/android/data/vo/request/RequestNewToken.kt @@ -0,0 +1,6 @@ +package com.scentsnote.android.data.vo.request + +data class RequestNewToken( + val accessToken : String, + val refreshToken : String +) diff --git a/app/src/main/java/com/scentsnote/android/data/vo/response/ResponseBase.kt b/app/src/main/java/com/scentsnote/android/data/vo/response/ResponseBase.kt index d1e67327..ddb16b64 100644 --- a/app/src/main/java/com/scentsnote/android/data/vo/response/ResponseBase.kt +++ b/app/src/main/java/com/scentsnote/android/data/vo/response/ResponseBase.kt @@ -7,4 +7,10 @@ data class ResponseBase( data class ResponseMessage( val message: String +) + +data class ResponseOpBase( + val message: String, + val opcode: Int, + val data: T ) \ No newline at end of file