diff --git a/OpenVPN Adapter.xcodeproj/project.pbxproj b/OpenVPN Adapter.xcodeproj/project.pbxproj index 86b0f5e..c119a7b 100644 --- a/OpenVPN Adapter.xcodeproj/project.pbxproj +++ b/OpenVPN Adapter.xcodeproj/project.pbxproj @@ -79,6 +79,12 @@ C9BB47911E71821A00F3F98C /* OpenVPNAdapterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BB47901E71821A00F3F98C /* OpenVPNAdapterTests.swift */; }; C9BB47931E71821A00F3F98C /* OpenVPNAdapter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9BB475C1E71663A00F3F98C /* OpenVPNAdapter.framework */; }; C9BB47A21E7183DB00F3F98C /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BB47A11E7183DB00F3F98C /* Bundle.swift */; }; + C9BCE2581EB3C0D9009D6AC1 /* OpenVPNSessionToken.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BCE2561EB3C0D9009D6AC1 /* OpenVPNSessionToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9BCE2591EB3C0D9009D6AC1 /* OpenVPNSessionToken.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BCE2561EB3C0D9009D6AC1 /* OpenVPNSessionToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9BCE25A1EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9BCE2571EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm */; }; + C9BCE25B1EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9BCE2571EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm */; }; + C9BCE25E1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BCE25C1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h */; }; + C9BCE25F1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BCE25C1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h */; }; C9D2ABDB1EA20F99007EDF9D /* OpenVPNAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9BB477E1E7173C700F3F98C /* OpenVPNAdapter.mm */; }; C9D2ABDC1EA20F99007EDF9D /* OpenVPNClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9BB47781E7171ED00F3F98C /* OpenVPNClient.mm */; }; C9D2ABDE1EA20F99007EDF9D /* ovpncli.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9FD92191E9A667600374FC4 /* ovpncli.cpp */; }; @@ -168,6 +174,9 @@ C9BB478E1E71821A00F3F98C /* OpenVPN Adapter iOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OpenVPN Adapter iOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C9BB47901E71821A00F3F98C /* OpenVPNAdapterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenVPNAdapterTests.swift; sourceTree = ""; }; C9BB47A11E7183DB00F3F98C /* Bundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = ""; }; + C9BCE2561EB3C0D9009D6AC1 /* OpenVPNSessionToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNSessionToken.h; sourceTree = ""; }; + C9BCE2571EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNSessionToken.mm; sourceTree = ""; }; + C9BCE25C1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenVPNSessionToken+Internal.h"; sourceTree = ""; }; C9D2ABF01EA20F99007EDF9D /* OpenVPNAdapter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OpenVPNAdapter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C9D2ABFF1EA212A3007EDF9D /* OpenVPN Adapter macOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OpenVPN Adapter macOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C9FD92181E9A667600374FC4 /* ovpncli.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ovpncli.hpp; path = Vendors/openvpn/client/ovpncli.hpp; sourceTree = ""; }; @@ -276,12 +285,15 @@ name = Configuration; sourceTree = ""; }; - C9235AC51EB24F1100C7D303 /* Stats */ = { + C9235AC51EB24F1100C7D303 /* Info */ = { isa = PBXGroup; children = ( C9657A151EB0A7F800EFF210 /* OpenVPNConnectionInfo.h */, C9657A1B1EB0A8D800EFF210 /* OpenVPNConnectionInfo+Internal.h */, C9657A161EB0A7F800EFF210 /* OpenVPNConnectionInfo.mm */, + C9BCE2561EB3C0D9009D6AC1 /* OpenVPNSessionToken.h */, + C9BCE25C1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h */, + C9BCE2571EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm */, C9657A231EB0B60200EFF210 /* OpenVPNTransportStats.h */, C9657A291EB0B6FA00EFF210 /* OpenVPNTransportStats+Internal.h */, C9657A241EB0B60200EFF210 /* OpenVPNTransportStats.mm */, @@ -289,7 +301,7 @@ C9657A381EB0BAAB00EFF210 /* OpenVPNInterfaceStats+Internal.h */, C9657A331EB0BA3900EFF210 /* OpenVPNInterfaceStats.mm */, ); - name = Stats; + name = Info; sourceTree = ""; }; C9235AC61EB24F2A00C7D303 /* Types */ = { @@ -347,7 +359,7 @@ children = ( C9235AC61EB24F2A00C7D303 /* Types */, C9235AC41EB24F0100C7D303 /* Configuration */, - C9235AC51EB24F1100C7D303 /* Stats */, + C9235AC51EB24F1100C7D303 /* Info */, C9BB477B1E7173C700F3F98C /* OpenVPNAdapter.h */, C9BB477C1E7173C700F3F98C /* OpenVPNAdapter+Internal.h */, C9BB477D1E7173C700F3F98C /* OpenVPNAdapter+Public.h */, @@ -434,10 +446,12 @@ files = ( C9BB47791E7171ED00F3F98C /* OpenVPNClient.h in Headers */, C9657A3A1EB0BAAB00EFF210 /* OpenVPNInterfaceStats+Internal.h in Headers */, + C9BCE25E1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h in Headers */, C9BB47721E7171A100F3F98C /* OpenVPNEvent.h in Headers */, C9BB477F1E7173C700F3F98C /* OpenVPNAdapter.h in Headers */, C9657A4C1EB0CD6C00EFF210 /* OpenVPNProperties.h in Headers */, C9657A571EB0CDFB00EFF210 /* OpenVPNProperties+Internal.h in Headers */, + C9BCE2581EB3C0D9009D6AC1 /* OpenVPNSessionToken.h in Headers */, C9657A341EB0BA3900EFF210 /* OpenVPNInterfaceStats.h in Headers */, C9657A401EB0CAC200EFF210 /* OpenVPNServerEntry.h in Headers */, C98467AB1EAA5BE100272A9A /* OpenVPNConfiguration+Internal.h in Headers */, @@ -468,10 +482,12 @@ files = ( C9D2ABE31EA20F99007EDF9D /* OpenVPNClient.h in Headers */, C9657A3B1EB0BAAB00EFF210 /* OpenVPNInterfaceStats+Internal.h in Headers */, + C9BCE25F1EB3C201009D6AC1 /* OpenVPNSessionToken+Internal.h in Headers */, C9D2ABE41EA20F99007EDF9D /* OpenVPNEvent.h in Headers */, C9D2ABE51EA20F99007EDF9D /* OpenVPNAdapter.h in Headers */, C9657A4D1EB0CD6C00EFF210 /* OpenVPNProperties.h in Headers */, C9657A561EB0CDFA00EFF210 /* OpenVPNProperties+Internal.h in Headers */, + C9BCE2591EB3C0D9009D6AC1 /* OpenVPNSessionToken.h in Headers */, C9657A351EB0BA3900EFF210 /* OpenVPNInterfaceStats.h in Headers */, C9657A411EB0CAC200EFF210 /* OpenVPNServerEntry.h in Headers */, C98467AC1EAA5BE200272A9A /* OpenVPNConfiguration+Internal.h in Headers */, @@ -691,6 +707,7 @@ buildActionMask = 2147483647; files = ( C9657A421EB0CAC200EFF210 /* OpenVPNServerEntry.mm in Sources */, + C9BCE25A1EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm in Sources */, C9BB47821E7173C700F3F98C /* OpenVPNAdapter.mm in Sources */, C98467A81EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */, C9657A311EB0B7A900EFF210 /* OpenVPNTransportStats.mm in Sources */, @@ -719,6 +736,7 @@ buildActionMask = 2147483647; files = ( C9657A431EB0CAC200EFF210 /* OpenVPNServerEntry.mm in Sources */, + C9BCE25B1EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm in Sources */, C9D2ABDB1EA20F99007EDF9D /* OpenVPNAdapter.mm in Sources */, C98467A91EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */, C9657A301EB0B7A600EFF210 /* OpenVPNTransportStats.mm in Sources */, diff --git a/OpenVPN Adapter/OpenVPNSessionToken+Internal.h b/OpenVPN Adapter/OpenVPNSessionToken+Internal.h new file mode 100644 index 0000000..667bf3b --- /dev/null +++ b/OpenVPN Adapter/OpenVPNSessionToken+Internal.h @@ -0,0 +1,19 @@ +// +// OpenVPNSessionToken+Internal.h +// OpenVPN Adapter +// +// Created by Sergey Abramchuk on 28.04.17. +// +// + +#import + +#import "OpenVPNSessionToken.h" + +using namespace openvpn; + +@interface OpenVPNSessionToken (Internal) + +- (instancetype)initWithSessionToken:(ClientAPI::SessionToken)token; + +@end diff --git a/OpenVPN Adapter/OpenVPNSessionToken.h b/OpenVPN Adapter/OpenVPNSessionToken.h new file mode 100644 index 0000000..c7bbb42 --- /dev/null +++ b/OpenVPN Adapter/OpenVPNSessionToken.h @@ -0,0 +1,25 @@ +// +// OpenVPNSessionToken.h +// OpenVPN Adapter +// +// Created by Sergey Abramchuk on 28.04.17. +// +// + +#import + +/** + Class used to get session token from VPN core + */ +@interface OpenVPNSessionToken : NSObject + +@property (nullable, readonly, nonatomic) NSString *username; + +/** + An OpenVPN Session ID, used as a proxy for password + */ +@property (nullable, readonly, nonatomic) NSString *session; + +- (nonnull instancetype) __unavailable init; + +@end diff --git a/OpenVPN Adapter/OpenVPNSessionToken.mm b/OpenVPN Adapter/OpenVPNSessionToken.mm new file mode 100644 index 0000000..027e0f9 --- /dev/null +++ b/OpenVPN Adapter/OpenVPNSessionToken.mm @@ -0,0 +1,24 @@ +// +// OpenVPNSessionToken.m +// OpenVPN Adapter +// +// Created by Sergey Abramchuk on 28.04.17. +// +// + +#import "OpenVPNSessionToken+Internal.h" + +using namespace openvpn; + +@implementation OpenVPNSessionToken + +- (instancetype)initWithSessionToken:(ClientAPI::SessionToken)token { + self = [super init]; + if (self) { + _username = !token.username.empty() ? [NSString stringWithUTF8String:token.username.c_str()] : nil; + _session = !token.session_id.empty() ? [NSString stringWithUTF8String:token.session_id.c_str()] : nil; + } + return self; +} + +@end diff --git a/OpenVPN Adapter/Umbrella-Header.h b/OpenVPN Adapter/Umbrella-Header.h index 502099a..96c85a6 100644 --- a/OpenVPN Adapter/Umbrella-Header.h +++ b/OpenVPN Adapter/Umbrella-Header.h @@ -28,6 +28,7 @@ FOUNDATION_EXPORT const unsigned char OpenVPNAdapterVersionString[]; #import #import #import +#import #import #import #import