From 82f59035747f6600b5989bab37903e4dbd039af4 Mon Sep 17 00:00:00 2001 From: pokamest Date: Thu, 11 Jul 2024 05:56:35 -0700 Subject: [PATCH] Request permissions for NE --- client/platforms/ios/ios_controller.mm | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/client/platforms/ios/ios_controller.mm b/client/platforms/ios/ios_controller.mm index 1d3b38ab..7308b178 100644 --- a/client/platforms/ios/ios_controller.mm +++ b/client/platforms/ios/ios_controller.mm @@ -11,6 +11,8 @@ #include "../protocols/vpnprotocol.h" #import "ios_controller_wrapper.h" +#include + const char* Action::start = "start"; const char* Action::restart = "restart"; const char* Action::stop = "stop"; @@ -37,6 +39,26 @@ const char* MessageKey::SplitTunnelSites = "SplitTunnelSites"; // return nil; //} +OSStatus requestAuthorization() { + AuthorizationRef authRef; + OSStatus status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authRef); + if (status != errAuthorizationSuccess) { + qDebug() << "Authorization failed with status:" << status; + return status; + } + + AuthorizationItem authItem = {kAuthorizationRightExecute, 0, NULL, 0}; + AuthorizationRights authRights = {1, &authItem}; + AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagExtendRights; + + status = AuthorizationCopyRights(authRef, &authRights, NULL, flags, NULL); + if (status != errAuthorizationSuccess) { + qDebug() << "Authorization rights copy failed with status:" << status; + } + + return status; +} + Vpn::ConnectionState iosStatusToState(NEVPNStatus status) { switch (status) { case NEVPNStatusInvalid: @@ -84,6 +106,11 @@ IosController* IosController::Instance() { bool IosController::initialize() { + if (requestAuthorization() != errAuthorizationSuccess) { + emit connectionStateChanged(Vpn::ConnectionState::Error); + return false; + } + __block bool ok = true; [NETunnelProviderManager loadAllFromPreferencesWithCompletionHandler:^(NSArray * _Nullable managers, NSError * _Nullable error) { @try {