X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/9c0582f88fd2ef4e20c6eb922bcd4cb1a04258d5..83043d6f1cd85729a3f91e5c73d78a39b8ae7d04:/app/controllers/api/traces_controller.rb diff --git a/app/controllers/api/traces_controller.rb b/app/controllers/api/traces_controller.rb index 8121764a1..e91261058 100644 --- a/app/controllers/api/traces_controller.rb +++ b/app/controllers/api/traces_controller.rb @@ -1,17 +1,13 @@ module Api class TracesController < ApiController - before_action :check_database_readable, :except => [:show, :data] - before_action :check_database_writable, :only => [:create, :update, :destroy] - before_action :authorize_web + before_action :check_api_writable, :only => [:create, :update, :destroy] before_action :set_locale before_action :authorize authorize_resource - before_action :check_api_readable, :only => [:show, :data] - before_action :check_api_writable, :only => [:create, :update, :destroy] - before_action :offline_error, :only => [:create, :destroy, :data] - around_action :api_call_handle_error + before_action :offline_error, :only => [:create, :destroy] + skip_around_action :api_call_timeout, :only => :create def show @trace = Trace.visible.find(params[:id]) @@ -19,51 +15,6 @@ module Api head :forbidden unless @trace.public? || @trace.user == current_user end - def update - trace = Trace.visible.find(params[:id]) - - if trace.user == current_user - trace.update_from_xml(request.raw_post) - trace.save! - - head :ok - else - head :forbidden - end - end - - def destroy - trace = Trace.visible.find(params[:id]) - - if trace.user == current_user - trace.visible = false - trace.save! - TraceDestroyerJob.perform_later(trace) - - head :ok - else - head :forbidden - 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 - def create tags = params[:tags] || "" description = params[:description] || "" @@ -81,7 +32,7 @@ module Api trace = do_create(params[:file], tags, description, visibility) if trace.id - TraceImporterJob.perform_later(trace) + trace.schedule_import render :plain => trace.id.to_s elsif trace.valid? head :internal_server_error @@ -93,6 +44,33 @@ module Api end end + def update + trace = Trace.visible.find(params[:id]) + + if trace.user == current_user + trace.update_from_xml(request.raw_post) + trace.save! + + head :ok + else + head :forbidden + end + end + + def destroy + trace = Trace.visible.find(params[:id]) + + if trace.user == current_user + trace.visible = false + trace.save! + trace.schedule_destruction + + head :ok + else + head :forbidden + end + end + private def do_create(file, tags, description, visibility) @@ -116,7 +94,7 @@ module Api trace.save! # Finally save the user's preferred privacy level - if pref = current_user.preferences.where(:k => "gps.trace.visibility").first + if pref = current_user.preferences.find_by(:k => "gps.trace.visibility") pref.v = visibility pref.save else