diff --git a/CHANGES.md b/CHANGES.md index 43ab2ee975..7269b631a7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -24,6 +24,7 @@ Bugfix 🐛: - Fix read marker not updating automatically (#3267) - Sent video does not contains duration (#3272) - Properly clean the back stack if the user cancel registration when waiting for email validation + - Fix user invitation in case of restricted profile api (#3306) Translations 🗣: - diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/profile/ProfileService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/profile/ProfileService.kt index e493adeaf2..05fa24946a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/profile/ProfileService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/profile/ProfileService.kt @@ -66,6 +66,7 @@ interface ProfileService { /** * Get the combined profile information for this user. * This may return keys which are not limited to displayname or avatar_url. + * If server is configured as limit_profile_requests_to_users_who_share_rooms: true then response can be HTTP 403. * @param userId the userId param to look for * */ diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileAPI.kt index 5113b821e8..485a4973ca 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileAPI.kt @@ -33,6 +33,7 @@ internal interface ProfileAPI { * Get the combined profile information for this user. * This API may be used to fetch the user's own profile information or other users; either locally or on remote homeservers. * This API may return keys which are not limited to displayname or avatar_url. + * If server is configured as limit_profile_requests_to_users_who_share_rooms: true then response can be HTTP 403. * @param userId the user id to fetch profile info */ @GET(NetworkConstants.URI_API_PREFIX_PATH_R0 + "profile/{userId}") diff --git a/vector/src/main/java/im/vector/app/features/userdirectory/UserListViewModel.kt b/vector/src/main/java/im/vector/app/features/userdirectory/UserListViewModel.kt index a68717ea57..5d5247ec06 100644 --- a/vector/src/main/java/im/vector/app/features/userdirectory/UserListViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/userdirectory/UserListViewModel.kt @@ -33,7 +33,6 @@ import org.matrix.android.sdk.api.MatrixPatterns import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.profile.ProfileService import org.matrix.android.sdk.api.session.user.model.User -import org.matrix.android.sdk.api.util.Optional import org.matrix.android.sdk.api.util.toMatrixItem import org.matrix.android.sdk.api.util.toOptional import org.matrix.android.sdk.rx.rx @@ -137,7 +136,15 @@ class UserListViewModel @AssistedInject constructor(@Assisted initialState: User avatarUrl = json[ProfileService.AVATAR_URL_KEY] as? String ).toOptional() } - .onErrorReturn { Optional.empty() } + .onErrorReturn { + // Profile API can be restricted and doesn't have to return result. + // In this case allow inviting valid user ids. + User( + userId = search, + displayName = null, + avatarUrl = null + ).toOptional() + } Single.zip( searchObservable,