Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

vipera-npm-registry / de-motifconnector-plugin   js

Repository URL to install this package:

Version: 1.2.1 

/ src / ios / DEMotifConnectorPluginConfiguration.m

//
//  DEMotifPluginConfiguration.m
//  HelloCordova
//
//  Created by Marco Bonati on 06/02/2017.
//
//

#import <Foundation/Foundation.h>
#import "DEMotifConnectorPluginConfiguration.h"

#pragma mark Defines

#define MOTIFCONNECTOR_CFG_PARAM_SERVERURL              @"motif.serverUrl"
#define MOTIFCONNECTOR_CFG_PARAM_REQUESTPATH            @"motif.requestPath"
#define MOTIFCONNECTOR_CFG_PARAM_RETRYCOUNT             @"motif.retryCount"
#define MOTIFCONNECTOR_CFG_PARAM_HTTP_TIMEOUT           @"motif.httpTimeout"
#define MOTIFCONNECTOR_CFG_PARAM_RETRY_DELAY            @"motif.retryDelay"
#define MOTIFCONNECTOR_CFG_PARAM_E2E_ENCRYPTION         @"motif.end2EndEncryption"
#define MOTIFCONNECTOR_CFG_PARAM_E2E_ENCRYPTION_DEBUG   @"motif.end2endEncryptionTrace"
#define MOTIFCONNECTOR_CFG_PARAM_DISABLE_SSL_CERT       @"motif.disableSSLCertificate"
#define MOTIFCONNECTOR_CFG_PARAM_ACTIVITY_INDICATOR     @"motif.activityIndicator"
#define MOTIFCONNECTOR_CFG_PARAM_ALLOWS_VPN             @"motif.allowsVPN"

#define MOTIFCONNECTOR_CFG_PARAM_REQUESTPATH_DEFAULT    @"/json"

#define MOTIFCONNECTOR_CFG_PARAM_SSL_PINNING            @"motif.sslPinningCheck"
#define MOTIFCONNECTOR_CFG_PARAM_SSL_PINNING_SUBJ       @"motif.sslPinningCheck.subject"
#define MOTIFCONNECTOR_CFG_PARAM_SSL_PINNING_ISSUER     @"motif.sslPinningCheck.issuer"
#define MOTIFCONNECTOR_CFG_PARAM_SSL_PINNING_PUBLICKEY  @"motif.sslPinningCheck.publicKey"
#define MOTIFCONNECTOR_CFG_PARAM_SSL_PINNING_SERIALNUM  @"motif.sslPinningCheck.serialNumber"
#define MOTIFCONNECTOR_CFG_PARAM_SSL_PRINT_CERT         @"motif.printSSLCertificate"






#pragma mark SSL Pinning Configuration Implementation
@interface DESSLPinningConfiguration : NSObject<DECertificatePinningConfiguration>
{
    NSDictionary* _cordovaSettings;
}
@end

@implementation DESSLPinningConfiguration
- (id)initWithCordovaSettings:(NSDictionary*)cordovaSettings
{
    _cordovaSettings = cordovaSettings;
    return self;
}

/**
 *  When pinning is enabled, if this method returns YES, when making a server request the certificate data will be logged.
 *  This is useful for the first configuration off the pinning system. The logged data can be used to pupulate the other fields of the configuration.
 *
 *
 *  @return YES to log the certificate data.
 */
- (BOOL) logCertificateData
{
    return [DEMotifConnectorPluginConfiguration getBooleanValueForKey:MOTIFCONNECTOR_CFG_PARAM_SSL_PRINT_CERT withDefaultValue:NO forSettings:_cordovaSettings];
}

/**
 *  The subject info that the certificate must contain to be considered valid.
 *
 *  @return A string describing the subject or nil to skip this check.
 */
- (NSString *) subject
{
    NSString * value =[DEMotifConnectorPluginConfiguration getStringValueForKey:MOTIFCONNECTOR_CFG_PARAM_SSL_PINNING_SUBJ withDefaultValue:nil forSettings:_cordovaSettings];
    if(value == nil){
        value = [DEMotifConnectorPluginConfiguration getStringValueForKey:@"motif.sslPinnigCheck.subject" withDefaultValue:nil forSettings:_cordovaSettings];
    }
    return value;
}


/**
 *  The issuer info that the certificate must contain to be considered valid.
 *
 *  @return A string describing the subject or nil to skip this check.
 */
- (NSString *) issuer
{
    return [DEMotifConnectorPluginConfiguration getStringValueForKey:MOTIFCONNECTOR_CFG_PARAM_SSL_PINNING_ISSUER withDefaultValue:nil forSettings:_cordovaSettings];
}

/**
 *  The public key info that the certificate must contain to be considered valid.
 *
 *  @return A string describing the public key, nil to skip this check.
 */
- (NSString *) publicKey
{
    NSString* value = [DEMotifConnectorPluginConfiguration getStringValueForKey:MOTIFCONNECTOR_CFG_PARAM_SSL_PINNING_PUBLICKEY withDefaultValue:nil forSettings:_cordovaSettings];
    if(value == nil){
        value = [DEMotifConnectorPluginConfiguration getStringValueForKey:@"motif.sslPinnigCheck.publicKey" withDefaultValue:nil forSettings:_cordovaSettings];
    }
    return value;
}
/**
 *  The serial number info that the certificate must contain to be considered valid.
 *
 *  @return A string describing the serial number or nil to skip this check.
 */
- (NSString *) serialNumber
{
    return [DEMotifConnectorPluginConfiguration getStringValueForKey:MOTIFCONNECTOR_CFG_PARAM_SSL_PINNING_SERIALNUM withDefaultValue:nil forSettings:_cordovaSettings];
}
@end



#pragma mark Configuration Implementation
@implementation DEMotifConnectorPluginConfiguration
{
    NSDictionary* _cordovaSettings;
    DESSLPinningConfiguration* _sslPinningConfig;
}

- (id)initWithCordovaSettings:(NSDictionary*)cordovaSettings
{
    _cordovaSettings = cordovaSettings;

    BOOL sslPinningEnabled = [self getBooleanValueForKey:MOTIFCONNECTOR_CFG_PARAM_SSL_PINNING withDefaultValue:NO];
    if (sslPinningEnabled){
        _sslPinningConfig = [[DESSLPinningConfiguration alloc]initWithCordovaSettings:cordovaSettings];
    } else {
        _sslPinningConfig = nil;
    }

    return self;
}

- (NSString *) serverAddress
{
    return [_cordovaSettings objectForKey:[MOTIFCONNECTOR_CFG_PARAM_SERVERURL lowercaseString]];
}

/**
 *  The path on the server where to execute the post requests.
 */
- (NSString *) serverPostPath
{
    return [self getStringValueForKey:MOTIFCONNECTOR_CFG_PARAM_REQUESTPATH withDefaultValue:MOTIFCONNECTOR_CFG_PARAM_REQUESTPATH_DEFAULT];
}

/**
 *  Number of times thet a request can be executed before returning an error.
 */
- (NSInteger) serverRequestTryCount
{
    return [self getIntValueForKey:MOTIFCONNECTOR_CFG_PARAM_RETRYCOUNT withDefaultValue:3];
}

/**
 *  The time to wait before having a data timeout. In seconds.
 */
- (double) serverTimeoutSeconds
{
    return ([self getDoubleValueForKey:MOTIFCONNECTOR_CFG_PARAM_HTTP_TIMEOUT withDefaultValue:30000]/1000);
}

/**
 *  The amount of time to wait after an error accurs before retrying the server request. In milliseconds.
 */
- (double) serverRequestRetryDelayMillis
{
    return [self getDoubleValueForKey:MOTIFCONNECTOR_CFG_PARAM_RETRY_DELAY withDefaultValue:3000];
}

- (BOOL) end2EndEncryptionEnabled
{
    return [self getBooleanValueForKey:MOTIFCONNECTOR_CFG_PARAM_E2E_ENCRYPTION withDefaultValue:NO];
}

/**
 *  Enable or disable the E2E Encryption protocol logging.
 */
- (BOOL) end2EndEncryptionDebugEnabled
{
    return [self getBooleanValueForKey:MOTIFCONNECTOR_CFG_PARAM_E2E_ENCRYPTION_DEBUG withDefaultValue:NO];
}

/**
 * Allows to accepts selft signed certificates WARN: don't use this in PRODUCTION Environment! This is only for debugging pourpose
 */
- (BOOL) allowsInvalidSSLCertificate
{
    return [self getBooleanValueForKey:MOTIFCONNECTOR_CFG_PARAM_DISABLE_SSL_CERT withDefaultValue:NO];
}

/**
 * Returns a certificate pinning configuration if needed
 **/
- (id<DECertificatePinningConfiguration>) certificatePinningConfiguration
{
    return _sslPinningConfig;
}

- (BOOL) activityIndicatorEnabled
{
    return [self getBooleanValueForKey:MOTIFCONNECTOR_CFG_PARAM_ACTIVITY_INDICATOR withDefaultValue:NO];
}

- (BOOL) allowsVPN
{
    return [self getBooleanValueForKey:MOTIFCONNECTOR_CFG_PARAM_ALLOWS_VPN withDefaultValue:NO];
}


#pragma mark local utilities
- (BOOL)getBooleanValueForKey:(NSString*)key withDefaultValue:(BOOL)defaultValue
{
    return [DEMotifConnectorPluginConfiguration getBooleanValueForKey:key withDefaultValue:defaultValue forSettings:_cordovaSettings];
}

- (int)getIntValueForKey:(NSString*)key withDefaultValue:(int)defaultValue
{
    return [DEMotifConnectorPluginConfiguration getIntValueForKey:key withDefaultValue:defaultValue forSettings:_cordovaSettings];
}

- (double)getDoubleValueForKey:(NSString*)key withDefaultValue:(double)defaultValue
{
    return [DEMotifConnectorPluginConfiguration getDoubleValueForKey:key withDefaultValue:defaultValue forSettings:_cordovaSettings];
}

- (NSString*)getStringValueForKey:(NSString*)key withDefaultValue:(NSString*)defaultValue
{
    return [DEMotifConnectorPluginConfiguration getStringValueForKey:key withDefaultValue:defaultValue forSettings:_cordovaSettings];
}


#pragma mark Static utilities
+ (BOOL)getBooleanValueForKey:(NSString*)key withDefaultValue:(BOOL)defaultValue forSettings:(NSDictionary*)cordovaSettings
{
    NSString *sValue = [cordovaSettings objectForKey:[key lowercaseString]];
    if (sValue && [sValue isEqualToString:@"true"]){
        return YES;
    } else if (sValue && [sValue isEqualToString:@"false"]) {
        return NO;
    } else {
        return defaultValue;
    }
}

+ (int)getIntValueForKey:(NSString*)key withDefaultValue:(int)defaultValue forSettings:(NSDictionary*)cordovaSettings
{
    NSString *sValue = [cordovaSettings objectForKey:[key lowercaseString]];
    if (sValue){
        return [sValue intValue];
    } else {
        return defaultValue;
    }
}

+ (double)getDoubleValueForKey:(NSString*)key withDefaultValue:(double)defaultValue forSettings:(NSDictionary*)cordovaSettings
{
    NSString *sValue = [cordovaSettings objectForKey:[key lowercaseString]];
    if (sValue){
        return [sValue doubleValue];
    } else {
        return defaultValue;
    }
}

+ (NSString*)getStringValueForKey:(NSString*)key withDefaultValue:(NSString*)defaultValue forSettings:(NSDictionary*)cordovaSettings
{
    NSString *sValue = [cordovaSettings objectForKey:[key lowercaseString]];
    if (sValue) {
        return sValue;
    } else {
        return defaultValue;
    }
}
@end