diff --git a/Riot/Utils/Widgets/Widget.m b/Riot/Utils/Widgets/Widget.m index 93ddd73a5..126068c1f 100644 --- a/Riot/Utils/Widgets/Widget.m +++ b/Riot/Utils/Widgets/Widget.m @@ -43,11 +43,18 @@ // Format the url string with user data if (_url) { - _url = [_url stringByReplacingOccurrencesOfString:@"$matrix_user_id" withString:mxSession.myUser.userId]; - _url = [_url stringByReplacingOccurrencesOfString:@"$matrix_display_name" - withString:mxSession.myUser.displayname ? mxSession.myUser.displayname : mxSession.myUser.userId]; - _url = [_url stringByReplacingOccurrencesOfString:@"$matrix_avatar_url" - withString:mxSession.myUser.avatarUrl ? mxSession.myUser.avatarUrl : @""]; + NSString *userId = mxSession.myUser.userId; + NSString *displayName = mxSession.myUser.displayname ? mxSession.myUser.displayname : mxSession.myUser.userId; + NSString *avatarUrl = mxSession.myUser.avatarUrl ? mxSession.myUser.avatarUrl : @""; + + // Escape everything to build a valid URL string + userId = [userId stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + displayName = [displayName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + avatarUrl = [avatarUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + + _url = [_url stringByReplacingOccurrencesOfString:@"$matrix_user_id" withString:userId]; + _url = [_url stringByReplacingOccurrencesOfString:@"$matrix_display_name" withString:displayName]; + _url = [_url stringByReplacingOccurrencesOfString:@"$matrix_avatar_url" withString:avatarUrl]; // And their scalar token NSString *scalarToken = [[WidgetManager sharedManager] scalarTokenForMXSession:mxSession]; diff --git a/Riot/ViewController/Widgets/JitsiViewController.m b/Riot/ViewController/Widgets/JitsiViewController.m index b38a66dd6..fbe32939f 100644 --- a/Riot/ViewController/Widgets/JitsiViewController.m +++ b/Riot/ViewController/Widgets/JitsiViewController.m @@ -52,27 +52,30 @@ static const NSString *kJitsiServerUrl = @"https://jitsi.riot.im/"; // Extract the jitsi conference id from the widget url NSString *confId; NSURL *url = [NSURL URLWithString:_widget.url]; - NSURLComponents *components = [[NSURLComponents new] initWithURL:url resolvingAgainstBaseURL:NO]; - NSArray *queryItems = [components queryItems]; - - for (NSURLQueryItem *item in queryItems) + if (url) { - if ([item.name isEqualToString:@"confId"]) + NSURLComponents *components = [[NSURLComponents new] initWithURL:url resolvingAgainstBaseURL:NO]; + NSArray *queryItems = [components queryItems]; + + for (NSURLQueryItem *item in queryItems) { - confId = item.value; - break; + if ([item.name isEqualToString:@"confId"]) + { + confId = item.value; + break; + } } - } - // And build from it the url to use in jitsi-meet sdk - if (confId) - { - jitsiUrl = [NSString stringWithFormat:@"%@%@", kJitsiServerUrl, confId]; + // And build from it the url to use in jitsi-meet sdk + if (confId) + { + jitsiUrl = [NSString stringWithFormat:@"%@%@", kJitsiServerUrl, confId]; + } } if (!jitsiUrl) { - NSLog(@"[JitsiVC] Failed to load widget: %@", widget); + NSLog(@"[JitsiVC] Failed to load widget: %@. Widget event: %@", widget, widget.widgetEvent); } return (jitsiUrl != nil);