Conflicts: - `app/controllers/home_controller.rb`: Upstream made it so `/web` is available to non-logged-in users and `/` redirects to `/web` instead of `/about`. Kept our version since glitch-soc's WebUI doesn't have what's needed yet and I think /about is still a much better landing page anyway. - `app/models/form/admin_settings.rb`: Upstream added new settings, and glitch-soc had an extra setting. Not really a conflict. Added upstream's new settings. - `app/serializers/initial_state_serializer.rb`: Upstream added a new `server` initial state object. Not really a conflict. Merged upstream's changes. - `app/views/admin/settings/edit.html.haml`: Upstream added new settings. Not really a conflict. Merged upstream's changes. - `app/workers/scheduler/feed_cleanup_scheduler.rb`: Upstream refactored that part and removed the file. Ported our relevant changes into `app/lib/vacuum/feeds_vacuum.rb` - `config/settings.yml`: Upstream added new settings. Not a real conflict. Added upstream's new settings.
		
			
				
	
	
		
			135 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class Form::AdminSettings
 | 
						|
  include ActiveModel::Model
 | 
						|
 | 
						|
  KEYS = %i(
 | 
						|
    site_contact_username
 | 
						|
    site_contact_email
 | 
						|
    site_title
 | 
						|
    site_short_description
 | 
						|
    site_description
 | 
						|
    site_extended_description
 | 
						|
    site_terms
 | 
						|
    registrations_mode
 | 
						|
    closed_registrations_message
 | 
						|
    open_deletion
 | 
						|
    timeline_preview
 | 
						|
    bootstrap_timeline_accounts
 | 
						|
    flavour
 | 
						|
    skin
 | 
						|
    activity_api_enabled
 | 
						|
    peers_api_enabled
 | 
						|
    show_known_fediverse_at_about_page
 | 
						|
    preview_sensitive_media
 | 
						|
    custom_css
 | 
						|
    profile_directory
 | 
						|
    hide_followers_count
 | 
						|
    flavour_and_skin
 | 
						|
    thumbnail
 | 
						|
    hero
 | 
						|
    mascot
 | 
						|
    show_reblogs_in_public_timelines
 | 
						|
    show_replies_in_public_timelines
 | 
						|
    trends
 | 
						|
    trendable_by_default
 | 
						|
    trending_status_cw
 | 
						|
    show_domain_blocks
 | 
						|
    show_domain_blocks_rationale
 | 
						|
    noindex
 | 
						|
    outgoing_spoilers
 | 
						|
    require_invite_text
 | 
						|
    captcha_enabled
 | 
						|
    media_cache_retention_period
 | 
						|
    content_cache_retention_period
 | 
						|
    backups_retention_period
 | 
						|
  ).freeze
 | 
						|
 | 
						|
  BOOLEAN_KEYS = %i(
 | 
						|
    open_deletion
 | 
						|
    timeline_preview
 | 
						|
    activity_api_enabled
 | 
						|
    peers_api_enabled
 | 
						|
    show_known_fediverse_at_about_page
 | 
						|
    preview_sensitive_media
 | 
						|
    profile_directory
 | 
						|
    hide_followers_count
 | 
						|
    show_reblogs_in_public_timelines
 | 
						|
    show_replies_in_public_timelines
 | 
						|
    trends
 | 
						|
    trendable_by_default
 | 
						|
    trending_status_cw
 | 
						|
    noindex
 | 
						|
    require_invite_text
 | 
						|
    captcha_enabled
 | 
						|
  ).freeze
 | 
						|
 | 
						|
  UPLOAD_KEYS = %i(
 | 
						|
    thumbnail
 | 
						|
    hero
 | 
						|
    mascot
 | 
						|
  ).freeze
 | 
						|
 | 
						|
  PSEUDO_KEYS = %i(
 | 
						|
    flavour_and_skin
 | 
						|
  ).freeze
 | 
						|
 | 
						|
  attr_accessor(*KEYS)
 | 
						|
 | 
						|
  validates :site_short_description, :site_description, html: { wrap_with: :p }
 | 
						|
  validates :site_extended_description, :site_terms, :closed_registrations_message, html: true
 | 
						|
  validates :registrations_mode, inclusion: { in: %w(open approved none) }
 | 
						|
  validates :site_contact_email, :site_contact_username, presence: true
 | 
						|
  validates :site_contact_username, existing_username: true
 | 
						|
  validates :bootstrap_timeline_accounts, existing_username: { multiple: true }
 | 
						|
  validates :show_domain_blocks, inclusion: { in: %w(disabled users all) }
 | 
						|
  validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) }
 | 
						|
  validates :media_cache_retention_period, :content_cache_retention_period, :backups_retention_period, numericality: { only_integer: true }, allow_blank: true
 | 
						|
 | 
						|
  def initialize(_attributes = {})
 | 
						|
    super
 | 
						|
    initialize_attributes
 | 
						|
  end
 | 
						|
 | 
						|
  def save
 | 
						|
    return false unless valid?
 | 
						|
 | 
						|
    KEYS.each do |key|
 | 
						|
      next if PSEUDO_KEYS.include?(key)
 | 
						|
      value = instance_variable_get("@#{key}")
 | 
						|
 | 
						|
      if UPLOAD_KEYS.include?(key) && !value.nil?
 | 
						|
        upload = SiteUpload.where(var: key).first_or_initialize(var: key)
 | 
						|
        upload.update(file: value)
 | 
						|
      else
 | 
						|
        setting = Setting.where(var: key).first_or_initialize(var: key)
 | 
						|
        setting.update(value: typecast_value(key, value))
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def flavour_and_skin
 | 
						|
    "#{Setting.flavour}/#{Setting.skin}"
 | 
						|
  end
 | 
						|
 | 
						|
  def flavour_and_skin=(value)
 | 
						|
    @flavour, @skin = value.split('/', 2)
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def initialize_attributes
 | 
						|
    KEYS.each do |key|
 | 
						|
      next if PSEUDO_KEYS.include?(key)
 | 
						|
      instance_variable_set("@#{key}", Setting.public_send(key)) if instance_variable_get("@#{key}").nil?
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def typecast_value(key, value)
 | 
						|
    if BOOLEAN_KEYS.include?(key)
 | 
						|
      value == '1'
 | 
						|
    else
 | 
						|
      value
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |