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">
|
||||
<plist version="1.0">
|
||||
<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>
|
||||
<array>
|
||||
<string>_apple-mobdev2._tcp</string>
|
||||
|
||||
@@ -12,6 +12,38 @@ struct LocalDevVPNApp: App {
|
||||
var body: some Scene {
|
||||
WindowGroup {
|
||||
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