48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Swift
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Swift
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/swift
 | |
| 
 | |
| import Foundation
 | |
| 
 | |
| struct SwiftErr: TextOutputStream {
 | |
|     public static var stream = SwiftErr()
 | |
| 
 | |
|     mutating func write(_ string: String) {
 | |
|         fputs(string, stderr)
 | |
|     }
 | |
| }
 | |
| 
 | |
| // TODO: tell which arguments have to be provided
 | |
| guard CommandLine.arguments.count >= 4 else {
 | |
|     exit(2)
 | |
| }
 | |
| 
 | |
| var dataLocationURL = URL(fileURLWithPath: CommandLine.arguments[1])
 | |
| 
 | |
| let quarantineProperties: [String: Any] = [
 | |
|     kLSQuarantineAgentNameKey as String: "Homebrew Cask",
 | |
|     kLSQuarantineTypeKey as String: kLSQuarantineTypeWebDownload,
 | |
|     kLSQuarantineDataURLKey as String: CommandLine.arguments[2],
 | |
|     kLSQuarantineOriginURLKey as String: CommandLine.arguments[3]
 | |
| ]
 | |
| 
 | |
| // Check for if the data location URL is reachable
 | |
| do {
 | |
|     let isDataLocationURLReachable = try dataLocationURL.checkResourceIsReachable()
 | |
|     guard isDataLocationURLReachable else {
 | |
|         print("URL \(dataLocationURL.path) is not reachable. Not proceeding.", to: &SwiftErr.stream)
 | |
|         exit(1)
 | |
|     }
 | |
| } catch {
 | |
|     print(error.localizedDescription, to: &SwiftErr.stream)
 | |
|     exit(1)
 | |
| }
 | |
| 
 | |
| // Quarantine the file
 | |
| do {
 | |
|     var resourceValues = URLResourceValues()
 | |
|     resourceValues.quarantineProperties = quarantineProperties
 | |
|     try dataLocationURL.setResourceValues(resourceValues)
 | |
| } catch {
 | |
|     print(error.localizedDescription, to: &SwiftErr.stream)
 | |
|     exit(1)
 | |
| }
 | 
