feat: Add presetHomeserver config to enforce a homeserver for web
This commit is contained in:
parent
df847abbeb
commit
e9efce150e
11 changed files with 77 additions and 49 deletions
|
|
@ -52,7 +52,9 @@ enum AppSettings<T> {
|
|||
// colorSchemeSeed stored as ARGB int
|
||||
colorSchemeSeedInt<int>('chat.fluffy.color_scheme_seed', 0xFF5625BA),
|
||||
emojiSuggestionLocale<String>('emoji_suggestion_locale', ''),
|
||||
enableSoftLogout<bool>('chat.fluffy.enable_soft_logout', false);
|
||||
enableSoftLogout<bool>('chat.fluffy.enable_soft_logout', false),
|
||||
presetHomeserver<String>('chat.fluffy.preset_homeserver', ''),
|
||||
welcomeText<String>('chat.fluffy.welcome_text', '');
|
||||
|
||||
final String key;
|
||||
final T defaultValue;
|
||||
|
|
|
|||
|
|
@ -13,13 +13,17 @@ import 'package:fluffychat/widgets/layouts/login_scaffold.dart';
|
|||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
||||
class IntroPage extends StatelessWidget {
|
||||
final bool isLoading;
|
||||
final String? loggingInToHomeserver;
|
||||
final bool isLoading, hasPresetHomeserver;
|
||||
final String? loggingInToHomeserver, welcomeText;
|
||||
final VoidCallback login;
|
||||
|
||||
const IntroPage({
|
||||
required this.isLoading,
|
||||
required this.loggingInToHomeserver,
|
||||
super.key,
|
||||
required this.hasPresetHomeserver,
|
||||
required this.welcomeText,
|
||||
required this.login,
|
||||
});
|
||||
|
||||
@override
|
||||
|
|
@ -119,7 +123,7 @@ class IntroPage extends StatelessWidget {
|
|||
horizontal: 32.0,
|
||||
),
|
||||
child: SelectableLinkify(
|
||||
text: L10n.of(context).appIntro,
|
||||
text: welcomeText ?? L10n.of(context).appIntro,
|
||||
textScaleFactor: MediaQuery.textScalerOf(
|
||||
context,
|
||||
).scale(1),
|
||||
|
|
@ -138,41 +142,42 @@ class IntroPage extends StatelessWidget {
|
|||
mainAxisSize: .min,
|
||||
crossAxisAlignment: .stretch,
|
||||
children: [
|
||||
ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor:
|
||||
theme.colorScheme.secondary,
|
||||
foregroundColor:
|
||||
theme.colorScheme.onSecondary,
|
||||
if (!hasPresetHomeserver)
|
||||
ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor:
|
||||
theme.colorScheme.secondary,
|
||||
foregroundColor:
|
||||
theme.colorScheme.onSecondary,
|
||||
),
|
||||
onPressed: () => context.go(
|
||||
'${GoRouterState.of(context).uri.path}/sign_up',
|
||||
),
|
||||
child: Text(
|
||||
L10n.of(context).createNewAccount,
|
||||
),
|
||||
),
|
||||
onPressed: () => context.go(
|
||||
'${GoRouterState.of(context).uri.path}/sign_up',
|
||||
),
|
||||
child: Text(
|
||||
L10n.of(context).createNewAccount,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 16),
|
||||
ElevatedButton(
|
||||
onPressed: () => context.go(
|
||||
'${GoRouterState.of(context).uri.path}/sign_in',
|
||||
),
|
||||
onPressed: login,
|
||||
child: Text(L10n.of(context).signIn),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
final client = await Matrix.of(
|
||||
context,
|
||||
).getLoginClient();
|
||||
context.go(
|
||||
'${GoRouterState.of(context).uri.path}/login',
|
||||
extra: client,
|
||||
);
|
||||
},
|
||||
child: Text(
|
||||
L10n.of(context).loginWithMatrixId,
|
||||
|
||||
if (!hasPresetHomeserver)
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
final client = await Matrix.of(
|
||||
context,
|
||||
).getLoginClient();
|
||||
context.go(
|
||||
'${GoRouterState.of(context).uri.path}/login',
|
||||
extra: client,
|
||||
);
|
||||
},
|
||||
child: Text(
|
||||
L10n.of(context).loginWithMatrixId,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -3,14 +3,18 @@ import 'dart:convert';
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:matrix/matrix_api_lite/utils/logs.dart';
|
||||
import 'package:matrix/msc_extensions/msc_2964_oidc_login_flow/msc_2964_oidc_login_flow.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:universal_html/universal_html.dart' as web;
|
||||
|
||||
import 'package:fluffychat/config/setting_keys.dart';
|
||||
import 'package:fluffychat/pages/intro/intro_page.dart';
|
||||
import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart';
|
||||
import 'package:fluffychat/utils/localized_exception_extension.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/oidc_session_json_extension.dart';
|
||||
import 'package:fluffychat/utils/sign_in_flows/check_homeserver.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
||||
class IntroPagePresenter extends StatefulWidget {
|
||||
|
|
@ -49,11 +53,13 @@ class _IntroPagePresenterState extends State<IntroPagePresenter> {
|
|||
|
||||
await store.remove(OidcSessionJsonExtension.storeKey);
|
||||
await store.remove(OidcSessionJsonExtension.homeserverStoreKey);
|
||||
if (!mounted) return;
|
||||
|
||||
if (homeserverUrl == null || session == null) {
|
||||
setState(() {
|
||||
isLoading = false;
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
setState(() {
|
||||
|
|
@ -87,11 +93,31 @@ class _IntroPagePresenterState extends State<IntroPagePresenter> {
|
|||
}
|
||||
}
|
||||
|
||||
void _login() {
|
||||
final presetHomeserver = AppSettings.presetHomeserver.value;
|
||||
if (presetHomeserver.isEmpty) {
|
||||
context.go('${GoRouterState.of(context).uri.path}/sign_in');
|
||||
return;
|
||||
}
|
||||
|
||||
connectToHomeserverFlow(
|
||||
PublicHomeserverData(name: presetHomeserver),
|
||||
context,
|
||||
(snapshot) {},
|
||||
false,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return IntroPage(
|
||||
isLoading: isLoading,
|
||||
loggingInToHomeserver: loggingInToHomeserver,
|
||||
hasPresetHomeserver: AppSettings.presetHomeserver.value.isNotEmpty,
|
||||
welcomeText: AppSettings.welcomeText.value.isEmpty
|
||||
? null
|
||||
: AppSettings.welcomeText.value,
|
||||
login: _login,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@ import 'package:url_launcher/url_launcher_string.dart';
|
|||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pages/sign_in/view_model/flows/check_homeserver.dart';
|
||||
import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart';
|
||||
import 'package:fluffychat/pages/sign_in/view_model/sign_in_view_model.dart';
|
||||
import 'package:fluffychat/utils/localized_exception_extension.dart';
|
||||
import 'package:fluffychat/utils/sign_in_flows/check_homeserver.dart';
|
||||
import 'package:fluffychat/widgets/layouts/login_scaffold.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
import 'package:fluffychat/widgets/view_model_builder.dart';
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import 'package:matrix/matrix_api_lite/utils/logs.dart';
|
|||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/config/setting_keys.dart';
|
||||
import 'package:fluffychat/pages/sign_in/view_model/flows/sort_homeservers.dart';
|
||||
import 'package:fluffychat/pages/sign_in/utils/sort_homeservers.dart';
|
||||
import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart';
|
||||
import 'package:fluffychat/pages/sign_in/view_model/sign_in_state.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ import 'package:go_router/go_router.dart';
|
|||
import 'package:url_launcher/url_launcher_string.dart';
|
||||
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pages/sign_in/view_model/flows/oidc_login.dart';
|
||||
import 'package:fluffychat/pages/sign_in/view_model/flows/sso_login.dart';
|
||||
import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart';
|
||||
import 'package:fluffychat/utils/localized_exception_extension.dart';
|
||||
import 'package:fluffychat/utils/platform_infos.dart';
|
||||
import 'package:fluffychat/utils/sign_in_flows/oidc_login.dart';
|
||||
import 'package:fluffychat/utils/sign_in_flows/sso_login.dart';
|
||||
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue