Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -250,8 +250,10 @@ static void initConf(DigiDocConfig *conf, NSString *userAgent, void (^completion
}

void updateConfiguration(DigiDocConfig *conf) {
DigiDocConfCurrent *newCurrentConf = new DigiDocConfCurrent(conf);
digidoc::Conf::init(newCurrentConf);
dispatch_async(dispatch_get_main_queue(), ^{
DigiDocConfCurrent *newCurrentConf = new DigiDocConfCurrent(conf);
digidoc::Conf::init(newCurrentConf);
});
}

static void setTSUrl(NSURL *tsaUrl) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ virtual bool validateOnline() const override {
@implementation DigiDocContainerWrapper {}

+ (void)dispatch:(void (^)(void))command completion:(void (^)(NSError *error))completion {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSError *error = nil;

try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,12 @@ - (void)addSignature:(NSData *)data completion:(void (^)(BOOL success, NSError *
NSLocalizedDescriptionKey: @"Did not find signature"
}];
if (completion) completion(NO, error);
return;
}

if (auto timeStampTime = _signature->TimeStampTime(); !timeStampTime.empty()) {
if (completion) completion(YES, error);
return;
}

try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ public struct DigiDocConf: DigiDocConfProtocol, Loggable {
public actor DigiDocInitializer: Loggable {
private var isInitialized = false
private var initializationError: ErrorDetail?
private var isInitializing = false
private var initializationWaiters: [CheckedContinuation<Void, Error>] = []

private let configurationRepository: ConfigurationRepositoryProtocol
private let fileManager: FileManagerProtocol
Expand All @@ -195,30 +197,50 @@ public actor DigiDocInitializer: Loggable {
userAgent: String
) async throws {

guard !isInitialized else {
if isInitialized {
throw DigiDocError.alreadyInitialized
}

if isInitializing {
try await withCheckedThrowingContinuation { continuation in
initializationWaiters.append(continuation)
}
throw DigiDocError.alreadyInitialized
}

isInitializing = true

let logLevel = isLoggingEnabled ? DigiDocInitializer.libdigidocppLogLevel : 0

if let customConf = configuration {
try await initDigiDoc(
conf: toDigiDocConfig(
logLevel: logLevel,
logFile: overrideLogFile(),
tslCache: overrideTSLCache(),
configurationProvider: customConf
),
userAgent: userAgent
)
} else {
digidocConf.logLevel = overrideLogLevel(logLevel: logLevel)
try await initDigiDoc(
conf: digidocConf,
userAgent: userAgent
)
do {
if let customConf = configuration {
try await initDigiDoc(
conf: toDigiDocConfig(
logLevel: logLevel,
logFile: overrideLogFile(),
tslCache: overrideTSLCache(),
configurationProvider: customConf
),
userAgent: userAgent
)
} else {
digidocConf.logLevel = overrideLogLevel(logLevel: logLevel)
digidocConf.logFile = overrideLogFile()
digidocConf.tslcache = overrideTSLCache()
try await initDigiDoc(conf: digidocConf, userAgent: userAgent)
}
isInitialized = true
isInitializing = false
let waiters = initializationWaiters
initializationWaiters.removeAll()
waiters.forEach { $0.resume() }
} catch {
isInitializing = false
let waiters = initializationWaiters
initializationWaiters.removeAll()
waiters.forEach { $0.resume(throwing: error) }
throw error
}
isInitialized = true
}

func toDigiDocConfig(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public actor ContainerWrapper: ContainerWrapperProtocol, Loggable {

private let fileManager: FileManagerProtocol

@MainActor
private let digiDocSigningWrapper: DigiDocSigningWrapper = DigiDocSigningWrapper()

public init(
Expand Down Expand Up @@ -188,6 +189,7 @@ public actor ContainerWrapper: ContainerWrapperProtocol, Loggable {
}
}

@MainActor
@discardableResult
public func removeSignature(index: Int, containerFile: URL) async throws -> ContainerWrapperProtocol {
do {
Expand All @@ -207,6 +209,7 @@ public actor ContainerWrapper: ContainerWrapperProtocol, Loggable {
}
}

@MainActor
@discardableResult
public func removeDataFile(index: Int, containerFile: URL) async throws -> ContainerWrapperProtocol {
do {
Expand All @@ -226,6 +229,7 @@ public actor ContainerWrapper: ContainerWrapperProtocol, Loggable {
}
}

@MainActor
public func prepareSignature(
cert: Data,
containerPath: URL,
Expand All @@ -247,6 +251,7 @@ public actor ContainerWrapper: ContainerWrapperProtocol, Loggable {
)
}

@MainActor
public func addSignature(signature: Data, containerFile: URL) async throws -> ContainerWrapperProtocol {

do {
Expand Down
11 changes: 11 additions & 0 deletions RIADigiDocTests/ViewModel/SigningViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,17 @@ struct SigningViewModelTests: Loggable {
sivaRepository: mockSivaRepository,
containerUtil: mockContainerUtil
)

do {
try await DigiDocConf.initDigiDoc(userAgent: "TestUserAgent")
} catch let error as DigiDocError {
switch error {
case .alreadyInitialized:
break
default:
Issue.record("DigiDocConf initialization failed: \(error.localizedDescription)")
}
}
}

@Test
Expand Down
Loading