Merge branch 'mateuszmackowiak-objc/moved_logger_and_optimalizations'

This commit is contained in:
wing328 2016-05-12 22:40:08 +08:00
commit dfda700e7e
24 changed files with 850 additions and 866 deletions

View File

@ -242,6 +242,8 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig {
supportingFiles.add(new SupportingFile("ResponseDeserializer-header.mustache", swaggerFolder, classPrefix + "ResponseDeserializer.h")); supportingFiles.add(new SupportingFile("ResponseDeserializer-header.mustache", swaggerFolder, classPrefix + "ResponseDeserializer.h"));
supportingFiles.add(new SupportingFile("Sanitizer-body.mustache", swaggerFolder, classPrefix + "Sanitizer.m")); supportingFiles.add(new SupportingFile("Sanitizer-body.mustache", swaggerFolder, classPrefix + "Sanitizer.m"));
supportingFiles.add(new SupportingFile("Sanitizer-header.mustache", swaggerFolder, classPrefix + "Sanitizer.h")); supportingFiles.add(new SupportingFile("Sanitizer-header.mustache", swaggerFolder, classPrefix + "Sanitizer.h"));
supportingFiles.add(new SupportingFile("Logger-body.mustache", swaggerFolder, classPrefix + "Logger.m"));
supportingFiles.add(new SupportingFile("Logger-header.mustache", swaggerFolder, classPrefix + "Logger.h"));
supportingFiles.add(new SupportingFile("JSONValueTransformer+ISO8601.m", swaggerFolder, "JSONValueTransformer+ISO8601.m")); supportingFiles.add(new SupportingFile("JSONValueTransformer+ISO8601.m", swaggerFolder, "JSONValueTransformer+ISO8601.m"));
supportingFiles.add(new SupportingFile("JSONValueTransformer+ISO8601.h", swaggerFolder, "JSONValueTransformer+ISO8601.h")); supportingFiles.add(new SupportingFile("JSONValueTransformer+ISO8601.h", swaggerFolder, "JSONValueTransformer+ISO8601.h"));
supportingFiles.add(new SupportingFile("Configuration-body.mustache", swaggerFolder, classPrefix + "Configuration.m")); supportingFiles.add(new SupportingFile("Configuration-body.mustache", swaggerFolder, classPrefix + "Configuration.m"));

View File

@ -2,7 +2,7 @@
NSString *const {{classPrefix}}ResponseObjectErrorKey = @"{{classPrefix}}ResponseObject"; NSString *const {{classPrefix}}ResponseObjectErrorKey = @"{{classPrefix}}ResponseObject";
static long requestId = 0; static NSUInteger requestId = 0;
static bool offlineState = false; static bool offlineState = false;
static NSMutableSet * queuedRequests = nil; static NSMutableSet * queuedRequests = nil;
static bool cacheEnabled = false; static bool cacheEnabled = false;
@ -36,7 +36,7 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
@interface {{classPrefix}}ApiClient () @interface {{classPrefix}}ApiClient ()
@property (readwrite, nonatomic) NSDictionary *HTTPResponseHeaders; @property (nonatomic, strong) NSDictionary* HTTPResponseHeaders;
@end @end
@ -88,49 +88,6 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
[self.requestSerializer setValue:value forHTTPHeaderField:forKey]; [self.requestSerializer setValue:value forHTTPHeaderField:forKey];
} }
#pragma mark - Log Methods
+ (void)debugLog:(NSString *)method
message:(NSString *)format, ... {
{{classPrefix}}Configuration *config = [{{classPrefix}}Configuration sharedConfig];
if (!config.debug) {
return;
}
NSMutableString *message = [NSMutableString stringWithCapacity:1];
if (method) {
[message appendString:[NSString stringWithFormat:@"%@: ", method]];
}
va_list args;
va_start(args, format);
[message appendString:[[NSString alloc] initWithFormat:format arguments:args]];
// If set logging file handler, log into file,
// otherwise log into console.
if (config.loggingFileHanlder) {
[config.loggingFileHanlder seekToEndOfFile];
[config.loggingFileHanlder writeData:[message dataUsingEncoding:NSUTF8StringEncoding]];
}
else {
NSLog(@"%@", message);
}
va_end(args);
}
- (void)logResponse:(NSURLResponse *)response responseObject:(id)responseObject request:(NSURLRequest *)request error:(NSError *)error {
NSString *message = [NSString stringWithFormat:@"\n[DEBUG] HTTP request body \n~BEGIN~\n %@\n~END~\n"\
"[DEBUG] HTTP response body \n~BEGIN~\n %@\n~END~\n",
[[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding],
responseObject];
{{classPrefix}}DebugLog(message);
}
#pragma mark - Cache Methods #pragma mark - Cache Methods
+(void)clearCache { +(void)clearCache {
@ -151,70 +108,6 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
[NSURLCache setSharedURLCache:cache]; [NSURLCache setSharedURLCache:cache];
} }
#pragma mark - Utility Methods
/*
* Detect `Accept` from accepts
*/
+ (NSString *) selectHeaderAccept:(NSArray *)accepts {
if (accepts == nil || [accepts count] == 0) {
return @"";
}
NSMutableArray *lowerAccepts = [[NSMutableArray alloc] initWithCapacity:[accepts count]];
for (NSString *string in accepts) {
NSString * lowerAccept = [string lowercaseString];
// use rangeOfString instead of containsString for iOS 7 support
if ([lowerAccept rangeOfString:@"application/json"].location != NSNotFound) {
return @"application/json";
}
[lowerAccepts addObject:lowerAccept];
}
if (lowerAccepts.count == 1) {
return [lowerAccepts firstObject];
}
return [lowerAccepts componentsJoinedByString:@", "];
}
/*
* Detect `Content-Type` from contentTypes
*/
+ (NSString *) selectHeaderContentType:(NSArray *)contentTypes
{
if (contentTypes == nil || [contentTypes count] == 0) {
return @"application/json";
}
NSMutableArray *lowerContentTypes = [[NSMutableArray alloc] initWithCapacity:[contentTypes count]];
[contentTypes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[lowerContentTypes addObject:[obj lowercaseString]];
}];
if ([lowerContentTypes containsObject:@"application/json"]) {
return @"application/json";
}
else {
return lowerContentTypes[0];
}
}
+ (NSString*)escape:(id)unescaped {
if ([unescaped isKindOfClass:[NSString class]]){
return (NSString *)CFBridgingRelease
(CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge CFStringRef) unescaped,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8));
}
else {
return [NSString stringWithFormat:@"%@", unescaped];
}
}
#pragma mark - Request Methods #pragma mark - Request Methods
+(unsigned long)requestQueueSize { +(unsigned long)requestQueueSize {
@ -223,14 +116,12 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
+(NSNumber*) nextRequestId { +(NSNumber*) nextRequestId {
@synchronized(self) { @synchronized(self) {
long nextId = ++requestId; return @(++requestId);
{{classPrefix}}DebugLog(@"got id %ld", nextId);
return [NSNumber numberWithLong:nextId];
} }
} }
+(NSNumber*) queueRequest { +(NSNumber*) queueRequest {
NSNumber* requestId = [{{classPrefix}}ApiClient nextRequestId]; NSNumber* requestId = [[self class] nextRequestId];
{{classPrefix}}DebugLog(@"added %@ to request queue", requestId); {{classPrefix}}DebugLog(@"added %@ to request queue", requestId);
[queuedRequests addObject:requestId]; [queuedRequests addObject:requestId];
return requestId; return requestId;
@ -294,7 +185,7 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
if (![strongSelf executeRequestWithId:requestId]) { if (![strongSelf executeRequestWithId:requestId]) {
return; return;
} }
[strongSelf logResponse:response responseObject:responseObject request:request error:error]; {{classPrefix}}DebugLogResponse(response, responseObject,request,error);
strongSelf.HTTPResponseHeaders = {{classPrefix}}__headerFieldsForResponse(response); strongSelf.HTTPResponseHeaders = {{classPrefix}}__headerFieldsForResponse(response);
if(!error) { if(!error) {
completionBlock(responseObject, nil); completionBlock(responseObject, nil);
@ -321,7 +212,7 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
return; return;
} }
strongSelf.HTTPResponseHeaders = {{classPrefix}}__headerFieldsForResponse(response); strongSelf.HTTPResponseHeaders = {{classPrefix}}__headerFieldsForResponse(response);
[strongSelf logResponse:response responseObject:responseObject request:request error:error]; {{classPrefix}}DebugLogResponse(response, responseObject,request,error);
if(error) { if(error) {
NSMutableDictionary *userInfo = [error.userInfo mutableCopy]; NSMutableDictionary *userInfo = [error.userInfo mutableCopy];
if (responseObject) { if (responseObject) {
@ -370,14 +261,13 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
self.requestSerializer = [AFHTTPRequestSerializer serializer]; self.requestSerializer = [AFHTTPRequestSerializer serializer];
} }
else { else {
NSAssert(false, @"unsupport request type %@", requestContentType); NSAssert(NO, @"Unsupported request type %@", requestContentType);
} }
// setting response serializer // setting response serializer
if ([responseContentType isEqualToString:@"application/json"]) { if ([responseContentType isEqualToString:@"application/json"]) {
self.responseSerializer = [{{classPrefix}}JSONResponseSerializer serializer]; self.responseSerializer = [{{classPrefix}}JSONResponseSerializer serializer];
} } else {
else {
self.responseSerializer = [AFHTTPResponseSerializer serializer]; self.responseSerializer = [AFHTTPResponseSerializer serializer];
} }
@ -393,8 +283,9 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
NSMutableString *resourcePath = [NSMutableString stringWithString:path]; NSMutableString *resourcePath = [NSMutableString stringWithString:path];
[pathParams enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { [pathParams enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[resourcePath replaceCharactersInRange:[resourcePath rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", key, @"}"]] NSString * safeString = ([obj isKindOfClass:[NSString class]]) ? obj : [NSString stringWithFormat:@"%@", obj];
withString:[{{classPrefix}}ApiClient escape:obj]]; safeString = {{classPrefix}}PercentEscapedStringFromString(safeString);
[resourcePath replaceCharactersInRange:[resourcePath rangeOfString:[NSString stringWithFormat:@"{%@}", key]] withString:safeString];
}]; }];
NSMutableURLRequest * request = nil; NSMutableURLRequest * request = nil;
@ -438,10 +329,7 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
} }
// request cache // request cache
BOOL hasHeaderParams = false; BOOL hasHeaderParams = [headerParams count] > 0;
if (headerParams != nil && [headerParams count] > 0) {
hasHeaderParams = true;
}
if (offlineState) { if (offlineState) {
{{classPrefix}}DebugLog(@"%@ cache forced", resourcePath); {{classPrefix}}DebugLog(@"%@ cache forced", resourcePath);
[request setCachePolicy:NSURLRequestReturnCacheDataDontLoad]; [request setCachePolicy:NSURLRequestReturnCacheDataDontLoad];
@ -462,9 +350,7 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
} }
[self.requestSerializer setValue:responseContentType forHTTPHeaderField:@"Accept"]; [self.requestSerializer setValue:responseContentType forHTTPHeaderField:@"Accept"];
[self postProcessRequest:request];
// Always disable cookies!
[request setHTTPShouldHandleCookies:NO];
NSNumber* requestId = [{{classPrefix}}ApiClient queueRequest]; NSNumber* requestId = [{{classPrefix}}ApiClient queueRequest];
if ([responseType isEqualToString:@"NSURL*"] || [responseType isEqualToString:@"NSURL"]) { if ([responseType isEqualToString:@"NSURL*"] || [responseType isEqualToString:@"NSURL"]) {
@ -485,59 +371,66 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
return requestId; return requestId;
} }
//Added for easier override to modify request
-(void)postProcessRequest:(NSMutableURLRequest *)request {
// Always disable cookies!
[request setHTTPShouldHandleCookies:NO];
}
#pragma mark - #pragma mark -
- (NSString*) pathWithQueryParamsToString:(NSString*) path - (NSString*) pathWithQueryParamsToString:(NSString*) path
queryParams:(NSDictionary*) queryParams { queryParams:(NSDictionary*) queryParams {
if(queryParams.count == 0) {
return path;
}
NSString * separator = nil; NSString * separator = nil;
int counter = 0; NSUInteger counter = 0;
NSMutableString * requestUrl = [NSMutableString stringWithFormat:@"%@", path]; NSMutableString * requestUrl = [NSMutableString stringWithFormat:@"%@", path];
if (queryParams != nil){
for(NSString * key in [queryParams keyEnumerator]){
if (counter == 0) separator = @"?";
else separator = @"&";
id queryParam = [queryParams valueForKey:key];
if ([queryParam isKindOfClass:[NSString class]]){
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator,
[{{classPrefix}}ApiClient escape:key], [{{classPrefix}}ApiClient escape:[queryParams valueForKey:key]]]];
}
else if ([queryParam isKindOfClass:[{{classPrefix}}QueryParamCollection class]]){
{{classPrefix}}QueryParamCollection * coll = ({{classPrefix}}QueryParamCollection*) queryParam;
NSArray* values = [coll values];
NSString* format = [coll format];
if ([format isEqualToString:@"csv"]) { NSDictionary *separatorStyles = @{@"csv" : @",",
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, @"tsv" : @"\t",
[{{classPrefix}}ApiClient escape:key], [NSString stringWithFormat:@"%@", [values componentsJoinedByString:@","]]]]; @"pipes": @"|"
};
} for(NSString * key in [queryParams keyEnumerator]){
else if ([format isEqualToString:@"tsv"]) { if (counter == 0) {
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, separator = @"?";
[{{classPrefix}}ApiClient escape:key], [NSString stringWithFormat:@"%@", [values componentsJoinedByString:@"\t"]]]]; } else {
separator = @"&";
}
else if ([format isEqualToString:@"pipes"]) {
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator,
[{{classPrefix}}ApiClient escape:key], [NSString stringWithFormat:@"%@", [values componentsJoinedByString:@"|"]]]];
}
else if ([format isEqualToString:@"multi"]) {
for(id obj in values) {
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator,
[{{classPrefix}}ApiClient escape:key], [NSString stringWithFormat:@"%@", obj]]];
counter += 1;
}
}
}
else {
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator,
[{{classPrefix}}ApiClient escape:key], [NSString stringWithFormat:@"%@", [queryParams valueForKey:key]]]];
}
counter += 1;
} }
id queryParam = [queryParams valueForKey:key];
if(!queryParam) {
continue;
}
NSString *safeKey = {{classPrefix}}PercentEscapedStringFromString(key);
if ([queryParam isKindOfClass:[NSString class]]){
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, safeKey, {{classPrefix}}PercentEscapedStringFromString(queryParam)]];
} else if ([queryParam isKindOfClass:[{{classPrefix}}QueryParamCollection class]]){
{{classPrefix}}QueryParamCollection * coll = ({{classPrefix}}QueryParamCollection*) queryParam;
NSArray* values = [coll values];
NSString* format = [coll format];
if([format isEqualToString:@"multi"]) {
for(id obj in values) {
if (counter > 0) {
separator = @"&";
}
NSString * safeValue = {{classPrefix}}PercentEscapedStringFromString([NSString stringWithFormat:@"%@",obj]);
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, safeKey, safeValue]];
counter += 1;
}
continue;
}
NSString * separatorStyle = separatorStyles[format];
NSString * safeValue = {{classPrefix}}PercentEscapedStringFromString([values componentsJoinedByString:separatorStyle]);
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, safeKey, safeValue]];
} else {
NSString * safeValue = {{classPrefix}}PercentEscapedStringFromString([NSString stringWithFormat:@"%@",queryParam]);
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, safeKey, safeValue]];
}
counter += 1;
} }
return requestUrl; return requestUrl;
} }
@ -558,15 +451,17 @@ static NSString * {{classPrefix}}__fileNameForResponse(NSURLResponse *response)
{{classPrefix}}Configuration *config = [{{classPrefix}}Configuration sharedConfig]; {{classPrefix}}Configuration *config = [{{classPrefix}}Configuration sharedConfig];
for (NSString *auth in authSettings) { for (NSString *auth in authSettings) {
NSDictionary *authSetting = [[config authSettings] objectForKey:auth]; NSDictionary *authSetting = [config authSettings][auth];
if(!authSetting) { // auth setting is set only if the key is non-empty
if (authSetting) { // auth setting is set only if the key is non-empty continue;
if ([authSetting[@"in"] isEqualToString:@"header"] && [authSetting[@"key"] length] != 0) { }
[headersWithAuth setObject:authSetting[@"value"] forKey:authSetting[@"key"]]; NSString *type = authSetting[@"in"];
} NSString *key = authSetting[@"key"];
else if ([authSetting[@"in"] isEqualToString:@"query"] && [authSetting[@"key"] length] != 0) { NSString *value = authSetting[@"value"];
[querysWithAuth setObject:authSetting[@"value"] forKey:authSetting[@"key"]]; if ([type isEqualToString:@"header"] && [key length] > 0 ) {
} headersWithAuth[key] = value;
} else if ([type isEqualToString:@"query"] && [key length] != 0) {
querysWithAuth[key] = value;
} }
} }

View File

@ -7,6 +7,7 @@
#import "{{classPrefix}}Configuration.h" #import "{{classPrefix}}Configuration.h"
#import "{{classPrefix}}ResponseDeserializer.h" #import "{{classPrefix}}ResponseDeserializer.h"
#import "{{classPrefix}}Sanitizer.h" #import "{{classPrefix}}Sanitizer.h"
#import "{{classPrefix}}Logger.h"
/** /**
* NOTE: This class is auto generated by the swagger code generator program. * NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen * https://github.com/swagger-api/swagger-codegen
@ -26,13 +27,6 @@
*/ */
extern NSString *const {{classPrefix}}ResponseObjectErrorKey; extern NSString *const {{classPrefix}}ResponseObjectErrorKey;
/**
* Log debug message macro
*/
#ifndef {{classPrefix}}DebugLog
#define {{classPrefix}}DebugLog(format, ...) [{{classPrefix}}ApiClient debugLog:[NSString stringWithFormat:@"%s", __PRETTY_FUNCTION__] message: format, ##__VA_ARGS__];
#endif
@interface {{classPrefix}}ApiClient : AFHTTPSessionManager @interface {{classPrefix}}ApiClient : AFHTTPSessionManager
@property(nonatomic, assign) NSURLRequestCachePolicy cachePolicy; @property(nonatomic, assign) NSURLRequestCachePolicy cachePolicy;
@ -113,15 +107,6 @@ extern NSString *const {{classPrefix}}ResponseObjectErrorKey;
*/ */
+(void) cancelRequest:(NSNumber*)requestId; +(void) cancelRequest:(NSNumber*)requestId;
/**
* Gets URL encoded NSString
*
* @param unescaped The string which will be escaped.
*
* @return The escaped string.
*/
+(NSString*) escape:(id)unescaped;
/** /**
* Customizes the behavior when the reachability changed * Customizes the behavior when the reachability changed
* *
@ -134,24 +119,6 @@ extern NSString *const {{classPrefix}}ResponseObjectErrorKey;
*/ */
- (void)configureCacheReachibility; - (void)configureCacheReachibility;
/**
* Detects Accept header from accepts NSArray
*
* @param accepts NSArray of header
*
* @return The Accept header
*/
+(NSString *) selectHeaderAccept:(NSArray *)accepts;
/**
* Detects Content-Type header from contentTypes NSArray
*
* @param contentTypes NSArray of header
*
* @return The Content-Type header
*/
+(NSString *) selectHeaderContentType:(NSArray *)contentTypes;
/** /**
* Sets header for request * Sets header for request
* *
@ -172,19 +139,6 @@ extern NSString *const {{classPrefix}}ResponseObjectErrorKey;
queryParams:(NSDictionary **)querys queryParams:(NSDictionary **)querys
WithAuthSettings:(NSArray *)authSettings; WithAuthSettings:(NSArray *)authSettings;
/**
* Logs request and response
*
* @param response NSURLResponse for the HTTP request.
* @param responseObject response object of the HTTP request.
* @param request The HTTP request.
* @param error The error of the HTTP request.
*/
- (void)logResponse:(NSURLResponse *)response
responseObject:(id)responseObject
request:(NSURLRequest *)request
error:(NSError *)error;
/** /**
* Performs request * Performs request
* *
@ -222,9 +176,5 @@ extern NSString *const {{classPrefix}}ResponseObjectErrorKey;
*/ */
- (AFSecurityPolicy *) customSecurityPolicy; - (AFSecurityPolicy *) customSecurityPolicy;
/**
* Log debug message
*/
+(void)debugLog:(NSString *)method message:(NSString *)format, ...;
@end @end

View File

@ -30,12 +30,10 @@
self.username = @""; self.username = @"";
self.password = @""; self.password = @"";
self.accessToken= @""; self.accessToken= @"";
self.tempFolderPath = nil;
self.debug = NO;
self.verifySSL = YES; self.verifySSL = YES;
self.loggingFile = nil;
self.mutableApiKey = [NSMutableDictionary dictionary]; self.mutableApiKey = [NSMutableDictionary dictionary];
self.mutableApiKeyPrefix = [NSMutableDictionary dictionary]; self.mutableApiKeyPrefix = [NSMutableDictionary dictionary];
self.logger = [{{classPrefix}}Logger sharedLogger];
} }
return self; return self;
} }
@ -43,11 +41,13 @@
#pragma mark - Instance Methods #pragma mark - Instance Methods
- (NSString *) getApiKeyWithPrefix:(NSString *)key { - (NSString *) getApiKeyWithPrefix:(NSString *)key {
if ([self.apiKeyPrefix objectForKey:key] && [self.apiKey objectForKey:key] != (id)[NSNull null] && [[self.apiKey objectForKey:key] length] != 0) { // both api key prefix and api key are set NSString *prefix = self.apiKeyPrefix[key];
return [NSString stringWithFormat:@"%@ %@", [self.apiKeyPrefix objectForKey:key], [self.apiKey objectForKey:key]]; NSString *apiKey = self.apiKey[key];
if (prefix && apiKey != (id)[NSNull null] && apiKey.length > 0) { // both api key prefix and api key are set
return [NSString stringWithFormat:@"%@ %@", prefix, apiKey];
} }
else if ([self.apiKey objectForKey:key] != (id)[NSNull null] && [[self.apiKey objectForKey:key] length] != 0) { // only api key, no api key prefix else if (apiKey != (id)[NSNull null] && apiKey.length > 0) { // only api key, no api key prefix
return [NSString stringWithFormat:@"%@", [self.apiKey objectForKey:key]]; return [NSString stringWithFormat:@"%@", self.apiKey[key]];
} }
else { // return empty string if nothing is set else { // return empty string if nothing is set
return @""; return @"";
@ -70,8 +70,7 @@
- (NSString *) getAccessToken { - (NSString *) getAccessToken {
if (self.accessToken.length == 0) { // token not set, return empty string if (self.accessToken.length == 0) { // token not set, return empty string
return @""; return @"";
} } else {
else {
return [NSString stringWithFormat:@"Bearer %@", self.accessToken]; return [NSString stringWithFormat:@"Bearer %@", self.accessToken];
} }
} }
@ -94,20 +93,6 @@
[self.mutableApiKeyPrefix removeObjectForKey:identifier]; [self.mutableApiKeyPrefix removeObjectForKey:identifier];
} }
- (void) setLoggingFile:(NSString *)loggingFile {
// close old file handler
if ([self.loggingFileHanlder isKindOfClass:[NSFileHandle class]]) {
[self.loggingFileHanlder closeFile];
}
_loggingFile = loggingFile;
_loggingFileHanlder = [NSFileHandle fileHandleForWritingAtPath:_loggingFile];
if (_loggingFileHanlder == nil) {
[[NSFileManager defaultManager] createFileAtPath:_loggingFile contents:nil attributes:nil];
_loggingFileHanlder = [NSFileHandle fileHandleForWritingAtPath:_loggingFile];
}
}
#pragma mark - Getter Methods #pragma mark - Getter Methods
- (NSDictionary *) apiKey { - (NSDictionary *) apiKey {
@ -154,4 +139,12 @@
}; };
} }
-(BOOL)debug {
return self.logger.isEnabled;
}
-(void)setDebug:(BOOL)debug {
self.logger.enabled = debug;
}
@end @end

View File

@ -1,5 +1,6 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "{{classPrefix}}ApiClient.h" #import "{{classPrefix}}ApiClient.h"
#import "{{classPrefix}}Logger.h"
/** The `{{classPrefix}}Configuration` class manages the configurations for the sdk. /** The `{{classPrefix}}Configuration` class manages the configurations for the sdk.
* *
@ -12,6 +13,11 @@
@interface {{classPrefix}}Configuration : NSObject @interface {{classPrefix}}Configuration : NSObject
/**
* Default api logger
*/
@property (nonatomic, strong) {{classPrefix}}Logger * logger;
/** /**
* Default api client * Default api client
*/ */
@ -37,7 +43,7 @@
@property (readonly, nonatomic, strong) NSDictionary *apiKeyPrefix; @property (readonly, nonatomic, strong) NSDictionary *apiKeyPrefix;
/** /**
* Usename for HTTP Basic Authentication * Username for HTTP Basic Authentication
*/ */
@property (nonatomic) NSString *username; @property (nonatomic) NSString *username;
@ -56,25 +62,11 @@
*/ */
@property (nonatomic) NSString *tempFolderPath; @property (nonatomic) NSString *tempFolderPath;
/**
* Logging Settings
*/
/** /**
* Debug switch, default false * Debug switch, default false
*/ */
@property (nonatomic) BOOL debug; @property (nonatomic) BOOL debug;
/**
* Debug file location, default log in console
*/
@property (nonatomic) NSString *loggingFile;
/**
* Log file handler, this property is used by sdk internally.
*/
@property (nonatomic, readonly) NSFileHandle *loggingFileHanlder;
/** /**
* Gets configuration singleton instance * Gets configuration singleton instance
*/ */
@ -143,7 +135,7 @@
- (NSString *) getAccessToken; - (NSString *) getAccessToken;
/** /**
* Gets Authentication Setings * Gets Authentication Settings
*/ */
- (NSDictionary *) authSettings; - (NSDictionary *) authSettings;

View File

@ -0,0 +1,74 @@
#import "{{classPrefix}}Logger.h"
@interface {{classPrefix}}Logger ()
@end
@implementation {{classPrefix}}Logger
+ (instancetype) sharedLogger {
static {{classPrefix}}Logger *shardLogger = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shardLogger = [[self alloc] init];
});
return shardLogger;
}
#pragma mark - Log Methods
- (void)debugLog:(NSString *)method
message:(NSString *)format, ... {
if (!self.isEnabled) {
return;
}
NSMutableString *message = [NSMutableString stringWithCapacity:1];
if (method) {
[message appendFormat:@"%@: ", method];
}
va_list args;
va_start(args, format);
[message appendString:[[NSString alloc] initWithFormat:format arguments:args]];
// If set logging file handler, log into file,
// otherwise log into console.
if (self.loggingFileHandler) {
[self.loggingFileHandler seekToEndOfFile];
[self.loggingFileHandler writeData:[message dataUsingEncoding:NSUTF8StringEncoding]];
} else {
NSLog(@"%@", message);
}
va_end(args);
}
- (void)logResponse:(NSURLResponse *)response responseObject:(id)responseObject request:(NSURLRequest *)request error:(NSError *)error {
NSString *message = [NSString stringWithFormat:@"\n[DEBUG] HTTP request body \n~BEGIN~\n %@\n~END~\n"\
"[DEBUG] HTTP response body \n~BEGIN~\n %@\n~END~\n",
[[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding],
responseObject];
{{classPrefix}}DebugLog(message);
}
- (void) setLoggingFile:(NSString *)loggingFile {
if(_loggingFile == loggingFile) {
return;
}
// close old file handler
if ([self.loggingFileHandler isKindOfClass:[NSFileHandle class]]) {
[self.loggingFileHandler closeFile];
}
_loggingFile = loggingFile;
_loggingFileHandler = [NSFileHandle fileHandleForWritingAtPath:_loggingFile];
if (_loggingFileHandler == nil) {
[[NSFileManager defaultManager] createFileAtPath:_loggingFile contents:nil attributes:nil];
_loggingFileHandler = [NSFileHandle fileHandleForWritingAtPath:_loggingFile];
}
}
@end

View File

@ -0,0 +1,54 @@
#import <Foundation/Foundation.h>
/**
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen
* Do not edit the class manually.
*/
#ifndef {{classPrefix}}DebugLogResponse
#define {{classPrefix}}DebugLogResponse(response, responseObject,request, error) [[{{classPrefix}}Logger sharedLogger] logResponse:response responseObject:responseObject request:request error:error];
#endif
/**
* Log debug message macro
*/
#ifndef {{classPrefix}}DebugLog
#define {{classPrefix}}DebugLog(format, ...) [[{{classPrefix}}Logger sharedLogger] debugLog:[NSString stringWithFormat:@"%s", __PRETTY_FUNCTION__] message: format, ##__VA_ARGS__];
#endif
@interface {{classPrefix}}Logger : NSObject
+(instancetype)sharedLogger;
/**
* Enabled switch, default NO - default set by {{classPrefix}}Configuration debug property
*/
@property (nonatomic, assign, getter=isEnabled) BOOL enabled;
/**
* Debug file location, default log in console
*/
@property (nonatomic, strong) NSString *loggingFile;
/**
* Log file handler, this property is used by sdk internally.
*/
@property (nonatomic, strong, readonly) NSFileHandle *loggingFileHandler;
/**
* Log debug message
*/
-(void)debugLog:(NSString *)method message:(NSString *)format, ...;
/**
* Logs request and response
*
* @param response NSURLResponse for the HTTP request.
* @param responseObject response object of the HTTP request.
* @param request The HTTP request.
* @param error The error of the HTTP request.
*/
- (void)logResponse:(NSURLResponse *)response responseObject:(id)responseObject request:(NSURLRequest *)request error:(NSError *)error;
@end

View File

@ -3,11 +3,57 @@
#import "{{classPrefix}}QueryParamCollection.h" #import "{{classPrefix}}QueryParamCollection.h"
#import <ISO8601/ISO8601.h> #import <ISO8601/ISO8601.h>
@interface {{classPrefix}}Sanitizer () NSString * {{classPrefix}}PercentEscapedStringFromString(NSString *string) {
static NSString * const k{{classPrefix}}CharactersGeneralDelimitersToEncode = @":#[]@";
static NSString * const k{{classPrefix}}CharactersSubDelimitersToEncode = @"!$&'()*+,;=";
NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy];
[allowedCharacterSet removeCharactersInString:[k{{classPrefix}}CharactersGeneralDelimitersToEncode stringByAppendingString:k{{classPrefix}}CharactersSubDelimitersToEncode]];
static NSUInteger const batchSize = 50;
NSUInteger index = 0;
NSMutableString *escaped = @"".mutableCopy;
while (index < string.length) {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wgnu"
NSUInteger length = MIN(string.length - index, batchSize);
#pragma GCC diagnostic pop
NSRange range = NSMakeRange(index, length);
// To avoid breaking up character sequences such as 👴🏻👮🏽
range = [string rangeOfComposedCharacterSequencesForRange:range];
NSString *substring = [string substringWithRange:range];
NSString *encoded = [substring stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet];
[escaped appendString:encoded];
index += range.length;
}
return escaped;
}
@interface SWGSanitizer ()
@property (nonatomic, strong) NSRegularExpression* jsonHeaderTypeExpression;
@end @end
@implementation {{classPrefix}}Sanitizer @implementation SWGSanitizer
static NSString * kApplicationJSONType = @"application/json";
-(instancetype)init {
self = [super init];
if ( !self ) {
return nil;
}
_jsonHeaderTypeExpression = [NSRegularExpression regularExpressionWithPattern:@"(.*)application(.*)json(.*)" options:NSRegularExpressionCaseInsensitive error:nil];
return self;
}
- (id) sanitizeForSerialization:(id) object { - (id) sanitizeForSerialization:(id) object {
if (object == nil) { if (object == nil) {
@ -17,7 +63,7 @@
return object; return object;
} }
else if ([object isKindOfClass:[NSDate class]]) { else if ([object isKindOfClass:[NSDate class]]) {
return [object ISO8601String]; return [self dateParameterToString:object];
} }
else if ([object isKindOfClass:[NSArray class]]) { else if ([object isKindOfClass:[NSArray class]]) {
NSArray *objectArray = object; NSArray *objectArray = object;
@ -61,7 +107,7 @@
return [param stringValue]; return [param stringValue];
} }
else if ([param isKindOfClass:[NSDate class]]) { else if ([param isKindOfClass:[NSDate class]]) {
return [param ISO8601String]; return [self dateParameterToString:param];
} }
else if ([param isKindOfClass:[NSArray class]]) { else if ([param isKindOfClass:[NSArray class]]) {
NSMutableArray *mutableParam = [NSMutableArray array]; NSMutableArray *mutableParam = [NSMutableArray array];
@ -79,4 +125,44 @@
} }
} }
- (NSString *)dateParameterToString:(id)param {
return [param ISO8601String];
}
#pragma mark - Utility Methods
/*
* Detect `Accept` from accepts
*/
- (NSString *) selectHeaderAccept:(NSArray *)accepts {
if (accepts.count == 0) {
return @"";
}
NSMutableArray *lowerAccepts = [[NSMutableArray alloc] initWithCapacity:[accepts count]];
for (NSString *string in accepts) {
if ([self.jsonHeaderTypeExpression matchesInString:string options:0 range:NSMakeRange(0, [string length])].count > 0) {
return kApplicationJSONType;
}
[lowerAccepts addObject:[string lowercaseString]];
}
return [lowerAccepts componentsJoinedByString:@", "];
}
/*
* Detect `Content-Type` from contentTypes
*/
- (NSString *) selectHeaderContentType:(NSArray *)contentTypes {
if (contentTypes.count == 0) {
return kApplicationJSONType;
}
NSMutableArray *lowerContentTypes = [[NSMutableArray alloc] initWithCapacity:[contentTypes count]];
for (NSString *string in contentTypes) {
if([self.jsonHeaderTypeExpression matchesInString:string options:0 range:NSMakeRange(0, [string length])].count > 0){
return kApplicationJSONType;
}
[lowerContentTypes addObject:[string lowercaseString]];
}
return [lowerContentTypes firstObject];
}
@end @end

View File

@ -6,6 +6,8 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
extern NSString * {{classPrefix}}PercentEscapedStringFromString(NSString *string);
@protocol {{classPrefix}}Sanitizer <NSObject> @protocol {{classPrefix}}Sanitizer <NSObject>
/** /**
@ -20,6 +22,24 @@
*/ */
- (NSString *) parameterToString: (id) param; - (NSString *) parameterToString: (id) param;
/**
* Detects Accept header from accepts NSArray
*
* @param accepts NSArray of header
*
* @return The Accept header
*/
-(NSString *) selectHeaderAccept:(NSArray *)accepts;
/**
* Detects Content-Type header from contentTypes NSArray
*
* @param contentTypes NSArray of header
*
* @return The Content-Type header
*/
-(NSString *) selectHeaderContentType:(NSArray *)contentTypes;
@end @end
@interface {{classPrefix}}Sanitizer : NSObject <{{classPrefix}}Sanitizer> @interface {{classPrefix}}Sanitizer : NSObject <{{classPrefix}}Sanitizer>

View File

@ -15,7 +15,7 @@ static {{classname}}* singletonAPI = nil;
#pragma mark - Initialize methods #pragma mark - Initialize methods
- (id) init { - (instancetype) init {
self = [super init]; self = [super init];
if (self) { if (self) {
{{classPrefix}}Configuration *config = [{{classPrefix}}Configuration sharedConfig]; {{classPrefix}}Configuration *config = [{{classPrefix}}Configuration sharedConfig];
@ -28,7 +28,7 @@ static {{classname}}* singletonAPI = nil;
return self; return self;
} }
- (id) initWithApiClient:({{classPrefix}}ApiClient *)apiClient { - (instancetype) initWithApiClient:({{classPrefix}}ApiClient *)apiClient {
self = [super init]; self = [super init];
if (self) { if (self) {
self.apiClient = apiClient; self.apiClient = apiClient;
@ -92,9 +92,7 @@ static {{classname}}* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"{{path}}"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"{{path}}"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
{{#pathParams}} {{#pathParams}}
@ -121,22 +119,16 @@ static {{classname}}* singletonAPI = nil;
{{/headerParams}} {{/headerParams}}
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [{{classPrefix}}ApiClient selectHeaderAccept:@[{{#produces}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}}]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[{{#produces}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}}]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [{{classPrefix}}ApiClient selectHeaderContentType:@[{{#consumes}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}}]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[{{#consumes}}@"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}}]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[{{#authMethods}}@"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}}]; NSArray *authSettings = @[{{#authMethods}}@"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}}];

View File

View File

@ -7,6 +7,7 @@
#import "SWGConfiguration.h" #import "SWGConfiguration.h"
#import "SWGResponseDeserializer.h" #import "SWGResponseDeserializer.h"
#import "SWGSanitizer.h" #import "SWGSanitizer.h"
#import "SWGLogger.h"
/** /**
* NOTE: This class is auto generated by the swagger code generator program. * NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen * https://github.com/swagger-api/swagger-codegen
@ -30,13 +31,6 @@
*/ */
extern NSString *const SWGResponseObjectErrorKey; extern NSString *const SWGResponseObjectErrorKey;
/**
* Log debug message macro
*/
#ifndef SWGDebugLog
#define SWGDebugLog(format, ...) [SWGApiClient debugLog:[NSString stringWithFormat:@"%s", __PRETTY_FUNCTION__] message: format, ##__VA_ARGS__];
#endif
@interface SWGApiClient : AFHTTPSessionManager @interface SWGApiClient : AFHTTPSessionManager
@property(nonatomic, assign) NSURLRequestCachePolicy cachePolicy; @property(nonatomic, assign) NSURLRequestCachePolicy cachePolicy;
@ -117,15 +111,6 @@ extern NSString *const SWGResponseObjectErrorKey;
*/ */
+(void) cancelRequest:(NSNumber*)requestId; +(void) cancelRequest:(NSNumber*)requestId;
/**
* Gets URL encoded NSString
*
* @param unescaped The string which will be escaped.
*
* @return The escaped string.
*/
+(NSString*) escape:(id)unescaped;
/** /**
* Customizes the behavior when the reachability changed * Customizes the behavior when the reachability changed
* *
@ -138,24 +123,6 @@ extern NSString *const SWGResponseObjectErrorKey;
*/ */
- (void)configureCacheReachibility; - (void)configureCacheReachibility;
/**
* Detects Accept header from accepts NSArray
*
* @param accepts NSArray of header
*
* @return The Accept header
*/
+(NSString *) selectHeaderAccept:(NSArray *)accepts;
/**
* Detects Content-Type header from contentTypes NSArray
*
* @param contentTypes NSArray of header
*
* @return The Content-Type header
*/
+(NSString *) selectHeaderContentType:(NSArray *)contentTypes;
/** /**
* Sets header for request * Sets header for request
* *
@ -176,19 +143,6 @@ extern NSString *const SWGResponseObjectErrorKey;
queryParams:(NSDictionary **)querys queryParams:(NSDictionary **)querys
WithAuthSettings:(NSArray *)authSettings; WithAuthSettings:(NSArray *)authSettings;
/**
* Logs request and response
*
* @param response NSURLResponse for the HTTP request.
* @param responseObject response object of the HTTP request.
* @param request The HTTP request.
* @param error The error of the HTTP request.
*/
- (void)logResponse:(NSURLResponse *)response
responseObject:(id)responseObject
request:(NSURLRequest *)request
error:(NSError *)error;
/** /**
* Performs request * Performs request
* *
@ -226,9 +180,5 @@ extern NSString *const SWGResponseObjectErrorKey;
*/ */
- (AFSecurityPolicy *) customSecurityPolicy; - (AFSecurityPolicy *) customSecurityPolicy;
/**
* Log debug message
*/
+(void)debugLog:(NSString *)method message:(NSString *)format, ...;
@end @end

View File

@ -2,7 +2,7 @@
NSString *const SWGResponseObjectErrorKey = @"SWGResponseObject"; NSString *const SWGResponseObjectErrorKey = @"SWGResponseObject";
static long requestId = 0; static NSUInteger requestId = 0;
static bool offlineState = false; static bool offlineState = false;
static NSMutableSet * queuedRequests = nil; static NSMutableSet * queuedRequests = nil;
static bool cacheEnabled = false; static bool cacheEnabled = false;
@ -36,7 +36,7 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
@interface SWGApiClient () @interface SWGApiClient ()
@property (readwrite, nonatomic) NSDictionary *HTTPResponseHeaders; @property (nonatomic, strong) NSDictionary* HTTPResponseHeaders;
@end @end
@ -88,49 +88,6 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
[self.requestSerializer setValue:value forHTTPHeaderField:forKey]; [self.requestSerializer setValue:value forHTTPHeaderField:forKey];
} }
#pragma mark - Log Methods
+ (void)debugLog:(NSString *)method
message:(NSString *)format, ... {
SWGConfiguration *config = [SWGConfiguration sharedConfig];
if (!config.debug) {
return;
}
NSMutableString *message = [NSMutableString stringWithCapacity:1];
if (method) {
[message appendString:[NSString stringWithFormat:@"%@: ", method]];
}
va_list args;
va_start(args, format);
[message appendString:[[NSString alloc] initWithFormat:format arguments:args]];
// If set logging file handler, log into file,
// otherwise log into console.
if (config.loggingFileHanlder) {
[config.loggingFileHanlder seekToEndOfFile];
[config.loggingFileHanlder writeData:[message dataUsingEncoding:NSUTF8StringEncoding]];
}
else {
NSLog(@"%@", message);
}
va_end(args);
}
- (void)logResponse:(NSURLResponse *)response responseObject:(id)responseObject request:(NSURLRequest *)request error:(NSError *)error {
NSString *message = [NSString stringWithFormat:@"\n[DEBUG] HTTP request body \n~BEGIN~\n %@\n~END~\n"\
"[DEBUG] HTTP response body \n~BEGIN~\n %@\n~END~\n",
[[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding],
responseObject];
SWGDebugLog(message);
}
#pragma mark - Cache Methods #pragma mark - Cache Methods
+(void)clearCache { +(void)clearCache {
@ -151,70 +108,6 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
[NSURLCache setSharedURLCache:cache]; [NSURLCache setSharedURLCache:cache];
} }
#pragma mark - Utility Methods
/*
* Detect `Accept` from accepts
*/
+ (NSString *) selectHeaderAccept:(NSArray *)accepts {
if (accepts == nil || [accepts count] == 0) {
return @"";
}
NSMutableArray *lowerAccepts = [[NSMutableArray alloc] initWithCapacity:[accepts count]];
for (NSString *string in accepts) {
NSString * lowerAccept = [string lowercaseString];
// use rangeOfString instead of containsString for iOS 7 support
if ([lowerAccept rangeOfString:@"application/json"].location != NSNotFound) {
return @"application/json";
}
[lowerAccepts addObject:lowerAccept];
}
if (lowerAccepts.count == 1) {
return [lowerAccepts firstObject];
}
return [lowerAccepts componentsJoinedByString:@", "];
}
/*
* Detect `Content-Type` from contentTypes
*/
+ (NSString *) selectHeaderContentType:(NSArray *)contentTypes
{
if (contentTypes == nil || [contentTypes count] == 0) {
return @"application/json";
}
NSMutableArray *lowerContentTypes = [[NSMutableArray alloc] initWithCapacity:[contentTypes count]];
[contentTypes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[lowerContentTypes addObject:[obj lowercaseString]];
}];
if ([lowerContentTypes containsObject:@"application/json"]) {
return @"application/json";
}
else {
return lowerContentTypes[0];
}
}
+ (NSString*)escape:(id)unescaped {
if ([unescaped isKindOfClass:[NSString class]]){
return (NSString *)CFBridgingRelease
(CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge CFStringRef) unescaped,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8));
}
else {
return [NSString stringWithFormat:@"%@", unescaped];
}
}
#pragma mark - Request Methods #pragma mark - Request Methods
+(unsigned long)requestQueueSize { +(unsigned long)requestQueueSize {
@ -223,14 +116,12 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
+(NSNumber*) nextRequestId { +(NSNumber*) nextRequestId {
@synchronized(self) { @synchronized(self) {
long nextId = ++requestId; return @(++requestId);
SWGDebugLog(@"got id %ld", nextId);
return [NSNumber numberWithLong:nextId];
} }
} }
+(NSNumber*) queueRequest { +(NSNumber*) queueRequest {
NSNumber* requestId = [SWGApiClient nextRequestId]; NSNumber* requestId = [[self class] nextRequestId];
SWGDebugLog(@"added %@ to request queue", requestId); SWGDebugLog(@"added %@ to request queue", requestId);
[queuedRequests addObject:requestId]; [queuedRequests addObject:requestId];
return requestId; return requestId;
@ -294,7 +185,7 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
if (![strongSelf executeRequestWithId:requestId]) { if (![strongSelf executeRequestWithId:requestId]) {
return; return;
} }
[strongSelf logResponse:response responseObject:responseObject request:request error:error]; SWGDebugLogResponse(response, responseObject,request,error);
strongSelf.HTTPResponseHeaders = SWG__headerFieldsForResponse(response); strongSelf.HTTPResponseHeaders = SWG__headerFieldsForResponse(response);
if(!error) { if(!error) {
completionBlock(responseObject, nil); completionBlock(responseObject, nil);
@ -321,7 +212,7 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
return; return;
} }
strongSelf.HTTPResponseHeaders = SWG__headerFieldsForResponse(response); strongSelf.HTTPResponseHeaders = SWG__headerFieldsForResponse(response);
[strongSelf logResponse:response responseObject:responseObject request:request error:error]; SWGDebugLogResponse(response, responseObject,request,error);
if(error) { if(error) {
NSMutableDictionary *userInfo = [error.userInfo mutableCopy]; NSMutableDictionary *userInfo = [error.userInfo mutableCopy];
if (responseObject) { if (responseObject) {
@ -370,14 +261,13 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
self.requestSerializer = [AFHTTPRequestSerializer serializer]; self.requestSerializer = [AFHTTPRequestSerializer serializer];
} }
else { else {
NSAssert(false, @"unsupport request type %@", requestContentType); NSAssert(NO, @"Unsupported request type %@", requestContentType);
} }
// setting response serializer // setting response serializer
if ([responseContentType isEqualToString:@"application/json"]) { if ([responseContentType isEqualToString:@"application/json"]) {
self.responseSerializer = [SWGJSONResponseSerializer serializer]; self.responseSerializer = [SWGJSONResponseSerializer serializer];
} } else {
else {
self.responseSerializer = [AFHTTPResponseSerializer serializer]; self.responseSerializer = [AFHTTPResponseSerializer serializer];
} }
@ -393,8 +283,9 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
NSMutableString *resourcePath = [NSMutableString stringWithString:path]; NSMutableString *resourcePath = [NSMutableString stringWithString:path];
[pathParams enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { [pathParams enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[resourcePath replaceCharactersInRange:[resourcePath rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", key, @"}"]] NSString * safeString = ([obj isKindOfClass:[NSString class]]) ? obj : [NSString stringWithFormat:@"%@", obj];
withString:[SWGApiClient escape:obj]]; safeString = SWGPercentEscapedStringFromString(safeString);
[resourcePath replaceCharactersInRange:[resourcePath rangeOfString:[NSString stringWithFormat:@"{%@}", key]] withString:safeString];
}]; }];
NSMutableURLRequest * request = nil; NSMutableURLRequest * request = nil;
@ -438,10 +329,7 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
} }
// request cache // request cache
BOOL hasHeaderParams = false; BOOL hasHeaderParams = [headerParams count] > 0;
if (headerParams != nil && [headerParams count] > 0) {
hasHeaderParams = true;
}
if (offlineState) { if (offlineState) {
SWGDebugLog(@"%@ cache forced", resourcePath); SWGDebugLog(@"%@ cache forced", resourcePath);
[request setCachePolicy:NSURLRequestReturnCacheDataDontLoad]; [request setCachePolicy:NSURLRequestReturnCacheDataDontLoad];
@ -462,9 +350,7 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
} }
[self.requestSerializer setValue:responseContentType forHTTPHeaderField:@"Accept"]; [self.requestSerializer setValue:responseContentType forHTTPHeaderField:@"Accept"];
[self postProcessRequest:request];
// Always disable cookies!
[request setHTTPShouldHandleCookies:NO];
NSNumber* requestId = [SWGApiClient queueRequest]; NSNumber* requestId = [SWGApiClient queueRequest];
if ([responseType isEqualToString:@"NSURL*"] || [responseType isEqualToString:@"NSURL"]) { if ([responseType isEqualToString:@"NSURL*"] || [responseType isEqualToString:@"NSURL"]) {
@ -485,59 +371,66 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
return requestId; return requestId;
} }
//Added for easier override to modify request
-(void)postProcessRequest:(NSMutableURLRequest *)request {
// Always disable cookies!
[request setHTTPShouldHandleCookies:NO];
}
#pragma mark - #pragma mark -
- (NSString*) pathWithQueryParamsToString:(NSString*) path - (NSString*) pathWithQueryParamsToString:(NSString*) path
queryParams:(NSDictionary*) queryParams { queryParams:(NSDictionary*) queryParams {
if(queryParams.count == 0) {
return path;
}
NSString * separator = nil; NSString * separator = nil;
int counter = 0; NSUInteger counter = 0;
NSMutableString * requestUrl = [NSMutableString stringWithFormat:@"%@", path]; NSMutableString * requestUrl = [NSMutableString stringWithFormat:@"%@", path];
if (queryParams != nil){
for(NSString * key in [queryParams keyEnumerator]){
if (counter == 0) separator = @"?";
else separator = @"&";
id queryParam = [queryParams valueForKey:key];
if ([queryParam isKindOfClass:[NSString class]]){
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator,
[SWGApiClient escape:key], [SWGApiClient escape:[queryParams valueForKey:key]]]];
}
else if ([queryParam isKindOfClass:[SWGQueryParamCollection class]]){
SWGQueryParamCollection * coll = (SWGQueryParamCollection*) queryParam;
NSArray* values = [coll values];
NSString* format = [coll format];
if ([format isEqualToString:@"csv"]) { NSDictionary *separatorStyles = @{@"csv" : @",",
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, @"tsv" : @"\t",
[SWGApiClient escape:key], [NSString stringWithFormat:@"%@", [values componentsJoinedByString:@","]]]]; @"pipes": @"|"
};
} for(NSString * key in [queryParams keyEnumerator]){
else if ([format isEqualToString:@"tsv"]) { if (counter == 0) {
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, separator = @"?";
[SWGApiClient escape:key], [NSString stringWithFormat:@"%@", [values componentsJoinedByString:@"\t"]]]]; } else {
separator = @"&";
}
else if ([format isEqualToString:@"pipes"]) {
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator,
[SWGApiClient escape:key], [NSString stringWithFormat:@"%@", [values componentsJoinedByString:@"|"]]]];
}
else if ([format isEqualToString:@"multi"]) {
for(id obj in values) {
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator,
[SWGApiClient escape:key], [NSString stringWithFormat:@"%@", obj]]];
counter += 1;
}
}
}
else {
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator,
[SWGApiClient escape:key], [NSString stringWithFormat:@"%@", [queryParams valueForKey:key]]]];
}
counter += 1;
} }
id queryParam = [queryParams valueForKey:key];
if(!queryParam) {
continue;
}
NSString *safeKey = SWGPercentEscapedStringFromString(key);
if ([queryParam isKindOfClass:[NSString class]]){
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, safeKey, SWGPercentEscapedStringFromString(queryParam)]];
} else if ([queryParam isKindOfClass:[SWGQueryParamCollection class]]){
SWGQueryParamCollection * coll = (SWGQueryParamCollection*) queryParam;
NSArray* values = [coll values];
NSString* format = [coll format];
if([format isEqualToString:@"multi"]) {
for(id obj in values) {
if (counter > 0) {
separator = @"&";
}
NSString * safeValue = SWGPercentEscapedStringFromString([NSString stringWithFormat:@"%@",obj]);
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, safeKey, safeValue]];
counter += 1;
}
continue;
}
NSString * separatorStyle = separatorStyles[format];
NSString * safeValue = SWGPercentEscapedStringFromString([values componentsJoinedByString:separatorStyle]);
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, safeKey, safeValue]];
} else {
NSString * safeValue = SWGPercentEscapedStringFromString([NSString stringWithFormat:@"%@",queryParam]);
[requestUrl appendString:[NSString stringWithFormat:@"%@%@=%@", separator, safeKey, safeValue]];
}
counter += 1;
} }
return requestUrl; return requestUrl;
} }
@ -558,15 +451,17 @@ static NSString * SWG__fileNameForResponse(NSURLResponse *response) {
SWGConfiguration *config = [SWGConfiguration sharedConfig]; SWGConfiguration *config = [SWGConfiguration sharedConfig];
for (NSString *auth in authSettings) { for (NSString *auth in authSettings) {
NSDictionary *authSetting = [[config authSettings] objectForKey:auth]; NSDictionary *authSetting = [config authSettings][auth];
if(!authSetting) { // auth setting is set only if the key is non-empty
if (authSetting) { // auth setting is set only if the key is non-empty continue;
if ([authSetting[@"in"] isEqualToString:@"header"] && [authSetting[@"key"] length] != 0) { }
[headersWithAuth setObject:authSetting[@"value"] forKey:authSetting[@"key"]]; NSString *type = authSetting[@"in"];
} NSString *key = authSetting[@"key"];
else if ([authSetting[@"in"] isEqualToString:@"query"] && [authSetting[@"key"] length] != 0) { NSString *value = authSetting[@"value"];
[querysWithAuth setObject:authSetting[@"value"] forKey:authSetting[@"key"]]; if ([type isEqualToString:@"header"] && [key length] > 0 ) {
} headersWithAuth[key] = value;
} else if ([type isEqualToString:@"query"] && [key length] != 0) {
querysWithAuth[key] = value;
} }
} }

View File

@ -1,5 +1,6 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "SWGApiClient.h" #import "SWGApiClient.h"
#import "SWGLogger.h"
/** The `SWGConfiguration` class manages the configurations for the sdk. /** The `SWGConfiguration` class manages the configurations for the sdk.
* *
@ -12,6 +13,11 @@
@interface SWGConfiguration : NSObject @interface SWGConfiguration : NSObject
/**
* Default api logger
*/
@property (nonatomic, strong) SWGLogger * logger;
/** /**
* Default api client * Default api client
*/ */
@ -37,7 +43,7 @@
@property (readonly, nonatomic, strong) NSDictionary *apiKeyPrefix; @property (readonly, nonatomic, strong) NSDictionary *apiKeyPrefix;
/** /**
* Usename for HTTP Basic Authentication * Username for HTTP Basic Authentication
*/ */
@property (nonatomic) NSString *username; @property (nonatomic) NSString *username;
@ -56,25 +62,11 @@
*/ */
@property (nonatomic) NSString *tempFolderPath; @property (nonatomic) NSString *tempFolderPath;
/**
* Logging Settings
*/
/** /**
* Debug switch, default false * Debug switch, default false
*/ */
@property (nonatomic) BOOL debug; @property (nonatomic) BOOL debug;
/**
* Debug file location, default log in console
*/
@property (nonatomic) NSString *loggingFile;
/**
* Log file handler, this property is used by sdk internally.
*/
@property (nonatomic, readonly) NSFileHandle *loggingFileHanlder;
/** /**
* Gets configuration singleton instance * Gets configuration singleton instance
*/ */
@ -143,7 +135,7 @@
- (NSString *) getAccessToken; - (NSString *) getAccessToken;
/** /**
* Gets Authentication Setings * Gets Authentication Settings
*/ */
- (NSDictionary *) authSettings; - (NSDictionary *) authSettings;

View File

@ -30,12 +30,10 @@
self.username = @""; self.username = @"";
self.password = @""; self.password = @"";
self.accessToken= @""; self.accessToken= @"";
self.tempFolderPath = nil;
self.debug = NO;
self.verifySSL = YES; self.verifySSL = YES;
self.loggingFile = nil;
self.mutableApiKey = [NSMutableDictionary dictionary]; self.mutableApiKey = [NSMutableDictionary dictionary];
self.mutableApiKeyPrefix = [NSMutableDictionary dictionary]; self.mutableApiKeyPrefix = [NSMutableDictionary dictionary];
self.logger = [SWGLogger sharedLogger];
} }
return self; return self;
} }
@ -43,11 +41,13 @@
#pragma mark - Instance Methods #pragma mark - Instance Methods
- (NSString *) getApiKeyWithPrefix:(NSString *)key { - (NSString *) getApiKeyWithPrefix:(NSString *)key {
if ([self.apiKeyPrefix objectForKey:key] && [self.apiKey objectForKey:key] != (id)[NSNull null] && [[self.apiKey objectForKey:key] length] != 0) { // both api key prefix and api key are set NSString *prefix = self.apiKeyPrefix[key];
return [NSString stringWithFormat:@"%@ %@", [self.apiKeyPrefix objectForKey:key], [self.apiKey objectForKey:key]]; NSString *apiKey = self.apiKey[key];
if (prefix && apiKey != (id)[NSNull null] && apiKey.length > 0) { // both api key prefix and api key are set
return [NSString stringWithFormat:@"%@ %@", prefix, apiKey];
} }
else if ([self.apiKey objectForKey:key] != (id)[NSNull null] && [[self.apiKey objectForKey:key] length] != 0) { // only api key, no api key prefix else if (apiKey != (id)[NSNull null] && apiKey.length > 0) { // only api key, no api key prefix
return [NSString stringWithFormat:@"%@", [self.apiKey objectForKey:key]]; return [NSString stringWithFormat:@"%@", self.apiKey[key]];
} }
else { // return empty string if nothing is set else { // return empty string if nothing is set
return @""; return @"";
@ -70,8 +70,7 @@
- (NSString *) getAccessToken { - (NSString *) getAccessToken {
if (self.accessToken.length == 0) { // token not set, return empty string if (self.accessToken.length == 0) { // token not set, return empty string
return @""; return @"";
} } else {
else {
return [NSString stringWithFormat:@"Bearer %@", self.accessToken]; return [NSString stringWithFormat:@"Bearer %@", self.accessToken];
} }
} }
@ -94,20 +93,6 @@
[self.mutableApiKeyPrefix removeObjectForKey:identifier]; [self.mutableApiKeyPrefix removeObjectForKey:identifier];
} }
- (void) setLoggingFile:(NSString *)loggingFile {
// close old file handler
if ([self.loggingFileHanlder isKindOfClass:[NSFileHandle class]]) {
[self.loggingFileHanlder closeFile];
}
_loggingFile = loggingFile;
_loggingFileHanlder = [NSFileHandle fileHandleForWritingAtPath:_loggingFile];
if (_loggingFileHanlder == nil) {
[[NSFileManager defaultManager] createFileAtPath:_loggingFile contents:nil attributes:nil];
_loggingFileHanlder = [NSFileHandle fileHandleForWritingAtPath:_loggingFile];
}
}
#pragma mark - Getter Methods #pragma mark - Getter Methods
- (NSDictionary *) apiKey { - (NSDictionary *) apiKey {
@ -139,4 +124,12 @@
}; };
} }
-(BOOL)debug {
return self.logger.isEnabled;
}
-(void)setDebug:(BOOL)debug {
self.logger.enabled = debug;
}
@end @end

View File

@ -0,0 +1,54 @@
#import <Foundation/Foundation.h>
/**
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen
* Do not edit the class manually.
*/
#ifndef SWGDebugLogResponse
#define SWGDebugLogResponse(response, responseObject,request, error) [[SWGLogger sharedLogger] logResponse:response responseObject:responseObject request:request error:error];
#endif
/**
* Log debug message macro
*/
#ifndef SWGDebugLog
#define SWGDebugLog(format, ...) [[SWGLogger sharedLogger] debugLog:[NSString stringWithFormat:@"%s", __PRETTY_FUNCTION__] message: format, ##__VA_ARGS__];
#endif
@interface SWGLogger : NSObject
+(instancetype)sharedLogger;
/**
* Enabled switch, default NO - default set by SWGConfiguration debug property
*/
@property (nonatomic, assign, getter=isEnabled) BOOL enabled;
/**
* Debug file location, default log in console
*/
@property (nonatomic, strong) NSString *loggingFile;
/**
* Log file handler, this property is used by sdk internally.
*/
@property (nonatomic, strong, readonly) NSFileHandle *loggingFileHandler;
/**
* Log debug message
*/
-(void)debugLog:(NSString *)method message:(NSString *)format, ...;
/**
* Logs request and response
*
* @param response NSURLResponse for the HTTP request.
* @param responseObject response object of the HTTP request.
* @param request The HTTP request.
* @param error The error of the HTTP request.
*/
- (void)logResponse:(NSURLResponse *)response responseObject:(id)responseObject request:(NSURLRequest *)request error:(NSError *)error;
@end

View File

@ -0,0 +1,74 @@
#import "SWGLogger.h"
@interface SWGLogger ()
@end
@implementation SWGLogger
+ (instancetype) sharedLogger {
static SWGLogger *shardLogger = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shardLogger = [[self alloc] init];
});
return shardLogger;
}
#pragma mark - Log Methods
- (void)debugLog:(NSString *)method
message:(NSString *)format, ... {
if (!self.isEnabled) {
return;
}
NSMutableString *message = [NSMutableString stringWithCapacity:1];
if (method) {
[message appendFormat:@"%@: ", method];
}
va_list args;
va_start(args, format);
[message appendString:[[NSString alloc] initWithFormat:format arguments:args]];
// If set logging file handler, log into file,
// otherwise log into console.
if (self.loggingFileHandler) {
[self.loggingFileHandler seekToEndOfFile];
[self.loggingFileHandler writeData:[message dataUsingEncoding:NSUTF8StringEncoding]];
} else {
NSLog(@"%@", message);
}
va_end(args);
}
- (void)logResponse:(NSURLResponse *)response responseObject:(id)responseObject request:(NSURLRequest *)request error:(NSError *)error {
NSString *message = [NSString stringWithFormat:@"\n[DEBUG] HTTP request body \n~BEGIN~\n %@\n~END~\n"\
"[DEBUG] HTTP response body \n~BEGIN~\n %@\n~END~\n",
[[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding],
responseObject];
SWGDebugLog(message);
}
- (void) setLoggingFile:(NSString *)loggingFile {
if(_loggingFile == loggingFile) {
return;
}
// close old file handler
if ([self.loggingFileHandler isKindOfClass:[NSFileHandle class]]) {
[self.loggingFileHandler closeFile];
}
_loggingFile = loggingFile;
_loggingFileHandler = [NSFileHandle fileHandleForWritingAtPath:_loggingFile];
if (_loggingFileHandler == nil) {
[[NSFileManager defaultManager] createFileAtPath:_loggingFile contents:nil attributes:nil];
_loggingFileHandler = [NSFileHandle fileHandleForWritingAtPath:_loggingFile];
}
}
@end

View File

@ -13,7 +13,7 @@ static SWGPetApi* singletonAPI = nil;
#pragma mark - Initialize methods #pragma mark - Initialize methods
- (id) init { - (instancetype) init {
self = [super init]; self = [super init];
if (self) { if (self) {
SWGConfiguration *config = [SWGConfiguration sharedConfig]; SWGConfiguration *config = [SWGConfiguration sharedConfig];
@ -26,7 +26,7 @@ static SWGPetApi* singletonAPI = nil;
return self; return self;
} }
- (id) initWithApiClient:(SWGApiClient *)apiClient { - (instancetype) initWithApiClient:(SWGApiClient *)apiClient {
self = [super init]; self = [super init];
if (self) { if (self) {
self.apiClient = apiClient; self.apiClient = apiClient;
@ -79,31 +79,23 @@ static SWGPetApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[@"application/json", @"application/xml"]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[@"application/json", @"application/xml"]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[@"petstore_auth"]; NSArray *authSettings = @[@"petstore_auth"];
@ -151,9 +143,7 @@ static SWGPetApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/{petId}"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/{petId}"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
if (petId != nil) { if (petId != nil) {
@ -168,22 +158,16 @@ static SWGPetApi* singletonAPI = nil;
} }
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[@"petstore_auth"]; NSArray *authSettings = @[@"petstore_auth"];
@ -222,9 +206,7 @@ static SWGPetApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/findByStatus"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/findByStatus"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
@ -235,22 +217,16 @@ static SWGPetApi* singletonAPI = nil;
} }
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[@"petstore_auth"]; NSArray *authSettings = @[@"petstore_auth"];
@ -289,9 +265,7 @@ static SWGPetApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/findByTags"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/findByTags"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
@ -302,22 +276,16 @@ static SWGPetApi* singletonAPI = nil;
} }
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[@"petstore_auth"]; NSArray *authSettings = @[@"petstore_auth"];
@ -361,9 +329,7 @@ static SWGPetApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/{petId}"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/{petId}"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
if (petId != nil) { if (petId != nil) {
@ -373,22 +339,16 @@ static SWGPetApi* singletonAPI = nil;
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[@"petstore_auth", @"api_key"]; NSArray *authSettings = @[@"petstore_auth", @"api_key"];
@ -427,31 +387,23 @@ static SWGPetApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[@"application/json", @"application/xml"]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[@"application/json", @"application/xml"]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[@"petstore_auth"]; NSArray *authSettings = @[@"petstore_auth"];
@ -502,9 +454,7 @@ static SWGPetApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/{petId}"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/{petId}"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
if (petId != nil) { if (petId != nil) {
@ -514,22 +464,16 @@ static SWGPetApi* singletonAPI = nil;
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[@"application/x-www-form-urlencoded"]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[@"application/x-www-form-urlencoded"]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[@"petstore_auth"]; NSArray *authSettings = @[@"petstore_auth"];
@ -585,9 +529,7 @@ static SWGPetApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/{petId}/uploadImage"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/pet/{petId}/uploadImage"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
if (petId != nil) { if (petId != nil) {
@ -597,22 +539,16 @@ static SWGPetApi* singletonAPI = nil;
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[@"multipart/form-data"]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[@"multipart/form-data"]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[@"petstore_auth"]; NSArray *authSettings = @[@"petstore_auth"];

View File

@ -6,6 +6,8 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
extern NSString * SWGPercentEscapedStringFromString(NSString *string);
@protocol SWGSanitizer <NSObject> @protocol SWGSanitizer <NSObject>
/** /**
@ -20,6 +22,24 @@
*/ */
- (NSString *) parameterToString: (id) param; - (NSString *) parameterToString: (id) param;
/**
* Detects Accept header from accepts NSArray
*
* @param accepts NSArray of header
*
* @return The Accept header
*/
-(NSString *) selectHeaderAccept:(NSArray *)accepts;
/**
* Detects Content-Type header from contentTypes NSArray
*
* @param contentTypes NSArray of header
*
* @return The Content-Type header
*/
-(NSString *) selectHeaderContentType:(NSArray *)contentTypes;
@end @end
@interface SWGSanitizer : NSObject <SWGSanitizer> @interface SWGSanitizer : NSObject <SWGSanitizer>

View File

@ -3,12 +3,58 @@
#import "SWGQueryParamCollection.h" #import "SWGQueryParamCollection.h"
#import <ISO8601/ISO8601.h> #import <ISO8601/ISO8601.h>
NSString * SWGPercentEscapedStringFromString(NSString *string) {
static NSString * const kSWGCharactersGeneralDelimitersToEncode = @":#[]@";
static NSString * const kSWGCharactersSubDelimitersToEncode = @"!$&'()*+,;=";
NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy];
[allowedCharacterSet removeCharactersInString:[kSWGCharactersGeneralDelimitersToEncode stringByAppendingString:kSWGCharactersSubDelimitersToEncode]];
static NSUInteger const batchSize = 50;
NSUInteger index = 0;
NSMutableString *escaped = @"".mutableCopy;
while (index < string.length) {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wgnu"
NSUInteger length = MIN(string.length - index, batchSize);
#pragma GCC diagnostic pop
NSRange range = NSMakeRange(index, length);
// To avoid breaking up character sequences such as 👴🏻👮🏽
range = [string rangeOfComposedCharacterSequencesForRange:range];
NSString *substring = [string substringWithRange:range];
NSString *encoded = [substring stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet];
[escaped appendString:encoded];
index += range.length;
}
return escaped;
}
@interface SWGSanitizer () @interface SWGSanitizer ()
@property (nonatomic, strong) NSRegularExpression* jsonHeaderTypeExpression;
@end @end
@implementation SWGSanitizer @implementation SWGSanitizer
static NSString * kApplicationJSONType = @"application/json";
-(instancetype)init {
self = [super init];
if ( !self ) {
return nil;
}
_jsonHeaderTypeExpression = [NSRegularExpression regularExpressionWithPattern:@"(.*)application(.*)json(.*)" options:NSRegularExpressionCaseInsensitive error:nil];
return self;
}
- (id) sanitizeForSerialization:(id) object { - (id) sanitizeForSerialization:(id) object {
if (object == nil) { if (object == nil) {
return nil; return nil;
@ -17,7 +63,7 @@
return object; return object;
} }
else if ([object isKindOfClass:[NSDate class]]) { else if ([object isKindOfClass:[NSDate class]]) {
return [object ISO8601String]; return [self dateParameterToString:object];
} }
else if ([object isKindOfClass:[NSArray class]]) { else if ([object isKindOfClass:[NSArray class]]) {
NSArray *objectArray = object; NSArray *objectArray = object;
@ -61,7 +107,7 @@
return [param stringValue]; return [param stringValue];
} }
else if ([param isKindOfClass:[NSDate class]]) { else if ([param isKindOfClass:[NSDate class]]) {
return [param ISO8601String]; return [self dateParameterToString:param];
} }
else if ([param isKindOfClass:[NSArray class]]) { else if ([param isKindOfClass:[NSArray class]]) {
NSMutableArray *mutableParam = [NSMutableArray array]; NSMutableArray *mutableParam = [NSMutableArray array];
@ -79,4 +125,44 @@
} }
} }
- (NSString *)dateParameterToString:(id)param {
return [param ISO8601String];
}
#pragma mark - Utility Methods
/*
* Detect `Accept` from accepts
*/
- (NSString *) selectHeaderAccept:(NSArray *)accepts {
if (accepts.count == 0) {
return @"";
}
NSMutableArray *lowerAccepts = [[NSMutableArray alloc] initWithCapacity:[accepts count]];
for (NSString *string in accepts) {
if ([self.jsonHeaderTypeExpression matchesInString:string options:0 range:NSMakeRange(0, [string length])].count > 0) {
return kApplicationJSONType;
}
[lowerAccepts addObject:[string lowercaseString]];
}
return [lowerAccepts componentsJoinedByString:@", "];
}
/*
* Detect `Content-Type` from contentTypes
*/
- (NSString *) selectHeaderContentType:(NSArray *)contentTypes {
if (contentTypes.count == 0) {
return kApplicationJSONType;
}
NSMutableArray *lowerContentTypes = [[NSMutableArray alloc] initWithCapacity:[contentTypes count]];
for (NSString *string in contentTypes) {
if([self.jsonHeaderTypeExpression matchesInString:string options:0 range:NSMakeRange(0, [string length])].count > 0){
return kApplicationJSONType;
}
[lowerContentTypes addObject:[string lowercaseString]];
}
return [lowerContentTypes firstObject];
}
@end @end

View File

@ -13,7 +13,7 @@ static SWGStoreApi* singletonAPI = nil;
#pragma mark - Initialize methods #pragma mark - Initialize methods
- (id) init { - (instancetype) init {
self = [super init]; self = [super init];
if (self) { if (self) {
SWGConfiguration *config = [SWGConfiguration sharedConfig]; SWGConfiguration *config = [SWGConfiguration sharedConfig];
@ -26,7 +26,7 @@ static SWGStoreApi* singletonAPI = nil;
return self; return self;
} }
- (id) initWithApiClient:(SWGApiClient *)apiClient { - (instancetype) initWithApiClient:(SWGApiClient *)apiClient {
self = [super init]; self = [super init];
if (self) { if (self) {
self.apiClient = apiClient; self.apiClient = apiClient;
@ -84,9 +84,7 @@ static SWGStoreApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/store/order/{orderId}"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/store/order/{orderId}"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
if (orderId != nil) { if (orderId != nil) {
@ -96,22 +94,16 @@ static SWGStoreApi* singletonAPI = nil;
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[]; NSArray *authSettings = @[];
@ -148,31 +140,23 @@ static SWGStoreApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/store/inventory"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/store/inventory"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[@"api_key"]; NSArray *authSettings = @[@"api_key"];
@ -216,9 +200,7 @@ static SWGStoreApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/store/order/{orderId}"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/store/order/{orderId}"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
if (orderId != nil) { if (orderId != nil) {
@ -228,22 +210,16 @@ static SWGStoreApi* singletonAPI = nil;
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[]; NSArray *authSettings = @[];
@ -282,31 +258,23 @@ static SWGStoreApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/store/order"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/store/order"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[]; NSArray *authSettings = @[];

View File

@ -13,7 +13,7 @@ static SWGUserApi* singletonAPI = nil;
#pragma mark - Initialize methods #pragma mark - Initialize methods
- (id) init { - (instancetype) init {
self = [super init]; self = [super init];
if (self) { if (self) {
SWGConfiguration *config = [SWGConfiguration sharedConfig]; SWGConfiguration *config = [SWGConfiguration sharedConfig];
@ -26,7 +26,7 @@ static SWGUserApi* singletonAPI = nil;
return self; return self;
} }
- (id) initWithApiClient:(SWGApiClient *)apiClient { - (instancetype) initWithApiClient:(SWGApiClient *)apiClient {
self = [super init]; self = [super init];
if (self) { if (self) {
self.apiClient = apiClient; self.apiClient = apiClient;
@ -79,31 +79,23 @@ static SWGUserApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[]; NSArray *authSettings = @[];
@ -143,31 +135,23 @@ static SWGUserApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/createWithArray"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/createWithArray"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[]; NSArray *authSettings = @[];
@ -207,31 +191,23 @@ static SWGUserApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/createWithList"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/createWithList"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[]; NSArray *authSettings = @[];
@ -276,9 +252,7 @@ static SWGUserApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/{username}"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/{username}"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
if (username != nil) { if (username != nil) {
@ -288,22 +262,16 @@ static SWGUserApi* singletonAPI = nil;
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[]; NSArray *authSettings = @[];
@ -347,9 +315,7 @@ static SWGUserApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/{username}"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/{username}"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
if (username != nil) { if (username != nil) {
@ -359,22 +325,16 @@ static SWGUserApi* singletonAPI = nil;
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[]; NSArray *authSettings = @[];
@ -416,9 +376,7 @@ static SWGUserApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/login"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/login"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
@ -431,22 +389,16 @@ static SWGUserApi* singletonAPI = nil;
} }
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[]; NSArray *authSettings = @[];
@ -483,31 +435,23 @@ static SWGUserApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/logout"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/logout"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[]; NSArray *authSettings = @[];
@ -554,9 +498,7 @@ static SWGUserApi* singletonAPI = nil;
NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/{username}"]; NSMutableString* resourcePath = [NSMutableString stringWithFormat:@"/user/{username}"];
// remove format in URL if needed // remove format in URL if needed
if ([resourcePath rangeOfString:@".{format}"].location != NSNotFound) { [resourcePath replaceOccurrencesOfString:@".{format}" withString:@".json" options:0 range:NSMakeRange(0,resourcePath.length)];
[resourcePath replaceCharactersInRange: [resourcePath rangeOfString:@".{format}"] withString:@".json"];
}
NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary *pathParams = [[NSMutableDictionary alloc] init];
if (username != nil) { if (username != nil) {
@ -566,22 +508,16 @@ static SWGUserApi* singletonAPI = nil;
NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders]; NSMutableDictionary* headerParams = [NSMutableDictionary dictionaryWithDictionary:self.defaultHeaders];
// HTTP header `Accept` // HTTP header `Accept`
headerParams[@"Accept"] = [SWGApiClient selectHeaderAccept:@[@"application/json", @"application/xml"]]; NSString *acceptHeader = [self.apiClient.sanitizer selectHeaderAccept:@[@"application/json", @"application/xml"]];
if ([headerParams[@"Accept"] length] == 0) { if(acceptHeader.length > 0) {
[headerParams removeObjectForKey:@"Accept"]; headerParams[@"Accept"] = acceptHeader;
} }
// response content type // response content type
NSString *responseContentType; NSString *responseContentType = [[acceptHeader componentsSeparatedByString:@", "] firstObject] ?: @"";
if ([headerParams objectForKey:@"Accept"]) {
responseContentType = [headerParams[@"Accept"] componentsSeparatedByString:@", "][0];
}
else {
responseContentType = @"";
}
// request content type // request content type
NSString *requestContentType = [SWGApiClient selectHeaderContentType:@[]]; NSString *requestContentType = [self.apiClient.sanitizer selectHeaderContentType:@[]];
// Authentication setting // Authentication setting
NSArray *authSettings = @[]; NSArray *authSettings = @[];

View File

@ -1,7 +1,6 @@
#import <XCTest/XCTest.h> #import <XCTest/XCTest.h>
#import <SwaggerClient/SWGApiClient.h> #import <SwaggerClient/SWGApiClient.h>
#import <SwaggerClient/SWGPetApi.h> #import <SwaggerClient/SWGPetApi.h>
#import <SwaggerClient/SWGPet.h>
@interface PetApiTest : XCTestCase { @interface PetApiTest : XCTestCase {
@private @private
@ -165,13 +164,13 @@ which causes an exception when deserializing the data
SWGTag* tag = [[SWGTag alloc] init]; SWGTag* tag = [[SWGTag alloc] init];
tag.name = @"tony"; tag.name = @"tony";
NSLog(@"%@", pet._id); NSLog(@"%@", pet._id);
pet.tags = (id)[[NSArray alloc] initWithObjects:tag, nil]; pet.tags = (id) @[tag];
[api addPetWithBody:pet completionHandler:^(NSError *error) { [api addPetWithBody:pet completionHandler:^(NSError *error) {
if(error) { if(error) {
XCTFail(@"got error %@", error); XCTFail(@"got error %@", error);
} }
NSArray* tags = [[NSArray alloc] initWithObjects:@"tony", nil]; NSArray* tags = @[@"tony",@"tony2"];
[api findPetsByTagsWithTags:tags completionHandler:^(NSArray *output, NSError *error) { [api findPetsByTagsWithTags:tags completionHandler:^(NSArray *output, NSError *error) {
if(error){ if(error){
@ -275,7 +274,7 @@ which causes an exception when deserializing the data
- (SWGPet*) createPet { - (SWGPet*) createPet {
SWGPet * pet = [[SWGPet alloc] init]; SWGPet * pet = [[SWGPet alloc] init];
pet._id = [[NSNumber alloc] initWithLong:[[NSDate date] timeIntervalSince1970]]; pet._id = @((long) [[NSDate date] timeIntervalSince1970]);
pet.name = @"monkey"; pet.name = @"monkey";
SWGCategory * category = [[SWGCategory alloc] init]; SWGCategory * category = [[SWGCategory alloc] init];
@ -289,11 +288,11 @@ which causes an exception when deserializing the data
SWGTag *tag2 = [[SWGTag alloc] init]; SWGTag *tag2 = [[SWGTag alloc] init];
tag2._id = [[NSNumber alloc] initWithInteger:arc4random_uniform(100000)]; tag2._id = [[NSNumber alloc] initWithInteger:arc4random_uniform(100000)];
tag2.name = @"test tag 2"; tag2.name = @"test tag 2";
pet.tags = (NSArray<SWGTag> *)[[NSArray alloc] initWithObjects:tag1, tag2, nil]; pet.tags = (NSArray<SWGTag> *) @[tag1, tag2];
pet.status = @"available"; pet.status = @"available";
NSArray * photos = [[NSArray alloc] initWithObjects:@"http://foo.bar.com/3", @"http://foo.bar.com/4", nil]; NSArray * photos = @[@"http://foo.bar.com/3", @"http://foo.bar.com/4"];
pet.photoUrls = photos; pet.photoUrls = photos;
return pet; return pet;
} }

View File

@ -25,38 +25,61 @@
NSArray *accepts = nil; NSArray *accepts = nil;
accepts = @[@"APPLICATION/JSON", @"APPLICATION/XML"]; accepts = @[@"APPLICATION/JSON", @"APPLICATION/XML"];
XCTAssertEqualObjects([SWGApiClient selectHeaderAccept:accepts], @"application/json"); SWGSanitizer * sanitizer = [[SWGSanitizer alloc] init];
XCTAssertEqualObjects([sanitizer selectHeaderAccept:accepts], @"application/json");
accepts = @[@"application/json", @"application/xml"]; accepts = @[@"application/json", @"application/xml"];
XCTAssertEqualObjects([SWGApiClient selectHeaderAccept:accepts], @"application/json"); XCTAssertEqualObjects([sanitizer selectHeaderAccept:accepts], @"application/json");
accepts = @[@"APPLICATION/xml", @"APPLICATION/json"]; accepts = @[@"APPLICATION/xml", @"APPLICATION/json"];
XCTAssertEqualObjects([SWGApiClient selectHeaderAccept:accepts], @"application/json"); XCTAssertEqualObjects([sanitizer selectHeaderAccept:accepts], @"application/json");
accepts = @[@"application/vnd.github+json", @"application/vnd.github+xml"];
XCTAssertEqualObjects([sanitizer selectHeaderAccept:accepts], @"application/json");
accepts = @[@"application/json;charset=utf-8", @"application/vnd.github+xml"];
XCTAssertEqualObjects([sanitizer selectHeaderAccept:accepts], @"application/json");
accepts = @[@"application/vnd.github.v3.html+json", @"application/vnd.github+xml"];
XCTAssertEqualObjects([sanitizer selectHeaderAccept:accepts], @"application/json");
accepts = @[@"application/vnd.github.v3.html+json"];
XCTAssertEqualObjects([sanitizer selectHeaderAccept:accepts], @"application/json");
accepts = @[@"text/plain", @"application/xml"]; accepts = @[@"text/plain", @"application/xml"];
XCTAssertEqualObjects([SWGApiClient selectHeaderAccept:accepts], @"text/plain, application/xml"); XCTAssertEqualObjects([sanitizer selectHeaderAccept:accepts], @"text/plain, application/xml");
accepts = @[]; accepts = @[];
XCTAssertEqualObjects([SWGApiClient selectHeaderAccept:accepts], @""); XCTAssertEqualObjects([sanitizer selectHeaderAccept:accepts], @"");
} }
- (void)testSelectHeaderContentType { - (void)testSelectHeaderContentType {
NSArray *contentTypes = nil; NSArray *contentTypes = nil;
SWGSanitizer * sanitizer = [[SWGSanitizer alloc] init];
contentTypes = @[@"APPLICATION/JSON", @"APPLICATION/XML"]; contentTypes = @[@"APPLICATION/JSON", @"APPLICATION/XML"];
XCTAssertEqualObjects([SWGApiClient selectHeaderContentType:contentTypes], @"application/json"); XCTAssertEqualObjects([sanitizer selectHeaderContentType:contentTypes], @"application/json");
contentTypes = @[@"application/json", @"application/xml"]; contentTypes = @[@"application/json", @"application/xml"];
XCTAssertEqualObjects([SWGApiClient selectHeaderContentType:contentTypes], @"application/json"); XCTAssertEqualObjects([sanitizer selectHeaderContentType:contentTypes], @"application/json");
contentTypes = @[@"APPLICATION/xml", @"APPLICATION/json"]; contentTypes = @[@"APPLICATION/xml", @"APPLICATION/json"];
XCTAssertEqualObjects([SWGApiClient selectHeaderContentType:contentTypes], @"application/json"); XCTAssertEqualObjects([sanitizer selectHeaderContentType:contentTypes], @"application/json");
contentTypes = @[@"application/vnd.github+json", @"application/vnd.github+xml"];
XCTAssertEqualObjects([sanitizer selectHeaderContentType:contentTypes], @"application/json");
contentTypes = @[@"application/json;charset=utf-8", @"application/vnd.github+xml"];
XCTAssertEqualObjects([sanitizer selectHeaderContentType:contentTypes], @"application/json");
contentTypes = @[@"application/vnd.github.v3.html+json", @"application/vnd.github+xml"];
XCTAssertEqualObjects([sanitizer selectHeaderContentType:contentTypes], @"application/json");
contentTypes = @[@"text/plain", @"application/xml"]; contentTypes = @[@"text/plain", @"application/xml"];
XCTAssertEqualObjects([SWGApiClient selectHeaderContentType:contentTypes], @"text/plain"); XCTAssertEqualObjects([sanitizer selectHeaderContentType:contentTypes], @"text/plain");
contentTypes = @[]; contentTypes = @[];
XCTAssertEqualObjects([SWGApiClient selectHeaderContentType:contentTypes], @"application/json"); XCTAssertEqualObjects([sanitizer selectHeaderContentType:contentTypes], @"application/json");
} }
- (void)testConfiguration { - (void)testConfiguration {