diff --git a/.swiftformat b/.swiftformat index 5d17f86..6790567 100644 --- a/.swiftformat +++ b/.swiftformat @@ -1,5 +1,5 @@ # File exclusion ---exclude Ferrite/API/Keychain.swift +# --exclude Ferrite/API/Keychain.swift # Formatting options --acronyms ID,URL,UUID diff --git a/Ferrite.xcodeproj/project.pbxproj b/Ferrite.xcodeproj/project.pbxproj index 00a106c..0a3a738 100644 --- a/Ferrite.xcodeproj/project.pbxproj +++ b/Ferrite.xcodeproj/project.pbxproj @@ -23,7 +23,6 @@ 0CA148E1288903F000DE2211 /* Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA148C9288903F000DE2211 /* Collection.swift */; }; 0CA148E2288903F000DE2211 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA148CA288903F000DE2211 /* Data.swift */; }; 0CA148E3288903F000DE2211 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA148CB288903F000DE2211 /* Task.swift */; }; - 0CA148E4288903F000DE2211 /* Keychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA148CC288903F000DE2211 /* Keychain.swift */; }; 0CA148E5288903F000DE2211 /* DebridManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA148CD288903F000DE2211 /* DebridManager.swift */; }; 0CA148E6288903F000DE2211 /* WebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA148CE288903F000DE2211 /* WebView.swift */; }; 0CA148E7288903F000DE2211 /* ToastViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA148CF288903F000DE2211 /* ToastViewModel.swift */; }; @@ -51,7 +50,6 @@ 0CA148C9288903F000DE2211 /* Collection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Collection.swift; sourceTree = ""; }; 0CA148CA288903F000DE2211 /* Data.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Data.swift; sourceTree = ""; }; 0CA148CB288903F000DE2211 /* Task.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Task.swift; sourceTree = ""; }; - 0CA148CC288903F000DE2211 /* Keychain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Keychain.swift; sourceTree = ""; }; 0CA148CD288903F000DE2211 /* DebridManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DebridManager.swift; sourceTree = ""; }; 0CA148CE288903F000DE2211 /* WebView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebView.swift; sourceTree = ""; }; 0CA148CF288903F000DE2211 /* ToastViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ToastViewModel.swift; sourceTree = ""; }; @@ -160,7 +158,6 @@ 0CA148F12889066000DE2211 /* API */ = { isa = PBXGroup; children = ( - 0CA148CC288903F000DE2211 /* Keychain.swift */, 0CA148D0288903F000DE2211 /* RealDebridWrapper.swift */, 0CA148C4288903F000DE2211 /* RealDebridModels.swift */, ); @@ -270,7 +267,6 @@ 0CBC76FD288D914F0054BE44 /* BatchChoiceView.swift in Sources */, 0CA148EC288903F000DE2211 /* ContentView.swift in Sources */, 0CA148E1288903F000DE2211 /* Collection.swift in Sources */, - 0CA148E4288903F000DE2211 /* Keychain.swift in Sources */, 0CA148DD288903F000DE2211 /* ScrapingViewModel.swift in Sources */, 0CA148D8288903F000DE2211 /* MagnetChoiceView.swift in Sources */, 0CA148E3288903F000DE2211 /* Task.swift in Sources */, diff --git a/Ferrite/API/Keychain.swift b/Ferrite/API/Keychain.swift deleted file mode 100644 index b36d22f..0000000 --- a/Ferrite/API/Keychain.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// Keychain.swift -// Ferrite -// -// Created by Brian Dashore on 7/20/22. -// - -import Foundation -import KeychainSwift - -public class Keychain { - static let shared = KeychainSwift() -} diff --git a/Ferrite/API/RealDebridWrapper.swift b/Ferrite/API/RealDebridWrapper.swift index 40efd8d..fdcfa09 100644 --- a/Ferrite/API/RealDebridWrapper.swift +++ b/Ferrite/API/RealDebridWrapper.swift @@ -6,6 +6,7 @@ // import Foundation +import KeychainSwift public enum RealDebridError: Error { case InvalidUrl @@ -21,7 +22,7 @@ public class RealDebrid: ObservableObject { var parentManager: DebridManager? let jsonDecoder = JSONDecoder() - let keychain = Keychain() + let keychain = KeychainSwift() let baseAuthUrl = "https://api.real-debrid.com/oauth/v2" let baseApiUrl = "https://api.real-debrid.com/rest/1.0" @@ -97,7 +98,7 @@ public class RealDebrid: ObservableObject { if let clientId = rawResponse?.clientID, let clientSecret = rawResponse?.clientSecret { UserDefaults.standard.set(clientId, forKey: "RealDebrid.ClientId") - Keychain.shared.set(clientSecret, forKey: "RealDebrid.ClientSecret") + keychain.set(clientSecret, forKey: "RealDebrid.ClientSecret") try await getTokens(deviceCode: deviceCode) @@ -120,7 +121,7 @@ public class RealDebrid: ObservableObject { throw RealDebridError.EmptyData } - guard let clientSecret = Keychain.shared.get("RealDebrid.ClientSecret") else { + guard let clientSecret = keychain.get("RealDebrid.ClientSecret") else { throw RealDebridError.EmptyData } @@ -142,8 +143,8 @@ public class RealDebrid: ObservableObject { let rawResponse = try jsonDecoder.decode(TokenResponse.self, from: data) - Keychain.shared.set(rawResponse.accessToken, forKey: "RealDebrid.AccessToken") - Keychain.shared.set(rawResponse.refreshToken, forKey: "RealDebrid.RefreshToken") + keychain.set(rawResponse.accessToken, forKey: "RealDebrid.AccessToken") + keychain.set(rawResponse.refreshToken, forKey: "RealDebrid.RefreshToken") let accessTimestamp = Date().timeIntervalSince1970 + Double(rawResponse.expiresIn) UserDefaults.standard.set(accessTimestamp, forKey: "RealDebrid.AccessTokenStamp") @@ -159,7 +160,7 @@ public class RealDebrid: ObservableObject { if Date().timeIntervalSince1970 > accessTokenStamp { do { - if let refreshToken = Keychain.shared.get("RealDebrid.RefreshToken") { + if let refreshToken = keychain.get("RealDebrid.RefreshToken") { print("Refresh token found") try await getTokens(deviceCode: refreshToken) } @@ -169,22 +170,22 @@ public class RealDebrid: ObservableObject { } } - return Keychain.shared.get("RealDebrid.AccessToken") + return keychain.get("RealDebrid.AccessToken") } public func deleteTokens() async throws { - Keychain.shared.delete("RealDebrid.RefreshToken") - Keychain.shared.delete("RealDebrid.ClientSecret") + keychain.delete("RealDebrid.RefreshToken") + keychain.delete("RealDebrid.ClientSecret") UserDefaults.standard.removeObject(forKey: "RealDebrid.ClientId") UserDefaults.standard.removeObject(forKey: "RealDebrid.AccessTokenStamp") // Run the request, doesn't matter if it fails - if let token = Keychain.shared.get("RealDebrid.AccessToken") { + if let token = keychain.get("RealDebrid.AccessToken") { var request = URLRequest(url: URL(string: "\(baseApiUrl)/disable_access_token")!) request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") _ = try? await URLSession.shared.data(for: request) - Keychain.shared.delete("RealDebrid.AccessToken") + keychain.delete("RealDebrid.AccessToken") } Task { @MainActor in