Skip to content
Snippets Groups Projects
CMixManagerCreate.swift 1.32 KiB
Newer Older
Dariusz Rybicki's avatar
Dariusz Rybicki committed
import Foundation
Dariusz Rybicki's avatar
Dariusz Rybicki committed
import XCTestDynamicOverlay

Dariusz Rybicki's avatar
Dariusz Rybicki committed
public struct CMixManagerCreate {
  public var run: () throws -> CMix
Dariusz Rybicki's avatar
Dariusz Rybicki committed
  public func callAsFunction() throws -> CMix {
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    try run()
  }
}

Dariusz Rybicki's avatar
Dariusz Rybicki committed
extension CMixManagerCreate {
Dariusz Rybicki's avatar
Dariusz Rybicki committed
  public static func live(
    ndfEnvironment: NDFEnvironment,
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    downloadNDF: DownloadAndVerifySignedNdf,
    generateSecret: GenerateSecret,
    passwordStorage: PasswordStorage,
    directoryPath: String,
    fileManager: FileManager,
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    newCMix: NewCMix,
    getCMixParams: GetCMixParams = .liveDefault,
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    loadCMix: LoadCMix
  ) -> CMixManagerCreate {
    CMixManagerCreate {
      let ndfData = try downloadNDF(ndfEnvironment)
Dariusz Rybicki's avatar
Dariusz Rybicki committed
      let password = generateSecret()
      try passwordStorage.save(password)
      try? fileManager.removeItem(atPath: directoryPath)
      try? fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true)
Dariusz Rybicki's avatar
Dariusz Rybicki committed
      try newCMix(
Dariusz Rybicki's avatar
Dariusz Rybicki committed
        ndfJSON: String(data: ndfData, encoding: .utf8)!,
        storageDir: directoryPath,
        password: password,
        registrationCode: nil
      )
Dariusz Rybicki's avatar
Dariusz Rybicki committed
      return try loadCMix(
Dariusz Rybicki's avatar
Dariusz Rybicki committed
        storageDir: directoryPath,
        password: password,
Dariusz Rybicki's avatar
Dariusz Rybicki committed
        cMixParamsJSON: getCMixParams()
Dariusz Rybicki's avatar
Dariusz Rybicki committed
extension CMixManagerCreate {
  public static let unimplemented = CMixManagerCreate(
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    run: XCTUnimplemented("\(Self.self)")
  )
}