From 20359788dcfe720ac5cacb5c06f6b3b10b35b7d5 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Mon, 27 Jun 2016 17:26:43 +0800 Subject: [PATCH] Rename `SiteSetting#use_https` to `force_https`. --- app/controllers/user_avatars_controller.rb | 2 +- app/models/about.rb | 2 +- app/models/site_setting.rb | 4 +-- config/initializers/050-force_https.rb | 2 +- config/locales/server.de.yml | 2 +- config/locales/server.en.yml | 2 +- config/locales/server.es.yml | 2 +- config/locales/server.pt.yml | 2 +- config/site_settings.yml | 2 +- ..._use_https_name_change_in_site_settings.rb | 5 ++++ lib/discourse.rb | 2 +- lib/onebox/engine/discourse_local_onebox.rb | 2 +- lib/site_setting_extension.rb | 28 +++++++++++++++++++ spec/components/discourse_spec.rb | 4 +-- spec/components/email/styles_spec.rb | 4 +-- spec/models/site_setting_spec.rb | 28 +++++++++++++++++-- 16 files changed, 75 insertions(+), 18 deletions(-) create mode 100644 db/migrate/20160627104436_use_https_name_change_in_site_settings.rb diff --git a/app/controllers/user_avatars_controller.rb b/app/controllers/user_avatars_controller.rb index a34691054..2cc10b43c 100644 --- a/app/controllers/user_avatars_controller.rb +++ b/app/controllers/user_avatars_controller.rb @@ -120,7 +120,7 @@ class UserAvatarsController < ApplicationController def proxy_avatar(url) if url[0..1] == "//" - url = (SiteSetting.use_https ? "https:" : "http:") + url + url = (SiteSetting.force_https ? "https:" : "http:") + url end sha = Digest::SHA1.hexdigest(url) diff --git a/app/models/about.rb b/app/models/about.rb index 1c96d032e..dd87169ec 100644 --- a/app/models/about.rb +++ b/app/models/about.rb @@ -18,7 +18,7 @@ class About end def https - SiteSetting.use_https + SiteSetting.force_https end def title diff --git a/app/models/site_setting.rb b/app/models/site_setting.rb index 266a482f8..9b694bca9 100644 --- a/app/models/site_setting.rb +++ b/app/models/site_setting.rb @@ -23,6 +23,7 @@ class SiteSetting < ActiveRecord::Base end load_settings(File.join(Rails.root, 'config', 'site_settings.yml')) + setup_deprecated_methods unless Rails.env.test? && ENV['LOAD_PLUGINS'] != "1" Dir[File.join(Rails.root, "plugins", "*", "config", "settings.yml")].each do |file| @@ -85,7 +86,7 @@ class SiteSetting < ActiveRecord::Base end def self.scheme - use_https? ? "https" : "http" + force_https? ? "https" : "http" end def self.default_categories_selected @@ -108,7 +109,6 @@ class SiteSetting < ActiveRecord::Base def self.email_polling_enabled? SiteSetting.manual_polling_enabled? || SiteSetting.pop3_polling_enabled? end - end # == Schema Information diff --git a/config/initializers/050-force_https.rb b/config/initializers/050-force_https.rb index 0e91da8b2..7ac71e113 100644 --- a/config/initializers/050-force_https.rb +++ b/config/initializers/050-force_https.rb @@ -6,7 +6,7 @@ class Discourse::ForceHttpsMiddleware end def call(env) - env['rack.url_scheme'] = 'https' if SiteSetting.use_https + env['rack.url_scheme'] = 'https' if SiteSetting.force_https @app.call(env) end diff --git a/config/locales/server.de.yml b/config/locales/server.de.yml index d0a1797e5..ac54be06d 100644 --- a/config/locales/server.de.yml +++ b/config/locales/server.de.yml @@ -765,7 +765,7 @@ de: notification_email: "Die E-Mail-Adresse die als \"From:\" Absender aller wichtiger System-E-Mails benutzt wird. Die benutzte Domain sollte über korrekte SPF, DKIM und PTR Einträge verfügen, damit E-Mails sicher zugestellt werden können." email_custom_headers: "Eine durch senkrechte Striche getrennte Liste von eigenen E-Mail Headerzeilen" email_subject: "Format der Betreffzeile in Standard-E-Mails. Siehe https://meta.discourse.org/t/customize-subject-format-for-standard-emails/20801" - use_https: "Erzwinge HTTPS für deine Seite. ACHTUNG: aktiviere dies nicht, bevor HTTPS nicht vollständig eingerichtet ist und auf jeden Fall überall funktioniert! Hast du alle CDN-Netzwerke, alle Logins über Soziale Netzwerke, alle externe Logos / Abhängigkeiten geprüft, um sicherzustellen, dass sie auch alle HTTPS-kompatibel sind?" + force_https: "Erzwinge HTTPS für deine Seite. ACHTUNG: aktiviere dies nicht, bevor HTTPS nicht vollständig eingerichtet ist und auf jeden Fall überall funktioniert! Hast du alle CDN-Netzwerke, alle Logins über Soziale Netzwerke, alle externe Logos / Abhängigkeiten geprüft, um sicherzustellen, dass sie auch alle HTTPS-kompatibel sind?" summary_score_threshold: "Mindestpunktzahl, die ein Beitrag benötigt, um in der \"Thema zusammenfassen\"-Ansicht zu erscheinen." summary_posts_required: "Mindestanzahl an Beiträgen in einem Thema, bevor die \"Thema zusammenfassen\"-Funktion aktiviert wird." summary_likes_required: "Mindestanzahl an \"Gefällt mir\" Wertungen in einem Thema, bevor die \"Thema zusammenfassen\" Funktion aktiviert wird." diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index c7ab81feb..3f994a19d 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -865,7 +865,7 @@ en: notification_email: "The from: email address used when sending all essential system emails. The domain specified here must have SPF, DKIM and reverse PTR records set correctly for email to arrive." email_custom_headers: "A pipe-delimited list of custom email headers" email_subject: "Customizable subject format for standard emails. See https://meta.discourse.org/t/customize-subject-format-for-standard-emails/20801" - use_https: "Force your site to use HTTPS only. WARNING: do NOT enable this until you verify HTTPS is fully set up and working absolutely everywhere! Did you check your CDN, all social logins, and any external logos / dependencies to make sure they are all HTTPS compatible, too?" + force_https: "Force your site to use HTTPS only. WARNING: do NOT enable this until you verify HTTPS is fully set up and working absolutely everywhere! Did you check your CDN, all social logins, and any external logos / dependencies to make sure they are all HTTPS compatible, too?" summary_score_threshold: "The minimum score required for a post to be included in 'Summarize This Topic'" summary_posts_required: "Minimum posts in a topic before 'Summarize This Topic' is enabled" summary_likes_required: "Minimum likes in a topic before 'Summarize This Topic' is enabled" diff --git a/config/locales/server.es.yml b/config/locales/server.es.yml index 7bd60d17b..7dfa8445a 100644 --- a/config/locales/server.es.yml +++ b/config/locales/server.es.yml @@ -776,7 +776,7 @@ es: notification_email: "La dirección de correo electrónico \"remitente\", utilizada al enviar todos los emails esenciales de sistema. El dominio especificado debe tener correctamente configurados los registros SPF, DKIM y PTR inversos para que los emails se reciban correctamente." email_custom_headers: "Lista de emails separados por una barra" email_subject: "Formato de asunto personalizable para emails estándar. Mira https://meta.discourse.org/t/customize-subject-format-for-standard-emails/20801" - use_https: "Forzar al sitio a utilizar sólo HTTPS. AVISO: ¡NO actives esta opción a menos que verifiques completamente la configuración y funcione correctamente en todas partes! ¿Has verificado también que el CDN, los inicios de sesión social y cualquier logo externo / dependencia son compatibles con HTTPS?" + force_https: "Forzar al sitio a utilizar sólo HTTPS. AVISO: ¡NO actives esta opción a menos que verifiques completamente la configuración y funcione correctamente en todas partes! ¿Has verificado también que el CDN, los inicios de sesión social y cualquier logo externo / dependencia son compatibles con HTTPS?" summary_score_threshold: "La puntuación mínima requerida para que un post sea incluido en el 'Resumen de este tema\"" summary_posts_required: "El mínimo número de posts en un tema para habilitar el 'Resumen de este tema'" summary_likes_required: "Mínimo de \"me gusta\" en un tema para habilitar 'Resumen de este tema'" diff --git a/config/locales/server.pt.yml b/config/locales/server.pt.yml index 6d57c9ca1..c754e9d7b 100644 --- a/config/locales/server.pt.yml +++ b/config/locales/server.pt.yml @@ -786,7 +786,7 @@ pt: notification_email: "Para: endereço de email usado ao enviar emails essenciais do sistema. O domínio especificado aqui deverá ter SPF, DKIM e registos PTR inversos configurados corretamente para a chegada do email." email_custom_headers: "A lista delimitada por barras verticais de cabeçalhos de e-mail personalizados" email_subject: "Formato de assunto personalizável para emails padrão. Veja https://meta.discourse.org/t/customize-subject-format-for-standard-emails/20801" - use_https: "Forçar o site a usar apenas HTTPS. ALERTA: NÃO active esta opção enquanto não verificar que o HTTPS está completamente configurado e funcional. Verificou a sua CDN, todos os logins por rede social, e quaisquer logos ou outras dependências externas para garantir que também são compatíveis com HTTPS?" + force_https: "Forçar o site a usar apenas HTTPS. ALERTA: NÃO active esta opção enquanto não verificar que o HTTPS está completamente configurado e funcional. Verificou a sua CDN, todos os logins por rede social, e quaisquer logos ou outras dependências externas para garantir que também são compatíveis com HTTPS?" summary_score_threshold: "Pontuação mínima necessária para que uma mensagem seja incluída em 'Resumir Este Tópico'" summary_posts_required: "Número mínimo de mensagens num tópico antes que 'Resumir Este Tópico' seja ativo." summary_likes_required: "Número mínimo de gostos num tópico antes que 'Resumir Este Tópico' seja ativo." diff --git a/config/site_settings.yml b/config/site_settings.yml index a76a0070f..f1fe8472e 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -760,7 +760,7 @@ trust: client: true security: - use_https: false + force_https: false enable_escaped_fragments: true allow_index_in_robots_txt: true enable_noscript_support: true diff --git a/db/migrate/20160627104436_use_https_name_change_in_site_settings.rb b/db/migrate/20160627104436_use_https_name_change_in_site_settings.rb new file mode 100644 index 000000000..b093e7345 --- /dev/null +++ b/db/migrate/20160627104436_use_https_name_change_in_site_settings.rb @@ -0,0 +1,5 @@ +class UseHttpsNameChangeInSiteSettings < ActiveRecord::Migration + def up + execute "UPDATE site_settings SET name = 'force_https' WHERE name = 'use_https'" + end +end diff --git a/lib/discourse.rb b/lib/discourse.rb index 762c1c0ea..5e9524fae 100644 --- a/lib/discourse.rb +++ b/lib/discourse.rb @@ -198,7 +198,7 @@ module Discourse default_port = 80 protocol = "http" - if SiteSetting.use_https? + if SiteSetting.force_https? protocol = "https" default_port = 443 end diff --git a/lib/onebox/engine/discourse_local_onebox.rb b/lib/onebox/engine/discourse_local_onebox.rb index f0ea5a32d..3e022e052 100644 --- a/lib/onebox/engine/discourse_local_onebox.rb +++ b/lib/onebox/engine/discourse_local_onebox.rb @@ -45,7 +45,7 @@ module Onebox case route[:controller] when 'uploads' - url.gsub!("http:", "https:") if SiteSetting.use_https + url.gsub!("http:", "https:") if SiteSetting.force_https if File.extname(uri.path) =~ /^.(mov|mp4|webm|ogv)$/ return "" elsif File.extname(uri.path) =~ /^.(mp3|ogg|wav)$/ diff --git a/lib/site_setting_extension.rb b/lib/site_setting_extension.rb index 4395a8c90..35ba85932 100644 --- a/lib/site_setting_extension.rb +++ b/lib/site_setting_extension.rb @@ -453,6 +453,28 @@ module SiteSettingExtension @validator_mapping[type_name] end + DEPRECATED_SETTINGS = [ + ['use_https', 'force_https', '1.7'] + ] + + def setup_deprecated_methods + DEPRECATED_SETTINGS.each do |old_setting, new_setting, version| + define_singleton_method old_setting do + logger.warn("`SiteSetting##{name}` has been deprecated and will be removed in the #{version} Release. Please use `SiteSetting##{new_setting}` instead") + self.public_send new_setting + end + + define_singleton_method "#{old_setting}?" do + logger.warn("`SiteSetting##{name}?` has been deprecated and will be removed in the #{version} Release. Please use `SiteSetting##{new_setting}?` instead") + self.public_send "#{new_setting}?" + end + + define_singleton_method "#{old_setting}=" do |val| + logger.warn("`SiteSetting##{name}=` has been deprecated and will be removed in the #{version} Release. Please use `SiteSetting##{new_setting}=` instead") + self.public_send "#{new_setting}=", val + end + end + end def setup_methods(name) clean_name = name.to_s.sub("?", "").to_sym @@ -488,4 +510,10 @@ module SiteSettingExtension url end + private + + def logger + Rails.logger + end + end diff --git a/spec/components/discourse_spec.rb b/spec/components/discourse_spec.rb index b8b108519..f864ac46a 100644 --- a/spec/components/discourse_spec.rb +++ b/spec/components/discourse_spec.rb @@ -18,7 +18,7 @@ describe Discourse do context 'base_url' do context 'when https is off' do before do - SiteSetting.expects(:use_https?).returns(false) + SiteSetting.expects(:force_https?).returns(false) end it 'has a non https base url' do @@ -28,7 +28,7 @@ describe Discourse do context 'when https is on' do before do - SiteSetting.expects(:use_https?).returns(true) + SiteSetting.expects(:force_https?).returns(true) end it 'has a non-ssl base url' do diff --git a/spec/components/email/styles_spec.rb b/spec/components/email/styles_spec.rb index 1f8bb953b..d9824f4cf 100644 --- a/spec/components/email/styles_spec.rb +++ b/spec/components/email/styles_spec.rb @@ -105,7 +105,7 @@ describe Email::Styles do context "without https" do before do - SiteSetting.stubs(:use_https).returns(false) + SiteSetting.stubs(:force_https).returns(false) end it "rewrites the href to have http" do @@ -126,7 +126,7 @@ describe Email::Styles do context "with https" do before do - SiteSetting.stubs(:use_https).returns(true) + SiteSetting.stubs(:force_https).returns(true) end it "rewrites the forum URL to have https" do diff --git a/spec/models/site_setting_spec.rb b/spec/models/site_setting_spec.rb index b4ac6a8ff..c2f358c2c 100644 --- a/spec/models/site_setting_spec.rb +++ b/spec/models/site_setting_spec.rb @@ -70,17 +70,41 @@ describe SiteSetting do end describe "scheme" do + before do + SiteSetting.force_https = true + end + it "returns http when ssl is disabled" do - SiteSetting.use_https = false + SiteSetting.force_https = false expect(SiteSetting.scheme).to eq("http") end it "returns https when using ssl" do - SiteSetting.expects(:use_https).returns(true) expect(SiteSetting.scheme).to eq("https") end end + context 'deprecated site settings' do + before do + SiteSetting.force_https = true + end + + after do + SiteSetting.force_https = false + end + + describe '#use_https' do + it 'should act as a proxy to the new methods' do + expect(SiteSetting.use_https).to eq(true) + expect(SiteSetting.use_https?).to eq(true) + + SiteSetting.use_https = false + + expect(SiteSetting.force_https).to eq(false) + expect(SiteSetting.force_https?).to eq(false) + end + end + end end