]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/api/traces_controller.rb
Merge pull request #5362 from AntonKhorev/color-mode-preference-map
[rails.git] / app / controllers / api / traces_controller.rb
index aa8a0600071c9c59546091011f568552f51d4767..e91261058efe05db7500626deacec804f562d581 100644 (file)
@@ -1,17 +1,13 @@
 module Api
   class TracesController < ApiController
-    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_database_readable, :except => [:show, :data]
-    before_action :check_database_writable, :only => [:create, :update, :destroy]
-    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)
@@ -108,7 +86,7 @@ module Api
         :visibility => visibility,
         :inserted => false,
         :user => current_user,
-        :timestamp => Time.now.getutc,
+        :timestamp => Time.now.utc,
         :file => file
       )
 
@@ -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