Ivan Valkou пре 5 година
родитељ
комит
166f95320f

+ 1 - 3
FreeAPS/Sources/Models/User.swift

@@ -1,7 +1,5 @@
 import Foundation
 
 struct User: Codable {
-    var id: UUID?
-    var name: String
-    var email: String
+    var id: UUID
 }

+ 1 - 3
FreeAPS/Sources/Modules/AuthotizedRoot/AuthotizedRootProvider.swift

@@ -1,5 +1,3 @@
 extension AuthotizedRoot {
-    final class Provider: BaseProvider, AuthotizedRootProvider {
-        @Injected() var authorizationManager: AuthorizationManager!
-    }
+    final class Provider: BaseProvider, AuthotizedRootProvider {}
 }

+ 13 - 11
FreeAPS/Sources/Modules/Base/BaseProvider.swift

@@ -10,20 +10,22 @@ protocol Provider {
 class BaseProvider: Provider, Injectable {
     let user = CurrentValueSubject<User?, Never>(nil)
     var lifetime = Set<AnyCancellable>()
+    @Injected() var authorizationManager: AuthorizationManager!
+
     required init(resolver: Resolver) {
         injectServices(resolver)
-        makeTestUser()
+        subscribe()
     }
-}
-
-extension BaseProvider {
-    func makeTestUser() {
-        let user = User(
-            id: UUID(),
-            name: "Vasiliy",
-            email: "example@mail.ru"
-        )
 
-        self.user.send(user)
+    private func subscribe() {
+        authorizationManager.credentials
+            .map { credentials -> User? in
+                guard let credentials = credentials else { return nil }
+                return User(id: credentials.id)
+            }
+            .sink { user in
+                self.user.send(user)
+            }
+            .store(in: &lifetime)
     }
 }

+ 0 - 1
FreeAPS/Sources/Modules/Login/LoginProvider.swift

@@ -2,7 +2,6 @@ import AuthenticationServices
 
 extension Login {
     final class Provider: BaseProvider, LoginProvider {
-        @Injected() var authorizationManager: AuthorizationManager!
         @Injected() private var keychain: Keychain!
 
         func authorize(credentials: Credentials) {

+ 1 - 3
FreeAPS/Sources/Modules/Main/MainProvider.swift

@@ -1,7 +1,5 @@
 import Combine
 
 extension Main {
-    final class Provider: BaseProvider, MainProvider {
-        @Injected() var authorizationManager: AuthorizationManager!
-    }
+    final class Provider: BaseProvider, MainProvider {}
 }

+ 0 - 2
FreeAPS/Sources/Modules/Settings/SettingsProvider.swift

@@ -1,7 +1,5 @@
 extension Settings {
     final class Provider: BaseProvider, SettingsProvider {
-        @Injected() var authorizationManager: AuthorizationManager!
-
         func logout() {
             authorizationManager.logout()
         }

+ 6 - 1
FreeAPS/Sources/Services/AuthorizationManager/AuthorizationManager.swift

@@ -5,6 +5,7 @@ import Swinject
 protocol AuthorizationManager {
     var isAuthorized: Bool { get }
     var authorizationPublisher: AnyPublisher<Bool, Never> { get }
+    var credentials: CurrentValueSubject<Credentials?, Never> { get }
     func authorize(credentials: Credentials) -> AnyPublisher<Void, Never>
     func logout()
 }
@@ -15,6 +16,8 @@ final class BaseAuthorizationManager: AuthorizationManager, Injectable {
     var authorizationPublisher: AnyPublisher<Bool, Never> { isAuthorizedSubject.eraseToAnyPublisher() }
     var isAuthorized: Bool { isAuthorizedSubject.value }
 
+    let credentials = CurrentValueSubject<Credentials?, Never>(nil)
+
     private var lifetime = Set<AnyCancellable>()
 
     @Injected() private var keychain: Keychain!
@@ -23,8 +26,9 @@ final class BaseAuthorizationManager: AuthorizationManager, Injectable {
         injectServices(resolver)
     }
 
-    func authorize(credentials _: Credentials) -> AnyPublisher<Void, Never> {
+    func authorize(credentials: Credentials) -> AnyPublisher<Void, Never> {
         isAuthorizedSubject.send(true)
+        self.credentials.send(credentials)
         return Just(()).eraseToAnyPublisher()
     }
 
@@ -33,6 +37,7 @@ final class BaseAuthorizationManager: AuthorizationManager, Injectable {
             .sink(
                 receiveCompletion: { _ in
                     self.isAuthorizedSubject.send(false)
+                    self.credentials.send(nil)
                 },
                 receiveValue: {}
             )