mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 06:41:25 +08:00
FIX: use hijack for processing bulk invites (#7679)
FIX: do not store bulk invite CSV file on server
This commit is contained in:
@ -172,24 +172,31 @@ class InvitesController < ApplicationController
|
||||
def upload_csv
|
||||
guardian.ensure_can_bulk_invite_to_forum!(current_user)
|
||||
|
||||
file = params[:file] || params[:files].first
|
||||
name = params[:name] || File.basename(file.original_filename, ".*")
|
||||
extension = File.extname(file.original_filename)
|
||||
hijack do
|
||||
begin
|
||||
file = params[:file] || params[:files].first
|
||||
|
||||
begin
|
||||
data = if extension.downcase == ".csv"
|
||||
path = Invite.create_csv(file, name)
|
||||
Jobs.enqueue(:bulk_invite, filename: "#{name}#{extension}", current_user_id: current_user.id)
|
||||
{ url: path }
|
||||
else
|
||||
failed_json.merge(errors: [I18n.t("bulk_invite.file_should_be_csv")])
|
||||
if File.read(file.tempfile).scan(/\n/).count.to_i > 50000
|
||||
return render json: failed_json.merge(errors: [I18n.t("bulk_invite.max_rows")]), status: 422
|
||||
end
|
||||
|
||||
invites = []
|
||||
CSV.foreach(file.tempfile) do |row|
|
||||
invite_hash = { email: row[0], groups: row[1], topic_id: row[2] }
|
||||
if invite_hash[:email].present?
|
||||
invites.push(invite_hash)
|
||||
end
|
||||
end
|
||||
if invites.present?
|
||||
Jobs.enqueue(:bulk_invite, invites: invites, current_user_id: current_user.id)
|
||||
render json: success_json
|
||||
else
|
||||
render json: failed_json.merge(errors: [I18n.t("bulk_invite.error")]), status: 422
|
||||
end
|
||||
rescue
|
||||
render json: failed_json.merge(errors: [I18n.t("bulk_invite.error")]), status: 422
|
||||
end
|
||||
rescue
|
||||
failed_json.merge(errors: [I18n.t("bulk_invite.error")])
|
||||
end
|
||||
MessageBus.publish("/uploads/csv", data.as_json, user_ids: [current_user.id])
|
||||
|
||||
render json: success_json
|
||||
end
|
||||
|
||||
def fetch_username
|
||||
|
Reference in New Issue
Block a user