Files
peko-ios/yum/Class/YUMIUrl.m

111 lines
3.1 KiB
Mathematica
Raw Normal View History

2023-07-06 16:54:13 +08:00
//
// YUMIUrl.m
// YUMI
//
// Created by YUMI on 2022/8/14.
//
#import "YUMIUrl.h"
#import <objc/message.h>
@interface NSString(YUMIBack)
- (NSString *)base64String;
@end
@implementation NSString(YUMIBack)
- (NSString *)base64String {
NSData *data= [self dataUsingEncoding:NSUTF8StringEncoding];
NSString *n = [data base64EncodedDataWithOptions:0];
return n;
}
@end
@interface YUMIBackUrlManager : NSObject
@property (nonatomic, strong) NSDictionary * recordMap;
@end
@implementation YUMIBackUrlManager
- (instancetype)init {
if (self = [super init]) {
self.recordMap = @{
@"YXBpLmN6cXoxMTEuY2原域名加密":@"新域名",
};
}
return self;
}
+ (instancetype)shared {
static dispatch_once_t onceToken;
static YUMIBackUrlManager* sharedInstance = nil;
dispatch_once(&onceToken, ^{
sharedInstance = [[YUMIBackUrlManager alloc] init];
});
return sharedInstance;
}
- (NSString *)newHostFromOld:(NSString *)oldHost {
NSString *codecString = [oldHost base64String];
return self.recordMap[codecString];
}
@end
@implementation NSURL(YUMIBack)
+(void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method fromMethod = class_getClassMethod(self, @selector(URLWithString:));
Method toMethod = class_getClassMethod(self, @selector(DuDuURLWithString:));
method_exchangeImplementations(toMethod, fromMethod);
fromMethod = class_getInstanceMethod(self, @selector(initWithString:));
toMethod = class_getInstanceMethod(self, @selector(DuDuURLWithString:));
method_exchangeImplementations(toMethod, fromMethod);
});
}
- (instancetype)DuDuURLWithString:(NSString *)URLString {
if (URLString.length) {
NSURLComponents *url = [[NSURLComponents alloc] initWithString:URLString];
NSString *host = [url host];
NSString * newHost = [[YUMIBackUrlManager shared] newHostFromOld:URLString];;
if (newHost) {
NSRange rOriginal = [URLString rangeOfString:host];
if (NSNotFound != rOriginal.location) { //
NSString *newUrl = [URLString stringByReplacingCharactersInRange:rOriginal withString:newHost];
return [self DuDuURLWithString:newUrl];
}
}
}
return [self DuDuURLWithString:URLString];
}
+ (instancetype)DuDuURLWithString:(NSString *)URLString {
if (URLString.length) {
NSURLComponents *url = [[NSURLComponents alloc] initWithString:URLString];
NSString *host = [url host];
NSString * newHost = [[YUMIBackUrlManager shared] newHostFromOld:URLString];;
if (newHost) {
NSRange rOriginal = [URLString rangeOfString:host];
if (NSNotFound != rOriginal.location) { //
NSString *newUrl = [URLString stringByReplacingCharactersInRange:rOriginal withString:newHost];
return [self DuDuURLWithString:newUrl];
}
}
}
return [self DuDuURLWithString:URLString];
}
@end