Merge pull request #5390 from AntonKhorev/trace-resourceful-routes

Resourceful routes for traces API
This commit is contained in:
Andy Allan 2024-12-11 14:04:19 +00:00 committed by GitHub
commit a155a2fda3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 169 additions and 132 deletions

View file

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

View 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

View file

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