mirror of
https://github.com/qinyuhang/ShadowsocksX-NG-R.git
synced 2026-10-21 06:54:41 +00:00
fix QR code bug
This commit is contained in:
+21
-18
@@ -74,6 +74,19 @@ void ScanQRCodeOnScreen() {
|
||||
];
|
||||
}
|
||||
|
||||
NSString* decode64(NSString* str){
|
||||
|
||||
str = [str stringByReplacingOccurrencesOfString:@"-" withString:@"+"];
|
||||
str = [str stringByReplacingOccurrencesOfString:@"_" withString:@"/"];
|
||||
if(str.length%4){
|
||||
NSInteger length = (4-str.length%4) + str.length;
|
||||
str = [str stringByPaddingToLength: length withString:@"=" startingAtIndex:0];
|
||||
}
|
||||
NSData* decodeData = [[NSData alloc] initWithBase64EncodedString:str options:0];
|
||||
NSString* decodeStr = [[NSString alloc] initWithData:decodeData encoding:NSUTF8StringEncoding];
|
||||
return decodeStr;
|
||||
}
|
||||
|
||||
// 解析SS URL,如果成功则返回一个与ServerProfile类兼容的dict
|
||||
// 或SSR URL,ServerProfile类已经默认添加SSR参数,默认放空,如果URL为SSR://则改变解析方法
|
||||
// ss:// + base64(method:password@domain:port)
|
||||
@@ -140,21 +153,10 @@ NSDictionary<NSString *, id>* ParseSSURL(NSURL* url) {
|
||||
|
||||
|
||||
urlString = [urlString stringByReplacingOccurrencesOfString:@"ssr://" withString:@"" options:NSAnchoredSearch range:NSMakeRange(0, urlString.length)];
|
||||
urlString = [urlString stringByReplacingOccurrencesOfString:@"-" withString:@"+"];
|
||||
urlString = [urlString stringByReplacingOccurrencesOfString:@"_" withString:@"/"];
|
||||
if ([urlString length]%4!=0) {
|
||||
int n = 4 - [urlString length]%4;
|
||||
if (1==n) {
|
||||
urlString = [urlString stringByAppendingString:@"="];
|
||||
} else if (2==n) {
|
||||
urlString = [urlString stringByAppendingString:@"=="];
|
||||
}
|
||||
}
|
||||
NSData *data = [[NSData alloc] initWithBase64EncodedString:urlString options:0];
|
||||
NSString *decodedString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||
// NSData *data = [[NSData alloc] initWithBase64EncodedString:urlString options:0];
|
||||
NSString *decodedString = decode64(urlString);//[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||
urlString = decodedString;
|
||||
|
||||
if (data == NULL) {
|
||||
if ([decodedString isEqual: @""]) {
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
postNotificationName:@"NOTIFY_INVALIDE_QR"
|
||||
object:nil
|
||||
@@ -175,7 +177,8 @@ NSDictionary<NSString *, id>* ParseSSURL(NSURL* url) {
|
||||
NSRange lastParamSplit = [toSplitString rangeOfString:@"="];
|
||||
if (lastParamSplit.location != NSNotFound) {
|
||||
NSString *key = [toSplitString substringToIndex:lastParamSplit.location];
|
||||
NSString *value = [[NSString alloc] initWithData:[[NSData alloc] initWithBase64EncodedString:[[[toSplitString stringByReplacingOccurrencesOfString:@"-" withString:@"+"] stringByReplacingOccurrencesOfString:@"_" withString:@"/"]substringFromIndex:lastParamSplit.location+1] options:0]encoding:NSUTF8StringEncoding];
|
||||
NSString *value = decode64([toSplitString substringFromIndex:lastParamSplit.location+1]);
|
||||
// [[NSString alloc] initWithData:[[NSData alloc] initWithBase64EncodedString:[[[toSplitString stringByReplacingOccurrencesOfString:@"-" withString:@"+"] stringByReplacingOccurrencesOfString:@"_" withString:@"/"]substringFromIndex:lastParamSplit.location+1] options:0]encoding:NSUTF8StringEncoding];
|
||||
// NSString *value = [toSplitString substringFromIndex:lastParamSplit.location+1];
|
||||
[parserLastParamDict setValue: value forKey: key];
|
||||
}
|
||||
@@ -205,14 +208,14 @@ NSDictionary<NSString *, id>* ParseSSURL(NSURL* url) {
|
||||
|
||||
firstParam = [firstParam substringFromIndex:range.location + range.length];
|
||||
// range = [firstParam rangeOfString:@":"];
|
||||
NSString *password = [[NSString alloc] initWithData:[[NSData alloc] initWithBase64EncodedString:firstParam options:0]encoding:NSUTF8StringEncoding];//第五个参数是base64密码
|
||||
NSString *password = decode64(firstParam);// [[NSString alloc] initWithData:[[NSData alloc] initWithBase64EncodedString:firstParam options:0]encoding:NSUTF8StringEncoding];//第五个参数是base64密码
|
||||
|
||||
NSString *ssrObfsParam = @"";
|
||||
NSString *remarks = @"";
|
||||
NSString *ssrProtocolParam = @"";
|
||||
NSString *ssrGroup = @"";
|
||||
for (NSString *key in parserLastParamDict) {
|
||||
NSLog(@"key: %@ value: %@", key, parserLastParamDict[key]);
|
||||
// NSLog(@"key: %@ value: %@", key, parserLastParamDict[key]);
|
||||
if ([key isEqual: @"obfsparam"]) {
|
||||
ssrObfsParam = parserLastParamDict[key];
|
||||
} else if ([key isEqual: @"remarks"]) {
|
||||
@@ -233,7 +236,7 @@ NSDictionary<NSString *, id>* ParseSSURL(NSURL* url) {
|
||||
@"ssrProtocol":ssrProtocol,
|
||||
@"ssrProtocolParam":ssrProtocolParam,
|
||||
@"Remark":remarks,
|
||||
@"Group":ssrGroup,
|
||||
@"ssrGroup":ssrGroup,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user