-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathRefreshTokenPlugin.swift
More file actions
49 lines (39 loc) · 1.65 KB
/
RefreshTokenPlugin.swift
File metadata and controls
49 lines (39 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//
// RefreshTokenPlugin.swift
// DataSource
//
// Created by 이동현 on 7/29/25.
//
import Foundation
import Shared
struct RefreshTokenPlugin: NetworkPlugin {
func willSend(request: URLRequest, endpoint: Endpoint) async throws -> URLRequest {
return request
}
func didReceive(response: URLResponse, data: Data?, endpoint: Endpoint) async throws {
guard
let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 401
else { return }
try await refreshAccessToken()
}
private func refreshAccessToken() async throws {
do {
let tokenManager = TokenManager.shared
let refreshToken = try tokenManager.loadToken(tokenType: .refreshToken)
let endpoint = AuthEndpoint.reissue(refreshToken: refreshToken)
guard let tokenResponse = try await NetworkService.shared.request(
endpoint: endpoint,
type: TokenResponseDTO.self,
withPlugins: false)
else { throw NetworkError.unknown(description: "토큰 갱신 실패") }
try tokenManager.saveToken(token: tokenResponse.accessToken, tokenType: .accessToken)
try tokenManager.saveToken(token: tokenResponse.refreshToken, tokenType: .refreshToken)
BitnagilLogger.log(logType: .debug, message: "AccessToken Saved: \(tokenResponse.accessToken)")
BitnagilLogger.log(logType: .debug, message: "RefreshToken Saved: \(tokenResponse.refreshToken)")
} catch {
BitnagilLogger.log(logType: .error, message: "\(error.localizedDescription)")
throw error
}
}
}