mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-22 17:42:45 +02:00
Privacy: Allow email registration when no IS but return an error if not supported by the HS.
#2657
This commit is contained in:
@@ -604,96 +604,113 @@
|
||||
restClient = [self.delegate authInputsViewThirdPartyIdValidationRestClient:self];
|
||||
}
|
||||
|
||||
if (restClient && restClient.identityServer)
|
||||
if (restClient)
|
||||
{
|
||||
// Check whether a second 3pid is available
|
||||
_isThirdPartyIdentifierPending = (nbPhoneNumber && ![self isFlowCompleted:kMXLoginFlowTypeMSISDN]);
|
||||
|
||||
// Launch email validation
|
||||
submittedEmail = [[MXK3PID alloc] initWithMedium:kMX3PIDMediumEmail andAddress:self.emailTextField.text];
|
||||
|
||||
NSString *identityServer = restClient.identityServer;
|
||||
MXWeakify(self);
|
||||
[self checkIdentityServerRequirement:restClient success:^(BOOL identityServerRequired) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
// Create the next link that is common to all Vector.im clients
|
||||
NSString *nextLink = [NSString stringWithFormat:@"%@/#/register?client_secret=%@&hs_url=%@&is_url=%@&session_id=%@",
|
||||
[Tools webAppUrl],
|
||||
[submittedEmail.clientSecret stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]],
|
||||
[restClient.homeserver stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]],
|
||||
[identityServer stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]],
|
||||
[currentSession.session stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]];
|
||||
if (identityServerRequired && !restClient.identityServer)
|
||||
{
|
||||
callback(nil, [NSError errorWithDomain:MXKAuthErrorDomain
|
||||
code:0
|
||||
userInfo:@{
|
||||
NSLocalizedDescriptionKey:[NSBundle mxk_localizedStringForKey:@"auth_email_is_required"]
|
||||
}]);
|
||||
return;
|
||||
}
|
||||
|
||||
[submittedEmail requestValidationTokenWithMatrixRestClient:restClient
|
||||
isDuringRegistration:YES
|
||||
nextLink:nextLink
|
||||
success:^
|
||||
{
|
||||
|
||||
NSURL *identServerURL = [NSURL URLWithString:identityServer];
|
||||
NSDictionary *parameters;
|
||||
parameters = @{
|
||||
@"auth": @{
|
||||
@"session":currentSession.session,
|
||||
@"threepid_creds": @{
|
||||
@"client_secret": submittedEmail.clientSecret,
|
||||
@"id_server": identServerURL.host,
|
||||
@"sid": submittedEmail.sid
|
||||
},
|
||||
@"type": kMXLoginFlowTypeEmailIdentity},
|
||||
@"username": self.userLoginTextField.text,
|
||||
@"password": self.passWordTextField.text,
|
||||
};
|
||||
|
||||
[self hideInputsContainer];
|
||||
|
||||
self.messageLabel.text = NSLocalizedStringFromTable(@"auth_email_validation_message", @"Vector", nil);
|
||||
self.messageLabel.hidden = NO;
|
||||
|
||||
callback(parameters, nil);
|
||||
|
||||
}
|
||||
failure:^(NSError *error)
|
||||
{
|
||||
|
||||
NSLog(@"[AuthInputsView] Failed to request email token");
|
||||
|
||||
// Ignore connection cancellation error
|
||||
if (([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled))
|
||||
// Check whether a second 3pid is available
|
||||
self->_isThirdPartyIdentifierPending = (self->nbPhoneNumber && ![self isFlowCompleted:kMXLoginFlowTypeMSISDN]);
|
||||
|
||||
// Launch email validation
|
||||
self->submittedEmail = [[MXK3PID alloc] initWithMedium:kMX3PIDMediumEmail andAddress:self.emailTextField.text];
|
||||
|
||||
NSString *identityServer = restClient.identityServer;
|
||||
|
||||
// Create the next link that is common to all Vector.im clients
|
||||
NSString *nextLink = [NSString stringWithFormat:@"%@/#/register?client_secret=%@&hs_url=%@&is_url=%@&session_id=%@",
|
||||
[Tools webAppUrl],
|
||||
[self->submittedEmail.clientSecret stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]],
|
||||
[restClient.homeserver stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]],
|
||||
[identityServer stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]],
|
||||
[self->currentSession.session stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]];
|
||||
|
||||
[self->submittedEmail requestValidationTokenWithMatrixRestClient:restClient
|
||||
isDuringRegistration:YES
|
||||
nextLink:nextLink
|
||||
success:^
|
||||
{
|
||||
return;
|
||||
|
||||
NSURL *identServerURL = [NSURL URLWithString:identityServer];
|
||||
NSDictionary *parameters;
|
||||
parameters = @{
|
||||
@"auth": @{
|
||||
@"session":self->currentSession.session,
|
||||
@"threepid_creds": @{
|
||||
@"client_secret": self->submittedEmail.clientSecret,
|
||||
@"id_server": identServerURL.host,
|
||||
@"sid": self->submittedEmail.sid
|
||||
},
|
||||
@"type": kMXLoginFlowTypeEmailIdentity},
|
||||
@"username": self.userLoginTextField.text,
|
||||
@"password": self.passWordTextField.text,
|
||||
};
|
||||
|
||||
[self hideInputsContainer];
|
||||
|
||||
self.messageLabel.text = NSLocalizedStringFromTable(@"auth_email_validation_message", @"Vector", nil);
|
||||
self.messageLabel.hidden = NO;
|
||||
|
||||
callback(parameters, nil);
|
||||
|
||||
}
|
||||
|
||||
// Translate the potential MX error.
|
||||
MXError *mxError = [[MXError alloc] initWithNSError:error];
|
||||
if (mxError && ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse] || [mxError.errcode isEqualToString:kMXErrCodeStringServerNotTrusted]))
|
||||
failure:^(NSError *error)
|
||||
{
|
||||
NSMutableDictionary *userInfo;
|
||||
if (error.userInfo)
|
||||
|
||||
NSLog(@"[AuthInputsView] Failed to request email token");
|
||||
|
||||
// Ignore connection cancellation error
|
||||
if (([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled))
|
||||
{
|
||||
userInfo = [NSMutableDictionary dictionaryWithDictionary:error.userInfo];
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
||||
// Translate the potential MX error.
|
||||
MXError *mxError = [[MXError alloc] initWithNSError:error];
|
||||
if (mxError && ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse] || [mxError.errcode isEqualToString:kMXErrCodeStringServerNotTrusted]))
|
||||
{
|
||||
userInfo = [NSMutableDictionary dictionary];
|
||||
NSMutableDictionary *userInfo;
|
||||
if (error.userInfo)
|
||||
{
|
||||
userInfo = [NSMutableDictionary dictionaryWithDictionary:error.userInfo];
|
||||
}
|
||||
else
|
||||
{
|
||||
userInfo = [NSMutableDictionary dictionary];
|
||||
}
|
||||
|
||||
userInfo[NSLocalizedFailureReasonErrorKey] = nil;
|
||||
|
||||
if ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse])
|
||||
{
|
||||
userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_email_in_use", @"Vector", nil);
|
||||
userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_email_in_use", @"Vector", nil);
|
||||
}
|
||||
else
|
||||
{
|
||||
userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil);
|
||||
userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil);
|
||||
}
|
||||
|
||||
error = [NSError errorWithDomain:error.domain code:error.code userInfo:userInfo];
|
||||
}
|
||||
|
||||
userInfo[NSLocalizedFailureReasonErrorKey] = nil;
|
||||
|
||||
if ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse])
|
||||
{
|
||||
userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_email_in_use", @"Vector", nil);
|
||||
userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_email_in_use", @"Vector", nil);
|
||||
}
|
||||
else
|
||||
{
|
||||
userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil);
|
||||
userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil);
|
||||
}
|
||||
|
||||
error = [NSError errorWithDomain:error.domain code:error.code userInfo:userInfo];
|
||||
}
|
||||
callback(nil, error);
|
||||
|
||||
}];
|
||||
callback(nil, error);
|
||||
|
||||
}];
|
||||
} failure:^(NSError *error) {
|
||||
callback(nil, error);
|
||||
}];
|
||||
|
||||
// Async response
|
||||
return;
|
||||
@@ -1805,4 +1822,16 @@
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void)checkIdentityServerRequirement:(MXRestClient*)mxRestClient
|
||||
success:(void (^)(BOOL identityServerRequired))success
|
||||
failure:(void (^)(NSError *error))failure
|
||||
{
|
||||
[mxRestClient supportedMatrixVersions:^(MXMatrixVersions *matrixVersions) {
|
||||
|
||||
NSLog(@"[AuthInputsView] checkIdentityServerRequirement: %@", matrixVersions.doesServerRequireIdentityServerParam ? @"YES": @"NO");
|
||||
success(matrixVersions.doesServerRequireIdentityServerParam);
|
||||
|
||||
} failure:failure];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user