]> git.openstreetmap.org Git - rails.git/blob - app/controllers/api/old_elements_controller.rb
Merge remote-tracking branch 'upstream/pull/5699'
[rails.git] / app / controllers / api / old_elements_controller.rb
1 # this class pulls together the logic for all the old_* controllers
2 # into one place. as it turns out, the API methods for historical
3 # nodes, ways and relations are basically identical.
4 module Api
5   class OldElementsController < ApiController
6     before_action :setup_user_auth
7
8     authorize_resource
9
10     before_action :lookup_old_element, :except => [:index]
11     before_action :lookup_old_element_versions, :only => [:index]
12
13     before_action :set_request_formats
14
15     def index
16       # the .where() method used in the lookup_old_element_versions
17       # call won't throw an error if no records are found, so we have
18       # to do that ourselves.
19       raise OSM::APINotFoundError if @elements.empty?
20
21       # determine visible elements
22       @elems = if show_redactions?
23                  @elements
24                else
25                  @elements.unredacted
26                end
27
28       # Render the result
29       respond_to do |format|
30         format.xml
31         format.json
32       end
33     end
34
35     def show
36       if @old_element.redacted? && !show_redactions?
37         head :forbidden
38
39       else
40         response.last_modified = @old_element.timestamp
41
42         # Render the result
43         respond_to do |format|
44           format.xml
45           format.json
46         end
47       end
48     end
49
50     private
51
52     def show_redactions?
53       current_user&.moderator? && params[:show_redactions] == "true"
54     end
55   end
56 end