]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/4860'
authorTom Hughes <tom@compton.nu>
Wed, 29 May 2024 18:18:23 +0000 (19:18 +0100)
committerTom Hughes <tom@compton.nu>
Wed, 29 May 2024 18:18:23 +0000 (19:18 +0100)
21 files changed:
app/controllers/api/capabilities_controller.rb
app/controllers/api/changeset_comments_controller.rb
app/controllers/api/changesets_controller.rb
app/controllers/api/map_controller.rb
app/controllers/api/nodes_controller.rb
app/controllers/api/notes_controller.rb
app/controllers/api/old_elements_controller.rb
app/controllers/api/permissions_controller.rb
app/controllers/api/relations_controller.rb
app/controllers/api/tracepoints_controller.rb
app/controllers/api/traces_controller.rb
app/controllers/api/user_blocks_controller.rb
app/controllers/api/user_preferences_controller.rb
app/controllers/api/users_controller.rb
app/controllers/api/versions_controller.rb
app/controllers/api/ways_controller.rb
app/controllers/api_controller.rb
app/views/application/_auth_providers.html.erb
test/controllers/api/capabilities_controller_test.rb
test/controllers/api/versions_controller_test.rb
yarn.lock

index 80222c40bd93fb622753a5d672841cbe1fa2d12d..cbdcace0cd80b1a7c87ea47535b2cb81328b75fa 100644 (file)
@@ -1,5 +1,7 @@
 module Api
   class CapabilitiesController < ApiController
+    skip_before_action :check_api_readable
+
     authorize_resource :class => false
 
     before_action :set_request_formats
index e8d3f4c3a8df2c5dbcc1ae77f864d77057846449..4a96ec3bbaef00087e8b03a464c7ee78e65c56c2 100644 (file)
@@ -1,7 +1,6 @@
 module Api
   class ChangesetCommentsController < ApiController
     before_action :check_api_writable
-    before_action :check_api_readable, :except => [:create]
     before_action :authorize
 
     authorize_resource
index 2e21f0c75e10387bbec4126c03c073ffd2fd20c9..3d59eeb171e4232c70d5fe1b68dc5252a6d4de2b 100644 (file)
@@ -3,7 +3,6 @@
 module Api
   class ChangesetsController < ApiController
     before_action :check_api_writable, :only => [:create, :update, :upload, :subscribe, :unsubscribe]
-    before_action :check_api_readable, :except => [:index, :create, :update, :upload, :download, :subscribe, :unsubscribe]
     before_action :setup_user_auth, :only => [:show]
     before_action :authorize, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
 
index 5a05f6de2b527e6c236b665007ab8a5cd309b534..6d4a9feb6c3d8062cf141fb375eca35a42da018e 100644 (file)
@@ -1,7 +1,5 @@
 module Api
   class MapController < ApiController
-    before_action :check_api_readable
-
     authorize_resource :class => false
 
     around_action :api_call_handle_error, :api_call_timeout
index dc7d04dc5792d93698aa7ddc8b899a0592485c86..5aad78dbffb91bfc99c36f36adcbb20893b2d5dc 100644 (file)
@@ -3,7 +3,6 @@
 module Api
   class NodesController < ApiController
     before_action :check_api_writable, :only => [:create, :update, :delete]
-    before_action :check_api_readable, :except => [:create, :update, :delete]
     before_action :authorize, :only => [:create, :update, :delete]
 
     authorize_resource
index 8a0a82c40150687063fbf0720b5114c409c73725..d53059a94e0f019f1e56e374e332d8b6f483f07f 100644 (file)
@@ -1,6 +1,5 @@
 module Api
   class NotesController < ApiController
-    before_action :check_api_readable
     before_action :check_api_writable, :only => [:create, :comment, :close, :reopen, :destroy]
     before_action :setup_user_auth, :only => [:create, :show]
     before_action :authorize, :only => [:close, :reopen, :destroy, :comment]
index 6a468a900631953247414ecee55145745c393e62..2343252dbb0a63243ece6e1c90c9de0875dfee4c 100644 (file)
@@ -3,7 +3,6 @@
 # nodes, ways and relations are basically identical.
 module Api
   class OldElementsController < ApiController
-    before_action :check_api_readable
     before_action :check_api_writable, :only => [:redact]
     before_action :setup_user_auth, :only => [:history, :show]
     before_action :authorize, :only => [:redact]
index 8c0c949dc2c71302f64b1611f2977961a71d7718..717bbfa6f7fd1c23428c9d952b1e18d55ef5032b 100644 (file)
@@ -1,7 +1,5 @@
 module Api
   class PermissionsController < ApiController
-    before_action :check_api_readable
-
     authorize_resource :class => false
 
     before_action :setup_user_auth
index e82ac6368a371fb43bb2bfaa6e7db071f3f0ddef..5fb99dbd18a390e1e234308bcf78b90f05a36939 100644 (file)
@@ -1,7 +1,6 @@
 module Api
   class RelationsController < ApiController
     before_action :check_api_writable, :only => [:create, :update, :delete]
-    before_action :check_api_readable, :except => [:create, :update, :delete]
     before_action :authorize, :only => [:create, :update, :delete]
 
     authorize_resource
index f38351de96f0884e0a69aecebbb430871ad2c231..d8d9da98b680f62729b503085a5ab36c40e318cc 100644 (file)
@@ -1,7 +1,5 @@
 module Api
   class TracepointsController < ApiController
-    before_action :check_api_readable
-
     authorize_resource
 
     around_action :api_call_handle_error, :api_call_timeout
index 956bcde6e82dccabb23e022919d0d87673e74ec3..738642fff7dc56531bec8d550c3a5f31dcc414b6 100644 (file)
@@ -1,14 +1,11 @@
 module Api
   class TracesController < ApiController
-    before_action :check_database_readable, :except => [:show, :data]
-    before_action :check_database_writable, :only => [:create, :update, :destroy]
+    before_action :check_api_writable, :only => [:create, :update, :destroy]
     before_action :set_locale
     before_action :authorize
 
     authorize_resource
 
-    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
 
index 19fd4b400b043c8736d29cab5fb236e37240856f..6c285e14a253d50e45daa31ef57134071560a708 100644 (file)
@@ -1,7 +1,5 @@
 module Api
   class UserBlocksController < ApiController
-    before_action :check_api_readable
-
     authorize_resource
 
     around_action :api_call_handle_error, :api_call_timeout
index 99d224c516ca5ec132f1ce236acea4ce3774fd3f..cb852ce881aa10909a267e776aa884c406e388b4 100644 (file)
@@ -1,6 +1,7 @@
 # Update and read user preferences, which are arbitrary key/val pairs
 module Api
   class UserPreferencesController < ApiController
+    before_action :check_api_writable, :only => [:update_all, :update, :destroy]
     before_action :authorize
 
     authorize_resource
index 6fa47095a16f9c062ba246100bea989ff7dd9ecb..5ff275ee9dc52f268b250d52f445dd71a3295b1c 100644 (file)
@@ -1,6 +1,5 @@
 module Api
   class UsersController < ApiController
-    before_action :check_api_readable
     before_action :disable_terms_redirect, :only => [:details]
     before_action :setup_user_auth, :only => [:show, :index]
     before_action :authorize, :only => [:details, :gpx_files]
index d5c9c5f87cebf2036316655c72013b49b55b4832..d311a18d24f14a1b3304bc3b8c7325272a805323 100644 (file)
@@ -1,5 +1,6 @@
 module Api
   class VersionsController < ApiController
+    skip_before_action :check_api_readable
     authorize_resource :class => false
 
     before_action :set_request_formats
index f8254d8027bacbd43fe8e0c6c641c78b8b04e338..4099e16763f15554e7b33de5f35cffb7eb8885f9 100644 (file)
@@ -1,7 +1,6 @@
 module Api
   class WaysController < ApiController
     before_action :check_api_writable, :only => [:create, :update, :delete]
-    before_action :check_api_readable, :except => [:create, :update, :delete]
     before_action :authorize, :only => [:create, :update, :delete]
 
     authorize_resource
index edafac7ccdc44f3f75f07e0f3a082909a793bfea..ff7f694c5eb63bac0ac23c7e00ba454630f7ac69 100644 (file)
@@ -1,6 +1,8 @@
 class ApiController < ApplicationController
   skip_before_action :verify_authenticity_token
 
+  before_action :check_api_readable
+
   private
 
   ##
index 554ec8ddaa30c235b02e7efb603506c96518b636..0cbb529a500c70a34be6dc605dcfc3d469328fdc 100644 (file)
@@ -1,29 +1,42 @@
 <div>
-  <div class="list-inline justify-content-center d-flex align-items-center flex-wrap mb-3 gap-3" id="login_auth_buttons">
+  <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-100 mb-3" id="login_auth_buttons">
 
+    <% prefered_auth_button_available = false %>
     <% %w[google facebook microsoft github wikipedia].each do |provider| %>
       <% if Settings.key?("#{provider}_auth_id".to_sym) -%>
         <% if @preferred_auth_provider == provider %>
-          <div class="mx-2"><%= auth_button_preferred provider, provider %></div>
+          <% prefered_auth_button_available = true %>
         <% end %>
       <% end -%>
     <% end -%>
 
-    <div class="justify-content-center d-flex gap-1">
-      <div>
-        <%= link_to image_tag("openid.png",
-                              :alt => t("application.auth_providers.openid.title"),
-                              :size => "24"),
-                    "#",
-                    :id => "openid_open_url",
-                    :title => t("application.auth_providers.openid.title"),
-                    :class => "p-2 d-block" %>
+    <% if prefered_auth_button_available %>
+      <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-50">
+        <% %w[google facebook microsoft github wikipedia].each do |provider| %>
+          <% if Settings.key?("#{provider}_auth_id".to_sym) -%>
+            <% if @preferred_auth_provider == provider %>
+              <%= auth_button_preferred provider, provider %>
+            <% end %>
+          <% end -%>
+        <% end -%>
       </div>
+      <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-50">
+    <% else %>
+      <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-100">
+    <% end %>
+
+      <%= link_to image_tag("openid.png",
+                            :alt => t("application.auth_providers.openid.title"),
+                            :size => "24"),
+                  "#",
+                  :id => "openid_open_url",
+                  :title => t("application.auth_providers.openid.title"),
+                  :class => "p-2 d-block" %>
 
       <% %w[google facebook microsoft github wikipedia].each do |provider| %>
         <% unless @preferred_auth_provider == provider %>
           <% if Settings.key?("#{provider}_auth_id".to_sym) -%>
-            <div><%= auth_button provider, provider %></div>
+            <%= auth_button provider, provider %>
           <% end -%>
         <% end %>
       <% end -%>
index 46ebb6a3741ea0d8f8ce934311a2f279b5460b25..7d2feed292dc585be422d6b67e165581fb1d08d5 100644 (file)
@@ -71,5 +71,75 @@ module Api
       assert_equal "online", js["api"]["status"]["gpx"]
       assert_equal Settings.imagery_blacklist.length, js["policy"]["imagery"]["blacklist"].length
     end
+
+    def test_capabilities_api_readonly
+      with_settings(:status => "api_readonly") do
+        get api_capabilities_path
+        assert_response :success
+        assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "status[database='online']", :count => 1
+            assert_select "status[api='readonly']", :count => 1
+            assert_select "status[gpx='online']", :count => 1
+          end
+        end
+      end
+    end
+
+    def test_capabilities_api_offline
+      with_settings(:status => "api_offline") do
+        get api_capabilities_path
+        assert_response :success
+        assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "status[database='online']", :count => 1
+            assert_select "status[api='offline']", :count => 1
+            assert_select "status[gpx='online']", :count => 1
+          end
+        end
+      end
+    end
+
+    def test_capabilities_database_readonly
+      with_settings(:status => "database_readonly") do
+        get api_capabilities_path
+        assert_response :success
+        assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "status[database='readonly']", :count => 1
+            assert_select "status[api='readonly']", :count => 1
+            assert_select "status[gpx='readonly']", :count => 1
+          end
+        end
+      end
+    end
+
+    def test_capabilities_database_offline
+      with_settings(:status => "database_offline") do
+        get api_capabilities_path
+        assert_response :success
+        assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "status[database='offline']", :count => 1
+            assert_select "status[api='offline']", :count => 1
+            assert_select "status[gpx='offline']", :count => 1
+          end
+        end
+      end
+    end
+
+    def test_capabilities_gpx_offline
+      with_settings(:status => "gpx_offline") do
+        get api_capabilities_path
+        assert_response :success
+        assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "status[database='online']", :count => 1
+            assert_select "status[api='online']", :count => 1
+            assert_select "status[gpx='offline']", :count => 1
+          end
+        end
+      end
+    end
   end
 end
index 1c70831c93c9b65293cb107ac1f04b059f4fd90c..d2b353a8edfe5142f8697b099c0346eb39050590 100644 (file)
@@ -46,5 +46,17 @@ module Api
       assert_response :success
       assert_select "osm[version]", :count => 0
     end
+
+    def test_versions_available_while_offline
+      with_settings(:status => "api_offline") do
+        get api_versions_path
+        assert_response :success
+        assert_select "osm[generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "version", Settings.api_version
+          end
+        end
+      end
+    end
   end
 end
index 230c1c716a0c97461471e69eeb10d1faca714896..dec04559d1beb6d10efceed8149bc69bceab5009 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
@@ -576,9 +576,9 @@ optionator@^0.9.3:
     type-check "^0.4.0"
 
 osm-community-index@^5.2.0:
-  version "5.7.0"
-  resolved "https://registry.yarnpkg.com/osm-community-index/-/osm-community-index-5.7.0.tgz#1c1a785fd13a2e00535da8db132c4e49780f0b28"
-  integrity sha512-r5h58L9mGh2Wu4XcJoGKLdw3oBY41jWAMUVBNE9tBS9sZINwSZccrImhxuOS5DmpslTjZ6w1cn7x9sE8tnFGpQ==
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/osm-community-index/-/osm-community-index-5.7.1.tgz#2341666c83d14c00ef3d9a90298c96d5e791b56c"
+  integrity sha512-E+Xib5m//WliNq2iqeUXyKqZk7yhZu/vSJbwwyxDAPzcNWxgIMoO0B7cUMeFNckhMQsKM2UuC2BAjWuVfbYf1Q==
   dependencies:
     diacritics "^1.3.0"