From: Tom Hughes Date: Wed, 27 Oct 2021 21:35:37 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/pull/3349' X-Git-Tag: live~2782 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/977eed6269537b5a618fe1e6034c7fbbc5709258?hp=b5e90699f6e13cbfaf6271893d67c2890c431196 Merge remote-tracking branch 'upstream/pull/3349' --- diff --git a/Gemfile.lock b/Gemfile.lock index 1551295dd..e71264938 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -77,8 +77,8 @@ GEM autoprefixer-rails (10.3.3.0) execjs (~> 2) aws-eventstream (1.2.0) - aws-partitions (1.516.0) - aws-sdk-core (3.121.2) + aws-partitions (1.519.0) + aws-sdk-core (3.121.3) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) @@ -123,8 +123,9 @@ GEM cancancan (3.3.0) canonical-rails (0.2.12) rails (>= 4.1, < 6.2) - capybara (3.35.3) + capybara (3.36.0) addressable + matrix mini_mime (>= 0.1.3) nokogiri (~> 1.8) rack (>= 1.6.0) @@ -143,7 +144,7 @@ GEM crack (0.4.5) rexml crass (1.0.6) - dalli (3.0.2) + dalli (3.0.3) debug_inspector (1.1.0) deep_merge (1.2.1) delayed_job (4.1.9) @@ -240,10 +241,10 @@ GEM concurrent-ruby (~> 1.0) i18n-js (3.9.0) i18n (>= 0.6.6) - image_optim (0.31.0) + image_optim (0.31.1) exifr (~> 1.2, >= 1.2.2) fspath (~> 3.0) - image_size (>= 1.5, < 3) + image_size (>= 1.5, < 4) in_threads (~> 1.3) progress (~> 3.0, >= 3.0.1) image_optim_rails (0.4.3) @@ -253,7 +254,7 @@ GEM image_processing (1.12.1) mini_magick (>= 4.9.5, < 5) ruby-vips (>= 2.0.17, < 3) - image_size (2.1.2) + image_size (3.0.1) in_threads (1.5.4) jbuilder (2.11.2) activesupport (>= 5.0.0) @@ -262,7 +263,7 @@ GEM rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) - json (2.6.0) + json (2.6.1) jwt (2.3.0) kgio (2.11.4) kramdown (2.3.1) @@ -280,6 +281,7 @@ GEM mail (2.7.1) mini_mime (>= 0.1.1) marcel (1.0.2) + matrix (0.4.2) maxminddb (0.1.22) method_source (1.0.0) mini_magick (4.11.0) @@ -310,7 +312,7 @@ GEM hashie (>= 3.4.6) rack (>= 1.6.2, < 3) rack-protection - omniauth-facebook (8.0.0) + omniauth-facebook (9.0.0) omniauth-oauth2 (~> 1.2) omniauth-github (2.0.0) omniauth (~> 2.0) @@ -406,7 +408,7 @@ GEM rexml (3.2.5) rinku (2.0.6) rotp (6.2.0) - rubocop (1.22.1) + rubocop (1.22.2) parallel (~> 1.10) parser (>= 3.0.0.0) rainbow (>= 2.2.2, < 4.0) @@ -485,7 +487,7 @@ GEM websocket-extensions (0.1.5) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.4.2) + zeitwerk (2.5.1) PLATFORMS ruby diff --git a/app/controllers/browse_controller.rb b/app/controllers/browse_controller.rb index 50d0ae0a5..6c5336908 100644 --- a/app/controllers/browse_controller.rb +++ b/app/controllers/browse_controller.rb @@ -5,6 +5,7 @@ class BrowseController < ApplicationController before_action :set_locale before_action -> { check_database_readable(:need_api => true) } before_action :require_oauth + before_action :update_totp, :only => [:query] around_action :web_timeout authorize_resource :class => false @@ -88,4 +89,6 @@ class BrowseController < ApplicationController rescue ActiveRecord::RecordNotFound render :action => "not_found", :status => :not_found end + + def query; end end diff --git a/app/controllers/concerns/session_methods.rb b/app/controllers/concerns/session_methods.rb index dd6458b1b..eb24f6b20 100644 --- a/app/controllers/concerns/session_methods.rb +++ b/app/controllers/concerns/session_methods.rb @@ -69,7 +69,7 @@ module SessionMethods def failed_login(message, username = nil) flash[:error] = message - redirect_to :action => "new", :referer => session[:referer], + redirect_to :controller => "sessions", :action => "new", :referer => session[:referer], :username => username, :remember_me => session[:remember_me] session.delete(:remember_me) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 42ac6ac11..38a61208c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -341,17 +341,6 @@ class UsersController < ApplicationController private - ## - # - def unconfirmed_login(user) - session[:token] = user.tokens.create.token - - redirect_to :action => "confirm", :display_name => user.display_name - - session.delete(:remember_me) - session.delete(:referer) - end - ## # update a user's details def update_user(user, params) diff --git a/config/locales/ca.yml b/config/locales/ca.yml index a2fb15749..197885409 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1470,8 +1470,8 @@ ca: intro_text: L'OpenStreetMap és un mapa del món creat per persones com tu i d'ús lliure sota una llicència oberta. intro_2_create_account: Crea un compte d’usuari - hosting_partners_html: L'allotjament és a càrrec de %{ucl}, %{bytemark} i d'altres - %{partners}. + hosting_partners_html: L'allotjament és a càrrec de %{ucl}, %{fastly}, %{bytemark} + i d'altres %{partners}. partners_ucl: UCL partners_bytemark: Bytemark Hosting partners_partners: socis diff --git a/config/locales/fa.yml b/config/locales/fa.yml index b1e6ab09f..63ad0fc21 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -736,7 +736,7 @@ fa: boardwalk: Boardwalk suspension: پل معلق swing: پل نوسان - viaduct: پل راه آهن روی دره + viaduct: پل چنددهانه "yes": پل building: apartment: آپارتمان diff --git a/config/locales/fy.yml b/config/locales/fy.yml index d9cad45a4..f46034b62 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -82,6 +82,7 @@ fy: providers: none: Gjint browse: + edited_by_html: Bewurke %{time} troch %{user} version: Ferzje anonymous: anonym part_of: Part fan @@ -115,6 +116,8 @@ fy: type: way: wei relation: relaasje + tag_details: + tags: Lebels note: description: Beskriuwing changesets: @@ -140,6 +143,16 @@ fy: location: 'Lokaasje:' edit: Bewurkje geocoder: + search: + title: + latlon_html: Treffers yntern + ca_postcode_html: Treffers fan Geocoder.CA + osm_nominatim_html: Treffers fan OpenStreetMap + Nominatim + geonames_html: Treffers fan GeoNames + osm_nominatim_reverse_html: Treffers fan OpenStreetMap + Nominatim + geonames_reverse_html: Treffers fan GeoNames search_osm_nominatim: prefix: aerialway: @@ -151,10 +164,12 @@ fy: apron: Platfoarm gate: Gate helipad: Helyhaven - runway: Start- en lâningsbaan + runway: Start-/lâningsbaan taxiway: Taksybaan terminal: Terminal amenity: + animal_boarding: Bistepinsjon + animal_shelter: Biste-asyl arts_centre: Keunstsintrum atm: Jildautomaat bank: Bank @@ -164,19 +179,24 @@ fy: bicycle_parking: Fytsestalling bicycle_rental: Fytsferhier biergarten: Kafeeterras + blood_bank: Bloedbank + boat_rental: Boatferhier brothel: Bordeel bureau_de_change: Wikselkantoar bus_station: Busstasjon cafe: Kafee car_rental: Autoferhier car_sharing: Autodielen - car_wash: Autowaskstrjitte + car_wash: Autowaskerij casino: Kasino + charging_station: Laadstasjon + childcare: Berne-opfang cinema: Bioskoop clinic: Klinyk clock: Klok college: Hegeskoalle community_centre: Mienskipshûs + conference_centre: Kongressintrum courthouse: Rjochtbank crematorium: Krematoarium dentist: Toskedokter @@ -184,34 +204,43 @@ fy: drinking_water: Drinkwetter driving_school: Rydskoalle embassy: Ambassade + events_venue: Evenemintehal fast_food: Flugge hap fire_station: Brânwacht food_court: Itenshal fountain: Fontein fuel: Brânstof grave_yard: Begraafplak + grit_bin: Struibak hospital: Sikehûs hunting_stand: Jachttoer ice_cream: Iisko + internet_cafe: Ynternetkafee kindergarten: Beukerskoalle + language_school: Taalskoalle library: Bibleteek marketplace: Merkplein + monastery: Kleaster music_school: Muzykskoalle nightclub: Nachtklup nursing_home: Ferpleechhûs parking: Parkearplak + payment_terminal: Betelautomaat pharmacy: Apoteek police: Plysje post_box: Brievebus post_office: Postkantoar prison: Finzenis pub: Kafee + public_bath: Badhûs + public_building: Iepenbier gebou restaurant: Restaurant school: Skoalle shelter: Skûlplak shower: Dûs swimming_pool: Swimbad taxi: Taksy + telephone: Tillefoansel theatre: Teäter toilets: Húskes townhall: Gemeentehûs @@ -222,18 +251,25 @@ fy: waste_basket: Jiskefet boundary: administrative: Bestjoerlike grins + national_park: Nasjonaal park bridge: aqueduct: Akwadukt viaduct: Fiadukt "yes": Brêge building: + apartment: Appartemint + apartments: Apparteminten + chapel: Kapel + church: Tsjerkegebou "yes": Gebou highway: bridleway: Ruterpaad bus_stop: Bushalte living_street: Wenhiem milestone: Mylpeal - motorway: Gongwei + motorway: Autogongwei + motorway_junction: Knooppunt autogongwei + motorway_link: Op-/ôfreed autogongwei path: Paad platform: Perron residential: Strjitte @@ -356,6 +392,7 @@ fy: village: Doarp railway: light_rail: Sneltrem + station: Spoarweistasjon tram: Trembaan tram_stop: Tremhalte shop: @@ -414,10 +451,14 @@ fy: admin_levels: level2: Lânsgrins level4: Steatsgrins + level7: Gemeentegrins types: cities: Grutte stêden towns: Stêden places: Plakken + results: + no_results: Gjin treffers fûn + more_results: Mear treffers layouts: logo: alt_text: Logo OpenStreetMap @@ -629,6 +670,8 @@ fy: traces: new: help: Help + trace_optionals: + tags: Lebels show: filename: 'Bestânsnamme:' coordinates_html: '%{latitude}; %{longitude}' @@ -750,10 +793,70 @@ fy: descend: Dalen directions: Rûtebeskriuwing distance: Ofstân + errors: + no_route: Koe gjin rûte fine tusken dy twa plakken. + no_place: Spitich - koe '%{place}' net fine. instructions: - continue_without_exit: Fierder op %{name} + continue_without_exit: Fierder oer %{name} + slight_right_without_exit: Flau rjochts nei %{name} + offramp_right: Rjochts de ôfreed nimme + offramp_right_with_exit: Rjochts ôfslach %{exit} nimme + offramp_right_with_exit_name: Rjochts ôfslach %{exit} nimme nei %{name} + offramp_right_with_exit_directions: Rjochts ôfslach %{exit} nimme rjochting + %{directions} + offramp_right_with_exit_name_directions: Rjochts ôfslach %{exit} nimme nei + %{name}, rjochting %{directions} + offramp_right_with_name: Rjochts de ôfreed nimme nei %{name} + offramp_right_with_directions: Rjochts de ôfreed nimme rjochting %{directions} + offramp_right_with_name_directions: Rjochts de ôfreed nimme nei %{name}, rjochting + %{directions} + onramp_right_without_exit: Rjochts de opreed ynslaan nei %{name} + onramp_right_with_directions: Rjochts de opreed ynslaan rjochting %{directions} + onramp_right_with_name_directions: Rjochts de opreed ynslaan nei %{name}, + rjochting %{directions} + onramp_right_without_directions: Rjochts de opreed ynslaan + onramp_right: Rjochts de opreed ynslaan + endofroad_right_without_exit: Oan 'e ein fan 'e wei rjochts ôfslaan nei %{name} + merge_right_without_exit: Rjochts ynfoegje op %{name} + fork_right_without_exit: Op 'e splitsing rjochts oanhâlde nei %{name} turn_right_without_exit: Rjochts ôfslaan nei %{name} + sharp_right_without_exit: Skerp rjochts nei %{name} + uturn_without_exit: U-bocht oer %{name} + sharp_left_without_exit: Skerp lofts nei %{name} turn_left_without_exit: Lofts ôfslaan nei %{name} + offramp_left: Lofts de ôfreed nimme + offramp_left_with_exit: Lofts ôfslach %{exit} nimme + offramp_left_with_exit_name: Lofts ôfslach %{exit} nimme nei %{name} + offramp_left_with_exit_directions: Lofts ôfslach %{exit} nimme rjochting %{directions} + offramp_left_with_exit_name_directions: Lofts ôfslach %{exit} nimme nei %{name}, + rjochting %{directions} + offramp_left_with_name: Lofts de ôfreed nimme nei %{name} + offramp_left_with_directions: Lofts de ôfreed nimme rjochting %{directions} + offramp_left_with_name_directions: Lofts de ôfreed nimme nei %{name}, rjochting + %{directions} + onramp_left_without_exit: Lofts de opreed ynslaan nei %{name} + onramp_left_with_directions: Lofts de opreed ynslaan rjochting %{directions} + onramp_left_with_name_directions: Lofts de opreed ynslaan nei %{name}, rjochting + %{directions} + onramp_left_without_directions: Lofts de opreed ynslaan + onramp_left: Lofts de opreed ynslaan + endofroad_left_without_exit: Oan 'e ein fan 'e wei lofts ôfslaan nei %{name} + merge_left_without_exit: Lofts ynfoegje op %{name} + fork_left_without_exit: Op 'e splitsing lofts oanhâlde nei %{name} + slight_left_without_exit: Flau lofts nei %{name} + via_point_without_exit: (tuskenpunt) + follow_without_exit: Folgje %{name} + roundabout_without_exit: Op 'e rotonde ôfslaan nei %{name} + leave_roundabout_without_exit: Rotonde ferlitte - %{name} + stay_roundabout_without_exit: Op 'e rotonde bliuwe - %{name} + start_without_exit: Starte op %{name} + destination_without_exit: Bestimming berikt + against_oneway_without_exit: Tsjin it ienrjochtingsferkear yn op %{name} + end_oneway_without_exit: Ein ienrjochtingsferkear op %{name} + roundabout_with_exit: Op 'e rotonde ôfslach %{exit} nimme nei %{name} + roundabout_with_exit_ordinal: Op 'e rotonde %{exit} ôfslach nimme nei %{name} + exit_roundabout: Rotonde ferlitte oer %{name} + unnamed: nammeleaze wei courtesy: Rûte mei tank oan %{link} exit_counts: first: 1e diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 539d71724..afc13f0e0 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -548,7 +548,9 @@ ru: nearby mapper: Ближайший картограф friend: Друг show: - title: Моя панель + title: Мой пульт + no_home_location_html: '%{edit_profile_link} и установите ваше местоположение, + чтобы видеть близлежащих пользователей.' edit_your_profile: Править свой профиль my friends: Друзья no friends: Вы не добавили ещё ни одного друга. @@ -673,6 +675,7 @@ ru: chair_lift: Кресельный канатный подъёмник drag_lift: Якорный (бугельный) подъёмник gondola: Канатная дорога + magic_carpet: Волшебный подъемник для ковров platter: Бугельный подъёмник pylon: Опора линии электропередач station: Станция канатного подъёмника @@ -686,6 +689,7 @@ ru: hangar: Ангар helipad: Вертолётная площадка holding_position: Место ожидания + navigationaid: Авиационная навигационная система parking_position: Позиция парковки runway: Взлётно-посадочная полоса taxilane: Ряд для такси @@ -1786,12 +1790,12 @@ ru: flash token bad: Невозможно найти такой код подтверждения, проверьте ссылку. preferences: show: - title: Мои настройки + title: Мои предпочтения preferred_editor: Предпочитаемый редактор preferred_languages: Предпочитаемые языки edit_preferences: Изменить настройки edit: - title: Изменить настройки + title: Изменить предпочтения save: Обновить настройки cancel: Отмена update: @@ -2655,7 +2659,8 @@ ru: my profile: Мой профиль my settings: Мои настройки my comments: Мои комментарии - my_preferences: Мои настройки + my_preferences: Мои предпочтения + my_dashboard: Мой пульт blocks on me: Мои блокировки blocks by me: Наложенные мною блокировки edit_profile: Редактировать настройки diff --git a/test/integration/user_login_test.rb b/test/integration/user_login_test.rb index 21d8847ca..5b39ea76a 100644 --- a/test/integration/user_login_test.rb +++ b/test/integration/user_login_test.rb @@ -370,6 +370,72 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_select "span.username", user.display_name end + def test_login_openid_pending + user = create(:user, :pending, :auth_provider => "openid", :auth_uid => "http://example.com/john.doe") + OmniAuth.config.add_mock(:openid, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path(:cookie_test => true, :referer => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login?referer=%2Fhistory", :referer => "/history") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "confirm" + end + + def test_login_openid_suspended + user = create(:user, :suspended, :auth_provider => "openid", :auth_uid => "http://example.com/john.doe") + OmniAuth.config.add_mock(:openid, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path(:cookie_test => true, :referer => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login?referer=%2Fhistory", :referer => "/history") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "sessions/new" + assert_select "span.username", false + assert_select "div.flash.error", /your account has been suspended/ do + assert_select "a[href='mailto:openstreetmap@example.com']", "support" + end + end + + def test_login_openid_blocked + user = create(:user, :auth_provider => "openid", :auth_uid => "http://example.com/john.doe") + create(:user_block, :needs_view, :user => user) + OmniAuth.config.add_mock(:openid, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path(:cookie_test => true, :referer => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login?referer=%2Fhistory", :referer => "/history") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "user_blocks/show" + assert_select "span.username", user.display_name + end + def test_login_openid_connection_failed user = create(:user, :auth_provider => "openid", :auth_uid => "http://example.com/john.doe") OmniAuth.config.mock_auth[:openid] = :connection_failed @@ -463,6 +529,78 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_select "span.username", user.display_name end + def test_login_google_pending + user = create(:user, :pending, :auth_provider => "google", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => { + :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" } + }) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "google") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "confirm" + end + + def test_login_google_suspended + user = create(:user, :suspended, :auth_provider => "google", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => { + :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" } + }) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "google") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "sessions/new" + assert_select "span.username", false + assert_select "div.flash.error", /your account has been suspended/ do + assert_select "a[href='mailto:openstreetmap@example.com']", "support" + end + end + + def test_login_google_blocked + user = create(:user, :auth_provider => "google", :auth_uid => "1234567890") + create(:user_block, :needs_view, :user => user) + OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => { + :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" } + }) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "google") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "user_blocks/show" + assert_select "span.username", user.display_name + end + def test_login_google_connection_failed OmniAuth.config.mock_auth[:google] = :connection_failed @@ -581,6 +719,72 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_select "span.username", user.display_name end + def test_login_facebook_pending + user = create(:user, :pending, :auth_provider => "facebook", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "facebook") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "confirm" + end + + def test_login_facebook_suspended + user = create(:user, :suspended, :auth_provider => "facebook", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "facebook") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "sessions/new" + assert_select "span.username", false + assert_select "div.flash.error", /your account has been suspended/ do + assert_select "a[href='mailto:openstreetmap@example.com']", "support" + end + end + + def test_login_facebook_blocked + user = create(:user, :auth_provider => "facebook", :auth_uid => "1234567890") + create(:user_block, :needs_view, :user => user) + OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "facebook") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "user_blocks/show" + assert_select "span.username", user.display_name + end + def test_login_facebook_connection_failed OmniAuth.config.mock_auth[:facebook] = :connection_failed @@ -670,6 +874,72 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_select "span.username", user.display_name end + def test_login_windowslive_pending + user = create(:user, :pending, :auth_provider => "windowslive", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:windowslive, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "windowslive") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "confirm" + end + + def test_login_windowslive_suspended + user = create(:user, :suspended, :auth_provider => "windowslive", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:windowslive, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "windowslive") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "sessions/new" + assert_select "span.username", false + assert_select "div.flash.error", /your account has been suspended/ do + assert_select "a[href='mailto:openstreetmap@example.com']", "support" + end + end + + def test_login_windowslive_blocked + user = create(:user, :auth_provider => "windowslive", :auth_uid => "1234567890") + create(:user_block, :needs_view, :user => user) + OmniAuth.config.add_mock(:windowslive, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "windowslive") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "user_blocks/show" + assert_select "span.username", user.display_name + end + def test_login_windowslive_connection_failed OmniAuth.config.mock_auth[:windowslive] = :connection_failed @@ -759,6 +1029,72 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_select "span.username", user.display_name end + def test_login_github_pending + user = create(:user, :pending, :auth_provider => "github", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:github, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "github") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "confirm" + end + + def test_login_github_suspended + user = create(:user, :suspended, :auth_provider => "github", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:github, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "github") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "sessions/new" + assert_select "span.username", false + assert_select "div.flash.error", /your account has been suspended/ do + assert_select "a[href='mailto:openstreetmap@example.com']", "support" + end + end + + def test_login_github_blocked + user = create(:user, :auth_provider => "github", :auth_uid => "1234567890") + create(:user_block, :needs_view, :user => user) + OmniAuth.config.add_mock(:github, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "github") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "user_blocks/show" + assert_select "span.username", user.display_name + end + def test_login_github_connection_failed OmniAuth.config.mock_auth[:github] = :connection_failed @@ -848,6 +1184,72 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_select "span.username", user.display_name end + def test_login_wikipedia_pending + user = create(:user, :pending, :auth_provider => "wikipedia", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "confirm" + end + + def test_login_wikipedia_suspended + user = create(:user, :suspended, :auth_provider => "wikipedia", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "sessions/new" + assert_select "span.username", false + assert_select "div.flash.error", /your account has been suspended/ do + assert_select "a[href='mailto:openstreetmap@example.com']", "support" + end + end + + def test_login_wikipedia_blocked + user = create(:user, :auth_provider => "wikipedia", :auth_uid => "1234567890") + create(:user_block, :needs_view, :user => user) + OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid) + + get "/login", :params => { :referer => "/history" } + assert_response :redirect + assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history") + follow_redirect! + assert_response :success + assert_template "sessions/new" + post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history") + assert_response :redirect + assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history") + follow_redirect! + assert_response :redirect + follow_redirect! + assert_response :success + assert_template "user_blocks/show" + assert_select "span.username", user.display_name + end + def test_login_wikipedia_connection_failed OmniAuth.config.mock_auth[:wikipedia] = :connection_failed