// // JWTBase64Coder.m // Pods // // Created by Lobanov Dmitry on 05.10.16. // // #import "JWTBase64Coder.h" @interface JWTBase64Coder (ConditionLinking) + (BOOL)isBase64AddtionsAvailable; @end @implementation JWTBase64Coder (ConditionLinking) + (BOOL)isBase64AddtionsAvailable { return [[NSData class] respondsToSelector:@selector(dataWithBase64UrlEncodedString:)]; } @end #if __has_include("MF_Base64Additions.h") #import #endif @implementation JWTBase64Coder + (NSString *)base64UrlEncodedStringWithData:(NSData *)data { if ([self isBase64AddtionsAvailable] && [data respondsToSelector:@selector(base64UrlEncodedString)]) { return [data performSelector:@selector(base64UrlEncodedString)]; } else { return [data base64EncodedStringWithOptions:0]; } } + (NSData *)dataWithBase64UrlEncodedString:(NSString *)urlEncodedString { if ([self isBase64AddtionsAvailable] && [[NSData class] respondsToSelector:@selector(dataWithBase64UrlEncodedString:)]) { return [[NSData class] performSelector:@selector(dataWithBase64UrlEncodedString:) withObject:urlEncodedString]; } else { return [[NSData alloc] initWithBase64EncodedString:urlEncodedString options:0]; } } @end @implementation JWTBase64Coder (JWTStringCoder__Protocol) - (NSString *)stringWithData:(NSData *)data { return [self.class base64UrlEncodedStringWithData:data]; } - (NSData *)dataWithString:(NSString *)string { return [self.class dataWithBase64UrlEncodedString:string]; } @end @implementation JWTStringCoder__For__Encoding + (instancetype)utf8Encoding { JWTStringCoder__For__Encoding *coding = [self new]; coding.stringEncoding = NSUTF8StringEncoding; return coding; } @end @implementation JWTStringCoder__For__Encoding (JWTStringCoder__Protocol) - (NSString *)stringWithData:(NSData *)data { return [[NSString alloc] initWithData:data encoding:self.stringEncoding]; } - (NSData *)dataWithString:(NSString *)string { return [string dataUsingEncoding:self.stringEncoding]; } @end