Skip to content
Snippets Groups Projects
Commit 081777fb authored by Bruno Muniz's avatar Bruno Muniz :apple:
Browse files

Working on integrating backup

parent 1883eb92
No related branches found
No related tags found
2 merge requests!54Releasing 1.1.4,!42Adding SFTP as a service to backup/restore
...@@ -2,6 +2,7 @@ import UIKit ...@@ -2,6 +2,7 @@ import UIKit
import Models import Models
import Combine import Combine
import Defaults import Defaults
import Keychain
import SFTPFeature import SFTPFeature
import iCloudFeature import iCloudFeature
import DropboxFeature import DropboxFeature
...@@ -14,6 +15,7 @@ public final class BackupService { ...@@ -14,6 +15,7 @@ public final class BackupService {
@Dependency private var icloudService: iCloudInterface @Dependency private var icloudService: iCloudInterface
@Dependency private var dropboxService: DropboxInterface @Dependency private var dropboxService: DropboxInterface
@Dependency private var networkManager: NetworkMonitoring @Dependency private var networkManager: NetworkMonitoring
@Dependency private var keychainHandler: KeychainHandling
@Dependency private var driveService: GoogleDriveInterface @Dependency private var driveService: GoogleDriveInterface
@KeyObject(.backupSettings, defaultValue: Data()) private var storedSettings: Data @KeyObject(.backupSettings, defaultValue: Data()) private var storedSettings: Data
...@@ -207,25 +209,25 @@ extension BackupService { ...@@ -207,25 +209,25 @@ extension BackupService {
} }
if sftpService.isAuthorized() { if sftpService.isAuthorized() {
let host = "" if let keychain = try? DependencyInjection.Container.shared.resolve() as KeychainHandling,
let username = "" let pwd = try? keychain.get(key: .pwd),
let password = "" let host = try? keychain.get(key: .host),
let username = try? keychain.get(key: .username) {
let completion: SFTPFetchResult = { result in
switch result { let completion: SFTPFetchResult = { [weak settings] result in
case .success(let settings): guard let settings = settings else { return }
if let settings = settings {
print("") switch result {
} else { case .success(let backupSettings):
print("") settings.value.backups[.sftp] = backupSettings?.backup
case .failure(let error):
print(error.localizedDescription)
} }
case .failure(let error):
print(error.localizedDescription)
} }
}
let authParams = SFTPAuthParams(host, username, password) let authParams = SFTPAuthParams(host, username, pwd)
sftpService.fetch((authParams, completion)) sftpService.fetch((authParams, completion))
}
} }
if dropboxService.isAuthorized() { if dropboxService.isAuthorized() {
...@@ -326,7 +328,11 @@ extension BackupService { ...@@ -326,7 +328,11 @@ extension BackupService {
// try? FileManager.default.removeItem(at: url) // try? FileManager.default.removeItem(at: url)
} }
case .sftp: case .sftp:
break // TODO do {
try sftpService.upload(url)
} catch {
print(error.localizedDescription)
}
} }
} }
} }
...@@ -32,11 +32,11 @@ public struct MockNetworkMonitor: NetworkMonitoring { ...@@ -32,11 +32,11 @@ public struct MockNetworkMonitor: NetworkMonitoring {
statusRelay.send(status) statusRelay.send(status)
if status == .available { if status == .available {
DispatchQueue.main.asyncAfter(deadline: .now() + 3) { DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
simulateOscilation(.internetNotAvailable) simulateOscilation(.internetNotAvailable)
} }
} else if status == .internetNotAvailable { } else if status == .internetNotAvailable {
DispatchQueue.main.asyncAfter(deadline: .now() + 3) { DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
simulateOscilation(.available) simulateOscilation(.available)
} }
} }
......
...@@ -10,6 +10,7 @@ public typealias SFTPFetchParams = (SFTPAuthParams, SFTPFetchResult) ...@@ -10,6 +10,7 @@ public typealias SFTPFetchParams = (SFTPAuthParams, SFTPFetchResult)
public struct SFTPService { public struct SFTPService {
public var isAuthorized: () -> Bool public var isAuthorized: () -> Bool
public var upload: (URL) throws -> Void
public var fetch: (SFTPFetchParams) -> Void public var fetch: (SFTPFetchParams) -> Void
public var download: (String) throws -> Void public var download: (String) throws -> Void
public var justAuthenticate: (SFTPAuthParams) throws -> Void public var justAuthenticate: (SFTPAuthParams) throws -> Void
...@@ -18,15 +19,29 @@ public struct SFTPService { ...@@ -18,15 +19,29 @@ public struct SFTPService {
public extension SFTPService { public extension SFTPService {
static var mock = SFTPService( static var mock = SFTPService(
isAuthorized: { isAuthorized: {
true print("^^^ Requested auth status on sftp service")
return true
},
upload: { url in
print("^^^ Requested upload on sftp service")
print("^^^ URL path: \(url.path)")
}, },
fetch: { (authParams, completion) in fetch: { (authParams, completion) in
print("^^^ Requested backup metadata on sftp service.")
print("^^^ Host: \(authParams.0)")
print("^^^ Username: \(authParams.1)")
print("^^^ Password: \(authParams.2)")
completion(.success(nil)) completion(.success(nil))
}, },
download: { path in download: { path in
print("^^^ Requested backup download on sftp service.")
print("^^^ Path: \(path)")
}, },
justAuthenticate: { host, username, password in justAuthenticate: { host, username, password in
print("^^^ Requested to authenticate on sftp service")
print("^^^ Host: \(host)")
print("^^^ Username: \(username)")
print("^^^ Password: \(password)")
}) })
static var live = SFTPService( static var live = SFTPService(
...@@ -40,6 +55,18 @@ public extension SFTPService { ...@@ -40,6 +55,18 @@ public extension SFTPService {
return false return false
} }
}, },
upload: { url in
let keychain = try DependencyInjection.Container.shared.resolve() as KeychainHandling
let host = try keychain.get(key: .host)
let password = try keychain.get(key: .pwd)
let username = try keychain.get(key: .username)
let ssh = try SSH(host: host!, port: 22)
try ssh.authenticate(username: username!, password: password!)
let sftp = try ssh.openSftp()
try sftp.upload(localURL: url, remotePath: "backup/backup.xxm")
},
fetch: { (authParams, completion) in fetch: { (authParams, completion) in
let host = authParams.0 let host = authParams.0
let username = authParams.1 let username = authParams.1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment