JitsiViewController: Handle authenticated Jitsi widget when needed.

This commit is contained in:
SBiOSoftWhare 2020-10-28 00:00:23 +01:00
parent 0c1181fec9
commit ad85da3d1b

View file

@ -16,6 +16,7 @@
#import "JitsiViewController.h"
#import "JitsiWidgetData.h"
#import "Riot-Swift.h"
#if __has_include(<MatrixSDK/MXJingleCallStack.h>)
@import JitsiMeet;
@ -29,6 +30,7 @@ static const NSString *kJitsiDataErrorKey = @"error";
@property (nonatomic, strong) NSString *conferenceId;
@property (nonatomic, strong) NSURL *serverUrl;
@property (nonatomic, strong) NSString *jwtToken;
@property (nonatomic) BOOL startWithVideo;
@end
@ -87,8 +89,13 @@ static const NSString *kJitsiDataErrorKey = @"error";
MXStrongifyAndReturnIfNil(self);
// Use widget data from Matrix Widget API v2 first
[self extractWidgetDataFromWidget:widget];
JitsiWidgetData *jitsiWidgetData = [JitsiWidgetData modelFromJSON:widget.data];
[self fillWithWidgetData:jitsiWidgetData];
JitsiService *jitsiService = JitsiService.shared;
void (^verifyConferenceId)(void) = ^() {
if (!self.conferenceId)
{
// Else try v1
@ -111,7 +118,34 @@ static const NSString *kJitsiDataErrorKey = @"error";
failure(nil);
}
}
};
// Check if the widget requires authentication
if ([jitsiService isOpenIdJWTAuthenticationRequiredFor:jitsiWidgetData])
{
NSString *roomId = self.widget.roomId;
MXSession *session = self.widget.mxSession;
MXWeakify(self);
// Retrieve the OpenID token and generate the JWT token
[jitsiService getOpenIdJWTTokenWithJitsiServerDomain:jitsiWidgetData.domain
roomId:roomId matrixSession:session success:^(NSString * _Nonnull jwtToken) {
MXStrongifyAndReturnIfNil(self);
self.jwtToken = jwtToken;
verifyConferenceId();
} failure:^(NSError * _Nonnull error) {
if (failure)
{
failure(error);
}
}];
}
else
{
verifyConferenceId();
}
} failure:^(NSError * _Nonnull error) {
NSLog(@"[JitsiVC] Failed to load widget 2: %@. Widget event: %@", widget, widget.widgetEvent);
@ -146,6 +180,20 @@ static const NSString *kJitsiDataErrorKey = @"error";
}
}
- (void)fillWithWidgetData:(JitsiWidgetData*)jitsiWidgetData
{
if (jitsiWidgetData)
{
self.conferenceId = jitsiWidgetData.conferenceId;
if (jitsiWidgetData.domain)
{
NSString *serverUrlString = [NSString stringWithFormat:@"https://%@", jitsiWidgetData.domain];
self.serverUrl = [NSURL URLWithString:serverUrlString];
}
self.startWithVideo = !jitsiWidgetData.isAudioOnly;
}
}
// Extract data based on Matrix Widget V1 URL
- (void)extractWidgetDataFromUrlString:(NSString*)widgetUrlString
{
@ -203,6 +251,7 @@ static const NSString *kJitsiDataErrorKey = @"error";
builder.userInfo = [[JitsiMeetUserInfo alloc] initWithDisplayName:userDisplayName
andEmail:nil
andAvatar:avatarUrl];
builder.token = self.jwtToken;
}];
[self.jitsiMeetView join:jitsiMeetConferenceOptions];