Merge remote-tracking branch 'upstream/pull/2175'
This commit is contained in:
commit
dcfe326f65
10 changed files with 46 additions and 59 deletions
|
@ -1,7 +1,7 @@
|
||||||
inherit_from: .rubocop_todo.yml
|
inherit_from: .rubocop_todo.yml
|
||||||
|
|
||||||
AllCops:
|
AllCops:
|
||||||
TargetRubyVersion: 2.3
|
TargetRubyVersion: 2.5
|
||||||
|
|
||||||
Rails:
|
Rails:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
sudo: false
|
sudo: false
|
||||||
language: ruby
|
language: ruby
|
||||||
rvm:
|
rvm:
|
||||||
- 2.3.3
|
- 2.5.1
|
||||||
cache: bundler
|
cache: bundler
|
||||||
addons:
|
addons:
|
||||||
postgresql: 9.5
|
postgresql: 9.5
|
||||||
|
|
|
@ -5,7 +5,7 @@ If you want to deploy the software for your own project, then see the notes at t
|
||||||
|
|
||||||
You can install the software directly on your machine, which is the traditional and probably best-supported approach. However, there is an alternative which may be easier: Vagrant. This installs the software into a virtual machine, which makes it easier to get a consistent development environment and may avoid installation difficulties. For Vagrant instructions, see [VAGRANT.md](VAGRANT.md).
|
You can install the software directly on your machine, which is the traditional and probably best-supported approach. However, there is an alternative which may be easier: Vagrant. This installs the software into a virtual machine, which makes it easier to get a consistent development environment and may avoid installation difficulties. For Vagrant instructions, see [VAGRANT.md](VAGRANT.md).
|
||||||
|
|
||||||
These instructions are based on Ubuntu 16.04 LTS, which is the platform used by the OSMF servers.
|
These instructions are based on Ubuntu 18.04 LTS, which is the platform used by the OSMF servers.
|
||||||
The instructions also work, with only minor amendments, for all other current Ubuntu releases, Fedora and MacOSX
|
The instructions also work, with only minor amendments, for all other current Ubuntu releases, Fedora and MacOSX
|
||||||
|
|
||||||
We don't recommend attempting to develop or deploy this software on Windows. If you need to use Windows, then try developing this software using Ubuntu in a virtual machine, or use [Vagrant](VAGRANT.md).
|
We don't recommend attempting to develop or deploy this software on Windows. If you need to use Windows, then try developing this software using Ubuntu in a virtual machine, or use [Vagrant](VAGRANT.md).
|
||||||
|
@ -18,8 +18,7 @@ of packages required before you can get the various gems installed.
|
||||||
|
|
||||||
## Minimum requirements
|
## Minimum requirements
|
||||||
|
|
||||||
* Ruby 2.3
|
* Ruby 2.5+
|
||||||
* RubyGems 1.3.1+
|
|
||||||
* PostgreSQL 9.1+
|
* PostgreSQL 9.1+
|
||||||
* ImageMagick
|
* ImageMagick
|
||||||
* Bundler
|
* Bundler
|
||||||
|
@ -28,12 +27,12 @@ of packages required before you can get the various gems installed.
|
||||||
These can be installed on Ubuntu 16.04 or later with:
|
These can be installed on Ubuntu 16.04 or later with:
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo apt-get install ruby2.3 libruby2.3 ruby2.3-dev \
|
sudo apt-get install ruby2.5 libruby2.5 ruby2.5-dev \
|
||||||
libmagickwand-dev libxml2-dev libxslt1-dev nodejs \
|
libmagickwand-dev libxml2-dev libxslt1-dev nodejs \
|
||||||
apache2 apache2-dev build-essential git-core \
|
apache2 apache2-dev build-essential git-core \
|
||||||
postgresql postgresql-contrib libpq-dev postgresql-server-dev-all \
|
postgresql postgresql-contrib libpq-dev postgresql-server-dev-all \
|
||||||
libsasl2-dev imagemagick libffi-dev
|
libsasl2-dev imagemagick libffi-dev
|
||||||
sudo gem2.3 install bundler
|
sudo gem2.5 install bundler
|
||||||
```
|
```
|
||||||
|
|
||||||
### Alternative platforms
|
### Alternative platforms
|
||||||
|
|
|
@ -17,11 +17,11 @@ class GeocoderController < ApplicationController
|
||||||
@sources.push "osm_nominatim_reverse"
|
@sources.push "osm_nominatim_reverse"
|
||||||
@sources.push "geonames_reverse" if Settings.key?(:geonames_username)
|
@sources.push "geonames_reverse" if Settings.key?(:geonames_username)
|
||||||
elsif @params[:query]
|
elsif @params[:query]
|
||||||
if @params[:query] =~ /^\d{5}(-\d{4})?$/
|
if @params[:query].match?(/^\d{5}(-\d{4})?$/)
|
||||||
@sources.push "osm_nominatim"
|
@sources.push "osm_nominatim"
|
||||||
elsif @params[:query] =~ /^(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\s*[0-9][ABD-HJLNP-UW-Z]{2})$/i
|
elsif @params[:query].match?(/^(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\s*[0-9][ABD-HJLNP-UW-Z]{2})$/i)
|
||||||
@sources.push "osm_nominatim"
|
@sources.push "osm_nominatim"
|
||||||
elsif @params[:query] =~ /^[A-Z]\d[A-Z]\s*\d[A-Z]\d$/i
|
elsif @params[:query].match?(/^[A-Z]\d[A-Z]\s*\d[A-Z]\d$/i)
|
||||||
@sources.push "ca_postcode"
|
@sources.push "ca_postcode"
|
||||||
@sources.push "osm_nominatim"
|
@sources.push "osm_nominatim"
|
||||||
else
|
else
|
||||||
|
|
|
@ -120,7 +120,7 @@ module BrowseTagsHelper
|
||||||
#
|
#
|
||||||
# Also accepting / as a visual separator although not given in RFC 3966,
|
# Also accepting / as a visual separator although not given in RFC 3966,
|
||||||
# because it is used as a visual separator in OSM data in some countries.
|
# because it is used as a visual separator in OSM data in some countries.
|
||||||
if value =~ %r{^\s*\+[\d\s\(\)/\.-]{6,25}\s*(;\s*\+[\d\s\(\)/\.-]{6,25}\s*)*$}
|
if value.match?(%r{^\s*\+[\d\s\(\)/\.-]{6,25}\s*(;\s*\+[\d\s\(\)/\.-]{6,25}\s*)*$})
|
||||||
return value.split(";").map do |phone_number|
|
return value.split(";").map do |phone_number|
|
||||||
# for display, remove leading and trailing whitespace
|
# for display, remove leading and trailing whitespace
|
||||||
phone_number = phone_number.strip
|
phone_number = phone_number.strip
|
||||||
|
|
|
@ -15,7 +15,6 @@ class Language < ActiveRecord::Base
|
||||||
def self.load(file)
|
def self.load(file)
|
||||||
Language.transaction do
|
Language.transaction do
|
||||||
YAML.safe_load(File.read(file)).each do |k, v|
|
YAML.safe_load(File.read(file)).each do |k, v|
|
||||||
begin
|
|
||||||
Language.update(k, :english_name => v["english"], :native_name => v["native"])
|
Language.update(k, :english_name => v["english"], :native_name => v["native"])
|
||||||
rescue ActiveRecord::RecordNotFound
|
rescue ActiveRecord::RecordNotFound
|
||||||
Language.create do |l|
|
Language.create do |l|
|
||||||
|
@ -26,7 +25,6 @@ class Language < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def name
|
def name
|
||||||
name = english_name
|
name = english_name
|
||||||
|
|
2
bin/yarn
2
bin/yarn
|
@ -1,11 +1,9 @@
|
||||||
#!/usr/bin/env ruby
|
#!/usr/bin/env ruby
|
||||||
APP_ROOT = File.expand_path("..", __dir__)
|
APP_ROOT = File.expand_path("..", __dir__)
|
||||||
Dir.chdir(APP_ROOT) do
|
Dir.chdir(APP_ROOT) do
|
||||||
begin
|
|
||||||
exec "yarnpkg", *ARGV
|
exec "yarnpkg", *ARGV
|
||||||
rescue Errno::ENOENT
|
rescue Errno::ENOENT
|
||||||
warn "Yarn executable was not detected in the system."
|
warn "Yarn executable was not detected in the system."
|
||||||
warn "Download Yarn at https://yarnpkg.com/en/docs/install"
|
warn "Download Yarn at https://yarnpkg.com/en/docs/install"
|
||||||
exit 1
|
exit 1
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ module PasswordHash
|
||||||
def self.check(hash, salt, candidate)
|
def self.check(hash, salt, candidate)
|
||||||
if salt.nil?
|
if salt.nil?
|
||||||
candidate = Digest::MD5.hexdigest(candidate)
|
candidate = Digest::MD5.hexdigest(candidate)
|
||||||
elsif salt =~ /!/
|
elsif salt.match?(/!/)
|
||||||
algorithm, iterations, salt = salt.split("!")
|
algorithm, iterations, salt = salt.split("!")
|
||||||
size = Base64.strict_decode64(hash).length
|
size = Base64.strict_decode64(hash).length
|
||||||
candidate = self.hash(candidate, salt, iterations.to_i, size, algorithm)
|
candidate = self.hash(candidate, salt, iterations.to_i, size, algorithm)
|
||||||
|
@ -32,7 +32,7 @@ module PasswordHash
|
||||||
def self.upgrade?(hash, salt)
|
def self.upgrade?(hash, salt)
|
||||||
if salt.nil?
|
if salt.nil?
|
||||||
return true
|
return true
|
||||||
elsif salt =~ /!/
|
elsif salt.match?(/!/)
|
||||||
algorithm, iterations, salt = salt.split("!")
|
algorithm, iterations, salt = salt.split("!")
|
||||||
return true if Base64.strict_decode64(salt).length != SALT_BYTE_SIZE
|
return true if Base64.strict_decode64(salt).length != SALT_BYTE_SIZE
|
||||||
return true if Base64.strict_decode64(hash).length != HASH_BYTE_SIZE
|
return true if Base64.strict_decode64(hash).length != HASH_BYTE_SIZE
|
||||||
|
|
|
@ -165,14 +165,12 @@ module Api
|
||||||
# check that a changeset that doesn't exist returns an appropriate message
|
# check that a changeset that doesn't exist returns an appropriate message
|
||||||
def test_show_not_found
|
def test_show_not_found
|
||||||
[0, -32, 233455644, "afg", "213"].each do |id|
|
[0, -32, 233455644, "afg", "213"].each do |id|
|
||||||
begin
|
|
||||||
get :show, :params => { :id => id }
|
get :show, :params => { :id => id }
|
||||||
assert_response :not_found, "should get a not found"
|
assert_response :not_found, "should get a not found"
|
||||||
rescue ActionController::UrlGenerationError => ex
|
rescue ActionController::UrlGenerationError => ex
|
||||||
assert_match(/No route matches/, ex.to_s)
|
assert_match(/No route matches/, ex.to_s)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# test that the user who opened a change can close it
|
# test that the user who opened a change can close it
|
||||||
|
@ -239,25 +237,21 @@ module Api
|
||||||
|
|
||||||
# First try to do it with no auth
|
# First try to do it with no auth
|
||||||
cs_ids.each do |id|
|
cs_ids.each do |id|
|
||||||
begin
|
|
||||||
put :close, :params => { :id => id }
|
put :close, :params => { :id => id }
|
||||||
assert_response :unauthorized, "Shouldn't be able close the non-existant changeset #{id}, when not authorized"
|
assert_response :unauthorized, "Shouldn't be able close the non-existant changeset #{id}, when not authorized"
|
||||||
rescue ActionController::UrlGenerationError => ex
|
rescue ActionController::UrlGenerationError => ex
|
||||||
assert_match(/No route matches/, ex.to_s)
|
assert_match(/No route matches/, ex.to_s)
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
# Now try with auth
|
# Now try with auth
|
||||||
basic_authorization create(:user).email, "test"
|
basic_authorization create(:user).email, "test"
|
||||||
cs_ids.each do |id|
|
cs_ids.each do |id|
|
||||||
begin
|
|
||||||
put :close, :params => { :id => id }
|
put :close, :params => { :id => id }
|
||||||
assert_response :not_found, "The changeset #{id} doesn't exist, so can't be closed"
|
assert_response :not_found, "The changeset #{id} doesn't exist, so can't be closed"
|
||||||
rescue ActionController::UrlGenerationError => ex
|
rescue ActionController::UrlGenerationError => ex
|
||||||
assert_match(/No route matches/, ex.to_s)
|
assert_match(/No route matches/, ex.to_s)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# upload something simple, but valid and check that it can
|
# upload something simple, but valid and check that it can
|
||||||
|
|
|
@ -53,7 +53,6 @@ class MessageTest < ActiveSupport::TestCase
|
||||||
"\x82\x82", # multibyte continuations without multibyte identifier
|
"\x82\x82", # multibyte continuations without multibyte identifier
|
||||||
"\xe1\x82\x4a"] # three-byte identifier, contination and (incorrectly) plain ASCII
|
"\xe1\x82\x4a"] # three-byte identifier, contination and (incorrectly) plain ASCII
|
||||||
invalid_sequences.each do |char|
|
invalid_sequences.each do |char|
|
||||||
begin
|
|
||||||
# create a message and save to the database
|
# create a message and save to the database
|
||||||
msg = make_message(char, 1)
|
msg = make_message(char, 1)
|
||||||
# if the save throws, thats fine and the test should pass, as we're
|
# if the save throws, thats fine and the test should pass, as we're
|
||||||
|
@ -68,7 +67,6 @@ class MessageTest < ActiveSupport::TestCase
|
||||||
assert_equal ex.to_s, "invalid byte sequence in UTF-8"
|
assert_equal ex.to_s, "invalid byte sequence in UTF-8"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def test_from_mail_plain
|
def test_from_mail_plain
|
||||||
sender_user = create(:user)
|
sender_user = create(:user)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue