diff --git a/mobile/assets/i18n/cs-CZ.json b/mobile/assets/i18n/cs-CZ.json index c4dbc359ad..be8ac18d0a 100644 --- a/mobile/assets/i18n/cs-CZ.json +++ b/mobile/assets/i18n/cs-CZ.json @@ -114,7 +114,7 @@ "library_page_new_album": "Nové album", "login_form_button_text": "Přihlášení", "login_form_email_hint": "tvůjmail@email.com", - "login_form_endpoint_hint": "http://ip-tvého-serveru:port/api", + "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_leading_whitespace": "Úvodní mezera", diff --git a/mobile/assets/i18n/da-DK.json b/mobile/assets/i18n/da-DK.json index 6bfae49c1f..a722e407aa 100644 --- a/mobile/assets/i18n/da-DK.json +++ b/mobile/assets/i18n/da-DK.json @@ -114,7 +114,7 @@ "library_page_new_album": "Nyt album", "login_form_button_text": "Log ind", "login_form_email_hint": "din-email@email.com", - "login_form_endpoint_hint": "http://din-server-ip:port/api", + "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_leading_whitespace": "Mellemrum før", diff --git a/mobile/assets/i18n/de-DE.json b/mobile/assets/i18n/de-DE.json index 662bdb3dc4..7fc88232f7 100644 --- a/mobile/assets/i18n/de-DE.json +++ b/mobile/assets/i18n/de-DE.json @@ -114,7 +114,7 @@ "library_page_new_album": "Neues Album", "login_form_button_text": "Anmelden", "login_form_email_hint": "deine@email.de", - "login_form_endpoint_hint": "http://deine-server-ip:port/api", + "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_leading_whitespace": "Führendes Leerzichen", diff --git a/mobile/assets/i18n/en-US.json b/mobile/assets/i18n/en-US.json index f322976eed..bdcdba2179 100644 --- a/mobile/assets/i18n/en-US.json +++ b/mobile/assets/i18n/en-US.json @@ -114,7 +114,7 @@ "library_page_new_album": "New album", "login_form_button_text": "Login", "login_form_email_hint": "youremail@email.com", - "login_form_endpoint_hint": "http://your-server-ip:port/api", + "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_leading_whitespace": "Leading whitespace", diff --git a/mobile/assets/i18n/es-ES.json b/mobile/assets/i18n/es-ES.json index 9a1b2f9cf4..a29737d218 100644 --- a/mobile/assets/i18n/es-ES.json +++ b/mobile/assets/i18n/es-ES.json @@ -114,7 +114,7 @@ "library_page_new_album": "Nuevo álbum", "login_form_button_text": "Iniciar Sesión", "login_form_email_hint": "tucorreo@correo.com", - "login_form_endpoint_hint": "http://tu-ip-de-servidor:puerto/api", + "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_leading_whitespace": "Espacio en blanco inicial", diff --git a/mobile/assets/i18n/fi-FI.json b/mobile/assets/i18n/fi-FI.json index 8787f5f490..6519d49208 100644 --- a/mobile/assets/i18n/fi-FI.json +++ b/mobile/assets/i18n/fi-FI.json @@ -114,7 +114,7 @@ "library_page_new_album": "Uusi albumi", "login_form_button_text": "Kirjaudu", "login_form_email_hint": "sahkopostisi@esimerkki.fi", - "login_form_endpoint_hint": "http://palvelimesi-osoite:portti/api", + "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_leading_whitespace": "Alussa välilyönti", diff --git a/mobile/assets/i18n/fr-FR.json b/mobile/assets/i18n/fr-FR.json index 58822a12c2..920b41a7c1 100644 --- a/mobile/assets/i18n/fr-FR.json +++ b/mobile/assets/i18n/fr-FR.json @@ -114,7 +114,7 @@ "library_page_new_album": "Nouvel album", "login_form_button_text": "Connexion", "login_form_email_hint": "votreemail@email.com", - "login_form_endpoint_hint": "http://adresse-ip-serveur:port/api", + "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_leading_whitespace": "Espace en début de ligne", diff --git a/mobile/assets/i18n/it-IT.json b/mobile/assets/i18n/it-IT.json index 531941f0f8..5c02a555d3 100644 --- a/mobile/assets/i18n/it-IT.json +++ b/mobile/assets/i18n/it-IT.json @@ -114,7 +114,7 @@ "library_page_new_album": "Nuovo Album", "login_form_button_text": "Login", "login_form_email_hint": "tuaemail@email.com", - "login_form_endpoint_hint": "http://ip-del-tuo-server:port/api", + "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_leading_whitespace": "Whitespace all'inizio ", diff --git a/mobile/assets/i18n/ja-JP.json b/mobile/assets/i18n/ja-JP.json index 08125ff5e6..a7c2b7e148 100644 --- a/mobile/assets/i18n/ja-JP.json +++ b/mobile/assets/i18n/ja-JP.json @@ -114,7 +114,7 @@ "library_page_new_album": "新しいアルバム", "login_form_button_text": "ログイン", "login_form_email_hint": "example@email.com", - "login_form_endpoint_hint": "https://example.com:port/api", + "login_form_endpoint_hint": "https://example.com:port/", "login_form_endpoint_url": "サーバーエンドポイントURL", "login_form_err_invalid_email": "メールアドレスが有効じゃないよ", "login_form_err_leading_whitespace": "最初に半角スペースが含まれてるよ", diff --git a/mobile/assets/i18n/ko-KR.json b/mobile/assets/i18n/ko-KR.json index 5ea799006a..f036e46629 100644 --- a/mobile/assets/i18n/ko-KR.json +++ b/mobile/assets/i18n/ko-KR.json @@ -111,7 +111,7 @@ "library_page_new_album": "새 앨범", "login_form_button_text": "로그인", "login_form_email_hint": "youremail@email.com", - "login_form_endpoint_hint": "https://your-server-ip:port/api", + "login_form_endpoint_hint": "https://your-server-ip:port/", "login_form_endpoint_url": "서버 엔드포인트 URL", "login_form_err_invalid_email": "잘못된 이메일 형식입니다", "login_form_err_leading_whitespace": "이메일 앞에 공백문자가 포함되어 있습니다", diff --git a/mobile/assets/i18n/nl-NL.json b/mobile/assets/i18n/nl-NL.json index bc14346ae1..6e17c7c14c 100644 --- a/mobile/assets/i18n/nl-NL.json +++ b/mobile/assets/i18n/nl-NL.json @@ -77,7 +77,7 @@ "exif_bottom_sheet_location": "LOCATIE", "login_form_button_text": "Login", "login_form_email_hint": "jouwemail@email.com", - "login_form_endpoint_hint": "http://jouw-server-ip:port/api", + "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_leading_whitespace": "Spatie aan het begin", diff --git a/mobile/assets/i18n/pl-PL.json b/mobile/assets/i18n/pl-PL.json index c83c4737e2..ea87a9b948 100644 --- a/mobile/assets/i18n/pl-PL.json +++ b/mobile/assets/i18n/pl-PL.json @@ -114,7 +114,7 @@ "library_page_new_album": "Nowy album", "login_form_button_text": "Login", "login_form_email_hint": "twojmail@email.com", - "login_form_endpoint_hint": "http://ip-twojego-serwera:port/api", + "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_leading_whitespace": "Białe znaki", diff --git a/mobile/assets/i18n/pt-BR.json b/mobile/assets/i18n/pt-BR.json index 3a65fcb9fc..30b681a069 100644 --- a/mobile/assets/i18n/pt-BR.json +++ b/mobile/assets/i18n/pt-BR.json @@ -74,7 +74,7 @@ "exif_bottom_sheet_location": "LOCALIZAÇÃO", "login_form_button_text": "Login", "login_form_email_hint": "youremail@email.com", - "login_form_endpoint_hint": "http://your-server-ip:port/api", + "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_leading_whitespace": "Leading whitespace", diff --git a/mobile/assets/i18n/pt-PT.json b/mobile/assets/i18n/pt-PT.json index f291d53329..d01b33ffb8 100644 --- a/mobile/assets/i18n/pt-PT.json +++ b/mobile/assets/i18n/pt-PT.json @@ -114,7 +114,7 @@ "library_page_new_album": "Novo Album", "login_form_button_text": "Login", "login_form_email_hint": "seuemail@email.com", - "login_form_endpoint_hint": "http://ip-do-seu-servidor:porta/api", + "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_leading_whitespace": "Espaço em branco no início", diff --git a/mobile/assets/i18n/ru-RU.json b/mobile/assets/i18n/ru-RU.json index 54d7af62ee..834ae96d83 100644 --- a/mobile/assets/i18n/ru-RU.json +++ b/mobile/assets/i18n/ru-RU.json @@ -114,7 +114,7 @@ "library_page_new_album": "Новый альбом", "login_form_button_text": "Login", "login_form_email_hint": "youremail@email.com", - "login_form_endpoint_hint": "http://your-server-ip:port/api", + "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_leading_whitespace": "Leading whitespace", diff --git a/mobile/assets/i18n/sk-SK.json b/mobile/assets/i18n/sk-SK.json index afb251ea22..5ff2a3d54e 100644 --- a/mobile/assets/i18n/sk-SK.json +++ b/mobile/assets/i18n/sk-SK.json @@ -114,7 +114,7 @@ "library_page_new_album": "Nový album", "login_form_button_text": "Prihlásenie", "login_form_email_hint": "tvojmail@email.com", - "login_form_endpoint_hint": "http://ip-tvojho-servera:port/api", + "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_leading_whitespace": "Úvodná medzera", diff --git a/mobile/assets/i18n/zh-CN.json b/mobile/assets/i18n/zh-CN.json index 4cd546d06f..bc0cb5e74f 100644 --- a/mobile/assets/i18n/zh-CN.json +++ b/mobile/assets/i18n/zh-CN.json @@ -114,7 +114,7 @@ "library_page_new_album": "新建相册", "login_form_button_text": "登录", "login_form_email_hint": "youremail@email.com", - "login_form_endpoint_hint": "http://your-server-ip:port/api", + "login_form_endpoint_hint": "http://your-server-ip:port/", "login_form_endpoint_url": "服务器地址", "login_form_err_invalid_email": "请输入正确的邮箱", "login_form_err_leading_whitespace": "前面空格", diff --git a/mobile/lib/modules/login/ui/login_form.dart b/mobile/lib/modules/login/ui/login_form.dart index 2d49e9fa5a..dd967f8b1a 100644 --- a/mobile/lib/modules/login/ui/login_form.dart +++ b/mobile/lib/modules/login/ui/login_form.dart @@ -35,12 +35,10 @@ class LoginForm extends HookConsumerWidget { getServeLoginConfig() async { if (!serverEndpointFocusNode.hasFocus) { - var urlText = serverEndpointController.text.trim(); + var serverUrl = serverEndpointController.text.trim(); try { - var serverUrl = Uri.tryParse(urlText); - - if (serverUrl != null) { + if (serverUrl.isNotEmpty) { isLoading.value = true; final serverEndpoint = await apiService.resolveEndpoint(serverUrl.toString()); diff --git a/mobile/lib/shared/services/api.service.dart b/mobile/lib/shared/services/api.service.dart index 05c6231f66..cfe04df89d 100644 --- a/mobile/lib/shared/services/api.service.dart +++ b/mobile/lib/shared/services/api.service.dart @@ -27,35 +27,27 @@ class ApiService { } /// Takes a server URL and attempts to resolve the API endpoint. - /// If no path is provided, a lookup for /.well-known/immich will - /// attempt to resolve the API endpoint. Otherwise, we assume the - /// input points to the API directly. /// /// Input: [schema://]host[:port][/path] /// schema - optional (default: https) /// host - required /// port - optional (default: based on schema) - /// path - optional (default: /) + /// path - optional Future resolveEndpoint(String serverUrl) async { // Add schema if none is set final urlWithSchema = serverUrl.startsWith(RegExp(r"https?://")) ? serverUrl : "https://$serverUrl"; - final url = Uri.parse(urlWithSchema); - final origin = url.origin; + // Remove trailing slash(es) + final url = urlWithSchema.replaceFirst(RegExp(r"/+$"), ""); - // Trim trailing slash(es) from path - final path = url.path.replaceFirst(RegExp(r"/+$"), ""); - - if (path.isEmpty) { - // No path provided, lets check for /.well-known/immich - final wellKnownEndpoint = await getWellKnownEndpoint(origin); - if (wellKnownEndpoint.isNotEmpty) return wellKnownEndpoint; - } + // Check for /.well-known/immich + final wellKnownEndpoint = await getWellKnownEndpoint(url); + if (wellKnownEndpoint.isNotEmpty) return wellKnownEndpoint; // Otherwise, assume the URL provided is the api endpoint - return "$origin$path"; + return url; } Future getWellKnownEndpoint(String baseUrl) async {