From ab67299acb470b00e7579dc4649e5897cf740c4c Mon Sep 17 00:00:00 2001 From: Keegan George Date: Wed, 30 Apr 2025 12:10:10 -0700 Subject: [PATCH] FIX: Invalid access error should be populated to user (#1303) Invalid access error should be populated to user when trying to search for something they do not have permissions for (i.e. anons searching `in:messages` --- .../embeddings/embeddings_controller.rb | 16 ++++++++++++---- .../discourse/components/ai-full-page-search.gjs | 2 ++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/controllers/discourse_ai/embeddings/embeddings_controller.rb b/app/controllers/discourse_ai/embeddings/embeddings_controller.rb index 1a49db3b..5dcca0c3 100644 --- a/app/controllers/discourse_ai/embeddings/embeddings_controller.rb +++ b/app/controllers/discourse_ai/embeddings/embeddings_controller.rb @@ -46,11 +46,19 @@ module DiscourseAi end hijack do - semantic_search - .search_for_topics(query, _page = 1, hyde: !skip_hyde) - .each { |topic_post| grouped_results.add(topic_post) } + begin + semantic_search + .search_for_topics(query, _page = 1, hyde: !skip_hyde) + .each { |topic_post| grouped_results.add(topic_post) } - render_serialized(grouped_results, GroupedSearchResultSerializer, result: grouped_results) + render_serialized( + grouped_results, + GroupedSearchResultSerializer, + result: grouped_results, + ) + rescue Discourse::InvalidAccess + render_json_error(I18n.t("invalid_access"), status: 403) + end end end diff --git a/assets/javascripts/discourse/components/ai-full-page-search.gjs b/assets/javascripts/discourse/components/ai-full-page-search.gjs index 4b1d6f50..23eaf7ec 100644 --- a/assets/javascripts/discourse/components/ai-full-page-search.gjs +++ b/assets/javascripts/discourse/components/ai-full-page-search.gjs @@ -9,6 +9,7 @@ import { SEARCH_TYPE_DEFAULT } from "discourse/controllers/full-page-search"; import concatClass from "discourse/helpers/concat-class"; import icon from "discourse/helpers/d-icon"; import { ajax } from "discourse/lib/ajax"; +import { popupAjaxError } from "discourse/lib/ajax-error"; import { isValidSearchTerm, translateResults } from "discourse/lib/search"; import { i18n } from "discourse-i18n"; import DTooltip from "float-kit/components/d-tooltip"; @@ -193,6 +194,7 @@ export default class AiFullPageSearch extends Component { this.AiResults = model.posts; }) + .catch(popupAjaxError) .finally(() => { this.searching = false; });