Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.72 KB | None | 0 0
  1. import Foundation
  2.  
  3. protocol AppCacheDependency: class {
  4.     var appCache: AppCache { get }
  5. }
  6.  
  7. final class AppCache: DependencyContainer {
  8.     typealias Dependencies = EmptyDependencies
  9.    
  10.     enum Key: String, CaseIterable {
  11.         case accessToken
  12.         case refreshToken
  13.         case currentUser
  14.         case selectedApartment
  15.         case pushToken
  16.         case needUpdateFCMToken
  17.         case showFavoriteUsers
  18.     }
  19.    
  20.     weak var dependencies: EmptyDependencies!
  21.    
  22.     init(dependencies: Dependencies?) {
  23.         self.dependencies = dependencies
  24.     }
  25.    
  26.     private let userDefaults = UserDefaults.standard
  27.    
  28.     private lazy var keychain: KeychainHelper = {
  29.         let keychain = KeychainHelper()
  30.         keychain.synchronizable = false
  31.         return keychain
  32.     }()
  33.    
  34.     var token: Token? {
  35.         get {
  36.             guard let accessToken = keychain.get(Key.accessToken.rawValue), let refreshToken = keychain.get(Key.refreshToken.rawValue) else { return nil }
  37.             return Token(accessToken: accessToken, refreshToken: refreshToken)
  38.         }
  39.         set(newValue) {
  40.             if let token = newValue {
  41.                 keychain.set(token.accessToken, forKey: Key.accessToken.rawValue)
  42.                 keychain.set(token.refreshToken, forKey: Key.refreshToken.rawValue)
  43.             } else {
  44.                 keychain.delete(Key.accessToken.rawValue)
  45.                 keychain.delete(Key.refreshToken.rawValue)
  46.             }
  47.         }
  48.     }
  49.    
  50.     var currentUser: User? {
  51.         get { userDefaults.object(User.self, forKey: Key.currentUser.rawValue) }
  52.         set { userDefaults.set(object: newValue, forKey: Key.currentUser.rawValue) }
  53.     }
  54.    
  55.     var selectedApartment: Apartment? {
  56.         get { userDefaults.object(Apartment.self, forKey: Key.selectedApartment.rawValue) }
  57.         set { userDefaults.set(object: newValue, forKey: Key.selectedApartment.rawValue) }
  58.     }
  59.    
  60.     var pushToken: String? {
  61.         get { userDefaults.string(forKey: Key.pushToken.rawValue) }
  62.         set { userDefaults.setValue(newValue, forKey: Key.pushToken.rawValue) }
  63.     }
  64.    
  65.     var needUpdateFCMToken: Bool {
  66.         get { userDefaults.bool(forKey: Key.needUpdateFCMToken.rawValue) }
  67.         set { userDefaults.set(newValue, forKey: Key.needUpdateFCMToken.rawValue) }
  68.     }
  69.    
  70.     var showFavoriteUsers: Bool {
  71.         get { userDefaults.bool(forKey: Key.showFavoriteUsers.rawValue) }
  72.         set { userDefaults.set(newValue, forKey: Key.showFavoriteUsers.rawValue) }
  73.     }
  74.    
  75.     // MARK: - Storage
  76.  
  77.     func clear() {
  78.         Key.allCases.forEach {
  79.             userDefaults.set(nil, forKey: $0.rawValue)
  80.             keychain.delete($0.rawValue)
  81.         }
  82.     }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement