From 8eda500daec75c4bb0aff1f1af4d53f1fd05f6ff Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 25 Feb 2025 20:17:18 +0100 Subject: [PATCH] Prevent login issue if SIP identity is given instead of username in third party account login --- .../viewmodel/AccountCreationViewModel.kt | 6 ++-- .../viewmodel/AccountLoginViewModel.kt | 2 ++ .../ThirdPartySipAccountLoginViewModel.kt | 28 +++++++++---------- ...third_party_sip_account_login_fragment.xml | 6 ++-- ...third_party_sip_account_login_fragment.xml | 4 +-- app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values/strings.xml | 1 - 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountCreationViewModel.kt b/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountCreationViewModel.kt index 493470f9f..db9ba778e 100644 --- a/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountCreationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountCreationViewModel.kt @@ -442,9 +442,9 @@ class AccountCreationViewModel operationInProgress.postValue(true) createEnabled.postValue(false) - val usernameValue = username.value - val passwordValue = password.value - if (usernameValue.isNullOrEmpty() || passwordValue.isNullOrEmpty()) { + val usernameValue = username.value.orEmpty().trim() + val passwordValue = password.value.orEmpty().trim() + if (usernameValue.isEmpty() || passwordValue.isEmpty()) { Log.e("$TAG Either username [$usernameValue] or password is null or empty!") return } diff --git a/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountLoginViewModel.kt b/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountLoginViewModel.kt index 285b0c42f..67b93e15b 100644 --- a/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountLoginViewModel.kt +++ b/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountLoginViewModel.kt @@ -172,6 +172,8 @@ open class AccountLoginViewModel "sip:$userInput@$defaultDomain" } } + Log.i("$TAG Computed identity is [$identity] from user input [$userInput]") + val identityAddress = Factory.instance().createAddress(identity) if (identityAddress == null) { Log.e("$TAG Can't parse [$identity] as Address!") diff --git a/app/src/main/java/org/linphone/ui/assistant/viewmodel/ThirdPartySipAccountLoginViewModel.kt b/app/src/main/java/org/linphone/ui/assistant/viewmodel/ThirdPartySipAccountLoginViewModel.kt index de69daf2f..e1676881f 100644 --- a/app/src/main/java/org/linphone/ui/assistant/viewmodel/ThirdPartySipAccountLoginViewModel.kt +++ b/app/src/main/java/org/linphone/ui/assistant/viewmodel/ThirdPartySipAccountLoginViewModel.kt @@ -181,21 +181,21 @@ class ThirdPartySipAccountLoginViewModel // Allow to enter SIP identity instead of simply username // in case identity domain doesn't match proxy domain - val user = username.value.orEmpty().trim() - val userId = authId.value.orEmpty().trim() - val identity = if (user.startsWith("sip:")) { - if (user.contains("@")) { - user - } else { - "$user@$domain" - } - } else { - if (user.contains("@")) { - "sip:$user" - } else { - "sip:$user@$domain" - } + var user = username.value.orEmpty().trim() + if (user.startsWith("sip:")) { + user = user.substring("sip:".length) + } else if (user.startsWith("sips:")) { + user = user.substring("sips:".length) } + if (user.contains("@")) { + user = user.split("@")[0] + } + + val userId = authId.value.orEmpty().trim() + + Log.i("$TAG Parsed username is [$user], user ID [$userId] and domain [$domain]") + + val identity = "sip:$user@$domain" val identityAddress = Factory.instance().createAddress(identity) if (identityAddress == null) { Log.e("$TAG Can't parse [$identity] as Address!") diff --git a/app/src/main/res/layout-sw600dp/assistant_third_party_sip_account_login_fragment.xml b/app/src/main/res/layout-sw600dp/assistant_third_party_sip_account_login_fragment.xml index 43490d289..19598da8d 100644 --- a/app/src/main/res/layout-sw600dp/assistant_third_party_sip_account_login_fragment.xml +++ b/app/src/main/res/layout-sw600dp/assistant_third_party_sip_account_login_fragment.xml @@ -74,11 +74,11 @@ android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:layout_marginTop="16dp" - android:text="@string/assistant_third_party_sip_account_username_or_identity" + android:text="@{@string/username + `*`}" app:layout_constraintVertical_chainStyle="packed" app:layout_constraintTop_toBottomOf="@id/title" app:layout_constraintBottom_toTopOf="@id/username" - app:layout_constraintStart_toStartOf="@id/title"/> + app:layout_constraintStart_toStartOf="@id/username"/> diff --git a/app/src/main/res/layout/assistant_third_party_sip_account_login_fragment.xml b/app/src/main/res/layout/assistant_third_party_sip_account_login_fragment.xml index 0a21b8b29..224bb3f38 100644 --- a/app/src/main/res/layout/assistant_third_party_sip_account_login_fragment.xml +++ b/app/src/main/res/layout/assistant_third_party_sip_account_login_fragment.xml @@ -55,7 +55,7 @@ android:layout_marginTop="38dp" android:layout_marginStart="16dp" android:layout_marginEnd="16dp" - android:text="@string/assistant_third_party_sip_account_username_or_identity" + android:text="@{@string/username + `*`}" app:layout_constraintTop_toBottomOf="@id/title" app:layout_constraintStart_toStartOf="@id/username"/> @@ -87,7 +87,7 @@ android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:layout_marginTop="16dp" - android:text="@string/password" + android:text="@{@string/password + `*`}" app:layout_constraintTop_toBottomOf="@id/username" app:layout_constraintStart_toStartOf="@id/password"/> diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 22f3c3670..aee2eb2ef 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -119,7 +119,6 @@ Certaines fonctionnalités telles que les conversations de groupe, les vidéo-conférences, etc… nécessitent un compte &appName;.\n\nCes fonctionnalités seront masquées si vous utilisez un compte SIP tiers.\n\nPour les activer dans un projet commercial, merci de nous contacter. Je préfère créer un compte J\'ai compris - Nom d\'utilisateur ou identité SIP* Notifications push indisponible, la création de compte est donc désactivée. Notification push non reçue, merci de réessayer plus tard Un erreur inattendue est survenue, merci de réessayer plus tard diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 567b02e0a..8fbc07dc6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -158,7 +158,6 @@ Some features require a &appName; account, such as group messaging, video conferences…\n\nThese features are hidden when you register with a third party SIP account.\n\nTo enable it in a commercial project, please contact us. I prefer to create an account I understand - Username or SIP identity* Push notifications not available, account creation disabled Push notification with auth token not received in 5 seconds, please try again later Unexpected error occurred, please try again later