|  |  | @@ -57,20 +57,35 @@ end | 
			
		
	
		
		
			
				
					
					|  |  |  | class Config |  |  |  | class Config | 
			
		
	
		
		
			
				
					
					|  |  |  |   include YAML::Serializable |  |  |  |   include YAML::Serializable | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   property channel_threads : Int32 = 1           # Number of threads to use for crawling videos from channels (for updating subscriptions) |  |  |  |   # Number of threads to use for crawling videos from channels (for updating subscriptions) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property feed_threads : Int32 = 1              # Number of threads to use for updating feeds |  |  |  |   property channel_threads : Int32 = 1 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property output : String = "STDOUT"            # Log file path or STDOUT |  |  |  |   # Time interval between two executions of the job that crawls channel videos (subscriptions update). | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property log_level : LogLevel = LogLevel::Info # Default log level, valid YAML values are ints and strings, see src/invidious/helpers/logger.cr |  |  |  |   @[YAML::Field(converter: Preferences::TimeSpanConverter)] | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property db : DBConfig? = nil                  # Database configuration with separate parameters (username, hostname, etc) |  |  |  |   property channel_refresh_interval : Time::Span = 30.minutes | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Number of threads to use for updating feeds | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property feed_threads : Int32 = 1 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Log file path or STDOUT | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property output : String = "STDOUT" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Default log level, valid YAML values are ints and strings, see src/invidious/helpers/logger.cr | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property log_level : LogLevel = LogLevel::Info | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Database configuration with separate parameters (username, hostname, etc) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property db : DBConfig? = nil | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Database configuration using 12-Factor "Database URL" syntax | 
			
		
	
		
		
			
				
					
					|  |  |  |   @[YAML::Field(converter: Preferences::URIConverter)] |  |  |  |   @[YAML::Field(converter: Preferences::URIConverter)] | 
			
		
	
		
		
			
				
					
					|  |  |  |   property database_url : URI = URI.parse("")      # Database configuration using 12-Factor "Database URL" syntax |  |  |  |   property database_url : URI = URI.parse("") | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property decrypt_polling : Bool = true           # Use polling to keep decryption function up to date |  |  |  |   # Use polling to keep decryption function up to date | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property full_refresh : Bool = false             # Used for crawling channels: threads should check all videos uploaded by a channel |  |  |  |   property decrypt_polling : Bool = true | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property https_only : Bool?                      # Used to tell Invidious it is behind a proxy, so links to resources should be https:// |  |  |  |   # Used for crawling channels: threads should check all videos uploaded by a channel | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property hmac_key : String?                      # HMAC signing key for CSRF tokens and verifying pubsub subscriptions |  |  |  |   property full_refresh : Bool = false | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property domain : String?                        # Domain to be used for links to resources on the site where an absolute URL is required |  |  |  |   # Used to tell Invidious it is behind a proxy, so links to resources should be https:// | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property use_pubsub_feeds : Bool | Int32 = false # Subscribe to channels using PubSubHubbub (requires domain, hmac_key) |  |  |  |   property https_only : Bool? | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # HMAC signing key for CSRF tokens and verifying pubsub subscriptions | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property hmac_key : String? | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Domain to be used for links to resources on the site where an absolute URL is required | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property domain : String? | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Subscribe to channels using PubSubHubbub (requires domain, hmac_key) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property use_pubsub_feeds : Bool | Int32 = false | 
			
		
	
		
		
			
				
					
					|  |  |  |   property popular_enabled : Bool = true |  |  |  |   property popular_enabled : Bool = true | 
			
		
	
		
		
			
				
					
					|  |  |  |   property captcha_enabled : Bool = true |  |  |  |   property captcha_enabled : Bool = true | 
			
		
	
		
		
			
				
					
					|  |  |  |   property login_enabled : Bool = true |  |  |  |   property login_enabled : Bool = true | 
			
		
	
	
		
		
			
				
					
					|  |  | @@ -79,28 +94,42 @@ class Config | 
			
		
	
		
		
			
				
					
					|  |  |  |   property admins : Array(String) = [] of String |  |  |  |   property admins : Array(String) = [] of String | 
			
		
	
		
		
			
				
					
					|  |  |  |   property external_port : Int32? = nil |  |  |  |   property external_port : Int32? = nil | 
			
		
	
		
		
			
				
					
					|  |  |  |   property default_user_preferences : ConfigPreferences = ConfigPreferences.from_yaml("") |  |  |  |   property default_user_preferences : ConfigPreferences = ConfigPreferences.from_yaml("") | 
			
		
	
		
		
			
				
					
					|  |  |  |   property dmca_content : Array(String) = [] of String    # For compliance with DMCA, disables download widget using list of video IDs |  |  |  |   # For compliance with DMCA, disables download widget using list of video IDs | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property check_tables : Bool = false                    # Check table integrity, automatically try to add any missing columns, create tables, etc. |  |  |  |   property dmca_content : Array(String) = [] of String | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property cache_annotations : Bool = false               # Cache annotations requested from IA, will not cache empty annotations or annotations that only contain cards |  |  |  |   # Check table integrity, automatically try to add any missing columns, create tables, etc. | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property banner : String? = nil                         # Optional banner to be displayed along top of page for announcements, etc. |  |  |  |   property check_tables : Bool = false | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property hsts : Bool? = true                            # Enables 'Strict-Transport-Security'. Ensure that `domain` and all subdomains are served securely |  |  |  |   # Cache annotations requested from IA, will not cache empty annotations or annotations that only contain cards | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property disable_proxy : Bool? | Array(String)? = false # Disable proxying server-wide: options: 'dash', 'livestreams', 'downloads', 'local' |  |  |  |   property cache_annotations : Bool = false | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Optional banner to be displayed along top of page for announcements, etc. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property banner : String? = nil | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Enables 'Strict-Transport-Security'. Ensure that `domain` and all subdomains are served securely | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property hsts : Bool? = true | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Disable proxying server-wide: options: 'dash', 'livestreams', 'downloads', 'local' | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property disable_proxy : Bool? | Array(String)? = false | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   # URL to the modified source code to be easily AGPL compliant |  |  |  |   # URL to the modified source code to be easily AGPL compliant | 
			
		
	
		
		
			
				
					
					|  |  |  |   # Will display in the footer, next to the main source code link |  |  |  |   # Will display in the footer, next to the main source code link | 
			
		
	
		
		
			
				
					
					|  |  |  |   property modified_source_code_url : String? = nil |  |  |  |   property modified_source_code_url : String? = nil | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Connect to YouTube over 'ipv6', 'ipv4'. Will sometimes resolve fix issues with rate-limiting (see https://github.com/ytdl-org/youtube-dl/issues/21729) | 
			
		
	
		
		
			
				
					
					|  |  |  |   @[YAML::Field(converter: Preferences::FamilyConverter)] |  |  |  |   @[YAML::Field(converter: Preferences::FamilyConverter)] | 
			
		
	
		
		
			
				
					
					|  |  |  |   property force_resolve : Socket::Family = Socket::Family::UNSPEC # Connect to YouTube over 'ipv6', 'ipv4'. Will sometimes resolve fix issues with rate-limiting (see https://github.com/ytdl-org/youtube-dl/issues/21729) |  |  |  |   property force_resolve : Socket::Family = Socket::Family::UNSPEC | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property port : Int32 = 3000                                     # Port to listen for connections (overridden by command line argument) |  |  |  |   # Port to listen for connections (overridden by command line argument) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property host_binding : String = "0.0.0.0"                       # Host to bind (overridden by command line argument) |  |  |  |   property port : Int32 = 3000 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property pool_size : Int32 = 100                                 # Pool size for HTTP requests to youtube.com and ytimg.com (each domain has a separate pool of `pool_size`) |  |  |  |   # Host to bind (overridden by command line argument) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property use_quic : Bool = false                                 # Use quic transport for youtube api |  |  |  |   property host_binding : String = "0.0.0.0" | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Pool size for HTTP requests to youtube.com and ytimg.com (each domain has a separate pool of `pool_size`) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property pool_size : Int32 = 100 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Use quic transport for youtube api | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property use_quic : Bool = false | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # Saved cookies in "name1=value1; name2=value2..." format | 
			
		
	
		
		
			
				
					
					|  |  |  |   @[YAML::Field(converter: Preferences::StringToCookies)] |  |  |  |   @[YAML::Field(converter: Preferences::StringToCookies)] | 
			
		
	
		
		
			
				
					
					|  |  |  |   property cookies : HTTP::Cookies = HTTP::Cookies.new               # Saved cookies in "name1=value1; name2=value2..." format |  |  |  |   property cookies : HTTP::Cookies = HTTP::Cookies.new | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property captcha_key : String? = nil                               # Key for Anti-Captcha |  |  |  |   # Key for Anti-Captcha | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   property captcha_api_url : String = "https://api.anti-captcha.com" # API URL for Anti-Captcha |  |  |  |   property captcha_key : String? = nil | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   # API URL for Anti-Captcha | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   property captcha_api_url : String = "https://api.anti-captcha.com" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   def disabled?(option) |  |  |  |   def disabled?(option) | 
			
		
	
		
		
			
				
					
					|  |  |  |     case disabled = CONFIG.disable_proxy |  |  |  |     case disabled = CONFIG.disable_proxy | 
			
		
	
	
		
		
			
				
					
					|  |  |   |