diff --git a/app/src/main/java/jp/atled/agileworks/model/LogoutRepository.kt b/app/src/main/java/jp/atled/agileworks/model/LogoutRepository.kt new file mode 100644 index 0000000000000000000000000000000000000000..590cb6f4f3f2e258672ed52024f6d141142eff6c --- /dev/null +++ b/app/src/main/java/jp/atled/agileworks/model/LogoutRepository.kt @@ -0,0 +1,16 @@ +package jp.atled.agileworks.model + +import jp.atled.agileworks.model.api.ApiCallbackCommon +import jp.atled.agileworks.model.api.ApiClient + +class LogoutRepository() { + fun getLogout(onResult: (isSuccess: Boolean) -> Unit) { + ApiClient.instanceLogout.getLogout().enqueue(ApiCallbackCommon(null) { isSuccess, _ -> + onResult(isSuccess) + }) + } + + companion object { + fun getInstance() = LogoutRepository() + } +} \ No newline at end of file diff --git a/app/src/main/java/jp/atled/agileworks/model/NotificationRepository.kt b/app/src/main/java/jp/atled/agileworks/model/NotificationRepository.kt index 3d4a98dc9b21defac116e433b7233f3b602506fe..9dfd878841209ab81e5229d699adefd8dba800c5 100644 --- a/app/src/main/java/jp/atled/agileworks/model/NotificationRepository.kt +++ b/app/src/main/java/jp/atled/agileworks/model/NotificationRepository.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Context import android.util.Log import jp.atled.agileworks.AwApp +import jp.atled.agileworks.model.api.ApiClient /** * 通知全般を扱うリポジトリ @@ -18,7 +19,8 @@ class NotificationRepository { fun clearToken(onResult: (Boolean) -> Unit) { Log.d("AgileWorks", "firebase token clean") - DeviceInfoRepository().removeDeviceInfo { + ApiClient.reCreateLogout() + LogoutRepository.getInstance().getLogout { FcmRepository().removeFcmToken { Log.d("AgileWorks", "firebase token clean -> ${successOrFailured(it)}") onResult(it) diff --git a/app/src/main/java/jp/atled/agileworks/model/api/ApiClient.kt b/app/src/main/java/jp/atled/agileworks/model/api/ApiClient.kt index b50b5f770ca561760fdeea6ffd329a79e76dc2cd..b4ecb96856f08011e9582d9af65d890298b67013 100644 --- a/app/src/main/java/jp/atled/agileworks/model/api/ApiClient.kt +++ b/app/src/main/java/jp/atled/agileworks/model/api/ApiClient.kt @@ -18,11 +18,15 @@ import java.util.concurrent.TimeUnit object ApiClient { - var instance: ApiService = createRetofitInstance() + var instance: ApiService = createRetrofitInstance(false) fun reCreate() { - instance = createRetofitInstance() + instance = createRetrofitInstance(false) } - private fun createRetofitInstance(): ApiService { + var instanceLogout: ApiService = createRetrofitInstance(true) + fun reCreateLogout() { + instanceLogout = createRetrofitInstance(true) + } + private fun createRetrofitInstance(isLogout: Boolean): ApiService { return Retrofit.Builder().run { val moshi = Moshi.Builder() .add(com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory()) @@ -30,7 +34,7 @@ object ApiClient { baseUrl(AwApp.Baseurl()) addConverterFactory(MoshiConverterFactory.create(moshi)) - client(createRequestInterceptorClient()) + client(createRequestInterceptorClient(isLogout)) build() }.create(ApiService::class.java) @@ -131,14 +135,30 @@ object ApiClient { } } - private fun createRequestInterceptorClient(): OkHttpClient { - val interceptor = Interceptor { chain -> + private fun createRequestInterceptorClient(isLogout: Boolean): OkHttpClient { + var interceptor = Interceptor { chain -> val original = chain.request() val requestBuilder = original.newBuilder() val request = requestBuilder.build() chain.proceed(request) } + if (isLogout) { + // 保存しているセッションIDを取得 + val cookiePref = AwApp.instance.applicationContext.getSharedPreferences("cookie", Context.MODE_PRIVATE) + val sessionId = cookiePref.getString("sessionId", "") ?: "" + interceptor = Interceptor { chain -> + val original = chain.request() + val requestBuilder = original.newBuilder() + val request = requestBuilder + .addHeader("Cookie", "JSESSIONID=$sessionId") + .build() + chain.proceed(request) + } + // 保存している情報削除 + cookiePref.edit().clear().apply() + } + return if (DEBUG) { OkHttpClient.Builder() .addInterceptor(interceptor) diff --git a/app/src/main/java/jp/atled/agileworks/model/api/ApiService.kt b/app/src/main/java/jp/atled/agileworks/model/api/ApiService.kt index 11077cdaf4350a0cc0d205ccbaedb041a672c826..22c280b4e3a42fc92576063ee42364197f333a19 100644 --- a/app/src/main/java/jp/atled/agileworks/model/api/ApiService.kt +++ b/app/src/main/java/jp/atled/agileworks/model/api/ApiService.kt @@ -40,6 +40,10 @@ interface ApiService { @GET("Broker/MobileAppApi/Session") fun getSession(): Call + // ログアウトAPI + @GET("Broker/MobileAppApi/Logout") + fun getLogout(): Call + @FormUrlEncoded @POST("oauth2") fun refreshToken( diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt index 5f340dfabc3f87b50d14d8603a4ae00c14e92df5..63f8a950086afa41f1724e6431e448e1ccf48855 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt @@ -292,6 +292,11 @@ class DocumentWebFragment : Fragment(), DocumentWebPresenter { response!!.session_id?.apply { sessionId = response!!.session_id setCookie("https://${uri.host}", "JSESSIONID=${sessionId}; Path=/AgileWorks; HttpOnly;Secure;SameSite=None") + // セッションID保存 + AwApp.instance.applicationContext.getSharedPreferences("cookie", Context.MODE_PRIVATE) + .edit() + .putString("sessionId", sessionId) + .apply() } if (urlLoading) { webview?.let {