Allow providing 12-Factor-style Database URL in config
This commit is contained in:
parent
c9a316ad35
commit
79e99908de
|
@ -6,6 +6,8 @@ db:
|
||||||
host: localhost
|
host: localhost
|
||||||
port: 5432
|
port: 5432
|
||||||
dbname: invidious
|
dbname: invidious
|
||||||
|
# alternatively, the database URL can be provided directly - if both are set then the latter takes precedence
|
||||||
|
# database_url: postgres://kemal:kemal@localhost:5432/invidious
|
||||||
full_refresh: false
|
full_refresh: false
|
||||||
https_only: false
|
https_only: false
|
||||||
domain:
|
domain:
|
||||||
|
|
|
@ -33,16 +33,7 @@ require "./invidious/jobs/**"
|
||||||
CONFIG = Config.load
|
CONFIG = Config.load
|
||||||
HMAC_KEY = CONFIG.hmac_key || Random::Secure.hex(32)
|
HMAC_KEY = CONFIG.hmac_key || Random::Secure.hex(32)
|
||||||
|
|
||||||
PG_URL = URI.new(
|
PG_DB = DB.open CONFIG.database_url
|
||||||
scheme: "postgres",
|
|
||||||
user: CONFIG.db.user,
|
|
||||||
password: CONFIG.db.password,
|
|
||||||
host: CONFIG.db.host,
|
|
||||||
port: CONFIG.db.port,
|
|
||||||
path: CONFIG.db.dbname,
|
|
||||||
)
|
|
||||||
|
|
||||||
PG_DB = DB.open PG_URL
|
|
||||||
ARCHIVE_URL = URI.parse("https://archive.org")
|
ARCHIVE_URL = URI.parse("https://archive.org")
|
||||||
LOGIN_URL = URI.parse("https://accounts.google.com")
|
LOGIN_URL = URI.parse("https://accounts.google.com")
|
||||||
PUBSUB_URL = URI.parse("https://pubsubhubbub.appspot.com")
|
PUBSUB_URL = URI.parse("https://pubsubhubbub.appspot.com")
|
||||||
|
@ -192,7 +183,7 @@ if CONFIG.captcha_key
|
||||||
end
|
end
|
||||||
|
|
||||||
connection_channel = Channel({Bool, Channel(PQ::Notification)}).new(32)
|
connection_channel = Channel({Bool, Channel(PQ::Notification)}).new(32)
|
||||||
Invidious::Jobs.register Invidious::Jobs::NotificationJob.new(connection_channel, PG_URL)
|
Invidious::Jobs.register Invidious::Jobs::NotificationJob.new(connection_channel, CONFIG.database_url)
|
||||||
|
|
||||||
Invidious::Jobs.start_all
|
Invidious::Jobs.start_all
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,10 @@ class Config
|
||||||
property feed_threads : Int32 = 1 # Number of threads to use for updating feeds
|
property feed_threads : Int32 = 1 # Number of threads to use for updating feeds
|
||||||
property output : String = "STDOUT" # Log file path or STDOUT
|
property output : String = "STDOUT" # Log file path or STDOUT
|
||||||
property log_level : LogLevel = LogLevel::Info # Default log level, valid YAML values are ints and strings, see src/invidious/helpers/logger.cr
|
property log_level : LogLevel = LogLevel::Info # Default log level, valid YAML values are ints and strings, see src/invidious/helpers/logger.cr
|
||||||
property db : DBConfig # Database configuration
|
property db : DBConfig? = nil # Database configuration with separate parameters (username, hostname, etc)
|
||||||
|
|
||||||
|
@[YAML::Field(converter: Preferences::URIConverter)]
|
||||||
|
property database_url : URI = URI.parse("") # Database configuration using 12-Factor "Database URL" syntax
|
||||||
property decrypt_polling : Bool = true # Use polling to keep decryption function up to date
|
property decrypt_polling : Bool = true # 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 full_refresh : Bool = false # Used for crawling channels: threads should check all videos uploaded by a channel
|
||||||
property https_only : Bool? # Used to tell Invidious it is behind a proxy, so links to resources should be https://
|
property https_only : Bool? # Used to tell Invidious it is behind a proxy, so links to resources should be https://
|
||||||
|
@ -170,6 +173,23 @@ class Config
|
||||||
end
|
end
|
||||||
{% end %}
|
{% end %}
|
||||||
|
|
||||||
|
# Build database_url from db.* if it's not set directly
|
||||||
|
if config.database_url.to_s.empty?
|
||||||
|
if db = config.db
|
||||||
|
config.database_url = URI.new(
|
||||||
|
scheme: "postgres",
|
||||||
|
user: db.user,
|
||||||
|
password: db.password,
|
||||||
|
host: db.host,
|
||||||
|
port: db.port,
|
||||||
|
path: db.dbname,
|
||||||
|
)
|
||||||
|
else
|
||||||
|
puts "Config : Either database_url or db.* is required"
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return config
|
return config
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -173,6 +173,20 @@ struct Preferences
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
module URIConverter
|
||||||
|
def self.to_yaml(value : URI, yaml : YAML::Nodes::Builder)
|
||||||
|
yaml.scalar value.normalize!
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.from_yaml(ctx : YAML::ParseContext, node : YAML::Nodes::Node) : URI
|
||||||
|
if node.is_a?(YAML::Nodes::Scalar)
|
||||||
|
URI.parse node.value
|
||||||
|
else
|
||||||
|
node.raise "Expected scalar, not #{node.class}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
module ProcessString
|
module ProcessString
|
||||||
def self.to_json(value : String, json : JSON::Builder)
|
def self.to_json(value : String, json : JSON::Builder)
|
||||||
json.string value
|
json.string value
|
||||||
|
|
Loading…
Reference in New Issue