2015-09-22 01:01:39 +00:00
|
|
|
class ApiJamTrackMixdownsController < ApiController
|
|
|
|
|
|
|
|
|
|
# have to be signed in currently to see this screen
|
|
|
|
|
before_filter :api_signed_in_user
|
|
|
|
|
before_filter :lookup_jam_track_mixdown, :only => [:download, :enqueue, :update]
|
|
|
|
|
before_filter :lookup_jam_track_right, :only => [:download, :enqueue, :update]
|
2015-10-23 19:42:51 +00:00
|
|
|
before_filter :ip_blacklist, :only => [:download]
|
|
|
|
|
before_filter :user_blacklist, :only => [:download]
|
2015-09-22 01:01:39 +00:00
|
|
|
respond_to :json
|
|
|
|
|
|
|
|
|
|
def log
|
|
|
|
|
@log || Logging.logger[ApiJamTrackMixdownsController]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def index
|
|
|
|
|
data = JamTrackMixdown.index(params, current_user)
|
|
|
|
|
@jam_track_mixdowns, @next, @count = data[0], data[1], data[2]
|
|
|
|
|
|
|
|
|
|
render "api_jam_track_mixdowns/index", :layout => nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def show
|
|
|
|
|
@jam_track_mixdown = JamTrackMixdown.find(params[:id])
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def delete
|
|
|
|
|
@jam_track_mixdown = JamTrackMixdown.find(params[:id])
|
|
|
|
|
@jam_track_mixdown.destroy
|
|
|
|
|
render json: {}, status:204
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def update
|
|
|
|
|
@mixdown = JamTrackMixdown.find(params[:id])
|
|
|
|
|
@mixdown.name = params[:name] if params[:name]
|
|
|
|
|
@mixdown.description = params[:description] if params[:description]
|
|
|
|
|
@mixdown.save
|
|
|
|
|
if params[:active]
|
|
|
|
|
@jam_track_right.last_mixdown = @mixdown
|
|
|
|
|
@jam_track_right.save
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if @mixdown.errors.any?
|
|
|
|
|
respond_with_model(@mixdown)
|
|
|
|
|
return
|
|
|
|
|
else
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def show_package
|
|
|
|
|
@package = JamTrackMixdownPackage.find(params[:id])
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def create
|
|
|
|
|
@mixdown = JamTrackMixdown.create(params[:name], params[:description], current_user, JamTrack.find(params[:jamTrackID]), params[:settings])
|
|
|
|
|
|
|
|
|
|
if @mixdown.errors.any?
|
|
|
|
|
respond_with_model(@mixdown)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def download
|
2016-01-05 02:44:14 +00:00
|
|
|
if current_user.email_needs_verification
|
|
|
|
|
render :json => { :message => "verify email" }, :status => 403
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
2015-09-22 01:01:39 +00:00
|
|
|
if @jam_track_right.valid?
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
@package = JamTrackMixdownPackage.where('jam_track_mixdown_id = ?', @jam_track_mixdown.id).where(file_type: params[:file_type]).where(encrypt_type: params[:encrypt_type]).where(sample_rate: params[:sample_rate]).first
|
2016-01-17 01:56:29 +00:00
|
|
|
|
2015-09-22 01:01:39 +00:00
|
|
|
rescue Exception => e
|
|
|
|
|
log.error("failed to find mixdown package", e)
|
|
|
|
|
render :json => {:message => "unable to locate mixdown package due to error; check arguments"}, :status => 404
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@package = JamTrackMixdownPackage.create(@jam_track_mixdown, params[:file_type], params[:sample_rate], params[:encrypt_type]) unless @package
|
|
|
|
|
|
|
|
|
|
if @package.errors.any?
|
|
|
|
|
respond_with_model(@package)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if @package.ready?
|
2016-01-17 01:56:29 +00:00
|
|
|
|
2015-09-22 01:01:39 +00:00
|
|
|
@package.update_download_count
|
|
|
|
|
now = Time.now
|
|
|
|
|
@package.last_downloaded_at = now
|
|
|
|
|
@package.first_downloaded_at = now if @package.first_downloaded_at.nil?
|
|
|
|
|
@package.save!
|
2016-01-17 02:54:22 +00:00
|
|
|
|
2015-10-16 19:01:18 +00:00
|
|
|
if params[:download]
|
2016-02-02 11:44:18 +00:00
|
|
|
if DownloadTracker.check(current_user, request.remote_ip, @package, !@jam_track_right.redeemed, params[:mark], false)
|
|
|
|
|
render :json => { :message => "IP blacklisted"}, :status => 403
|
|
|
|
|
return
|
|
|
|
|
end
|
2015-10-22 14:04:49 +00:00
|
|
|
redirect_to @package.sign_url(120, 'application/octet-stream', "attachment; filename=\"#{@package.jam_track_mixdown.name}.#{params[:file_type]}\"")
|
2015-10-16 19:01:18 +00:00
|
|
|
else
|
2016-02-02 11:44:18 +00:00
|
|
|
if DownloadTracker.check(current_user, request.remote_ip, @package, !@jam_track_right.redeemed, params[:mark], true)
|
|
|
|
|
render :json => { :message => "IP blacklisted"}, :status => 403
|
|
|
|
|
return
|
|
|
|
|
end
|
2015-10-16 19:01:18 +00:00
|
|
|
redirect_to @package.sign_url(120)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
2015-09-22 01:01:39 +00:00
|
|
|
else
|
|
|
|
|
@package.enqueue_if_needed
|
|
|
|
|
render :json => { :message => "not available, digitally signing Jam Track Mixdown offline." }, :status => 202
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
render :json => { :message => "download limit surpassed", :errors=>@package.errors }, :status => 403
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def enqueue
|
|
|
|
|
if @jam_track_right.valid?
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
@package = JamTrackMixdownPackage.where('jam_track_mixdown_id = ?', @jam_track_mixdown.id).where(file_type: params[:file_type]).where(encrypt_type: params[:encrypt_type]).where(sample_rate: params[:sample_rate]).first
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
puts "enqueue failure #{e}"
|
|
|
|
|
log.error("failed to find mixdown package #{e}")
|
|
|
|
|
render :json => {:message => "unable to locate mixdown package due to error; check arguments"}, :status => 404
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@package = JamTrackMixdownPackage.create(@jam_track_mixdown, params[:file_type], params[:sample_rate], params[:encrypt_type]) unless @package
|
|
|
|
|
|
|
|
|
|
if @package.errors.any?
|
|
|
|
|
respond_with_model(@package)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
enqueued = @package.enqueue_if_needed
|
|
|
|
|
log.debug("jamtrack mixdown #{enqueued ? "ENQUEUED" : "NOT ENQUEUED"}: mixdown_package=#{@package.id} ")
|
|
|
|
|
@queue_time = enqueued ? enqueued : 0
|
|
|
|
|
return
|
|
|
|
|
else
|
|
|
|
|
render :json => { :message => "download limit surpassed", :errors=>@package.errors }, :status => 403
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
private
|
|
|
|
|
def lookup_jam_track_right
|
|
|
|
|
@jam_track_right = JamTrackRight.where("jam_track_id=? AND user_id=?", @jam_track_mixdown.jam_track.id, current_user.id).first
|
|
|
|
|
raise JamPermissionError, ValidationMessages::PERMISSION_VALIDATION_ERROR unless @jam_track_right
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def lookup_jam_track_mixdown
|
|
|
|
|
@jam_track_mixdown = JamTrackMixdown.find(params[:id])
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end # class ApiJamTracksController
|