]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/trace_controller.rb
Refactor memcache connection handling
[rails.git] / app / controllers / trace_controller.rb
index 944335a8f7bda9df0c9af8d4202f769466e8fe01..d709b5cf10991433840cff8c64d3ee6efa5bd281 100644 (file)
@@ -1,6 +1,7 @@
 class TraceController < ApplicationController
   layout 'site'
 
 class TraceController < ApplicationController
   layout 'site'
 
+  skip_before_filter :verify_authenticity_token, :only => [:api_create, :api_read, :api_update, :api_delete, :api_data]
   before_filter :authorize_web
   before_filter :set_locale
   before_filter :require_user, :only => [:mine, :create, :edit, :delete]
   before_filter :authorize_web
   before_filter :set_locale
   before_filter :require_user, :only => [:mine, :create, :edit, :delete]
@@ -27,7 +28,7 @@ class TraceController < ApplicationController
     # from display name, pick up user id if one user's traces only
     display_name = params[:display_name]
     if !display_name.blank?
     # from display name, pick up user id if one user's traces only
     display_name = params[:display_name]
     if !display_name.blank?
-      target_user = User.where("status IN ('active', 'confirmed')").where(:display_name => display_name).first
+      target_user = User.active.where(:display_name => display_name).first
       if target_user.nil?
         @title = t'trace.no_such_user.title'
         @not_found_user = display_name
       if target_user.nil?
         @title = t'trace.no_such_user.title'
         @not_found_user = display_name
@@ -54,15 +55,15 @@ class TraceController < ApplicationController
     # 4 - user's traces, not logged in as that user = all user's public traces
     if target_user.nil? # all traces
       if @user
     # 4 - user's traces, not logged in as that user = all user's public traces
     if target_user.nil? # all traces
       if @user
-        @traces = Trace.where("visibility IN ('public', 'identifiable') OR user_id = ?", @user.id) #1
+        @traces = Trace.visible_to(@user) #1
       else
       else
-        @traces = Trace.where("visibility IN ('public', 'identifiable')") #2
+        @traces = Trace.public #2
       end
     else
       if @user and @user == target_user
       end
     else
       if @user and @user == target_user
-        @traces = Trace.where(:user_id => @user.id) #3 (check vs user id, so no join + can't pick up non-public traces by changing name)
+        @traces = @user.traces #3 (check vs user id, so no join + can't pick up non-public traces by changing name)
       else
       else
-        @traces = Trace.where("visibility IN ('public', 'identifiable') AND user_id = ?", target_user.id) #4
+        @traces = target_user.traces.public #4
       end
     end
 
       end
     end
 
@@ -79,7 +80,7 @@ class TraceController < ApplicationController
     @page = (params[:page] || 1).to_i
     @page_size = 20
 
     @page = (params[:page] || 1).to_i
     @page_size = 20
 
-    @traces = @traces.where(:visible => true)
+    @traces = @traces.visible
     @traces = @traces.order("timestamp DESC")
     @traces = @traces.offset((@page - 1) * @page_size)
     @traces = @traces.limit(@page_size)
     @traces = @traces.order("timestamp DESC")
     @traces = @traces.offset((@page - 1) * @page_size)
     @traces = @traces.limit(@page_size)
@@ -162,7 +163,9 @@ class TraceController < ApplicationController
     trace = Trace.find(params[:id])
 
     if trace.visible? and (trace.public? or (@user and @user == trace.user))
     trace = Trace.find(params[:id])
 
     if trace.visible? and (trace.public? or (@user and @user == trace.user))
-      if request.format == Mime::XML
+      if Acl.no_trace_download(request.remote_ip)
+        render :nothing => true, :status => :forbidden
+      elsif request.format == Mime::XML
         send_file(trace.xml_file, :filename => "#{trace.id}.xml", :type => Mime::XML.to_s, :disposition => 'attachment')
       else
         send_file(trace.trace_name, :filename => "#{trace.id}#{trace.extension_name}", :type => trace.mime_type, :disposition => 'attachment')
         send_file(trace.xml_file, :filename => "#{trace.id}.xml", :type => Mime::XML.to_s, :disposition => 'attachment')
       else
         send_file(trace.trace_name, :filename => "#{trace.id}#{trace.extension_name}", :type => trace.mime_type, :disposition => 'attachment')
@@ -214,14 +217,14 @@ class TraceController < ApplicationController
   end
 
   def georss
   end
 
   def georss
-    traces = Trace.where("visibility IN ('public', 'identifiable')")
+    traces = Trace.public
 
     if params[:display_name]
 
     if params[:display_name]
-      traces = traces.where(:users => {:display_name => params[:display_name]})
+      traces = traces.joins(:user).where(:users => {:display_name => params[:display_name]})
     end
 
     if params[:tag]
     end
 
     if params[:tag]
-      traces = traces.where("EXISTS (SELECT * FROM gpx_file_tags AS gft WHERE gft.gpx_id = gpx_files.id AND gft.tag = ?)")
+      traces = traces.where("EXISTS (SELECT * FROM gpx_file_tags AS gft WHERE gft.gpx_id = gpx_files.id AND gft.tag = ?)", params[:tag])
     end
 
     traces = traces.order("timestamp DESC")
     end
 
     traces = traces.order("timestamp DESC")