diff --git a/iOS-NOTTODO/iOS-NOTTODO.xcodeproj/project.pbxproj b/iOS-NOTTODO/iOS-NOTTODO.xcodeproj/project.pbxproj index f97d4d82..dfbe789f 100644 --- a/iOS-NOTTODO/iOS-NOTTODO.xcodeproj/project.pbxproj +++ b/iOS-NOTTODO/iOS-NOTTODO.xcodeproj/project.pbxproj @@ -30,6 +30,7 @@ 09582B5129C0BC3600EF3207 /* DetailAchievementViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09582B5029C0BC3600EF3207 /* DetailAchievementViewController.swift */; }; 0960C0D42A38BC6500A3D8DB /* KeychainUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0960C0D32A38BC6500A3D8DB /* KeychainUtil.swift */; }; 0960C0D62A38BC8100A3D8DB /* DefaultKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0960C0D52A38BC8100A3D8DB /* DefaultKeys.swift */; }; + 0964BA4A2B0F6BFB00A8984B /* AuthInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0964BA492B0F6BFB00A8984B /* AuthInterceptor.swift */; }; 097568362A2FEF630001EC46 /* String+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097568352A2FEF3F0001EC46 /* String+.swift */; }; 097C003629AB8270008CAEF3 /* MissionListCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097C003529AB8270008CAEF3 /* MissionListCollectionViewCell.swift */; }; 0982DE5429ADCCE000D933D2 /* HomeEmptyCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0982DE5329ADCCE000D933D2 /* HomeEmptyCollectionViewCell.swift */; }; @@ -189,6 +190,7 @@ 09582B5029C0BC3600EF3207 /* DetailAchievementViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailAchievementViewController.swift; sourceTree = ""; }; 0960C0D32A38BC6500A3D8DB /* KeychainUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainUtil.swift; sourceTree = ""; }; 0960C0D52A38BC8100A3D8DB /* DefaultKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultKeys.swift; sourceTree = ""; }; + 0964BA492B0F6BFB00A8984B /* AuthInterceptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthInterceptor.swift; sourceTree = ""; }; 097568352A2FEF3F0001EC46 /* String+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+.swift"; sourceTree = ""; }; 097C003529AB8270008CAEF3 /* MissionListCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissionListCollectionViewCell.swift; sourceTree = ""; }; 0982DE5329ADCCE000D933D2 /* HomeEmptyCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeEmptyCollectionViewCell.swift; sourceTree = ""; }; @@ -1042,6 +1044,7 @@ isa = PBXGroup; children = ( 6CF4705A29A68EA9008D145C /* URLConstant.swift */, + 0964BA492B0F6BFB00A8984B /* AuthInterceptor.swift */, 6CF4705C29A68F5C008D145C /* NetworkLoggerPlugin.swift */, 6CF4705E29A69025008D145C /* GeneralResponse.swift */, 6CF4706029A69096008D145C /* NetworkConstant.swift */, @@ -1311,6 +1314,7 @@ 09582B4829BDA7F600EF3207 /* DetailStackView.swift in Sources */, 09F6718429CADB1100708725 /* OnboardingModel.swift in Sources */, 3B027A7A299C31B500BEB65C /* SceneDelegate.swift in Sources */, + 0964BA4A2B0F6BFB00A8984B /* AuthInterceptor.swift in Sources */, 09582B5129C0BC3600EF3207 /* DetailAchievementViewController.swift in Sources */, 0982DE5829AE40FB00D933D2 /* UITabBar+.swift in Sources */, 3BC1A27929C9BE6C0088376B /* AddMissionFooterCollectionReusableView.swift in Sources */, diff --git a/iOS-NOTTODO/iOS-NOTTODO/Application/SceneDelegate.swift b/iOS-NOTTODO/iOS-NOTTODO/Application/SceneDelegate.swift index d9739736..5751950f 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Application/SceneDelegate.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Application/SceneDelegate.swift @@ -9,14 +9,15 @@ import UIKit import KakaoSDKAuth class SceneDelegate: UIResponder, UIWindowSceneDelegate { - + var window: UIWindow? + static var shared: SceneDelegate? { UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate } func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { if let windowScene = scene as? UIWindowScene { let window = UIWindow(windowScene: windowScene) window.overrideUserInterfaceStyle = UIUserInterfaceStyle.light - + let rootViewController = ValueOnboardingViewController() let navigationController = UINavigationController(rootViewController: rootViewController) navigationController.isNavigationBarHidden = true @@ -33,19 +34,31 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { } } } - + func sceneDidDisconnect(_ scene: UIScene) { } - + func sceneDidBecomeActive(_ scene: UIScene) { } - + func sceneWillResignActive(_ scene: UIScene) { } - + func sceneWillEnterForeground(_ scene: UIScene) { } - + func sceneDidEnterBackground(_ scene: UIScene) { } } + +extension SceneDelegate { + + func changeRootViewControllerTo(_ viewController: UIViewController) { + guard let window = window else { return } + + let rootViewController = viewController + let navigationController = UINavigationController(rootViewController: rootViewController) + navigationController.isNavigationBarHidden = true + window.rootViewController = navigationController + } +} diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/API/Achieve/AchieveAPI.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/API/Achieve/AchieveAPI.swift index bef5eca0..3dfe7b08 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/API/Achieve/AchieveAPI.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/API/Achieve/AchieveAPI.swift @@ -13,7 +13,7 @@ final class AchieveAPI { static let shared: AchieveAPI = AchieveAPI() - private let achieveProvider = MoyaProvider(plugins: [MoyaLoggingPlugin()]) + private let achieveProvider = MoyaProvider(session: Session(interceptor: AuthInterceptor.shared), plugins: [MoyaLoggingPlugin()]) private init() { } diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/API/AddMission/AddMissionAPI.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/API/AddMission/AddMissionAPI.swift index 36e10eaa..d2529488 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/API/AddMission/AddMissionAPI.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/API/AddMission/AddMissionAPI.swift @@ -13,7 +13,7 @@ final class AddMissionAPI { static let shared: AddMissionAPI = AddMissionAPI() - private let addMissionProvider = MoyaProvider(plugins: [MoyaLoggingPlugin()]) + private let addMissionProvider = MoyaProvider(session: Session(interceptor: AuthInterceptor.shared), plugins: [MoyaLoggingPlugin()]) private init() { } diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/API/Auth/AuthAPI.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/API/Auth/AuthAPI.swift index 63361e0c..e9289aa4 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/API/Auth/AuthAPI.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/API/Auth/AuthAPI.swift @@ -13,7 +13,7 @@ final class AuthAPI { static let shared: AuthAPI = AuthAPI() - private let authProvider = MoyaProvider(plugins: [MoyaLoggingPlugin()]) + private let authProvider = MoyaProvider(session: Session(interceptor: AuthInterceptor.shared), plugins: [MoyaLoggingPlugin()]) private init() { } diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/API/Home/HomeAPI.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/API/Home/HomeAPI.swift index bbd68b99..bb83dd41 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/API/Home/HomeAPI.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/API/Home/HomeAPI.swift @@ -13,7 +13,7 @@ final class HomeAPI { static let shared: HomeAPI = HomeAPI() - var homeProvider = MoyaProvider(plugins: [MoyaLoggingPlugin()]) + var homeProvider = MoyaProvider(session: Session(interceptor: AuthInterceptor.shared), plugins: [MoyaLoggingPlugin()]) private init() { } diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/API/Recommend/RecommendAPI.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/API/Recommend/RecommendAPI.swift index 3e95b447..acbfc412 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/API/Recommend/RecommendAPI.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/API/Recommend/RecommendAPI.swift @@ -13,7 +13,7 @@ final class RecommendAPI { static let shared: RecommendAPI = RecommendAPI() - private let recommendProvider = MoyaProvider(plugins: [MoyaLoggingPlugin()]) + private let recommendProvider = MoyaProvider(session: Session(interceptor: AuthInterceptor.shared), plugins: [MoyaLoggingPlugin()]) private init() { } diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/API/Recommend/RecommendActionAPI.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/API/Recommend/RecommendActionAPI.swift index 58453cce..7f0ced3b 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/API/Recommend/RecommendActionAPI.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/API/Recommend/RecommendActionAPI.swift @@ -13,7 +13,7 @@ final class RecommendActionAPI { static let shared: RecommendActionAPI = RecommendActionAPI() - private let recommendActionProvider = MoyaProvider(plugins: [MoyaLoggingPlugin()]) + private let recommendActionProvider = MoyaProvider(session: Session(interceptor: AuthInterceptor.shared), plugins: [MoyaLoggingPlugin()]) private init() { } diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/Base/AuthInterceptor.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/Base/AuthInterceptor.swift new file mode 100644 index 00000000..64f21c98 --- /dev/null +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/Base/AuthInterceptor.swift @@ -0,0 +1,30 @@ +// +// AuthInterceptor.swift +// iOS-NOTTODO +// +// Created by JEONGEUN KIM on 11/23/23. +// + +import Foundation + +import Alamofire + +final class AuthInterceptor: RequestInterceptor { + + static let shared = AuthInterceptor() + + private init() {} + + func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { + + guard let response = request.task?.response as? HTTPURLResponse, response.statusCode == 401 + else { + completion(.doNotRetry) + return + } + + DispatchQueue.main.async { + SceneDelegate.shared?.changeRootViewControllerTo(AuthViewController()) + } + } +} diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Achieve/AchieveService.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Achieve/AchieveService.swift index d346f06e..33234b96 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Achieve/AchieveService.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Achieve/AchieveService.swift @@ -35,6 +35,10 @@ extension AchieveService: TargetType { } } + var validationType: ValidationType { + return .successCodes + } + var task: Moya.Task { switch self { case .achieveCalendar, .achieveDetail: diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/AddMission/AddMissionService.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/AddMission/AddMissionService.swift index 865f96a2..e0418240 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/AddMission/AddMissionService.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/AddMission/AddMissionService.swift @@ -48,6 +48,10 @@ extension AddMissionService: TargetType { } } + var validationType: ValidationType { + return .successCodes + } + var task: Moya.Task { switch self { case .recommendSituation, .recentMission, .missionDates: @@ -64,7 +68,7 @@ extension AddMissionService: TargetType { encoding: JSONEncoding.default) } } - + var headers: [String: String]? { switch self { default: diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Auth/AuthService.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Auth/AuthService.swift index e1ee0cb0..7d670375 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Auth/AuthService.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Auth/AuthService.swift @@ -42,6 +42,11 @@ extension AuthService: TargetType { return .delete } } + + var validationType: ValidationType { + return .successCodes + } + var task: Moya.Task { switch self { case .kakaoAuth(_, let socialToken, let fcmToken): diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Home/HomeSevice.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Home/HomeSevice.swift index 2bda38da..107856b9 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Home/HomeSevice.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Home/HomeSevice.swift @@ -53,6 +53,10 @@ extension HomeService: TargetType { } } + var validationType: ValidationType { + return .successCodes + } + var task: Moya.Task { switch self { case .dailyMission, .deleteMission, .missionWeekly, .dailyDetailMission, .particularMission: diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Recommend/RecommendActionService.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Recommend/RecommendActionService.swift index 6a6f0804..31115cf8 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Recommend/RecommendActionService.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Recommend/RecommendActionService.swift @@ -32,6 +32,10 @@ extension RecommendActionService: TargetType { } } + var validationType: ValidationType { + return .successCodes + } + var task: Moya.Task { switch self { case .recommendAction: diff --git a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Recommend/RecommendService.swift b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Recommend/RecommendService.swift index 7687ab7e..10f037e6 100644 --- a/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Recommend/RecommendService.swift +++ b/iOS-NOTTODO/iOS-NOTTODO/Network/Service/Recommend/RecommendService.swift @@ -32,6 +32,10 @@ extension RecommendService: TargetType { } } + var validationType: ValidationType { + return .successCodes + } + var task: Moya.Task { switch self { case .recommend: