Skip to content

Commit 8841063

Browse files
committed
Merge pull request #1228 from geekerzp/objc_ssl
Objc client ssl verification
2 parents 96f4a3a + b0063d9 commit 8841063

File tree

14 files changed

+182
-27
lines changed

14 files changed

+182
-27
lines changed

modules/swagger-codegen/src/main/resources/objc/ApiClient-body.mustache

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ static void (^reachabilityChangeBlock)(int);
2828
if (self) {
2929
self.requestSerializer = [AFJSONRequestSerializer serializer];
3030
self.responseSerializer = [AFJSONResponseSerializer serializer];
31+
self.securityPolicy = [self customSecurityPolicy];
3132
// configure reachability
3233
[self configureCacheReachibility];
3334
}
@@ -278,7 +279,7 @@ static void (^reachabilityChangeBlock)(int);
278279

279280
// pure object
280281
if ([class isEqualToString:@"NSObject"]) {
281-
return [[NSObject alloc] init];
282+
return data;
282283
}
283284

284285
// list of models
@@ -407,7 +408,7 @@ static void (^reachabilityChangeBlock)(int);
407408

408409
if([[{{classPrefix}}Configuration sharedConfig] debug])
409410
[self logResponse:nil forRequest:request error:augmentedError];
410-
411+
411412
NSDictionary *responseHeaders = [[operation response] allHeaderFields];
412413
self.HTTPResponseHeaders = responseHeaders;
413414

@@ -740,5 +741,26 @@ static void (^reachabilityChangeBlock)(int);
740741
@throw e;
741742
}
742743
}
743-
744+
745+
- (AFSecurityPolicy *) customSecurityPolicy {
746+
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
747+
748+
{{classPrefix}}Configuration *config = [{{classPrefix}}Configuration sharedConfig];
749+
750+
if (config.sslCaCert) {
751+
NSData *certData = [NSData dataWithContentsOfFile:config.sslCaCert];
752+
[securityPolicy setPinnedCertificates:@[certData]];
753+
}
754+
755+
if (config.verifySSL) {
756+
[securityPolicy setAllowInvalidCertificates:NO];
757+
}
758+
else {
759+
[securityPolicy setAllowInvalidCertificates:YES];
760+
[securityPolicy setValidatesDomainName:NO];
761+
}
762+
763+
return securityPolicy;
764+
}
765+
744766
@end

modules/swagger-codegen/src/main/resources/objc/ApiClient-header.mustache

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,4 +203,11 @@ extern NSString *const {{classPrefix}}ResponseObjectErrorKey;
203203
*/
204204
- (id) sanitizeForSerialization:(id) object;
205205

206+
/**
207+
* Custom security policy
208+
*
209+
* @return AFSecurityPolicy
210+
*/
211+
- (AFSecurityPolicy *) customSecurityPolicy;
212+
206213
@end

modules/swagger-codegen/src/main/resources/objc/Configuration-body.mustache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
self.password = @"";
3232
self.tempFolderPath = nil;
3333
self.debug = NO;
34+
self.verifySSL = YES;
3435
self.loggingFile = nil;
3536
self.mutableApiKey = [NSMutableDictionary dictionary];
3637
self.mutableApiKeyPrefix = [NSMutableDictionary dictionary];

modules/swagger-codegen/src/main/resources/objc/Configuration-header.mustache

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#import <Foundation/Foundation.h>
22
#import "{{classPrefix}}ApiClient.h"
3-
3+
44
/** The `{{classPrefix}}Configuration` class manages the configurations for the sdk.
55
*
66
* NOTE: This class is auto generated by the swagger code generator program.
@@ -9,14 +9,14 @@
99
*/
1010

1111
@class {{classPrefix}}ApiClient;
12-
12+
1313
@interface {{classPrefix}}Configuration : NSObject
1414

1515
/**
1616
* Default api client
1717
*/
1818
@property (nonatomic) {{classPrefix}}ApiClient *apiClient;
19-
19+
2020
/**
2121
* Default base url
2222
*/
@@ -75,6 +75,18 @@
7575
*/
7676
+ (instancetype) sharedConfig;
7777

78+
/**
79+
* SSL/TLS verification
80+
* Set this to NO to skip verifying SSL certificate when calling API from https server
81+
*/
82+
@property (nonatomic) BOOL verifySSL;
83+
84+
/**
85+
* SSL/TLS verification
86+
* Set this to customize the certificate file to verify the peer
87+
*/
88+
@property (nonatomic) NSString *sslCaCert;
89+
7890
/**
7991
* Sets API key
8092
*

samples/client/petstore/objc/SwaggerClient.podspec

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ Pod::Spec.new do |s|
2020
s.requires_arc = true
2121

2222
s.framework = 'SystemConfiguration'
23+
24+
s.homepage = "https://github.com/swagger-api/swagger-codegen"
25+
s.license = "MIT"
26+
s.source = { :git => "https://github.com/swagger-api/swagger-codegen.git", :tag => "#{s.version}" }
27+
s.author = { "Swagger" => "[email protected]" }
2328

2429
s.source_files = 'SwaggerClient/**/*'
2530
s.public_header_files = 'SwaggerClient/**/*.h'

samples/client/petstore/objc/SwaggerClient/SWGApiClient.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,4 +207,11 @@ extern NSString *const SWGResponseObjectErrorKey;
207207
*/
208208
- (id) sanitizeForSerialization:(id) object;
209209

210+
/**
211+
* Custom security policy
212+
*
213+
* @return AFSecurityPolicy
214+
*/
215+
- (AFSecurityPolicy *) customSecurityPolicy;
216+
210217
@end

samples/client/petstore/objc/SwaggerClient/SWGApiClient.m

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ - (instancetype)initWithBaseURL:(NSURL *)url {
2828
if (self) {
2929
self.requestSerializer = [AFJSONRequestSerializer serializer];
3030
self.responseSerializer = [AFJSONResponseSerializer serializer];
31+
self.securityPolicy = [self customSecurityPolicy];
3132
// configure reachability
3233
[self configureCacheReachibility];
3334
}
@@ -278,7 +279,7 @@ - (id) deserialize:(id) data class:(NSString *) class {
278279

279280
// pure object
280281
if ([class isEqualToString:@"NSObject"]) {
281-
return [[NSObject alloc] init];
282+
return data;
282283
}
283284

284285
// list of models
@@ -407,7 +408,7 @@ - (void) operationWithCompletionBlock: (NSURLRequest *)request
407408

408409
if([[SWGConfiguration sharedConfig] debug])
409410
[self logResponse:nil forRequest:request error:augmentedError];
410-
411+
411412
NSDictionary *responseHeaders = [[operation response] allHeaderFields];
412413
self.HTTPResponseHeaders = responseHeaders;
413414

@@ -740,5 +741,26 @@ - (id) sanitizeForSerialization:(id) object {
740741
@throw e;
741742
}
742743
}
743-
744+
745+
- (AFSecurityPolicy *) customSecurityPolicy {
746+
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
747+
748+
SWGConfiguration *config = [SWGConfiguration sharedConfig];
749+
750+
if (config.sslCaCert) {
751+
NSData *certData = [NSData dataWithContentsOfFile:config.sslCaCert];
752+
[securityPolicy setPinnedCertificates:@[certData]];
753+
}
754+
755+
if (config.verifySSL) {
756+
[securityPolicy setAllowInvalidCertificates:NO];
757+
}
758+
else {
759+
[securityPolicy setAllowInvalidCertificates:YES];
760+
[securityPolicy setValidatesDomainName:NO];
761+
}
762+
763+
return securityPolicy;
764+
}
765+
744766
@end

samples/client/petstore/objc/SwaggerClient/SWGConfiguration.h

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#import <Foundation/Foundation.h>
22
#import "SWGApiClient.h"
3-
3+
44
/** The `SWGConfiguration` class manages the configurations for the sdk.
55
*
66
* NOTE: This class is auto generated by the swagger code generator program.
@@ -9,14 +9,14 @@
99
*/
1010

1111
@class SWGApiClient;
12-
12+
1313
@interface SWGConfiguration : NSObject
1414

1515
/**
1616
* Default api client
1717
*/
1818
@property (nonatomic) SWGApiClient *apiClient;
19-
19+
2020
/**
2121
* Default base url
2222
*/
@@ -75,6 +75,18 @@
7575
*/
7676
+ (instancetype) sharedConfig;
7777

78+
/**
79+
* SSL/TLS verification
80+
* Set this to NO to skip verifying SSL certificate when calling API from https server
81+
*/
82+
@property (nonatomic) BOOL verifySSL;
83+
84+
/**
85+
* SSL/TLS verification
86+
* Set this to customize the certificate file to verify the peer
87+
*/
88+
@property (nonatomic) NSString *sslCaCert;
89+
7890
/**
7991
* Sets API key
8092
*

samples/client/petstore/objc/SwaggerClient/SWGConfiguration.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ - (instancetype) init {
3131
self.password = @"";
3232
self.tempFolderPath = nil;
3333
self.debug = NO;
34+
self.verifySSL = YES;
3435
self.loggingFile = nil;
3536
self.mutableApiKey = [NSMutableDictionary dictionary];
3637
self.mutableApiKeyPrefix = [NSMutableDictionary dictionary];

samples/client/petstore/objc/SwaggerClient/SWGPetApi.m

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,11 @@ -(NSNumber*) getPetByIdWithCompletionBlock: (NSNumber*) petId
421421

422422
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
423423
if (petId != nil) {
424-
pathParams[@"petId"] = petId;
424+
if([petId isKindOfClass:[NSNumber class]]){
425+
pathParams[@"petId"] = [((NSNumber *)petId) stringValue];
426+
}else{
427+
pathParams[@"petId"] = petId;
428+
}
425429
}
426430

427431

@@ -513,7 +517,11 @@ -(NSNumber*) updatePetWithFormWithCompletionBlock: (NSString*) petId
513517

514518
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
515519
if (petId != nil) {
516-
pathParams[@"petId"] = petId;
520+
if([petId isKindOfClass:[NSNumber class]]){
521+
pathParams[@"petId"] = [((NSNumber *)petId) stringValue];
522+
}else{
523+
pathParams[@"petId"] = petId;
524+
}
517525
}
518526

519527

@@ -551,13 +559,21 @@ -(NSNumber*) updatePetWithFormWithCompletionBlock: (NSString*) petId
551559

552560

553561
if (name) {
554-
formParams[@"name"] = name;
562+
if([name isKindOfClass:[NSNumber class]]){
563+
formParams[@"name"] = [((NSNumber *)name) stringValue];
564+
}else{
565+
formParams[@"name"] = name;
566+
}
555567
}
556568

557569

558570

559571
if (status) {
560-
formParams[@"status"] = status;
572+
if([status isKindOfClass:[NSNumber class]]){
573+
formParams[@"status"] = [((NSNumber *)status) stringValue];
574+
}else{
575+
formParams[@"status"] = status;
576+
}
561577
}
562578

563579

@@ -614,16 +630,25 @@ -(NSNumber*) deletePetWithCompletionBlock: (NSNumber*) petId
614630

615631
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
616632
if (petId != nil) {
617-
pathParams[@"petId"] = petId;
633+
if([petId isKindOfClass:[NSNumber class]]){
634+
pathParams[@"petId"] = [((NSNumber *)petId) stringValue];
635+
}else{
636+
pathParams[@"petId"] = petId;
637+
}
618638
}
619639

620640

621641
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
622642

623643
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
624644

625-
if(apiKey != nil)
626-
headerParams[@"api_key"] = apiKey;
645+
if(apiKey != nil){
646+
if([apiKey isKindOfClass:[NSNumber class]]){
647+
headerParams[@"api_key"] = [((NSNumber *)apiKey) stringValue];
648+
}else{
649+
headerParams[@"api_key"] = apiKey;
650+
}
651+
}
627652

628653

629654
// HTTP header `Accept`
@@ -708,7 +733,11 @@ -(NSNumber*) uploadFileWithCompletionBlock: (NSNumber*) petId
708733

709734
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
710735
if (petId != nil) {
711-
pathParams[@"petId"] = petId;
736+
if([petId isKindOfClass:[NSNumber class]]){
737+
pathParams[@"petId"] = [((NSNumber *)petId) stringValue];
738+
}else{
739+
pathParams[@"petId"] = petId;
740+
}
712741
}
713742

714743

@@ -746,7 +775,11 @@ -(NSNumber*) uploadFileWithCompletionBlock: (NSNumber*) petId
746775

747776

748777
if (additionalMetadata) {
749-
formParams[@"additionalMetadata"] = additionalMetadata;
778+
if([additionalMetadata isKindOfClass:[NSNumber class]]){
779+
formParams[@"additionalMetadata"] = [((NSNumber *)additionalMetadata) stringValue];
780+
}else{
781+
formParams[@"additionalMetadata"] = additionalMetadata;
782+
}
750783
}
751784

752785

0 commit comments

Comments
 (0)