Two-step well-known check

This commit is contained in:
Inex Code 2020-06-13 22:39:18 +03:00
parent d07c85a76b
commit 15a9a55767
1 changed files with 21 additions and 2 deletions

View File

@ -192,10 +192,29 @@ class Client {
) async {
final response = await http
.get('https://${MatrixIdOrDomain.domain}/.well-known/matrix/client');
final rawJson = json.decode(response.body);
return WellKnownInformations.fromJson(rawJson);
WellKnownInformations wellKnown = WellKnownInformations.fromJson(json.decode(response.body));
if (Uri.parse(wellKnown.mHomeserver.baseUrl).host != MatrixIdOrDomain.domain) {
final response = await http
.get('https://${Uri.parse(wellKnown.mHomeserver.baseUrl).host}/.well-known/matrix/client');
wellKnown = WellKnownInformations.fromJson(json.decode(response.body));
}
return wellKnown;
}
Future<WellKnownInformations> getWellKnownInformationsByDomain(dynamic serverUrl) async {
Uri homeserver = (serverUrl is Uri) ? serverUrl : Uri.parse(serverUrl);
final response = await http
.get('https://${homeserver.host}/.well-known/matrix/client');
WellKnownInformations wellKnown = WellKnownInformations.fromJson(json.decode(response.body));
if (Uri.parse(wellKnown.mHomeserver.baseUrl).host != homeserver.host) {
final response = await http
.get('https://${Uri.parse(wellKnown.mHomeserver.baseUrl).host}/.well-known/matrix/client');
wellKnown = WellKnownInformations.fromJson(json.decode(response.body));
}
return wellKnown;
}
/// Checks the supported versions of the Matrix protocol and the supported
/// login types. Returns false if the server is not compatible with the
/// client.