diff --git a/Sources/OpenVPNAdapter/OpenVPNConfiguration.h b/Sources/OpenVPNAdapter/OpenVPNConfiguration.h index 4276997..a153976 100644 --- a/Sources/OpenVPNAdapter/OpenVPNConfiguration.h +++ b/Sources/OpenVPNAdapter/OpenVPNConfiguration.h @@ -37,6 +37,26 @@ typedef NS_ENUM(NSInteger, OpenVPNTLSCertProfile); */ @property (nullable, nonatomic) NSString *guiVersion; +/** + Set to a comma seperated list of supported SSO mechanisms that may + be signalled via INFO_PRE to the client. + "openurl" is to continue authentication by opening an url in a browser + "crtext" gives a challenge response in text format that needs to + responded via control channel. + Passed to the server as IV_SSO. +*/ +@property (nullable, nonatomic) NSString *ssoMethods; + +/** + Override the string that is passed as IV_HWADDR to the server. +*/ +@property (nullable, nonatomic) NSString *hardwareAdressOverride; + +/** + Set the string that is passed to the server as IV_PLAT_VER +*/ +@property (nullable, nonatomic) NSString *platformVersion; + /** Use a different server than that specified in "remote" option of profile diff --git a/Sources/OpenVPNAdapter/OpenVPNConfiguration.mm b/Sources/OpenVPNAdapter/OpenVPNConfiguration.mm index 42565d1..99d34c8 100644 --- a/Sources/OpenVPNAdapter/OpenVPNConfiguration.mm +++ b/Sources/OpenVPNAdapter/OpenVPNConfiguration.mm @@ -260,6 +260,30 @@ NSString *const OpenVPNTLSCertProfileDefaultValue = @"default"; _config.guiVersion = guiVersion ? std::string([guiVersion UTF8String]) : ""; } +- (NSString *)ssoMethods { + return !_config.ssoMethods.empty() ? [NSString stringWithUTF8String:_config.ssoMethods.c_str()] : nil; +} + +- (void)setSsoMethods:(NSString *)ssoMethods { + _config.ssoMethods = ssoMethods ? std::string([ssoMethods UTF8String]) : ""; +} + +- (NSString *)hardwareAdressOverride { + return !_config.hwAddrOverride.empty() ? [NSString stringWithUTF8String:_config.hwAddrOverride.c_str()] : nil; +} + +- (void)setHardwareAdressOverride:(NSString *)hardwareAdressOverride { + _config.hwAddrOverride = hardwareAdressOverride ? std::string([hardwareAdressOverride UTF8String]) : ""; +} + +- (NSString *)platformVersion { + return !_config.platformVersion.empty() ? [NSString stringWithUTF8String:_config.platformVersion.c_str()] : nil; +} + +- (void)setPlatformVersion:(NSString *)platformVersion { + _config.platformVersion = platformVersion ? std::string([platformVersion UTF8String]) : ""; +} + - (NSString *)server { return !_config.serverOverride.empty() ? [NSString stringWithUTF8String:_config.serverOverride.c_str()] : nil; } @@ -481,6 +505,9 @@ NSString *const OpenVPNTLSCertProfileDefaultValue = @"default"; configuration.fileContent = [self.fileContent copyWithZone:zone]; configuration.settings = [self.settings copyWithZone:zone]; configuration.guiVersion = [self.guiVersion copyWithZone:zone]; + configuration.ssoMethods = [self.ssoMethods copyWithZone:zone]; + configuration.hardwareAdressOverride = [self.hardwareAdressOverride copyWithZone:zone]; + configuration.platformVersion = [self.platformVersion copyWithZone:zone]; configuration.server = [self.server copyWithZone:zone]; configuration.proto = self.proto; configuration.ipv6 = self.ipv6; @@ -508,6 +535,9 @@ NSString *const OpenVPNTLSCertProfileDefaultValue = @"default"; [aCoder encodeObject:self.fileContent forKey:NSStringFromSelector(@selector(fileContent))]; [aCoder encodeObject:self.settings forKey:NSStringFromSelector(@selector(settings))]; [aCoder encodeObject:self.guiVersion forKey:NSStringFromSelector(@selector(guiVersion))]; + [aCoder encodeObject:self.ssoMethods forKey:NSStringFromSelector(@selector(ssoMethods))]; + [aCoder encodeObject:self.hardwareAdressOverride forKey:NSStringFromSelector(@selector(hardwareAdressOverride))]; + [aCoder encodeObject:self.platformVersion forKey:NSStringFromSelector(@selector(platformVersion))]; [aCoder encodeObject:self.server forKey:NSStringFromSelector(@selector(server))]; [aCoder encodeInteger:self.proto forKey:NSStringFromSelector(@selector(proto))]; [aCoder encodeInteger:self.ipv6 forKey:NSStringFromSelector(@selector(ipv6))]; @@ -535,6 +565,9 @@ NSString *const OpenVPNTLSCertProfileDefaultValue = @"default"; self.fileContent = [aDecoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(fileContent))]; self.settings = [aDecoder decodeObjectOfClass:[NSDictionary class] forKey:NSStringFromSelector(@selector(settings))]; self.guiVersion = [aDecoder decodeObjectOfClass:[NSString class] forKey:NSStringFromSelector(@selector(guiVersion))]; + self.ssoMethods = [aDecoder decodeObjectOfClass:[NSString class] forKey:NSStringFromSelector(@selector(ssoMethods))]; + self.hardwareAdressOverride = [aDecoder decodeObjectOfClass:[NSString class] forKey:NSStringFromSelector(@selector(hardwareAdressOverride))]; + self.platformVersion = [aDecoder decodeObjectOfClass:[NSString class] forKey:NSStringFromSelector(@selector(platformVersion))]; self.server = [aDecoder decodeObjectOfClass:[NSString class] forKey:NSStringFromSelector(@selector(server))]; self.proto = (OpenVPNTransportProtocol)[aDecoder decodeIntegerForKey:NSStringFromSelector(@selector(proto))]; self.ipv6 = (OpenVPNIPv6Preference)[aDecoder decodeIntegerForKey:NSStringFromSelector(@selector(ipv6))];