FIX: use hijack for processing bulk invites (#7679)

FIX: do not store bulk invite CSV file on server
This commit is contained in:
Arpit Jalan
2019-06-04 20:19:46 +05:30
committed by GitHub
parent ecc9c76692
commit e7fe7010b8
6 changed files with 52 additions and 75 deletions

View File

@ -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