mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-05-03 18:49:15 -05:00
[client] Allow nullable parameters in login page and password reset page
This commit is contained in:
@@ -105,10 +105,9 @@ class PhylumRouteInformationParser extends RouteInformationParser<PhylumRoute> {
|
||||
}
|
||||
if (segments[0] == 'reset_password') {
|
||||
return SynchronousFuture(ResetPasswordRoute(
|
||||
// TODO: Don't fallback to empty instance uri
|
||||
instanceUri: Uri.tryParse(uri.queryParameters['instance'] ?? '') ?? Uri(),
|
||||
email: uri.queryParameters['email'] ?? '',
|
||||
token: uri.queryParameters['token'] ?? '',
|
||||
instanceUrl: uri.queryParameters['instance'],
|
||||
email: uri.queryParameters['email'],
|
||||
token: uri.queryParameters['token'],
|
||||
));
|
||||
}
|
||||
if (segments[0] == 'search') {
|
||||
@@ -121,8 +120,7 @@ class PhylumRouteInformationParser extends RouteInformationParser<PhylumRoute> {
|
||||
} else if (segments.length == 2) {
|
||||
if (segments[0] == 'login' && segments[1] == 'token') {
|
||||
return SynchronousFuture(TokenLoginRoute(
|
||||
// TODO: Rename to instance
|
||||
instanceUrl: uri.queryParameters['instance_url'] ?? '',
|
||||
instanceUrl: uri.queryParameters['instance'] ?? '',
|
||||
loginToken: uri.queryParameters['login_token'] ?? '',
|
||||
));
|
||||
}
|
||||
|
||||
@@ -26,8 +26,8 @@ sealed class PhylumRoute {
|
||||
}
|
||||
|
||||
class TokenLoginRoute extends PhylumRoute {
|
||||
final String instanceUrl;
|
||||
final String loginToken;
|
||||
final String? instanceUrl;
|
||||
final String? loginToken;
|
||||
|
||||
TokenLoginRoute({required this.instanceUrl, required this.loginToken});
|
||||
|
||||
@@ -44,18 +44,18 @@ class TokenLoginRoute extends PhylumRoute {
|
||||
}
|
||||
|
||||
class ResetPasswordRoute extends PhylumRoute {
|
||||
final Uri instanceUri;
|
||||
final String email;
|
||||
final String token;
|
||||
final String? instanceUrl;
|
||||
final String? email;
|
||||
final String? token;
|
||||
|
||||
ResetPasswordRoute({required this.instanceUri, required this.email, required this.token});
|
||||
ResetPasswordRoute({required this.instanceUrl, required this.email, required this.token});
|
||||
|
||||
@override
|
||||
Uri get uri => Uri(path: '/reset_password');
|
||||
|
||||
@override
|
||||
Widget buildPage(BuildContext context) => ResetPasswordPage(
|
||||
instanceUrl: instanceUri,
|
||||
instanceUrl: instanceUrl,
|
||||
email: email,
|
||||
token: token,
|
||||
);
|
||||
|
||||
@@ -100,7 +100,10 @@ class _PasswordLoginFragmentState extends State<PasswordLoginFragment> {
|
||||
if (token == null || !context.mounted) return;
|
||||
Navigator.of(context).pop(false);
|
||||
context.read<PhylumRouterDelegate>().go(ResetPasswordRoute(
|
||||
instanceUri: widget.instanceConfig.url, email: _email, token: token));
|
||||
instanceUrl: widget.instanceConfig.url.toString(),
|
||||
email: _email,
|
||||
token: token,
|
||||
));
|
||||
},
|
||||
),
|
||||
],
|
||||
|
||||
@@ -14,9 +14,9 @@ import 'package:provider/provider.dart';
|
||||
import 'package:uri/uri.dart';
|
||||
|
||||
class ResetPasswordPage extends StatefulWidget {
|
||||
final Uri instanceUrl;
|
||||
final String email;
|
||||
final String token;
|
||||
final String? instanceUrl;
|
||||
final String? email;
|
||||
final String? token;
|
||||
|
||||
const ResetPasswordPage({
|
||||
super.key,
|
||||
@@ -35,6 +35,18 @@ class _ResetPasswordPageState extends State<ResetPasswordPage> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (widget.instanceUrl == null || widget.email == null || widget.token == null) {
|
||||
return PhylumDialogScaffold(
|
||||
child: Column(
|
||||
children: [
|
||||
const Text('Mising parameters'),
|
||||
ElevatedButton(
|
||||
child: Text('OK'),
|
||||
onPressed: () => context.read<PhylumRouterDelegate>().go(ExplorerRouteHome()),
|
||||
),
|
||||
],
|
||||
));
|
||||
}
|
||||
return PhylumDialogScaffold(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
@@ -85,11 +97,12 @@ class _ResetPasswordPageState extends State<ResetPasswordPage> {
|
||||
void changePassword(
|
||||
BuildContext context,
|
||||
) async {
|
||||
final builder = UriBuilder.fromUri(widget.instanceUrl);
|
||||
final instanceUrl = Uri.parse(widget.instanceUrl!);
|
||||
final builder = UriBuilder.fromUri(instanceUrl);
|
||||
builder.path = '${builder.path}/api/v1/auth/reset-password';
|
||||
final request = MultipartRequest('post', builder.build());
|
||||
request.fields['email'] = widget.email;
|
||||
request.fields['token'] = widget.token;
|
||||
request.fields['email'] = widget.email!;
|
||||
request.fields['token'] = widget.token!;
|
||||
request.fields['password'] = _password;
|
||||
|
||||
final responseString = await sendRequest(context, 'Changing Password', request);
|
||||
@@ -102,7 +115,7 @@ class _ResetPasswordPageState extends State<ResetPasswordPage> {
|
||||
|
||||
final response = BootstrapLoginResponse.fromResponse((jsonDecode(responseString) as Map).cast<String, dynamic>());
|
||||
final account = await PhylumAccount.create(
|
||||
serverUrl: widget.instanceUrl,
|
||||
serverUrl: instanceUrl,
|
||||
apiKey: response.apiKey!,
|
||||
user: response.user,
|
||||
);
|
||||
|
||||
@@ -13,8 +13,8 @@ import 'package:uri/uri.dart';
|
||||
import 'package:phylum/ui/app/dialog_scaffold.dart';
|
||||
|
||||
class TokenLoginPage extends StatefulWidget {
|
||||
final String instanceUrl;
|
||||
final String loginToken;
|
||||
final String? instanceUrl;
|
||||
final String? loginToken;
|
||||
|
||||
const TokenLoginPage({
|
||||
super.key,
|
||||
@@ -54,21 +54,23 @@ class _TokenLoginPageState extends State<TokenLoginPage> {
|
||||
children: [
|
||||
Text('Error: $error'),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
context.read<PhylumRouterDelegate>().go(ExplorerRouteHome());
|
||||
},
|
||||
child: Text('OK'))
|
||||
onPressed: () => context.read<PhylumRouterDelegate>().go(ExplorerRouteHome()),
|
||||
child: Text('OK'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void performLogin(BuildContext context) async {
|
||||
final instanceUrl = Uri.parse(widget.instanceUrl);
|
||||
if (widget.instanceUrl == null || widget.loginToken == null) {
|
||||
Future.microtask(() => setState(() => error = 'Missing Parameters'));
|
||||
}
|
||||
final instanceUrl = Uri.parse(widget.instanceUrl!);
|
||||
final builder = UriBuilder.fromUri(instanceUrl);
|
||||
builder.path = '${builder.path}/api/v1/auth/token/login';
|
||||
final request = MultipartRequest('post', builder.build());
|
||||
request.fields['login_token'] = widget.loginToken;
|
||||
request.fields['login_token'] = widget.loginToken!;
|
||||
|
||||
try {
|
||||
final response = await Client().send(request);
|
||||
|
||||
Reference in New Issue
Block a user