diff --git a/AgileWorks/AgileWorks/App/RootViewController.swift b/AgileWorks/AgileWorks/App/RootViewController.swift index e6712b7da8250220b84d9b07b8991560fe09cdc6..d88c6deba8902ec69c1830e8f848c799461ef2d7 100644 --- a/AgileWorks/AgileWorks/App/RootViewController.swift +++ b/AgileWorks/AgileWorks/App/RootViewController.swift @@ -109,6 +109,7 @@ extension RootViewController { KeychainDataStore().removeAccessToken(serverNumber: serverNumber) KeychainDataStore().removeDeviceID(serverNumber: serverNumber) KeychainDataStore().removeSessionID(serverNumber: serverNumber) + KeychainDataStore().removeSessionAPICookie(serverNumber: serverNumber) KeychainDataStore().removeCookieHeader(serverNumber: serverNumber) } //認証情報削除 diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 106cc37ea7317fde2065be0e5b3fef6e9855035a..22768dd851cc44ba8d7778ba9d05c732caf35535 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -167,7 +167,7 @@ class WebViewController: UIViewController { // WebView ロード処理 private func loadWebView(url: String) { var requestCookie = "" - if let cookieHeader = KeychainDataStore().readCookieHeader(){ + if let cookieHeader = KeychainDataStore().readSessionAPICookie(){ let individualCookies = self.separateCookieHeader(cookieHeader: cookieHeader) for cookie in individualCookies { let componentCookies = cookie.components(separatedBy: ";") @@ -178,6 +178,7 @@ class WebViewController: UIViewController { } } } + KeychainDataStore().writeCookieHeader(cookieHeader: requestCookie) let url = URL(string: url)! var request = URLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 30.0) request.httpShouldHandleCookies = false @@ -228,7 +229,7 @@ class WebViewController: UIViewController { let cookieStore = self.mainWebView.configuration.websiteDataStore.httpCookieStore cookieStore.setCookie(cookie!) - if let cookieHeader = KeychainDataStore().readCookieHeader(){ + if let cookieHeader = KeychainDataStore().readSessionAPICookie(){ let individualCookies = self.separateCookieHeader(cookieHeader: cookieHeader) for cookie in individualCookies { var cookiePath = "" diff --git a/AgileWorks/Common/DataStore/KeychainDataStore.swift b/AgileWorks/Common/DataStore/KeychainDataStore.swift index d6de3c24a6c824e5e701e8ff7bb76abf0014d049..6dd7f762a943ef5f698f0f165e7c3e5d0e4aa8b9 100644 --- a/AgileWorks/Common/DataStore/KeychainDataStore.swift +++ b/AgileWorks/Common/DataStore/KeychainDataStore.swift @@ -21,6 +21,7 @@ final class KeychainDataStore: DataStoreProtocol { private let kSessionID: String = "SessionID" private let kSystemName: String = "SystemName" private let kCertificateLabel: String = "CertificateLabel" + private let kSessionAPICookie: String = "SessionAPICookie" private let kCookieHeader: String = "CookieHeader" // アクセストークンの書き込み @@ -177,17 +178,36 @@ final class KeychainDataStore: DataStoreProtocol { } } - // cookieの書き込み + // セッションAPIのcookieの書き込み + func writeSessionAPICookie(sessionAPICookie: String) { + setKeychainValue(key: kSessionAPICookie, value: sessionAPICookie) + } + + // セッションAPIのcookieの読み込み + func readSessionAPICookie() -> String? { + return getKeychainValue(key: kSessionAPICookie) + } + + // セッションAPIのcookieの削除 + func removeSessionAPICookie(serverNumber: Int? = nil) { + if let serverNumber = serverNumber { + removeKeychainValue(key: kSessionAPICookie, serverNumber: serverNumber) + } else { + removeKeychainValue(key: kSessionAPICookie) + } + } + + // セットするcookieの書き込み func writeCookieHeader(cookieHeader: String) { setKeychainValue(key: kCookieHeader, value: cookieHeader) } - // cookieの読み込み + // セットするcookieの読み込み func readCookieHeader() -> String? { return getKeychainValue(key: kCookieHeader) } - // cookieの削除 + // セットするcookieの削除 func removeCookieHeader(serverNumber: Int? = nil) { if let serverNumber = serverNumber { removeKeychainValue(key: kCookieHeader, serverNumber: serverNumber) diff --git a/AgileWorks/Common/WebClient/APIEndpoint.swift b/AgileWorks/Common/WebClient/APIEndpoint.swift index 1ef653cf71860ff5907699dd5c779695b42ffa8d..2e5127ed3b30ea88e181ce5ee6805a1176af6c90 100644 --- a/AgileWorks/Common/WebClient/APIEndpoint.swift +++ b/AgileWorks/Common/WebClient/APIEndpoint.swift @@ -24,7 +24,7 @@ public protocol APIEndpoint { var method: HttpMethod { get } var path: String { get } var headerFields: [String: String]? { get } - var cookieFields: [String: String]? { get } + var cookieFields: [String]? { get } var pathParameters: [String]? { get } var queryParameters: [String: String]? { get } @@ -46,7 +46,7 @@ public extension APIEndpoint { return nil } - var cookieFields: [String: String]? { + var cookieFields: [String]? { return nil } @@ -77,8 +77,8 @@ public extension APIEndpoint { req.httpBody = requestBody req.httpShouldHandleCookies = false // cookies の設定 - for(key, value) in cookieFields ?? [:] { - req.setValue(key + "=" + value, forHTTPHeaderField: "Cookie") + for(value) in cookieFields ?? [] { + req.setValue(value, forHTTPHeaderField: "Cookie") req.httpShouldHandleCookies = true } diff --git a/AgileWorks/Common/WebClient/GetLogoutEndpoint.swift b/AgileWorks/Common/WebClient/GetLogoutEndpoint.swift index d39aad59f004193fa88e8e56fb8a761fd9a5ba0b..c0181e214be7f3b9b88d7e4d38686957c7d9dcf5 100644 --- a/AgileWorks/Common/WebClient/GetLogoutEndpoint.swift +++ b/AgileWorks/Common/WebClient/GetLogoutEndpoint.swift @@ -21,8 +21,8 @@ struct GetLogoutEndpoint: APIEndpoint { "X-ATLED-AW-Device-Id": KeychainDataStore().readDeviceID()?.description ?? ""] } - var cookieFields: [String: String]? { - return ["JSESSIONID": KeychainDataStore().readSessionID() ?? ""] + var cookieFields: [String]? { + return [KeychainDataStore().readCookieHeader() ?? ""] } } diff --git a/AgileWorks/Common/WebClient/GetSessionEndpoint.swift b/AgileWorks/Common/WebClient/GetSessionEndpoint.swift index fa6590794742a652d00e147439d4499b27e2537d..e3e407f4d8159837a4233ec1fed4db000adf54b0 100644 --- a/AgileWorks/Common/WebClient/GetSessionEndpoint.swift +++ b/AgileWorks/Common/WebClient/GetSessionEndpoint.swift @@ -39,7 +39,7 @@ extension GetSessionEndpoint { let headerSessionId = extractSessionId(from: headers) if headerSessionId == bodySessionId { print("CookieHeaders: \(headers)") - KeychainDataStore().writeCookieHeader(cookieHeader: headers) + KeychainDataStore().writeSessionAPICookie(sessionAPICookie: headers) } return decodedSessionInfo } catch {