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,10 +119,7 @@ export function uploadCompose(files) {
let data = new FormData();
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, {
onUploadProgress: function (e) {
dispatch(uploadComposeProgress(e.loaded, e.total));

View File

@ -11,10 +11,6 @@ class Api::V1::MediaController < ApiController
def create
@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
render json: { error: 'File type of uploaded media could not be verified' }, status: 422
rescue Paperclip::Error

View File

@ -62,12 +62,16 @@ class Api::V1::StatusesController < ApiController
end
def create
@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],
spoiler_text: params[:spoiler_text],
visibility: params[:visibility],
application: doorkeeper_token.application)
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],
sensitive: params[:sensitive],
spoiler_text: params[:spoiler_text],
visibility: params[:visibility],
application: doorkeeper_token.application)
rescue Mastodon::NotPermitted => e
render json: {error: e.message}, status: 422
return
end
render action: :show
end

View File

@ -35,8 +35,14 @@ class PostStatusService < BaseService
def attach_media(status, media_ids)
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))
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)
end