From 924c112e5c37fc4ed211487069ae09aa0018bf6e Mon Sep 17 00:00:00 2001
From: jz <qiaojinzhu@igengmei.com>
Date: Mon, 23 Dec 2019 21:24:22 +0800
Subject: [PATCH] update GMRouter

---
 GMRouter/Classes/GMRouter+gm.m | 49 +++++++++++++++++++++-------------
 1 file changed, 30 insertions(+), 19 deletions(-)

diff --git a/GMRouter/Classes/GMRouter+gm.m b/GMRouter/Classes/GMRouter+gm.m
index ae521f8..f1e7784 100644
--- a/GMRouter/Classes/GMRouter+gm.m
+++ b/GMRouter/Classes/GMRouter+gm.m
@@ -133,47 +133,58 @@ static NSMutableDictionary *routeMap = nil;
     }
     NSString *host = url.host;
     NSString *targetName = [routeMap objectForKey:host];
-    
+    NSDictionary *params = [self getParams:encodeUrlScheme withHost:host];
+    host = [self getHostWithEncodeUrlScheme:encodeUrlScheme host:host];
+    return [self performTarget:targetName action:host params:params shouldCacheTarget:NO];
+}
+
+- (NSDictionary *)getParams:(NSString *)encodeUrlScheme withHost:(NSString *)host {
     NSDictionary *params;
     NSArray *array = [encodeUrlScheme componentsSeparatedByString:@"url="];
     if (([host isEqualToString:@"third_webview"] || [host isEqualToString:@"common_webview"]) && array.count > 1) {
         NSString *value = array[1];
-        while ([value rangeOfString:@"%"].length != 0) {
+        //拦截所有的即将调转的url(value),如果不在白名单之中,让其使用GMThirdWebViewController加载.
+        NSString *valueHost = [[NSURL URLWithString:value] host];
+        if ([value rangeOfString:@"%"].length != 0) {
             value = [self URLDecodedString:value];
         }
         params = @{@"url":value};
-        //拦截所有的即将调转的url(value),如果不在白名单之中,让其使用GMThirdWebViewController加载.
-        NSString *valueHost = [[NSURL URLWithString:value] host];
-//        if ([GMServerDomains allowURLHost:valueHost] == NO) {
-//#if defined DEBUG
-//        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"webView需添加白名单" message:value delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
-//        [alertView show];
-//#endif
-//
-//            host = @"third_webview";
-//        }
     } else {
         params = [self urlQueryToDictionary:encodeUrlScheme];
     }
+    return params;
+}
 
-//    NSDictionary *params = [self urlQueryToDictionary:encodeUrlScheme];
-
-    return [self performTarget:targetName action:host params:params shouldCacheTarget:NO];
+- (NSString *)getHostWithEncodeUrlScheme:(NSString *)encodeUrlScheme host:(NSString *)host {
+    NSArray *array = [encodeUrlScheme componentsSeparatedByString:@"url="];
+    if (([host isEqualToString:@"third_webview"] || [host isEqualToString:@"common_webview"]) && array.count > 1) {
+        NSString *value = array[1];
+        //拦截所有的即将调转的url(value),如果不在白名单之中,让其使用GMThirdWebViewController加载.
+       NSString *valueHost = [[NSURL URLWithString:value] host];
+       Class cls = NSClassFromString(@"GMServerDomains");
+       if ([cls respondsToSelector:@selector(allowURLHost:)]) {
+         BOOL isAllow = [cls performSelector:@selector(allowURLHost:) withObject:valueHost];
+           if (!isAllow) {
+                host = @"third_webview";
+           }
+       }
+    }
+    return host;
 }
 
 - (id)pushScheme:(NSString *)urlScheme params:(NSDictionary *)params {
-    NSString *encodeUrlScheme = [self URLDecodedString:urlScheme];
+    NSString *encodeUrlScheme = [self URLEncodeString:urlScheme];
     NSURL *url = [NSURL URLWithString:encodeUrlScheme];
     if (!url) {
+    //        debugLog(@"协议出错了!");
     }
     NSString *host = url.host;
     NSString *targetName = [routeMap objectForKey:host];
-    NSDictionary *paramsDict = [self urlQueryToDictionary:encodeUrlScheme];
+    NSDictionary *paramsDict = [self getParams:encodeUrlScheme withHost:host];
+    host = [self getHostWithEncodeUrlScheme:encodeUrlScheme host:host];
     return [self performTarget:targetName action:host params:paramsDict shouldCacheTarget:NO];
 }
 
-
-
 #pragma mark - string to dict
 - (NSDictionary*)urlQueryToDictionary:(NSString *)urlScheme {
     NSURL* url1 = [NSURL URLWithString:urlScheme];
-- 
2.18.0