From a11f99be3d2086f2d444506862c2210647fedbca Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 4 Apr 2023 21:53:25 +0100 Subject: [PATCH] mobile: ignore spaces around password (#2144) --- .../app/views/usersettings/UserProfilesView.kt | 16 ++++++++-------- .../Views/UserSettings/UserProfilesView.swift | 12 +++++++----- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt index 046362512c..2bf1ee352f 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt @@ -52,7 +52,7 @@ fun UserProfilesView(m: ChatModel, search: MutableState, profileHidden: }, activateUser = { user -> withBGApi { - m.controller.changeActiveUser(user.userId, userViewPassword(user, searchTextOrPassword.value)) + m.controller.changeActiveUser(user.userId, userViewPassword(user, searchTextOrPassword.value.trim())) } }, removeUser = { user -> @@ -71,13 +71,13 @@ fun UserProfilesView(m: ChatModel, search: MutableState, profileHidden: Column { SectionItemView({ AlertManager.shared.hideAlert() - removeUser(m, user, users, true, searchTextOrPassword.value) + removeUser(m, user, users, true, searchTextOrPassword.value.trim()) }) { Text(stringResource(R.string.users_delete_with_connections), color = Color.Red) } SectionItemView({ AlertManager.shared.hideAlert() - removeUser(m, user, users, false, searchTextOrPassword.value) + removeUser(m, user, users, false, searchTextOrPassword.value.trim()) } ) { Text(stringResource(R.string.users_delete_data_only), color = Color.Red) @@ -107,7 +107,7 @@ fun UserProfilesView(m: ChatModel, search: MutableState, profileHidden: } } } else { - withBGApi { setUserPrivacy(m) { m.controller.apiUnhideUser(user.userId, searchTextOrPassword.value) } } + withBGApi { setUserPrivacy(m) { m.controller.apiUnhideUser(user.userId, searchTextOrPassword.value.trim()) } } } }, muteUser = { user -> @@ -173,7 +173,7 @@ private fun UserProfilesView( UserView(user, users, visibleUsersCount, activateUser, removeUser, unhideUser, muteUser, unmuteUser, showHiddenProfile) SectionDivider() } - if (searchTextOrPassword.value.isEmpty()) { + if (searchTextOrPassword.value.trim().isEmpty()) { SectionItemView(addUser, minHeight = 68.dp) { Icon(Icons.Outlined.Add, stringResource(R.string.users_add), tint = MaterialTheme.colors.primary) Spacer(Modifier.padding(horizontal = 4.dp)) @@ -324,10 +324,10 @@ private fun correctPassword(user: User, pwd: String): Boolean { } private fun userViewPassword(user: User, searchTextOrPassword: String): String? = - if (user.hidden) searchTextOrPassword else null + if (user.hidden) searchTextOrPassword.trim() else null private fun passwordEntryRequired(user: User, searchTextOrPassword: String): Boolean = - user.hidden && user.activeUser && !correctPassword(user, searchTextOrPassword) + user.hidden && user.activeUser && !correctPassword(user, searchTextOrPassword.trim()) private fun removeUser(m: ChatModel, user: User, users: List, delSMPQueues: Boolean, searchTextOrPassword: String) { if (passwordEntryRequired(user, searchTextOrPassword)) { @@ -340,7 +340,7 @@ private fun removeUser(m: ChatModel, user: User, users: List, delSMPQueues } } } else { - withBGApi { doRemoveUser(m, user, users, delSMPQueues, userViewPassword(user, searchTextOrPassword)) } + withBGApi { doRemoveUser(m, user, users, delSMPQueues, userViewPassword(user, searchTextOrPassword.trim())) } } } diff --git a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift index 5f34903ac8..d23ac670c5 100644 --- a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift +++ b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift @@ -22,6 +22,8 @@ struct UserProfilesView: View { @State private var profileAction: UserProfileAction? @State private var actionPassword = "" + var trimmedSearchTextOrPassword: String { searchTextOrPassword.trimmingCharacters(in: .whitespaces)} + private enum UserProfilesAlert: Identifiable { case deleteUser(user: User, delSMPQueues: Bool) case cantDeleteLastUser @@ -90,7 +92,7 @@ struct UserProfilesView: View { } } - if searchTextOrPassword == "" { + if trimmedSearchTextOrPassword == "" { NavigationLink { CreateProfile() } label: { @@ -179,7 +181,7 @@ struct UserProfilesView: View { } private func filteredUsers() -> [UserInfo] { - let s = searchTextOrPassword.trimmingCharacters(in: .whitespaces) + let s = trimmedSearchTextOrPassword let lower = s.localizedLowercase return m.users.filter { u in if (u.user.activeUser || !u.user.hidden) && (s == "" || u.user.chatViewName.localizedLowercase.contains(lower)) { @@ -201,7 +203,7 @@ struct UserProfilesView: View { } private func userViewPassword(_ user: User) -> String? { - !user.hidden ? nil : searchTextOrPassword + !user.hidden ? nil : trimmedSearchTextOrPassword } @ViewBuilder private func profileActionView(_ action: UserProfileAction) -> some View { @@ -267,7 +269,7 @@ struct UserProfilesView: View { } private func passwordEntryRequired(_ user: User) -> Bool { - user.hidden && user.activeUser && !correctPassword(user, searchTextOrPassword) + user.hidden && user.activeUser && !correctPassword(user, trimmedSearchTextOrPassword) } private func removeUser(_ user: User, _ delSMPQueues: Bool, viewPwd: String?) async { @@ -328,7 +330,7 @@ struct UserProfilesView: View { if passwordEntryRequired(user) { profileAction = .unhideUser(user: user) } else { - setUserPrivacy(user) { try await apiUnhideUser(user.userId, viewPwd: searchTextOrPassword) } + setUserPrivacy(user) { try await apiUnhideUser(user.userId, viewPwd: trimmedSearchTextOrPassword) } } } .tint(.green)