diff options
Diffstat (limited to 'Sources/Shared/FileManager+Extension.swift')
-rw-r--r-- | Sources/Shared/FileManager+Extension.swift | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Sources/Shared/FileManager+Extension.swift b/Sources/Shared/FileManager+Extension.swift new file mode 100644 index 0000000..48fa33f --- /dev/null +++ b/Sources/Shared/FileManager+Extension.swift @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +// Copyright © 2018-2023 WireGuard LLC. All Rights Reserved. + +import Foundation +import os.log + +extension FileManager { + static var appGroupId: String? { + #if os(iOS) + let appGroupIdInfoDictionaryKey = "com.wireguard.ios.app_group_id" + #elseif os(macOS) + let appGroupIdInfoDictionaryKey = "com.wireguard.macos.app_group_id" + #else + #error("Unimplemented") + #endif + return Bundle.main.object(forInfoDictionaryKey: appGroupIdInfoDictionaryKey) as? String + } + private static var sharedFolderURL: URL? { + guard let appGroupId = FileManager.appGroupId else { + os_log("Cannot obtain app group ID from bundle", log: OSLog.default, type: .error) + return nil + } + guard let sharedFolderURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroupId) else { + wg_log(.error, message: "Cannot obtain shared folder URL") + return nil + } + return sharedFolderURL + } + + static var logFileURL: URL? { + return sharedFolderURL?.appendingPathComponent("tunnel-log.bin") + } + + static var networkExtensionLastErrorFileURL: URL? { + return sharedFolderURL?.appendingPathComponent("last-error.txt") + } + + static var loginHelperTimestampURL: URL? { + return sharedFolderURL?.appendingPathComponent("login-helper-timestamp.bin") + } + + static func deleteFile(at url: URL) -> Bool { + do { + try FileManager.default.removeItem(at: url) + } catch { + return false + } + return true + } +} |