From 61f8f25828cb188e6709966d847006d4f6d63204 Mon Sep 17 00:00:00 2001 From: S-6203-ATLED Date: Thu, 30 Jun 2022 15:29:19 +0900 Subject: [PATCH 1/4] =?UTF-8?q?#95=20=E3=82=A6=E3=82=A3=E3=82=B8=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=81=8B=E3=82=89=E3=81=AE=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E6=99=82400=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/ui/documentweb/DocumentWebClient.kt | 4 +- .../ui/documentweb/DocumentWebFragment.kt | 4 +- .../agileworks/view/ui/login/LoginFragment.kt | 47 +++++++++++++++++++ 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebClient.kt b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebClient.kt index f60f8729..46d70c34 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebClient.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebClient.kt @@ -5,6 +5,7 @@ import android.net.Uri import android.util.Log import android.webkit.* import jp.atled.agileworks.model.CertRepository +import jp.atled.agileworks.model.LoginRepository import jp.atled.agileworks.model.api.ApiClient import kotlinx.coroutines.* @@ -63,7 +64,8 @@ class DocumentWebViewClient(private val webShare: DocumentWebShare): WebViewClie val uri = Uri.parse(url) response.body()!!.session_id?.apply { val sessionId = response.body()!!.session_id - setCookie("https://${uri.host}", "JSESSIONID=${sessionId}; Path=/AgileWorks; HttpOnly;Secure;SameSite=None") + setCookie("https://${uri.host}", "JSESSIONID=${sessionId}; Path=${LoginRepository().loadServerContext()}; HttpOnly;Secure;SameSite=None") + flush() } } } catch (e: Exception) { 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 b6515602..29e38930 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 @@ -20,6 +20,7 @@ import androidx.lifecycle.lifecycleScope import jp.atled.agileworks.R import jp.atled.agileworks.AwApp import jp.atled.agileworks.databinding.FragmentWebviewDetailBinding +import jp.atled.agileworks.model.LoginRepository import jp.atled.agileworks.model.SessionRepository import jp.atled.agileworks.view.base.BaseViewModel import kotlinx.android.synthetic.main.fragment_webview_detail.* @@ -316,7 +317,8 @@ class DocumentWebFragment : Fragment(), DocumentWebPresenter { val uri = Uri.parse(url) response!!.session_id?.apply { sessionId = response!!.session_id - setCookie("https://${uri.host}", "JSESSIONID=${sessionId}; Path=/AgileWorks; HttpOnly;Secure;SameSite=None") + setCookie("https://${uri.host}", "JSESSIONID=${sessionId}; Path=${LoginRepository().loadServerContext()}; HttpOnly;Secure;SameSite=None") + flush() // セッションID保存 AwApp.instance.applicationContext.getSharedPreferences("cookie", Context.MODE_PRIVATE) .edit() diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt index d77fce4b..aba2d0bb 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt @@ -1,6 +1,7 @@ package jp.atled.agileworks.view.ui.login import android.content.ActivityNotFoundException +import android.content.Context import android.content.Intent import android.os.Bundle import android.os.Handler @@ -8,6 +9,7 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.webkit.CookieManager import android.widget.* import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog @@ -79,6 +81,7 @@ class LoginFragment: Fragment() { Log.d(TAG, "authState.isAuthorized == true") Log.d(TAG,"appBackGroundStatus == true") disableLogin() + checkCookie() onSuccessAuth() } else { // 認証済みの場合、生体/デバイス認証を実行 @@ -443,6 +446,50 @@ class LoginFragment: Fragment() { } } + // Cookieにセッション情報がセットされているかを判定 + private fun checkCookie() { + var jSessionId: String? = null + val url = "https://" + LoginRepository().loadServerUrl() + CookieManager.getInstance().apply { + // Cookieの情報を取得 + val getCookieValue = getCookie(url) + // 取得したCookieがnullでなければ;で分割 + val cookieValue = getCookieValue?.split(';') + cookieValue?.forEach { p -> + // 文字列の先頭スペース削除 + val cookieValueTrim = p.trimStart() + // = で文字列分割 + val keyValue = cookieValueTrim.split('=') + // JSESSIONIDならその値が空もしくはnullか判定 + if(keyValue[0] == "JSESSIONID") { + jSessionId = keyValue[1] + // ループから抜ける + return@forEach + } + } + // JSESSIONIDがNullもしくは空、または、cookieValueがNullもしくは空ならセッションIDをセット + if (getCookieValue.isNullOrEmpty() || jSessionId.isNullOrEmpty()) { + try { + val response = ApiClient.instance.getSession().execute() + if (response.isSuccessful) { + response.body()!!.session_id?.apply { + val sessionId = response.body()!!.session_id + setCookie("https://${LoginRepository().loadServerUrl()}", "JSESSIONID=${sessionId}; Path=${LoginRepository().loadServerContext()}; HttpOnly;Secure;SameSite=None") + flush() + // セッションID保存 + AwApp.instance.applicationContext.getSharedPreferences("cookie", Context.MODE_PRIVATE) + .edit() + .putString("sessionId", sessionId) + .apply() + } + } + } catch (e: Exception) { + Log.e(TAG, e.toString(), e) + } + } + } + } + // 文字列から"https://"を取り除く private fun String.stripScheme(): String = SCHEME_PATTERN.replaceFirst(this, "") -- GitLab From 923d9dece195764520b3db216f8b47abaf0c8b7c Mon Sep 17 00:00:00 2001 From: S-6203-ATLED Date: Thu, 30 Jun 2022 15:45:46 +0900 Subject: [PATCH 2/4] =?UTF-8?q?#95=20=E3=82=A6=E3=82=A3=E3=82=B8=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=81=8B=E3=82=89=E3=81=AE=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E6=99=82400=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/jp/atled/agileworks/view/ui/login/LoginFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt index aba2d0bb..cf0ad830 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt @@ -460,7 +460,7 @@ class LoginFragment: Fragment() { val cookieValueTrim = p.trimStart() // = で文字列分割 val keyValue = cookieValueTrim.split('=') - // JSESSIONIDならその値が空もしくはnullか判定 + // JSESSIONIDの値が空もしくはnullか判定 if(keyValue[0] == "JSESSIONID") { jSessionId = keyValue[1] // ループから抜ける -- GitLab From 937dcd049be8c119ec2333bb7b33a15b6753a38a Mon Sep 17 00:00:00 2001 From: S-6203-ATLED Date: Fri, 1 Jul 2022 10:42:14 +0900 Subject: [PATCH 3/4] =?UTF-8?q?#95=20=E3=82=A6=E3=82=A3=E3=82=B8=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=81=8B=E3=82=89=E3=81=AE=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E6=99=82400=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/ui/documentweb/DocumentWebClient.kt | 2 +- .../ui/documentweb/DocumentWebFragment.kt | 2 +- .../agileworks/view/ui/login/LoginFragment.kt | 55 ++++++++++++------- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebClient.kt b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebClient.kt index 46d70c34..a3453e66 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebClient.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebClient.kt @@ -64,7 +64,7 @@ class DocumentWebViewClient(private val webShare: DocumentWebShare): WebViewClie val uri = Uri.parse(url) response.body()!!.session_id?.apply { val sessionId = response.body()!!.session_id - setCookie("https://${uri.host}", "JSESSIONID=${sessionId}; Path=${LoginRepository().loadServerContext()}; HttpOnly;Secure;SameSite=None") + setCookie("https://${uri.host}", "JSESSIONID=${sessionId}; Path=/${LoginRepository().loadServerContext()}; HttpOnly;Secure;SameSite=None") flush() } } 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 29e38930..20fdc448 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 @@ -317,7 +317,7 @@ class DocumentWebFragment : Fragment(), DocumentWebPresenter { val uri = Uri.parse(url) response!!.session_id?.apply { sessionId = response!!.session_id - setCookie("https://${uri.host}", "JSESSIONID=${sessionId}; Path=${LoginRepository().loadServerContext()}; HttpOnly;Secure;SameSite=None") + setCookie("https://${uri.host}", "JSESSIONID=${sessionId}; Path=/${LoginRepository().loadServerContext()}; HttpOnly;Secure;SameSite=None") flush() // セッションID保存 AwApp.instance.applicationContext.getSharedPreferences("cookie", Context.MODE_PRIVATE) diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt index cf0ad830..df4bcc13 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt @@ -37,6 +37,10 @@ import com.journeyapps.barcodescanner.ScanOptions import com.journeyapps.barcodescanner.ScanIntentResult import jp.atled.agileworks.model.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.launch class LoginFragment: Fragment() { @@ -448,43 +452,54 @@ class LoginFragment: Fragment() { // Cookieにセッション情報がセットされているかを判定 private fun checkCookie() { - var jSessionId: String? = null - val url = "https://" + LoginRepository().loadServerUrl() + val url = AwApp.Baseurl() CookieManager.getInstance().apply { // Cookieの情報を取得 val getCookieValue = getCookie(url) + Log.d("getcookievalue",getCookieValue) // 取得したCookieがnullでなければ;で分割 val cookieValue = getCookieValue?.split(';') + var jSessionId: String? = null cookieValue?.forEach { p -> // 文字列の先頭スペース削除 val cookieValueTrim = p.trimStart() // = で文字列分割 val keyValue = cookieValueTrim.split('=') - // JSESSIONIDの値が空もしくはnullか判定 + // 分割した値がJSESSIONIDなら if(keyValue[0] == "JSESSIONID") { - jSessionId = keyValue[1] + // 配列の要素数がが2以上なら + if (keyValue.size >= 2){ + jSessionId = keyValue[1] + } // ループから抜ける return@forEach } } - // JSESSIONIDがNullもしくは空、または、cookieValueがNullもしくは空ならセッションIDをセット - if (getCookieValue.isNullOrEmpty() || jSessionId.isNullOrEmpty()) { - try { - val response = ApiClient.instance.getSession().execute() - if (response.isSuccessful) { - response.body()!!.session_id?.apply { - val sessionId = response.body()!!.session_id - setCookie("https://${LoginRepository().loadServerUrl()}", "JSESSIONID=${sessionId}; Path=${LoginRepository().loadServerContext()}; HttpOnly;Secure;SameSite=None") - flush() - // セッションID保存 - AwApp.instance.applicationContext.getSharedPreferences("cookie", Context.MODE_PRIVATE) - .edit() - .putString("sessionId", sessionId) - .apply() + // JSESSIONIDがNullもしくは空ならセッションIDをセット + if (jSessionId.isNullOrEmpty()) { + // メインスレッドでHTTP通信をするとエラーになるためスレッドを分けて処理 + val job = SupervisorJob() + val scope = CoroutineScope(Dispatchers.Default + job) + scope.launch { + // セッションID取得、Cookieへセット、内部に保持 + try { + // HTTP通信 + val response = ApiClient.instance.getSession().execute() + if (response.isSuccessful) { + response.body()!!.session_id?.apply { + val sessionId = response.body()!!.session_id + setCookie("https://${LoginRepository().loadServerUrl()}", "JSESSIONID=${sessionId}; Path=/${LoginRepository().loadServerContext()}; HttpOnly;Secure;SameSite=None") + flush() + // セッションID保存 + AwApp.instance.applicationContext.getSharedPreferences("cookie", Context.MODE_PRIVATE) + .edit() + .putString("sessionId", sessionId) + .apply() + } } + } catch (e: Exception) { + Log.e(TAG, e.toString(), e) } - } catch (e: Exception) { - Log.e(TAG, e.toString(), e) } } } -- GitLab From c0f57a8894ad769e5b233068600658657e81a70e Mon Sep 17 00:00:00 2001 From: S-6203-ATLED Date: Fri, 1 Jul 2022 10:44:49 +0900 Subject: [PATCH 4/4] =?UTF-8?q?#95=20=E3=82=A6=E3=82=A3=E3=82=B8=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=81=8B=E3=82=89=E3=81=AE=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E6=99=82400=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt index df4bcc13..9fd004f5 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt @@ -456,7 +456,6 @@ class LoginFragment: Fragment() { CookieManager.getInstance().apply { // Cookieの情報を取得 val getCookieValue = getCookie(url) - Log.d("getcookievalue",getCookieValue) // 取得したCookieがnullでなければ;で分割 val cookieValue = getCookieValue?.split(';') var jSessionId: String? = null -- GitLab