guardia-messenger/node_modules/expo-modules-core/ios/FileSystemUtilities/FileSystemUtilities.swift
DESKTOP-TKLFCPRython f29f525c77 refactor: 101.79.17.164 → zioinfo.co.kr 전체 도메인 변환 + Manager UI 배포
- 37개 파일 IP → zioinfo.co.kr 치환 (소스/매뉴얼/설정/하네스)
- Manager DrConsole/NetworkConsole/CsapConsole 빌드 + /var/www/manager/ 배포
- 테스트: Manager HTTP 200, ITSM 신규 API 7개 전체 200

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 10:09:17 +09:00

101 lines
2.8 KiB
Swift

import Foundation
public enum FileSystemPermissionFlags {
case none
case read
case write
}
public struct FileSystemUtilities {
@discardableResult
public static func ensureDirExists(at url: URL?) -> Bool {
guard let url else {
return false
}
let exists = FileManager.default.fileExists(atPath: url.path)
if !exists {
do {
try FileManager.default.createDirectory(atPath: url.path, withIntermediateDirectories: true)
} catch {
return false
}
}
return true
}
public static func generatePathInCache(_ appContext: AppContext?, in directory: String, extension: String) -> String {
guard let appContext, let dirPath = appContext.config.cacheDirectory?.appendingPathComponent(directory) else {
return ""
}
let fileName = UUID().uuidString.appending(`extension`)
ensureDirExists(at: dirPath)
return dirPath.appendingPathComponent(fileName).path
}
public static func permissions(_ appContext: AppContext?, for uri: URL) -> [FileSystemPermissionFlags] {
guard let scheme = uri.scheme else {
return [.none]
}
let validSchemas = ["assets-library", "http", "https", "ph"]
if validSchemas.contains(scheme) {
return [.read]
}
if scheme == "file" {
return getPathPermissions(appContext, for: uri)
}
return [.none]
}
private static func getPathPermissions(_ appContext: AppContext?, for path: URL) -> [FileSystemPermissionFlags] {
let permissionForInternalDirs = getInternalPathPermissions(appContext, for: path)
if !permissionForInternalDirs.contains(.none) {
return permissionForInternalDirs
}
return getExternalPathPermissions(path)
}
private static func getInternalPathPermissions(_ appContext: AppContext?, for url: URL) -> [FileSystemPermissionFlags] {
guard let appContext else {
return [.none]
}
let scopedDirs = [appContext.config.cacheDirectory, appContext.config.documentDirectory]
let standardizedPath = url.standardized.path
for dir in scopedDirs {
guard let dir else {
continue
}
if standardizedPath.hasPrefix(dir.appendingPathComponent("/").absoluteString) || standardizedPath == dir.absoluteString {
return [.read, .write]
}
}
let bundleDirectory = Bundle.main.bundlePath
if url.path.hasPrefix(bundleDirectory + "/") {
return [.read]
}
return [.none]
}
private static func getExternalPathPermissions(_ url: URL) -> [FileSystemPermissionFlags] {
var filePermissions: [FileSystemPermissionFlags] = []
if FileManager.default.isReadableFile(atPath: url.path) {
filePermissions.append(.read)
}
if FileManager.default.isWritableFile(atPath: url.path) {
filePermissions.append(.write)
}
return filePermissions
}
}