diff --git a/app/assets/javascripts/admin/addon/components/site-settings/integer.hbs b/app/assets/javascripts/admin/addon/components/site-settings/integer.hbs new file mode 100644 index 00000000000..a3a297a4976 --- /dev/null +++ b/app/assets/javascripts/admin/addon/components/site-settings/integer.hbs @@ -0,0 +1,4 @@ + + + +
{{html-safe this.setting.description}}
\ No newline at end of file diff --git a/app/assets/javascripts/admin/addon/components/site-settings/integer.js b/app/assets/javascripts/admin/addon/components/site-settings/integer.js new file mode 100644 index 00000000000..6df18068c19 --- /dev/null +++ b/app/assets/javascripts/admin/addon/components/site-settings/integer.js @@ -0,0 +1,3 @@ +import Component from "@ember/component"; + +export default class Integer extends Component {} diff --git a/app/assets/javascripts/admin/addon/mixins/setting-component.js b/app/assets/javascripts/admin/addon/mixins/setting-component.js index 455991badf0..6ea8aeb9679 100644 --- a/app/assets/javascripts/admin/addon/mixins/setting-component.js +++ b/app/assets/javascripts/admin/addon/mixins/setting-component.js @@ -15,6 +15,7 @@ import SiteSettingDefaultCategoriesModal from "../components/modal/site-setting- const CUSTOM_TYPES = [ "bool", + "integer", "enum", "list", "url_list", diff --git a/app/assets/stylesheets/common/admin/settings.scss b/app/assets/stylesheets/common/admin/settings.scss index 59e68a27ede..99a27fb033e 100644 --- a/app/assets/stylesheets/common/admin/settings.scss +++ b/app/assets/stylesheets/common/admin/settings.scss @@ -58,6 +58,7 @@ float: left; } .input-setting-string, + .input-setting-integer, .input-setting-textarea { width: 100%; @media (max-width: $mobile-breakpoint) { diff --git a/app/controllers/admin/site_settings_controller.rb b/app/controllers/admin/site_settings_controller.rb index 55eaf550d8b..8ff483e388b 100644 --- a/app/controllers/admin/site_settings_controller.rb +++ b/app/controllers/admin/site_settings_controller.rb @@ -31,7 +31,10 @@ class Admin::SiteSettingsController < Admin::AdminController raise_access_hidden_setting(id) - if SiteSetting.type_supervisor.get_type(id) == :uploaded_image_list + case SiteSetting.type_supervisor.get_type(id) + when :integer + value = value.gsub(/\D/, "") + when :uploaded_image_list value = Upload.get_from_urls(value.split("|")).to_a end diff --git a/spec/requests/admin/site_settings_controller_spec.rb b/spec/requests/admin/site_settings_controller_spec.rb index e0f0a77ea7a..57fac97500e 100644 --- a/spec/requests/admin/site_settings_controller_spec.rb +++ b/spec/requests/admin/site_settings_controller_spec.rb @@ -269,6 +269,13 @@ RSpec.describe Admin::SiteSettingsController do expect(SiteSetting.title).to eq("") end + it "sanitizes integer values" do + put "/admin/site_settings/suggested_topics.json", params: { suggested_topics: "1,000" } + + expect(response.status).to eq(200) + expect(SiteSetting.suggested_topics).to eq(1000) + end + context "with default user options" do let!(:user1) { Fabricate(:user) } let!(:user2) { Fabricate(:user) }