Skip to content

Commit 15ed572

Browse files
committed
Delete cookie client and storing tokens http cache
1 parent 01875bb commit 15ed572

File tree

12 files changed

+22
-194
lines changed

12 files changed

+22
-194
lines changed

Sources/StytchCore/CookieClient/CookieClient+Live.swift

Lines changed: 0 additions & 13 deletions
This file was deleted.

Sources/StytchCore/CookieClient/CookieClient.swift

Lines changed: 0 additions & 22 deletions
This file was deleted.

Sources/StytchCore/Environment.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@ struct Environment {
6363

6464
var localStorage: LocalStorage = .init()
6565

66-
var cookieClient: CookieClient = .live
67-
6866
var keychainClient: KeychainClient = KeychainClientImplementation.shared
6967

7068
var userDefaultsClient: EncryptedUserDefaultsClient = EncryptedUserDefaultsClientImplementation.shared

Sources/StytchCore/Networking/NetworkingRouter.swift

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ extension NetworkingRouter {
115115
useDFPPA: useDFPPA
116116
)
117117

118-
return try await handleResponse(data: data, response: response, configuration: configuration)
118+
return try await handleResponse(data: data, response: response)
119119
}
120120
}
121121

@@ -170,7 +170,7 @@ extension NetworkingRouter {
170170
}
171171

172172
do {
173-
return try await handleResponse(data: data, response: response, configuration: configuration)
173+
return try await handleResponse(data: data, response: response)
174174
} catch {
175175
if isSessionStale(initialSessionId) {
176176
return try await performSessionRequest(to: route, parameters: parameters)
@@ -205,8 +205,7 @@ extension NetworkingRouter {
205205
extension NetworkingRouter {
206206
func handleResponse<Response: Decodable>(
207207
data: Data,
208-
response: HTTPURLResponse,
209-
configuration: StytchClientConfiguration
208+
response: HTTPURLResponse
210209
) async throws -> Response {
211210
try response.verifyStatusCode(data: data, jsonDecoder: jsonDecoder)
212211
let dataContainer = try jsonDecoder.decode(DataContainer<Response>.self, from: data)
@@ -216,8 +215,7 @@ extension NetworkingRouter {
216215

217216
sessionManager.updateSession(
218217
sessionType: .user(sessionResponse.session),
219-
tokens: SessionTokens(jwt: .jwt(sessionResponse.sessionJwt), opaque: .opaque(sessionResponse.sessionToken)),
220-
hostUrl: configuration.hostUrl
218+
tokens: SessionTokens(jwt: .jwt(sessionResponse.sessionJwt), opaque: .opaque(sessionResponse.sessionToken))
221219
)
222220

223221
#if !os(tvOS) && !os(watchOS)
@@ -233,8 +231,7 @@ extension NetworkingRouter {
233231

234232
sessionManager.updateSession(
235233
sessionType: .member(sessionResponse.memberSession),
236-
tokens: SessionTokens(jwt: .jwt(sessionResponse.sessionJwt), opaque: .opaque(sessionResponse.sessionToken)),
237-
hostUrl: configuration.hostUrl
234+
tokens: SessionTokens(jwt: .jwt(sessionResponse.sessionJwt), opaque: .opaque(sessionResponse.sessionToken))
238235
)
239236
} else if let sessionResponse = dataContainer.data as? B2BMFAAuthenticateResponseType {
240237
// Update the member and organization so that all values are current when the session publisher fires
@@ -244,8 +241,7 @@ extension NetworkingRouter {
244241
if let memberSession = sessionResponse.memberSession {
245242
sessionManager.updateSession(
246243
sessionType: .member(memberSession),
247-
tokens: SessionTokens(jwt: .jwt(sessionResponse.sessionJwt), opaque: .opaque(sessionResponse.sessionToken)),
248-
hostUrl: configuration.hostUrl
244+
tokens: SessionTokens(jwt: .jwt(sessionResponse.sessionJwt), opaque: .opaque(sessionResponse.sessionToken))
249245
)
250246
} else {
251247
sessionManager.updateSession(

Sources/StytchCore/SessionManager.swift

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ class SessionManager {
2121
@Dependency(\.userStorage) private var userStorage
2222
@Dependency(\.memberStorage) private var memberStorage
2323
@Dependency(\.organizationStorage) private var organizationStorage
24-
@Dependency(\.cookieClient) private var cookieClient
2524
@Dependency(\.userDefaultsClient) private var userDefaultsClient
2625
@Dependency(\.sessionsPollingClient) private var sessionsPollingClient
2726
@Dependency(\.memberSessionsPollingClient) private var memberSessionsPollingClient
@@ -40,26 +39,15 @@ class SessionManager {
4039
intermediateSessionToken != nil && intermediateSessionToken?.isEmpty == false
4140
}
4241

43-
init() {
44-
NotificationCenter.default
45-
.addObserver(
46-
self,
47-
selector: #selector(cookiesDidUpdate(notification:)),
48-
name: .NSHTTPCookieManagerCookiesChanged,
49-
object: nil
50-
)
51-
}
52-
5342
func updateSession(
5443
sessionType: SessionType? = nil,
5544
tokens: SessionTokens? = nil,
56-
intermediateSessionToken: String? = nil,
57-
hostUrl: URL? = nil
45+
intermediateSessionToken: String? = nil
5846
) {
5947
self.intermediateSessionToken = intermediateSessionToken
6048

6149
// If there is no session, it means that we are in MFA and all we need is the IST
62-
guard let sessionType else {
50+
guard let sessionType = sessionType else {
6351
resetSession()
6452
return
6553
}
@@ -69,8 +57,6 @@ class SessionManager {
6957

7058
if let tokens = tokens {
7159
updatePersistentStorage(tokens: tokens)
72-
tokens.jwt?.updateCookie(cookieClient: cookieClient, expiresAt: sessionType.expiresAt, hostUrl: hostUrl)
73-
tokens.opaque.updateCookie(cookieClient: cookieClient, expiresAt: sessionType.expiresAt, hostUrl: hostUrl)
7460
}
7561

7662
switch sessionType {
@@ -155,7 +141,6 @@ extension SessionManager {
155141
try? userDefaultsClient.setStringValue(newValue.value, for: userDefaultsItem)
156142
} else {
157143
try? userDefaultsClient.removeItem(item: userDefaultsItem)
158-
cookieClient.deleteCookie(named: userDefaultsItem.name)
159144
}
160145
}
161146
}
@@ -170,7 +155,6 @@ extension SessionManager {
170155
try? userDefaultsClient.setStringValue(newValue.value, for: userDefaultsItem)
171156
} else {
172157
try? userDefaultsClient.removeItem(item: userDefaultsItem)
173-
cookieClient.deleteCookie(named: userDefaultsItem.name)
174158
}
175159
}
176160
}
@@ -230,7 +214,6 @@ extension SessionManager {
230214
private func removeIntermediateSessionToken() {
231215
let userDefaultsItem: EncryptedUserDefaultsItem = .intermediateSessionToken
232216
try? userDefaultsClient.removeItem(item: userDefaultsItem)
233-
cookieClient.deleteCookie(named: userDefaultsItem.name)
234217
}
235218
}
236219

Sources/StytchCore/SharedModels/SessionToken.swift

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -42,32 +42,6 @@ public struct SessionToken: Equatable, Sendable {
4242
public static func opaque(_ value: String) -> Self {
4343
.init(kind: .opaque, value: value)
4444
}
45-
46-
internal func cookie(expiresAt: Date, hostUrl: URL?) -> HTTPCookie? {
47-
guard let hostUrl = hostUrl, let urlComponents = URLComponents(url: hostUrl, resolvingAgainstBaseURL: true) else {
48-
return nil
49-
}
50-
51-
var properties: [HTTPCookiePropertyKey: Any] = [
52-
.name: name,
53-
.value: value,
54-
.path: "/",
55-
.domain: hostUrl.host ?? hostUrl.absoluteString,
56-
.expires: expiresAt,
57-
.sameSitePolicy: HTTPCookieStringPolicy.sameSiteLax,
58-
]
59-
if !urlComponents.isLocalHost {
60-
properties[.secure] = true
61-
}
62-
63-
return HTTPCookie(properties: properties)
64-
}
65-
66-
internal func updateCookie(cookieClient: CookieClient, expiresAt: Date, hostUrl: URL?) {
67-
if let cookie = cookie(expiresAt: expiresAt, hostUrl: hostUrl) {
68-
cookieClient.set(cookie: cookie)
69-
}
70-
}
7145
}
7246

7347
/// A public interface to require the caller to explicitly pass one of each type of non nil token in order to update a session.

Tests/StytchCoreTests/B2BSessionsTestCase.swift

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ final class B2BSessionsTestCase: BaseTestCase {
1818

1919
Current.sessionManager.updateSession(
2020
sessionType: .member(.mock),
21-
tokens: SessionTokens(jwt: .jwt("i'm_jwt"), opaque: .opaque("opaque_all_day")),
22-
hostUrl: try XCTUnwrap(URL(string: "https://url.com"))
21+
tokens: SessionTokens(jwt: .jwt("i'm_jwt"), opaque: .opaque("opaque_all_day"))
2322
)
2423

2524
_ = try await StytchB2BClient.sessions.authenticate(parameters: parameters)
@@ -41,8 +40,7 @@ final class B2BSessionsTestCase: BaseTestCase {
4140

4241
Current.sessionManager.updateSession(
4342
sessionType: .member(.mock),
44-
tokens: SessionTokens(jwt: .jwt("i'm_jwt"), opaque: .opaque("opaque_all_day")),
45-
hostUrl: try XCTUnwrap(URL(string: "https://url.com"))
43+
tokens: SessionTokens(jwt: .jwt("i'm_jwt"), opaque: .opaque("opaque_all_day"))
4644
)
4745

4846
XCTAssertEqual(StytchB2BClient.sessions.sessionToken, .opaque("opaque_all_day"))
@@ -112,8 +110,7 @@ final class B2BSessionsTestCase: BaseTestCase {
112110
Current.timer = { _, _, _ in .init() }
113111
Current.sessionManager.updateSession(
114112
sessionType: .member(.mock),
115-
tokens: SessionTokens(jwt: .jwt("i'm_jwt"), opaque: .opaque("opaque_all_day")),
116-
hostUrl: try XCTUnwrap(URL(string: "https://url.com"))
113+
tokens: SessionTokens(jwt: .jwt("i'm_jwt"), opaque: .opaque("opaque_all_day"))
117114
)
118115

119116
wait(for: [expectation], timeout: 1.0)
@@ -136,8 +133,7 @@ final class B2BSessionsTestCase: BaseTestCase {
136133
Current.timer = { _, _, _ in .init() }
137134
Current.sessionManager.updateSession(
138135
sessionType: nil,
139-
tokens: SessionTokens(jwt: .jwt("i'm_jwt"), opaque: .opaque("opaque_all_day")),
140-
hostUrl: try XCTUnwrap(URL(string: "https://url.com"))
136+
tokens: SessionTokens(jwt: .jwt("i'm_jwt"), opaque: .opaque("opaque_all_day"))
141137
)
142138

143139
wait(for: [expectation], timeout: 1.0)
@@ -148,8 +144,7 @@ final class B2BSessionsTestCase: BaseTestCase {
148144
Current.timer = { _, _, _ in .init() }
149145
Current.sessionManager.updateSession(
150146
sessionType: .member(.mockWithExpiredMemberSession),
151-
tokens: SessionTokens(jwt: .jwt("i'm_jwt"), opaque: .opaque("opaque_all_day")),
152-
hostUrl: try XCTUnwrap(URL(string: "https://url.com"))
147+
tokens: SessionTokens(jwt: .jwt("i'm_jwt"), opaque: .opaque("opaque_all_day"))
153148
)
154149

155150
XCTAssertNil(StytchB2BClient.sessions.memberSession)

Tests/StytchCoreTests/BaseTestCase.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ class BaseTestCase: XCTestCase {
1414

1515
Current.networkingClient = networkInterceptor
1616
Current.sessionsPollingClient = .failing
17-
Current.cookieClient = .mock()
1817
Current.keychainClient = KeychainClientMock()
1918
Current.userDefaultsClient = EncryptedUserDefaultsClientMock()
2019
Current.cryptoClient = .live

Tests/StytchCoreTests/CookieClient+Mock.swift

Lines changed: 0 additions & 20 deletions
This file was deleted.

Tests/StytchCoreTests/CookieClientTestCase.swift

Lines changed: 0 additions & 35 deletions
This file was deleted.

0 commit comments

Comments
 (0)