mirror of
https://github.com/jkcoxson/LocalDevVPN.git
synced 2026-03-02 06:26:16 +01:00
Adds URL scheme
Adds the ability to start and stop the VPN connection via a custom URL scheme.
This commit is contained in:
@@ -2,6 +2,17 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>CFBundleURLTypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleURLName</key>
|
||||||
|
<string>com.localdevvpn</string>
|
||||||
|
<key>CFBundleURLSchemes</key>
|
||||||
|
<array>
|
||||||
|
<string>localdevvpn</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
<key>NSBonjourServices</key>
|
<key>NSBonjourServices</key>
|
||||||
<array>
|
<array>
|
||||||
<string>_apple-mobdev2._tcp</string>
|
<string>_apple-mobdev2._tcp</string>
|
||||||
|
|||||||
@@ -12,6 +12,38 @@ struct LocalDevVPNApp: App {
|
|||||||
var body: some Scene {
|
var body: some Scene {
|
||||||
WindowGroup {
|
WindowGroup {
|
||||||
ContentView()
|
ContentView()
|
||||||
|
.onOpenURL { url in
|
||||||
|
handleURL(url)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func handleURL(_ url: URL) {
|
||||||
|
guard url.scheme == "localdevvpn" else { return }
|
||||||
|
|
||||||
|
let tunnelManager = TunnelManager.shared
|
||||||
|
|
||||||
|
switch url.host {
|
||||||
|
case "enable":
|
||||||
|
tunnelManager.startVPN()
|
||||||
|
if let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
|
||||||
|
let schemeParam = components.queryItems?.first(where: { $0.name == "scheme" })?.value {
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
|
||||||
|
let callbackURL = URL(string: "\(schemeParam)://")!
|
||||||
|
UIApplication.shared.open(callbackURL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "disable":
|
||||||
|
tunnelManager.stopVPN()
|
||||||
|
if let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
|
||||||
|
let schemeParam = components.queryItems?.first(where: { $0.name == "scheme" })?.value {
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
|
||||||
|
let callbackURL = URL(string: "\(schemeParam)://")!
|
||||||
|
UIApplication.shared.open(callbackURL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user