mirror of
https://github.com/discourse/discourse.git
synced 2025-09-07 12:02:53 +08:00
When running `ensure_login_required` it should always happen prior to `check_xhr` cause check xhr will trigger a 200 response
36 lines
909 B
Ruby
36 lines
909 B
Ruby
require_dependency 'oneboxer'
|
|
|
|
class OneboxController < ApplicationController
|
|
prepend_before_action :check_xhr, :ensure_logged_in
|
|
|
|
def show
|
|
unless params[:refresh] == 'true'
|
|
preview = Oneboxer.cached_preview(params[:url])
|
|
preview.strip! if preview.present?
|
|
return render(plain: preview) if preview.present?
|
|
end
|
|
|
|
# only 1 outgoing preview per user
|
|
return render(body: nil, status: 429) if Oneboxer.is_previewing?(current_user.id)
|
|
|
|
user_id = current_user.id
|
|
invalidate = params[:refresh] == 'true'
|
|
url = params[:url]
|
|
|
|
hijack do
|
|
Oneboxer.preview_onebox!(user_id)
|
|
|
|
preview = Oneboxer.preview(url, invalidate_oneboxes: invalidate)
|
|
preview.strip! if preview.present?
|
|
|
|
Oneboxer.onebox_previewed!(user_id)
|
|
|
|
if preview.blank?
|
|
render body: nil, status: 404
|
|
else
|
|
render plain: preview
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|