mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
JitsiViewController: Handle authenticated Jitsi widget when needed.
This commit is contained in:
parent
0c1181fec9
commit
ad85da3d1b
1 changed files with 66 additions and 17 deletions
|
@ -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];
|
||||
|
|
Loading…
Reference in a new issue