2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2025-09-07 12:02:53 +08:00
discourse/app/controllers/onebox_controller.rb
Sam f2e7b74d88 FIX: don't return 200s when login is required to paths
When running `ensure_login_required` it should always happen prior to
`check_xhr` cause check xhr will trigger a 200 response
2018-02-01 12:26:45 +11:00

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