diff --git a/app/logical/user_verifier.rb b/app/logical/user_verifier.rb index df0d43c93..d1e5991b9 100644 --- a/app/logical/user_verifier.rb +++ b/app/logical/user_verifier.rb @@ -23,7 +23,11 @@ class UserVerifier end def is_local_ip? - ip_address.loopback? || ip_address.link_local? || ip_address.private? || ip_address.try(:unique_local?) + if ip_address.ipv4? + ip_address.loopback? || ip_address.link_local? || ip_address.private? + elsif ip_address.ipv6? + ip_address.loopback? || ip_address.link_local? || ip_address.unique_local? + end end def is_logged_in? diff --git a/test/functional/users_controller_test.rb b/test/functional/users_controller_test.rb index 38216a1a6..85adf6a47 100644 --- a/test/functional/users_controller_test.rb +++ b/test/functional/users_controller_test.rb @@ -293,9 +293,19 @@ class UsersControllerTest < ActionDispatch::IntegrationTest setup do @private_ip = "192.168.0.1" @valid_ip = "187.37.226.17" # a random valid, non-proxy public IP + @valid_ipv6 = "2600:1700:6b0:a518::1" @proxy_ip = "51.15.128.1" end + should "work for a public IPv6 address" do + self.remote_addr = @valid_ipv6 + + post users_path, params: { user: { name: "xxx", password: "xxxxx1", password_confirmation: "xxxxx1" }} + + assert_redirected_to User.last + assert_equal(false, User.last.requires_verification) + end + should "mark accounts created by already logged in users as requiring verification" do self.remote_addr = @valid_ip