Add source code
This commit is contained in:
parent
69c08de01c
commit
0416d157d7
14 changed files with 1672 additions and 0 deletions
56
TetheringHider/Services/SystemCommandService.swift
Normal file
56
TetheringHider/Services/SystemCommandService.swift
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
import Foundation
|
||||
|
||||
enum SystemCommandError: LocalizedError {
|
||||
case executionFailed(String)
|
||||
case userCancelledAuth
|
||||
case scriptError(String)
|
||||
|
||||
var errorDescription: String? {
|
||||
switch self {
|
||||
case .executionFailed(let reason):
|
||||
return "Command failed: \(reason)"
|
||||
case .userCancelledAuth:
|
||||
return "Administrator authentication was cancelled."
|
||||
case .scriptError(let detail):
|
||||
return "Script error: \(detail)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct SystemCommandService: Sendable {
|
||||
|
||||
/// Sets IPv4 TTL, IPv6 Hop Limit, and flushes system DNS cache with administrator privileges.
|
||||
func setTTL(_ value: Int) async throws {
|
||||
let command = "sysctl -w net.inet.ip.ttl=\(value) && sysctl -w net.inet6.ip6.hlim=\(value) && dscacheutil -flushcache && killall -HUP mDNSResponder"
|
||||
try await executeWithAdminPrivileges(command)
|
||||
}
|
||||
|
||||
/// Resets IPv4 TTL and IPv6 Hop Limit to default (64) and flushes DNS cache.
|
||||
func resetTTL() async throws {
|
||||
try await setTTL(64)
|
||||
}
|
||||
|
||||
/// Executes a shell command with administrator privileges via NSAppleScript
|
||||
@MainActor
|
||||
private func executeWithAdminPrivileges(_ command: String) async throws {
|
||||
let scriptSource = "do shell script \"\(command)\" with administrator privileges"
|
||||
|
||||
guard let script = NSAppleScript(source: scriptSource) else {
|
||||
throw SystemCommandError.scriptError("Failed to create AppleScript.")
|
||||
}
|
||||
|
||||
var errorDict: NSDictionary?
|
||||
script.executeAndReturnError(&errorDict)
|
||||
|
||||
if let error = errorDict {
|
||||
let errorNumber = error[NSAppleScript.errorNumber] as? Int ?? -1
|
||||
let errorMessage = error[NSAppleScript.errorMessage] as? String ?? "Unknown error"
|
||||
|
||||
if errorNumber == -128 {
|
||||
throw SystemCommandError.userCancelledAuth
|
||||
}
|
||||
|
||||
throw SystemCommandError.executionFailed(errorMessage)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue