chore: Implement pick SSO provider from dialog and add tchncs.de

This commit is contained in:
Christian Kußowski 2026-03-10 10:04:08 +01:00
parent 210ebdae6e
commit a7c89418eb
No known key found for this signature in database
GPG key ID: E067ECD60F1A0652
3 changed files with 45 additions and 2 deletions

View file

@ -52,7 +52,7 @@ Future<void> connectToHomeserverFlow(
if (authMetadata != null && AppSettings.enableMatrixNativeOIDC.value) {
await oidcLoginFlow(client, context, signUp);
} else if (supportsSso) {
await ssoLoginFlow(client, context, signUp);
await ssoLoginFlow(client, context, signUp, loginFlows);
} else {
if (signUp && regLink != null) {
await launchUrlString(regLink);

View file

@ -3,20 +3,52 @@ import 'package:flutter/material.dart';
import 'package:flutter_web_auth_2/flutter_web_auth_2.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/utils/sign_in_flows/calc_redirect_url.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart';
Future<void> ssoLoginFlow(
Client client,
BuildContext context,
bool signUp,
List<LoginFlow> loginFlows,
) async {
final (redirectUrl, urlScheme) = calcRedirectUrl(withAuthHtmlPath: true);
Logs().i('Starting legacy SSO Flow with redirect URL', redirectUrl);
final ssoProviders =
(loginFlows
.firstWhere((flow) => flow.type == 'm.login.sso')
.additionalProperties['identity_providers']
as List?)
?.map(
(json) => (
name: json['name'] as String,
id: json['id'] as String,
brand: json['brand'] as String?,
icon: json['icon'] as String?,
),
)
.toList();
final provider = ssoProviders == null
? null
: await showModalActionPopup(
context: context,
title: L10n.of(context).logInTo(client.homeserver!.host),
actions: ssoProviders
.map(
(provider) =>
AdaptiveModalAction(label: provider.name, value: provider),
)
.toList(),
);
final url = client.homeserver!.replace(
path: '/_matrix/client/v3/login/sso/redirect',
path:
'/_matrix/client/v3/login/sso/redirect${provider == null ? '' : '/${provider.id}'}',
queryParameters: {
'redirectUrl': redirectUrl.toString(),
'action': signUp ? 'register' : 'login',

View file

@ -19,6 +19,17 @@
"All",
"English"
]
},
{
"name": "tchncs.de",
"website": "https://tchncs.de",
"description": "A general homeserver. Owner also hosts other FOSS services.",
"reg_method": "oidc",
"languages": [
"All",
"English",
"Deutsch"
]
}
]
}