add validation for login form's server url

This commit is contained in:
Connery Noble
2023-01-14 00:14:09 -08:00
parent 075d603829
commit a485bb2010
20 changed files with 37 additions and 8 deletions
+10 -1
View File
@@ -13,6 +13,7 @@ import 'package:immich_mobile/shared/providers/asset.provider.dart';
import 'package:immich_mobile/modules/login/providers/authentication.provider.dart';
import 'package:immich_mobile/modules/backup/providers/backup.provider.dart';
import 'package:immich_mobile/shared/ui/immich_toast.dart';
import 'package:immich_mobile/utils/url_helper.dart';
import 'package:openapi/api.dart';
class LoginForm extends HookConsumerWidget {
@@ -215,7 +216,15 @@ class ServerEndpointInput extends StatelessWidget {
}) : super(key: key);
String? _validateInput(String? url) {
// Can we do any other validation here instead?
if (url == null || url.isEmpty) return null;
final validate = Uri.tryParse(sanitizeUrl(url));
if (validate == null ||
!validate.isAbsolute ||
!validate.scheme.startsWith("http") ||
validate.host.isEmpty) {
return 'login_form_err_invalid_url'.tr();
}
return null;
}
+2 -7
View File
@@ -1,6 +1,7 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:immich_mobile/utils/url_helper.dart';
import 'package:openapi/api.dart';
import 'package:http/http.dart';
@@ -34,13 +35,7 @@ class ApiService {
/// port - optional (default: based on schema)
/// path - optional
Future<String> resolveEndpoint(String serverUrl) async {
// Add schema if none is set
final urlWithSchema = serverUrl.startsWith(RegExp(r"https?://"))
? serverUrl
: "https://$serverUrl";
// Remove trailing slash(es)
final url = urlWithSchema.replaceFirst(RegExp(r"/+$"), "");
final url = sanitizeUrl(serverUrl);
// Check for /.well-known/immich
final wellKnownEndpoint = await getWellKnownEndpoint(url);
+8
View File
@@ -0,0 +1,8 @@
String sanitizeUrl(String url) {
// Add schema if none is set
final urlWithSchema =
url.startsWith(RegExp(r"https?://")) ? url : "https://$url";
// Remove trailing slash(es)
return urlWithSchema.replaceFirst(RegExp(r"/+$"), "");
}