]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/4847'
authorTom Hughes <tom@compton.nu>
Thu, 30 May 2024 15:20:54 +0000 (16:20 +0100)
committerTom Hughes <tom@compton.nu>
Thu, 30 May 2024 15:20:54 +0000 (16:20 +0100)
39 files changed:
Gemfile.lock
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/controllers/site_controller.rb
app/models/trace.rb
app/views/application/_auth_providers.html.erb
app/views/sessions/new.html.erb
config/initializers/abstract_adapter.rb
config/initializers/content_security_policy.rb
config/initializers/cors.rb
config/initializers/i18n.rb
config/initializers/mail_delivery_job.rb
config/initializers/oauth.rb
config/initializers/router.rb
config/initializers/rtlcss.rb
config/locales/bn.yml
config/locales/br.yml
config/locales/fr.yml
config/locales/pa.yml
config/locales/pt-PT.yml
lib/osm.rb
test/controllers/api/capabilities_controller_test.rb
test/controllers/api/versions_controller_test.rb
yarn.lock

index bf78a3d3d181d2130ec4ee1436b83ad83af866ff..4c7bba388912ab8206d1b0b1d899f04569933f40 100644 (file)
@@ -95,13 +95,13 @@ GEM
     autoprefixer-rails (10.4.16.0)
       execjs (~> 2)
     aws-eventstream (1.3.0)
-    aws-partitions (1.931.0)
+    aws-partitions (1.934.0)
     aws-sdk-core (3.196.1)
       aws-eventstream (~> 1, >= 1.3.0)
       aws-partitions (~> 1, >= 1.651.0)
       aws-sigv4 (~> 1.8)
       jmespath (~> 1, >= 1.6.1)
-    aws-sdk-kms (1.81.0)
+    aws-sdk-kms (1.82.0)
       aws-sdk-core (~> 3, >= 3.193.0)
       aws-sigv4 (~> 1.1)
     aws-sdk-s3 (1.151.0)
@@ -140,7 +140,7 @@ GEM
     builder (3.2.4)
     bzip2-ffi (1.1.1)
       ffi (~> 1.0)
-    cancancan (3.5.0)
+    cancancan (3.6.1)
     canonical-rails (0.2.15)
       actionview (>= 4.1, <= 7.2)
     capybara (3.40.0)
@@ -153,7 +153,7 @@ GEM
       regexp_parser (>= 1.5, < 3.0)
       xpath (~> 3.2)
     concurrent-ruby (1.2.3)
-    config (5.4.0)
+    config (5.5.0)
       deep_merge (~> 1.2, >= 1.2.1)
     connection_pool (2.4.1)
     crack (1.0.0)
@@ -198,7 +198,7 @@ GEM
       concurrent-ruby (~> 1.0)
       dry-core (~> 1.0, < 2)
       zeitwerk (~> 2.6)
-    dry-schema (1.13.3)
+    dry-schema (1.13.4)
       concurrent-ruby (~> 1.0)
       dry-configurable (~> 1.0, >= 1.0.1)
       dry-core (~> 1.0, < 2)
@@ -330,7 +330,7 @@ GEM
     mini_portile2 (2.8.6)
     mini_racer (0.9.0)
       libv8-node (~> 18.19.0.0)
-    minitest (5.23.0)
+    minitest (5.23.1)
     minitest-focus (1.4.0)
       minitest (>= 4, < 6)
     msgpack (1.7.2)
@@ -369,8 +369,9 @@ GEM
       hashie (>= 3.4.6)
       rack (>= 1.6.2, < 3)
       rack-protection
-    omniauth-facebook (9.0.0)
-      omniauth-oauth2 (~> 1.2)
+    omniauth-facebook (10.0.0)
+      bigdecimal
+      omniauth-oauth2 (>= 1.2, < 3)
     omniauth-github (2.0.1)
       omniauth (~> 2.0)
       omniauth-oauth2 (~> 1.8)
@@ -474,7 +475,7 @@ GEM
     rb-fsevent (0.11.2)
     rb-inotify (0.11.1)
       ffi (~> 1.0)
-    rdoc (6.6.3.1)
+    rdoc (6.7.0)
       psych (>= 4.0.0)
     regexp_parser (2.9.2)
     reline (0.5.7)
@@ -488,7 +489,7 @@ GEM
     rouge (4.2.1)
     rtlcss (0.2.1)
       mini_racer (>= 0.6.3)
-    rubocop (1.63.5)
+    rubocop (1.64.0)
       json (~> 2.3)
       language_server-protocol (>= 3.17.0)
       parallel (~> 1.10)
@@ -541,8 +542,7 @@ GEM
     simplecov-html (0.12.3)
     simplecov-lcov (0.8.0)
     simplecov_json_formatter (0.1.4)
-    simpleidn (0.2.2)
-      unf (~> 0.1.4)
+    simpleidn (0.2.3)
     smart_properties (1.17.0)
     snaky_hash (2.0.1)
       hashie
@@ -574,9 +574,6 @@ GEM
       railties (>= 6.0.0)
     tzinfo (2.0.6)
       concurrent-ruby (~> 1.0)
-    unf (0.1.4)
-      unf_ext
-    unf_ext (0.0.9.1)
     unicode-display_width (2.5.0)
     uri (0.13.0)
     validates_email_format_of (1.8.2)
@@ -584,7 +581,7 @@ GEM
       simpleidn
     vendorer (0.2.0)
     version_gem (1.1.4)
-    webmock (3.23.0)
+    webmock (3.23.1)
       addressable (>= 2.8.0)
       crack (>= 0.3.2)
       hashdiff (>= 0.4.0, < 2.0.0)
@@ -595,7 +592,7 @@ GEM
     websocket-extensions (0.1.5)
     xpath (3.2.0)
       nokogiri (~> 1.8)
-    zeitwerk (2.6.14)
+    zeitwerk (2.6.15)
 
 PLATFORMS
   ruby
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 8b742a585c0e8f7519fb1019222cbcf88216e513..15ffe58a2616765eac3b34474b9dd0542447cb33 100644 (file)
@@ -19,6 +19,7 @@ class SiteController < ApplicationController
   content_security_policy(:only => :id) do |policy|
     policy.connect_src("*")
     policy.img_src(*policy.img_src, "*", :blob)
+    policy.script_src(*policy.script_src, :unsafe_eval)
     policy.style_src(*policy.style_src, :unsafe_inline)
   end
 
index d1f917571a21287f5de4e0a7a290e8e8337babb3..20723b98d01ddc7e0efe3d732879c12c8345d77b 100644 (file)
@@ -81,7 +81,7 @@ class Trace < ApplicationRecord
             :content_type => content_type(attachable.path),
             :identify => false)
     else
-      super(attachable)
+      super
     end
   end
 
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 acbf8dab01d22bdc3ede7082ca0fe3155ce7f22d..c02b2d3762f264323b92b0c57980759926b8e70c 100644 (file)
 
     <div class="row">
       <div class="col">
-        <%= f.label :password, :class => "form-label" %>
+        <%= f.label :password, t(".password"), :class => "form-label" %>
       </div>
       <div class="col text-end">
         <small><%= link_to(t(".lost password link"), user_forgot_password_path) %></small>
       </div>
     </div>
-    <input class="form-control mb-3" type="password" name="password" id="password" tabindex="2" value="" autocomplete="off" />
+    <input class="form-control mb-3" type="password" name="password" id="password" tabindex="2" value="" autocomplete="on" />
 
     <%= f.form_group do %>
       <%= f.check_box :remember_me, { :label => t(".remember"), :tabindex => 3, :checked => (params[:remember_me] == "yes") }, "yes" %>
index 2bc4f5e59d40d07f552d36417bd3f211eda8d6ee..9d59656c7b2cd4255d019c523bf57952249e0648 100644 (file)
@@ -6,7 +6,7 @@ if defined?(ActiveRecord::ConnectionAdaptors::AbstractAdapter)
           if e.is_a?(Timeout::Error) || e.is_a?(OSM::APITimeoutError)
             e
           else
-            super(e, sql)
+            super
           end
         end
       end
index 5ce53e86360117b4f320d7e8f84d4da09edb2769..9ddaf70f94598b62f6d65a272457d61c68c05ed6 100644 (file)
@@ -6,7 +6,7 @@
 
 Rails.application.configure do
   connect_src = [:self]
-  img_src = [:self, :data, "www.gravatar.com", "*.wp.com", "tile.openstreetmap.org", "*.tile.thunderforest.com", "tile.tracestrack.com", "*.openstreetmap.fr"]
+  img_src = [:self, :data, "www.gravatar.com", "*.wp.com", "tile.openstreetmap.org", "gps.tile.openstreetmap.org", "*.tile.thunderforest.com", "tile.tracestrack.com", "*.openstreetmap.fr"]
   script_src = [:self]
 
   connect_src << Settings.matomo["location"] if defined?(Settings.matomo)
index fdbf11a2ce05cacaaffcdd4a90a822518be92e81..e7b813b73f788fb7bf4cac947007c2ff0154340d 100644 (file)
@@ -6,7 +6,7 @@
 module OpenStreetMap
   class Cors < Rack::Cors
     def call(env)
-      status, headers, body = super(env)
+      status, headers, body = super
       headers["Cache-Control"] = "no-cache" if headers["Access-Control-Allow-Origin"]
       [status, headers, body]
     end
index 266e41cbb98d501435ba985efbdba9af475c8d63..8f74c3cd39455a0b5548aa8d6a364da9259a1309 100644 (file)
@@ -18,7 +18,7 @@ module OpenStreetMap
       def store_translations(locale, data, options = {})
         locale = ::I18n::Locale::Tag::Rfc4646.tag(locale).to_s
 
-        super(locale, data, options)
+        super
       end
     end
 
index 4bab2000b03ed897a600133b22bb9231ca32d4e8..30b23d2ddb47fa298df8dcba50a8aa5a82d3edc6 100644 (file)
@@ -4,7 +4,7 @@ module OpenStreetMap
       def perform(mailer, mail_method, delivery_method, *args, **kwargs)
         kwargs = args.pop if kwargs.empty? && args.last.is_a?(Hash)
 
-        super(mailer, mail_method, delivery_method, *args, **kwargs)
+        super
       end
     end
   end
index fbe4ad219161a6c87d58c872a98aced64b1acdfd..812e6610d9e67a46b1df270cd5a201cf41d3dff4 100644 (file)
@@ -45,7 +45,7 @@ module OpenStreetMap
         status = options.delete(:status) || :ok
         head status, options
       else
-        super(options)
+        super
       end
     end
 
@@ -61,7 +61,7 @@ module OpenStreetMap
           end
         end
 
-        super(controller)
+        super
       end
     end
   end
index 4357a87f25f47ea0cc98c8da6d9f155ed8dad750..849aba2ad15f428785b83f457b0141933dbdfd7a 100644 (file)
@@ -5,7 +5,7 @@ module OpenStreetMap
   module Router
     module ForceEncoding
       def normalize_path(path)
-        super(path).force_encoding("UTF-8")
+        super.force_encoding("UTF-8")
       end
     end
   end
index 11e4e0d5c053894f3752e730c06879d48e667dbb..793c484fc40127058a5ab790dcf0ae337151e6c8 100644 (file)
@@ -2,7 +2,7 @@ require "rtlcss"
 
 class RtlcssSCSSProcessor < SassC::Rails::ScssTemplate
   def self.call(input)
-    output = super(input)
+    output = super
     data = Rtlcss.flip_css(output[:data])
     output.delete(:map)
     output.merge(:data => data)
index a9f60ec4e3f1b5f22ac5626e2a04b92a7210cecb..0c1cf6f6f69b805c5f798488b2fb9b353b36e6f6 100644 (file)
@@ -19,6 +19,7 @@
 # Author: R4356th
 # Author: R4bb1
 # Author: Rasal Lia
+# Author: RiazACU
 # Author: Sayma Jahan
 # Author: Tahmid
 # Author: Tauhid16
index b3202260d3bc82415e8daa7f92aaadf7cf22b122..d91b60e3b4a1ede4b5bcf689268fe87a6df3cdcb 100644 (file)
@@ -2198,7 +2198,7 @@ br:
       close: Serriñ
     search:
       search: Klask
-      get_directions: Kaout an tuioù
+      get_directions: Kaout an durc'hadurioù
       get_directions_title: Kavit an hentoù etre an daou boent
       from: Eus
       to: Da
@@ -3097,7 +3097,7 @@ br:
         fossgis_valhalla_car: Karr (Valhalla)
         fossgis_valhalla_foot: War droad (Valhalla)
       descend: Diskenn
-      directions: Tuioù
+      directions: Durc'hadurioù
       distance: Hed
       distance_m: '%{distance}m'
       distance_km: '%{distance}km'
index 44aaeceb87be350d083cf1dc6c2437d531ae1b1f..1bb90b0629980ff569e6d077d651897f0d90b9a4 100644 (file)
@@ -38,6 +38,7 @@
 # Author: GeorgeKaplan
 # Author: Gileri
 # Author: Gomoko
+# Author: Graineahumus
 # Author: Gravitystorm
 # Author: Guilhelma
 # Author: Hashar
@@ -75,6 +76,7 @@
 # Author: Orikrin1998
 # Author: Otourly
 # Author: Oupsa
+# Author: Overflorian
 # Author: Peter17
 # Author: Phoenamandre
 # Author: Pipo
@@ -457,6 +459,7 @@ fr:
     view_unredacted_history: Voir l'historique non censuré
     view_details: Afficher les détails
     view_redacted_data: Afficher les données censurées
+    view_redaction_message: Afficher le message de rédaction
     location: 'Emplacement :'
     common_details:
       coordinates_html: '%{latitude} ; %{longitude}'
@@ -583,6 +586,7 @@ fr:
         closed: Fermé
         belongs_to: Auteur
     subscribe:
+      heading: S'abonner à la discussion sur l'ensemble de modifications suivante ?
       button: S'abonner à la discussion
     unsubscribe:
       heading: Se désabonner de la discussion du groupe de modifications suivant ?
@@ -591,6 +595,7 @@ fr:
       title: Groupe de modifications %{id}
       created_by_html: Créé par %{link_user} le %{created}.
     no_such_entry:
+      title: Aucun ensemble de modifications de ce type
       heading: 'Aucune entrée avec l’identifiant : %{id}'
       body: Désolé, il n’y a aucun groupe de modifications avec l'identifiant %{id}.
         Veuillez vérifier l'orthographe ou la validité du lien sur lequel vous avez
@@ -740,8 +745,10 @@ fr:
       newer_comments: Commentaires plus récents
       older_comments: Commentaires plus anciens
     subscribe:
+      heading: S'abonner à la discussion suivante sur les entrées de journal ?
       button: S'abonner à la discussion
     unsubscribe:
+      heading: Se désinscrire de la discussion suivante sur les entrées du journal ?
       button: Se désinscrire de la discussion
   doorkeeper:
     errors:
@@ -785,6 +792,10 @@ fr:
       contact_the_community_html: N’hésitez pas à %{contact_link} la communauté OpenStreetMap
         si vous avez trouvé un lien cassé ou une anomalie. Notez l’URL exacte de votre
         demande.
+    bad_request:
+      title: Mauvaise requête
+      description: L'opération que vous avez demandée sur le serveur OpenStreetMap
+        n'est pas valide (HTTP 400)
     forbidden:
       title: Interdit
       description: L’opération que vous avez demandée sur le serveur OpenStreetMap
@@ -1725,6 +1736,7 @@ fr:
     hosting_partners_2024_html: L’hébergement est pris en charge par %{fastly}, %{corpmembers},
       et d’autres %{partners}.
     partners_fastly: Fastly
+    partners_corpmembers: Membres d'entreprise de l'OSMF
     partners_partners: partenaires
     tou: Conditions d’utilisation
     osm_offline: La base de données OpenStreetMap est actuellement hors ligne ; une
@@ -1860,8 +1872,8 @@ fr:
           La note se trouve près de %{place}.'
         commented_note_html: '%{commenter} a réactivé une note de carte que vous avez
           commentée. La note est près de %{place}.'
-      details: Plus de détails concernant la note se trouvent à %{url}.
-      details_html: Plus de détails concernant la note se trouvent à %{url}.
+      details: Répondez ou apprenez-en plus sur la note sur %{url}.
+      details_html: Répondez ou en savoir plus sur la note sur %{url}.
     changeset_comment_notification:
       description: 'Groupe de modifications OpenStreetMap #%{id}'
       hi: Bonjour %{to_user},
@@ -1882,9 +1894,8 @@ fr:
         partial_changeset_with_comment: avec le commentaire « %{changeset_comment} »
         partial_changeset_with_comment_html: avec le commentaire « %{changeset_comment} »
         partial_changeset_without_comment: sans commentaire
-      details: Plus de détails sur l’ensemble de modifications à %{url}.
-      details_html: Vous pouvez trouver plus de détails sur l’ensemble de modifications
-        sur %{url}.
+      details: Répondez ou en savoir plus sur l'ensemble de changements sur %{url}.
+      details_html: Répondre ou en savoir plus sur l'ensemble de changements sur %{url}.
       unsubscribe: Vous pouvez vous désabonner des mises à jour de cet ensemble de
         modifications depuis %{url}.
       unsubscribe_html: Vous pouvez vous désabonner des mises à jour de cet ensemble
@@ -1983,9 +1994,9 @@ fr:
       unread_button: Marque comme non lu
       destroy_button: Supprimer
       back: Retour
-      wrong_user: Vous êtes identifié comme « %{user} » mais le message que vous essayez
-        de lire n’a pas été envoyé par cet utilisateur, ni ne lui a été destiné. Veuillez
-        vous connecter avec l’identifiant correct pour pouvoir le lire.
+      wrong_user: Vous êtes identifié comme « %{user} » mais le message que vous avez
+        demandé de lire n’a pas été envoyé par cet utilisateur, ni ne lui a été destiné.
+        Veuillez vous connecter avec le bon identifiant pour pouvoir le lire.
     sent_message_summary:
       destroy_button: Supprimer
     heading:
@@ -2067,6 +2078,7 @@ fr:
     new:
       title: Se connecter
       tab_title: Se connecter
+      login_to_authorize_html: Connectez-vous à OpenStreetMap pour accéder à %{client_app_name}.
       email or username: 'Adresse de courriel ou nom d’utilisateur :'
       password: 'Mot de passe :'
       remember: Se souvenir de moi
@@ -2266,7 +2278,12 @@ fr:
           générale des finances publiques (anciennement la Direction générale des
           impôts).'
         contributors_fr_france: France
+        contributors_hr_credit_html: |-
+          %{croatia} : contient des données de %{dgu_link} et %{open_data_portal}
+          (informations publiques de Croatie).
         contributors_hr_croatia: Croatie
+        contributors_hr_dgu: Administration géodésique de l'État de Croatie
+        contributors_hr_open_data_portal: Portail national des données ouvertes
         contributors_nl_credit_html: '%{netherlands} : contient des données © AND,
           2007 (%{and_link})'
         contributors_nl_netherlands: Pays-Bas
@@ -2719,6 +2736,8 @@ fr:
       identifiable: IDENTIFIABLE
       private: PRIVÉE
       trackable: PISTABLE
+      details_with_tags_html: '%{time_ago} par %{user} dans %{tags}'
+      details_without_tags_html: '%{time_ago} par %{user}'
     index:
       public_traces: Traces GPS publiques
       my_gps_traces: Mes traces GPS
@@ -2781,13 +2800,13 @@ fr:
         title: Connexion avec OpenID
         alt: Se connecter avec une URL OpenID
       google:
-        title: Connexion avec Google
+        title: Se connecter avec Google
         alt: Se connecter avec un OpenID de Google
       facebook:
         title: Connexion avec Facebook
         alt: Se connecter avec un compte de Facebook
       microsoft:
-        title: Connexion avec Microsoft
+        title: Se connecter avec Microsoft
         alt: Se connecter avec un compte Microsoft
       github:
         title: Connexion avec GitHub
@@ -2799,7 +2818,7 @@ fr:
         title: Connexion avec Wordpress
         alt: Se connecter avec un OpenID de Wordpress
       aol:
-        title: Connexion avec AOL
+        title: Se connecter avec AOL
         alt: Se connecter avec un OpenID d’AOL
   oauth:
     authorize:
@@ -2844,6 +2863,9 @@ fr:
       write_redactions: Caviarder les données cartographiques
       read_email: Lire l’adresse courriel de l’utilisateur
       skip_authorization: Demande d’approbation automatique
+    for_roles:
+      moderator: Cette autorisation concerne les actions disponibles uniquement pour
+        les modérateurs
   oauth_clients:
     new:
       title: Inscrire une nouvelle application
@@ -2954,9 +2976,15 @@ fr:
           la réparer, la mettre à jour, la télécharger et l’utiliser.
         paragraph_2: Inscrivez-vous pour commencer à contribuer. Nous vous enverrons
           un courriel pour confirmer votre compte.
+      duplicate_social_email: Si vous possédez déjà un compte OpenStreetMap et souhaitez
+        utiliser un fournisseur d'identité tiers, veuillez vous connecter en utilisant
+        votre mot de passe et modifier les paramètres de votre compte.
       display name description: Votre nom d’utilisateur affiché publiquement. Vous
         pouvez changer ceci ultérieurement dans les préférences.
+      by_signing_up_html: En vous inscrivant, vous acceptez nos %{tou_link}, %{privacy_policy_link}
+        et %{contributor_terms_link}.
       tou: conditions d'utilisation
+      contributor_terms: Conditions de contribution
       external auth: 'Authentification tierce :'
       continue: S’inscrire
       terms accepted: Merci d’avoir accepté les nouveaux termes du contributeur !
@@ -2965,10 +2993,10 @@ fr:
       privacy_policy: politique de confidentialité
       privacy_policy_title: Politique de confidentialité de l’OSMF, qui comprend une
         section sur les adresses de courriel
+      consider_pd_html: Je considère que mes contributions se situent dans le %{consider_pd_link}.
       consider_pd: domaine public
       or: ou
-      use external auth: Vous pouvez également utiliser un service tiers pour vous
-        connecter.
+      use external auth: ou vous pouvez vous connecter avec un service tiers.
     terms:
       title: Conditions
       heading: Conditions
@@ -3079,6 +3107,9 @@ fr:
       heading: Utilisateurs
       older: Utilisateurs plus anciens
       newer: Utilisateurs plus récents
+      found_users:
+        one: '%{count} utilisateur trouvé'
+        other: '%{count} utilisateurs trouvés'
       summary_html: '%{name} créé depuis %{ip_address} le %{date}'
       summary_no_ip_html: '%{name} créé le %{date}'
       confirm: Confirmer les utilisateurs sélectionnés
@@ -3103,9 +3134,9 @@ fr:
       heading: Votre identifiant n’est pas encore associé à un compte OpenStreetMap.
       option_1: Si vous êtes nouveau sur OpenStreetMap, veuillez créer un nouveau
         compte à l’aide du formulaire ci-dessous.
-      option_2: Si vous avez déjà un compte, vous pouvez vous connecter avec en utilisant
-        votre nom d’utilisateur et votre mot de passe, puis associer le compte avec
-        votre ID dans vos préférences utilisateur.
+      option_2: Si vous avez déjà un compte, vous pouvez vous y connecter avec en
+        utilisant votre nom d’utilisateur et votre mot de passe, puis associer le
+        compte avec votre ID dans vos préférences utilisateur.
   user_role:
     filter:
       not_a_role: La chaîne « %{role} » n’est pas un rôle valide.
@@ -3236,6 +3267,8 @@ fr:
       reason: Motif du blocage
       status: État
       revoker_name: Révoqué par
+      older: Blocs plus anciens
+      newer: Blocs plus récents
     navigation:
       all_blocks: Tous les blocages
       blocks_on_me: Blocages me concernant
index 7f9b610679d2334057a3ffdc5f892343734f22a2..07edc2883f0f9c07ceec2d0844955860a7ab4599 100644 (file)
@@ -197,7 +197,7 @@ pa:
         relation: ਸਬੰਧ
     start_rjs:
       load_data: ਡਾਟਾ ਲੋਡ ਕਰੋ
-      loading: à¨²à©\8bਡ à¨¹à©\8b à¨°à¨¿à¨¹à¨¾ à¨¹à©\88â\80¦
+      loading: à¨²à©±à¨¦ à¨°à¨¿à¨¹à¨¾ à¨¹à©\88...
     tag_details:
       tags: ਟੈਗ
       wikipedia_link: '%{page} ਲੇਖ ਵਿਕਿਪੀਡਿਆ ਉੱਤੇ'
@@ -731,7 +731,7 @@ pa:
     sign_up: ਭਰਤੀ ਹੋਵੋ
     start_mapping: ਨਕਸ਼ਾਬੰਦੀ ਸ਼ੁਰੂ ਕਰੋ
     edit: ਸੋਧੋ
-    history: à¨\85ਤà©\80ਤ
+    history: à¨ªà©\81ਰਾਣਾ
     export: ਬਰਾਮਦ
     data: ਸਮੱਗਰੀ
     export_data: ਸਮੱਗਰੀ ਬਰਾਮਦ ਕਰੋ
index 1dc5c537ac548062dc9a93a372d6466b073a967d..638a310b0a11a80b4575a092e0b273b3c3c65928 100644 (file)
@@ -710,6 +710,10 @@ pt-PT:
       contact_the_community_html: Fique à vontade para %{contact_link} a comunidade
         OpenStreetMap caso tenha encontrado uma ligação inativa ou um erro. Deixe
         uma nota da URL exata da sua solicitação.
+    bad_request:
+      title: Pedido inválido
+      description: A operação solicitada no servidor OpenStreetMap não é válida (HTTP
+        400)
     forbidden:
       title: Proibido
       description: A operação solicitada no servidor do OpenStreetMap só está disponível
@@ -1778,8 +1782,8 @@ pt-PT:
           perto de %{place}.'
         commented_note_html: '%{commenter} reabriu uma nota comentada por ti. A nota
           fica perto de %{place}.'
-      details: Podes ver mais detalhes sobre a nota em %{url}.
-      details_html: Podes ver mais detalhes sobre a nota em %{url}.
+      details: Responde ou descobre mais sobre a nota em %{url}.
+      details_html: Responde ou descobre mais sobre a nota em %{url}.
     changeset_comment_notification:
       description: Conjunto de alterações n.º %{id}
       hi: Olá, %{to_user}.
@@ -1800,10 +1804,8 @@ pt-PT:
         partial_changeset_with_comment: com o comentário '%{changeset_comment}'
         partial_changeset_with_comment_html: com o comentário '%{changeset_comment}'
         partial_changeset_without_comment: sem comentários
-      details: Podes encontrar mais informações sobre o conjunto de alterações em
-        %{url}.
-      details_html: Podes encontrar mais informações sobre o conjunto de alterações
-        em %{url}.
+      details: Responde ou descobre mais sobre o conjunto de alterações em %{url}.
+      details_html: Responde ou descobre mais sobre o conjunto de alterações em %{url}.
       unsubscribe: Podes deixar de acompanhar as atualizações deste conjunto de alterações
         em %{url}.
       unsubscribe_html: Podes deixar de acompanhar as atualizações deste conjunto
@@ -1980,13 +1982,15 @@ pt-PT:
     new:
       title: Entrar
       tab_title: Iniciar sessão
+      login_to_authorize_html: Inicia sessão no OpenStreetMap para acederes a %{client_app_name}.
       email or username: 'E-mail ou Nome de utilizador:'
       password: Palavra-passe
       remember: Ficar autenticado entre sessões
       lost password link: Perdeste a tua palavra-passe?
       login_button: Iniciar sessão
       register now: Regista-te agora
-      with external: 'Em alternativa, usa um serviço externo para iniciares sessão:'
+      with external: ou inicia sessão com uma aplicação de terceiros
+      or: ou
       auth failure: Lamentamos, mas não foi possível iniciar sessão com os dados fornecidos.
     destroy:
       title: Sair
@@ -2157,6 +2161,12 @@ pt-PT:
         contributors_fr_credit_html: '%{france}: contém dados provenientes da Direção
           Geral de Impostos.'
         contributors_fr_france: França
+        contributors_hr_credit_html: |-
+          %{croatia}: Contém dados de %{dgu_link} e %{open_data_portal}
+          (informação pública da Croácia).
+        contributors_hr_croatia: Croácia
+        contributors_hr_dgu: Administração Geodésica Estatal da Croácia
+        contributors_hr_open_data_portal: Portal Nacional de Dados Abertos
         contributors_nl_credit_html: '%{netherlands}: Contém &copy; e dados, 2007
           (%{and_link})'
         contributors_nl_netherlands: Países Baixos
@@ -2617,6 +2627,9 @@ pt-PT:
         other: Ficheiro GPX com %{count} pontos de %{user}
       description_without_count: Ficheiro GPX de %{user}
   application:
+    basic_auth_disabled: 'A Autenticação Básica HTTP está desativada: %{link}'
+    oauth_10a_disabled: 'OAuth 1.0 e 1.0a estão desativados: %{link}'
+    auth_disabled_link: https://wiki.openstreetmap.org/wiki/2024_authentication_update
     permission_denied: Não tens permissões para realizar essa operação
     require_cookies:
       cookies_needed: Parece que tens os "cookies" desativados - por favor, ativa-os
@@ -2639,6 +2652,7 @@ pt-PT:
       muted_users: Utilizadores Silenciados
     auth_providers:
       openid_logo_alt: Iniciar sessão com um OpenID
+      openid_login_button: Continuar
       openid:
         title: Iniciar sessão com OpenID
         alt: Iniciar sessão com um URL do OpenID
@@ -2703,6 +2717,8 @@ pt-PT:
       write_redactions: Rever dados do mapa
       read_email: ‎Ler e-mail de utilizador
       skip_authorization: Aprovar a aplicação automaticamente
+    for_roles:
+      moderator: Esta permissão é para ações disponíveis apenas para moderadores
   oauth_clients:
     new:
       title: Registar uma nova aplicação
@@ -2798,20 +2814,29 @@ pt-PT:
   users:
     new:
       title: Criar conta
+      tab_title: Registar
+      signup_to_authorize_html: Inicia sessão no OpenStreetMap para acederes a %{client_app_name}.
       no_auto_account_create: Infelizmente, e de momento, não é possível criar uma
         conta automaticamente.
       please_contact_support_html: Por favor, contacta %{support_link} para pedir
         a criação de uma conta - tentaremos tratar do pedido o mais rapidamente possível.
       support: apoio
       about:
-        header: Livre e editável
+        header: Gratuito e editável.
         paragraph_1: Ao contrário de outros mapas, o OpenStreetMap é completamente
           criado por pessoas como tu, e qualquer pessoa o pode corrigir, transferir
           e usar de forma gratuita.
-        paragraph_2: Regista-te para começares a contribuir. Iremos enviar um e-mail
-          para confirmar a tua conta.
+        paragraph_2: Regista-te para começares a contribuir.
+        welcome: Bem-vind@ ao OpenStreetMap
+      duplicate_social_email: Se já tens uma conta OpenStreetMap e desejas utilizar
+        um provedor de identidade externo, inicia sessão com a tua palavra-passe e
+        modifica as definições da tua conta.
       display name description: O nome de utilizador ficará visível publicamente.
         Poderás alterar o nome posteriormente nas configurações do teu perfil.
+      by_signing_up_html: Ao registares-te, aceitas os nossos %{tou_link}, %{privacy_policy_link}
+        e %{contributor_terms_link}.
+      tou: Termos de Utilização
+      contributor_terms: Termos de Contribuidor
       external auth: 'Autenticação por terceiros:'
       continue: Criar conta
       terms accepted: Obrigado por aceitares os novos termos de contribuidor!
@@ -2820,7 +2845,10 @@ pt-PT:
       privacy_policy: política de privacidade
       privacy_policy_title: Política de privacidade da OSMF incluindo secção sobre
         endereços de correio eletrónico
-      use external auth: Em alternativa, usa um serviço externo para iniciares sessão
+      consider_pd_html: Considero que as minhas contribuições estão no %{consider_pd_link}.
+      consider_pd: domínio público
+      or: ou
+      use external auth: ou regista-te com um serviço externo
     terms:
       title: Termos
       heading: Termos
@@ -3091,6 +3119,13 @@ pt-PT:
       revoker_name: Revogado por
       older: Blocos mais antigos
       newer: Blocos mais recentes
+    navigation:
+      all_blocks: Todos os bloqueios
+      blocks_on_me: Quem me bloqueou
+      blocks_on_user: Bloqueios a %{user}
+      blocks_by_me: Os meus bloqueios
+      blocks_by_user: Bloqueios de %{user}
+      block: 'Bloqueio #%{id}'
   user_mutes:
     index:
       title: Utilizadores Silenciados
@@ -3166,6 +3201,10 @@ pt-PT:
         o mais pormenorizada possível sobre o que pretendes ver alterado no mapa,
         para que outros mapeadores te possam ajudar. Posiciona o marcador no local
         correto e escreve uma nota que explique o problema.
+      anonymous_warning_html: Não tens sessão iniciada. Por favor, %{log_in} ou %{sign_up}
+        se quiseres receber atualizações sobre a tua nota.
+      anonymous_warning_log_in: inicia sessão
+      anonymous_warning_sign_up: regista-te
       advice: 'Lembra-te: a tua nota é pública e poderá ser usada para atualizar o
         mapa, portanto, não introduzas informações pessoais, dados de mapas ou catálogos
         protegidos por direitos de autor.'
index 65eab6907a00ff6008299f28d7d2beb8b674d78c..a0fcef8b9f2cf86a238844b0b5170f8dd0552fde 100644 (file)
@@ -8,7 +8,7 @@ module OSM
   # The base class for API Errors.
   class APIError < RuntimeError
     def initialize(message = "Generic API Error")
-      super(message)
+      super
     end
 
     def status
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"