2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-03-04 01:15:08 +08:00
discourse/app/controllers/onebox_controller.rb
Jarek Radosz 71834c898f
DEV: Update rubocop-discourse to 3.13 and autofix issues (#35073)
Co-authored-by: Loïc Guitaut <loic@discourse.org>
2025-10-06 16:11:01 +02:00

48 lines
1.3 KiB
Ruby

# frozen_string_literal: true
class OneboxController < ApplicationController
requires_login
def show
unless params[:refresh] == "true"
preview = Oneboxer.cached_preview(params[:url])
preview = preview.strip if preview.present?
return render(plain: preview) if preview.present?
end
# only 1 outgoing preview per user
return render(body: nil, status: :too_many_requests) if Oneboxer.is_previewing?(current_user.id)
user_id = current_user.id
category_id = params[:category_id].to_i
topic_id = params[:topic_id].to_i
invalidate = params[:refresh] == "true"
url = params[:url]
return render(body: nil, status: :not_found) if Oneboxer.recently_failed?(url)
hijack(info: "#{url} topic_id: #{topic_id} user_id: #{user_id}") do
Oneboxer.preview_onebox!(user_id)
preview =
Oneboxer.preview(
url,
invalidate_oneboxes: invalidate,
user_id: user_id,
category_id: category_id,
topic_id: topic_id,
)
preview = preview.strip if preview.present?
Oneboxer.onebox_previewed!(user_id)
if preview.blank?
Oneboxer.cache_failed!(url)
render body: nil, status: :not_found
else
render plain: preview
end
end
end
end