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

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://ip-tvého-serveru:port/",
"login_form_endpoint_url": "URL adresa serveru",
"login_form_err_invalid_email": "Neplatný e-mail",
"login_form_err_invalid_url": "Neplatný URL",
"login_form_err_leading_whitespace": "Úvodní mezera",
"login_form_err_trailing_whitespace": "Koncová mezera",
"login_form_failed_get_oauth_server_config": "Chyba přihlášení pomocí OAuth, zkontrolujte adresu URL serveru",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://din-server-ip:port/",
"login_form_endpoint_url": "Server Endpoint URL",
"login_form_err_invalid_email": "Ugyldig email",
"login_form_err_invalid_url": "Ugyldig URL",
"login_form_err_leading_whitespace": "Mellemrum før",
"login_form_err_trailing_whitespace": "Mellemrum efter",
"login_form_failed_get_oauth_server_config": "Fejl med at logge på med OAuth. Tjek serveres URL",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://deine-server-ip:port/",
"login_form_endpoint_url": "Server URL",
"login_form_err_invalid_email": "Ungültige E-Mail",
"login_form_err_invalid_url": "Ungültige URL",
"login_form_err_leading_whitespace": "Führendes Leerzichen",
"login_form_err_trailing_whitespace": "Folgendes Leerzeichen",
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://your-server-ip:port/",
"login_form_endpoint_url": "Server Endpoint URL",
"login_form_err_invalid_email": "Invalid Email",
"login_form_err_invalid_url": "Invalid URL",
"login_form_err_leading_whitespace": "Leading whitespace",
"login_form_err_trailing_whitespace": "Trailing whitespace",
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://tu-ip-de-servidor:puerto/",
"login_form_endpoint_url": "URL del servidor",
"login_form_err_invalid_email": "Correo electrónico no válido",
"login_form_err_invalid_url": "URL no válido",
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
"login_form_failed_get_oauth_server_config": "Fallo al iniciar sesión con OAuth. Comprueba la URL del servidor.",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://palvelimesi-osoite:portti/",
"login_form_endpoint_url": "Palvelimen URL",
"login_form_err_invalid_email": "Virheellinen sähköpostiosoite",
"login_form_err_invalid_url": "Invalid URL",
"login_form_err_leading_whitespace": "Alussa välilyönti",
"login_form_err_trailing_whitespace": "Lopussa välilyönti",
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://adresse-ip-serveur:port/",
"login_form_endpoint_url": "URL du point d'accès au serveur",
"login_form_err_invalid_email": "Email invalide",
"login_form_err_invalid_url": "URL invalide",
"login_form_err_leading_whitespace": "Espace en début de ligne",
"login_form_err_trailing_whitespace": "Espace de fin de ligne",
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://ip-del-tuo-server:port/",
"login_form_endpoint_url": "Server Endpoint URL",
"login_form_err_invalid_email": "Email non valida",
"login_form_err_invalid_url": "URL non valida",
"login_form_err_leading_whitespace": "Whitespace all'inizio ",
"login_form_err_trailing_whitespace": "Whitespace alla fine",
"login_form_failed_get_oauth_server_config": "Errore di login usando OAuth, controlla l'URL del server",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "https://example.com:port/",
"login_form_endpoint_url": "サーバーエンドポイントURL",
"login_form_err_invalid_email": "メールアドレスが有効じゃないよ",
"login_form_err_invalid_url": "Invalid URL",
"login_form_err_leading_whitespace": "最初に半角スペースが含まれてるよ",
"login_form_err_trailing_whitespace": "最後に半角スペースが含まれてるよ",
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",

View File

@@ -114,6 +114,7 @@
"login_form_endpoint_hint": "https://your-server-ip:port/",
"login_form_endpoint_url": "서버 엔드포인트 URL",
"login_form_err_invalid_email": "잘못된 이메일 형식입니다",
"login_form_err_invalid_url": "Invalid URL",
"login_form_err_leading_whitespace": "이메일 앞에 공백문자가 포함되어 있습니다",
"login_form_err_trailing_whitespace": "이메일 뒤에 공백문자가 포함되어 있습니다",
"login_form_failed_login": "로그인 오류, 서버 URL, 이메일 및 비밀번호를 확인하세요",

View File

@@ -80,6 +80,7 @@
"login_form_endpoint_hint": "http://jouw-server-ip:port/",
"login_form_endpoint_url": "Server URL",
"login_form_err_invalid_email": "Ongeldige Email",
"login_form_err_invalid_url": "Ongeldige URL",
"login_form_err_leading_whitespace": "Spatie aan het begin",
"login_form_err_trailing_whitespace": "Spatie aan het eind",
"login_form_failed_login": "Fout bij inloggen, controleer server url, email en wachtwoord",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://ip-twojego-serwera:port/",
"login_form_endpoint_url": "URL Serwera",
"login_form_err_invalid_email": "Niepoprawny Email",
"login_form_err_invalid_url": "Niepoprawny URL",
"login_form_err_leading_whitespace": "Białe znaki",
"login_form_err_trailing_whitespace": "Białe znaki po przecinku",
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",

View File

@@ -77,6 +77,7 @@
"login_form_endpoint_hint": "http://your-server-ip:port/",
"login_form_endpoint_url": "Server Endpoint URL",
"login_form_err_invalid_email": "E-mail inválido",
"login_form_err_invalid_url": "URL inválido",
"login_form_err_leading_whitespace": "Leading whitespace",
"login_form_err_trailing_whitespace": "Trailing whitespace",
"login_form_failed_login": "Erro ao fazer login, verifique a url do servidor, e-mail e senha",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://ip-do-seu-servidor:porta/",
"login_form_endpoint_url": "URL do endpoint do servidor",
"login_form_err_invalid_email": "Email Inválido",
"login_form_err_invalid_url": "URL Inválido",
"login_form_err_leading_whitespace": "Espaço em branco no início",
"login_form_err_trailing_whitespace": "Espaço em branco no fim",
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://your-server-ip:port/",
"login_form_endpoint_url": "Server Endpoint URL",
"login_form_err_invalid_email": "Invalid Email",
"login_form_err_invalid_url": "Invalid URL",
"login_form_err_leading_whitespace": "Leading whitespace",
"login_form_err_trailing_whitespace": "Trailing whitespace",
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://ip-tvojho-servera:port/",
"login_form_endpoint_url": "URL adresa servera",
"login_form_err_invalid_email": "Neplatný e-mail",
"login_form_err_invalid_url": "Neplatný URL",
"login_form_err_leading_whitespace": "Úvodná medzera",
"login_form_err_trailing_whitespace": "Koncové medzera",
"login_form_failed_get_oauth_server_config": "Chyba prihlásenia pomocou OAuth, skontrolujte adresu URL servera",

View File

@@ -117,6 +117,7 @@
"login_form_endpoint_hint": "http://your-server-ip:port/",
"login_form_endpoint_url": "服务器地址",
"login_form_err_invalid_email": "请输入正确的邮箱",
"login_form_err_invalid_url": "Invalid URL",
"login_form_err_leading_whitespace": "前面空格",
"login_form_err_trailing_whitespace": "后面空格",
"login_form_failed_get_oauth_server_config": "使用 OAuth 时出错,请检查服务器 地址",

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;
}

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);

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"/+$"), "");
}