Merge pull request #5390 from AntonKhorev/trace-resourceful-routes
Resourceful routes for traces API
This commit is contained in:
commit
a155a2fda3
6 changed files with 169 additions and 132 deletions
|
@ -22,7 +22,7 @@ class ApiAbility
|
|||
|
||||
if user&.active?
|
||||
can [:comment, :close, :reopen], Note
|
||||
can [:create, :show, :update, :destroy, :data], Trace
|
||||
can [:create, :show, :update, :destroy], Trace
|
||||
can [:details, :gpx_files], User
|
||||
can [:index, :show, :update, :update_all, :destroy], UserPreference
|
||||
|
||||
|
|
36
app/controllers/api/traces/data_controller.rb
Normal file
36
app/controllers/api/traces/data_controller.rb
Normal file
|
@ -0,0 +1,36 @@
|
|||
module Api
|
||||
module Traces
|
||||
class DataController < ApiController
|
||||
before_action :set_locale
|
||||
before_action :authorize
|
||||
|
||||
authorize_resource :trace
|
||||
|
||||
before_action :offline_error
|
||||
|
||||
def show
|
||||
trace = Trace.visible.find(params[:trace_id])
|
||||
|
||||
if trace.public? || trace.user == current_user
|
||||
if request.format == Mime[:xml]
|
||||
send_data(trace.xml_file.read, :filename => "#{trace.id}.xml", :type => request.format.to_s, :disposition => "attachment")
|
||||
elsif request.format == Mime[:gpx]
|
||||
send_data(trace.xml_file.read, :filename => "#{trace.id}.gpx", :type => request.format.to_s, :disposition => "attachment")
|
||||
elsif trace.file.attached?
|
||||
redirect_to rails_blob_path(trace.file, :disposition => "attachment")
|
||||
else
|
||||
send_file(trace.trace_name, :filename => "#{trace.id}#{trace.extension_name}", :type => trace.mime_type, :disposition => "attachment")
|
||||
end
|
||||
else
|
||||
head :forbidden
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def offline_error
|
||||
report_error "GPX files offline for maintenance", :service_unavailable if Settings.status == "gpx_offline"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -6,7 +6,7 @@ module Api
|
|||
|
||||
authorize_resource
|
||||
|
||||
before_action :offline_error, :only => [:create, :destroy, :data]
|
||||
before_action :offline_error, :only => [:create, :destroy]
|
||||
skip_around_action :api_call_timeout, :only => :create
|
||||
|
||||
def show
|
||||
|
@ -71,24 +71,6 @@ module Api
|
|||
end
|
||||
end
|
||||
|
||||
def data
|
||||
trace = Trace.visible.find(params[:id])
|
||||
|
||||
if trace.public? || trace.user == current_user
|
||||
if request.format == Mime[:xml]
|
||||
send_data(trace.xml_file.read, :filename => "#{trace.id}.xml", :type => request.format.to_s, :disposition => "attachment")
|
||||
elsif request.format == Mime[:gpx]
|
||||
send_data(trace.xml_file.read, :filename => "#{trace.id}.gpx", :type => request.format.to_s, :disposition => "attachment")
|
||||
elsif trace.file.attached?
|
||||
redirect_to rails_blob_path(trace.file, :disposition => "attachment")
|
||||
else
|
||||
send_file(trace.trace_name, :filename => "#{trace.id}#{trace.extension_name}", :type => trace.mime_type, :disposition => "attachment")
|
||||
end
|
||||
else
|
||||
head :forbidden
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def do_create(file, tags, description, visibility)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue