openstreetmap-website/app/controllers/traces/data_controller.rb
2025-01-23 06:08:27 +03:00

41 lines
1.3 KiB
Ruby

module Traces
class DataController < ApplicationController
layout "site"
before_action :authorize_web
before_action :set_locale
before_action :check_database_readable
authorize_resource :class => Trace
before_action :offline_redirect
def show
trace = Trace.visible.find(params[:trace_id])
if trace.public? || (current_user && current_user == trace.user)
if Acl.no_trace_download(request.remote_ip)
head :forbidden
elsif 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 :not_found
end
rescue ActiveRecord::RecordNotFound
head :not_found
end
private
def offline_redirect
render :template => "traces/offline" if Settings.status == "gpx_offline"
end
end
end