revisted fix for #462

Moved validation to services/post_status_service.rb
This commit is contained in:
Rakib Hasan 2017-02-02 23:10:17 -05:00
parent 6d2301988f
commit 6f9ecd899e
4 changed files with 18 additions and 15 deletions

View file

@ -119,9 +119,6 @@ export function uploadCompose(files) {
let data = new FormData(); let data = new FormData();
data.append('file', files[0]); data.append('file', files[0]);
data.append('media_ids', getState().getIn(
['compose', 'media_attachments']
).map(item => item.get('id')));
api(getState).post('/api/v1/media', data, { api(getState).post('/api/v1/media', data, {
onUploadProgress: function (e) { onUploadProgress: function (e) {

View file

@ -11,10 +11,6 @@ class Api::V1::MediaController < ApiController
def create def create
@media = MediaAttachment.create!(account: current_user.account, file: params[:file]) @media = MediaAttachment.create!(account: current_user.account, file: params[:file])
if @media.video? and params[:media_ids] != "List []"
@media.destroy
render json: {error: 'Cannot attach a video to a toot that already contains images'}, status: 422
end
rescue Paperclip::Errors::NotIdentifiedByImageMagickError rescue Paperclip::Errors::NotIdentifiedByImageMagickError
render json: { error: 'File type of uploaded media could not be verified' }, status: 422 render json: { error: 'File type of uploaded media could not be verified' }, status: 422
rescue Paperclip::Error rescue Paperclip::Error

View file

@ -62,12 +62,16 @@ class Api::V1::StatusesController < ApiController
end end
def create def create
begin
@status = PostStatusService.new.call(current_user.account, params[:status], params[:in_reply_to_id].blank? ? nil : Status.find(params[:in_reply_to_id]), media_ids: params[:media_ids], @status = PostStatusService.new.call(current_user.account, params[:status], params[:in_reply_to_id].blank? ? nil : Status.find(params[:in_reply_to_id]), media_ids: params[:media_ids],
sensitive: params[:sensitive], sensitive: params[:sensitive],
spoiler_text: params[:spoiler_text], spoiler_text: params[:spoiler_text],
visibility: params[:visibility], visibility: params[:visibility],
application: doorkeeper_token.application) application: doorkeeper_token.application)
rescue Mastodon::NotPermitted => e
render json: {error: e.message}, status: 422
return
end
render action: :show render action: :show
end end

View file

@ -35,8 +35,14 @@ class PostStatusService < BaseService
def attach_media(status, media_ids) def attach_media(status, media_ids)
return if media_ids.nil? || !media_ids.is_a?(Enumerable) return if media_ids.nil? || !media_ids.is_a?(Enumerable)
media = MediaAttachment.where(status_id: nil).where(id: media_ids.take(4).map(&:to_i)) media = MediaAttachment.where(status_id: nil).where(id: media_ids.take(4).map(&:to_i))
if media.length > 1
media.each do |m|
if m.video?
raise Mastodon::NotPermitted, 'Cannot attach a video to a toot that already contains images'
end
end
end
media.update(status_id: status.id) media.update(status_id: status.id)
end end