X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/53aa7259bb0612eb48a17d0b954ad71ea37d87a4..c3498b490b7e695f0be0898e3df76961bda4738e:/app/controllers/api/traces_controller.rb?ds=inline diff --git a/app/controllers/api/traces_controller.rb b/app/controllers/api/traces_controller.rb index aa8a06000..b66aead38 100644 --- a/app/controllers/api/traces_controller.rb +++ b/app/controllers/api/traces_controller.rb @@ -1,13 +1,12 @@ module Api class TracesController < ApiController - before_action :authorize_web + before_action :check_database_readable, :except => [:show, :data] + before_action :check_database_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] @@ -19,6 +18,35 @@ module Api head :forbidden unless @trace.public? || @trace.user == current_user end + def create + tags = params[:tags] || "" + description = params[:description] || "" + visibility = params[:visibility] + + if visibility.nil? + visibility = if params[:public]&.to_i&.nonzero? + "public" + else + "private" + end + end + + if params[:file].respond_to?(:read) + trace = do_create(params[:file], tags, description, visibility) + + if trace.id + TraceImporterJob.perform_later(trace) + render :plain => trace.id.to_s + elsif trace.valid? + head :internal_server_error + else + head :bad_request + end + else + head :bad_request + end + end + def update trace = Trace.visible.find(params[:id]) @@ -64,35 +92,6 @@ module Api end end - def create - tags = params[:tags] || "" - description = params[:description] || "" - visibility = params[:visibility] - - if visibility.nil? - visibility = if params[:public]&.to_i&.nonzero? - "public" - else - "private" - end - end - - if params[:file].respond_to?(:read) - trace = do_create(params[:file], tags, description, visibility) - - if trace.id - TraceImporterJob.perform_later(trace) - render :plain => trace.id.to_s - elsif trace.valid? - head :internal_server_error - else - head :bad_request - end - else - head :bad_request - end - end - private def do_create(file, tags, description, visibility) @@ -108,7 +107,7 @@ module Api :visibility => visibility, :inserted => false, :user => current_user, - :timestamp => Time.now.getutc, + :timestamp => Time.now.utc, :file => file ) @@ -116,7 +115,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