Add HTTP redirect

This commit is contained in:
Omar Roth 2018-03-09 13:22:04 -06:00
parent eb1d1e30d1
commit 2596410b97
3 changed files with 27 additions and 1 deletions

View file

@ -5,4 +5,5 @@ db:
password: kemal password: kemal
host: localhost host: localhost
port: 5432 port: 5432
dbname: invidious dbname: invidious
redirect: false

View file

@ -24,6 +24,7 @@ class Config
port: Int32, port: Int32,
dbname: String, dbname: String,
), ),
redirect: Bool
}) })
end end

View file

@ -25,6 +25,7 @@ CONFIG = Config.from_yaml(File.read("config/config.yml"))
pool_size = CONFIG.pool_size pool_size = CONFIG.pool_size
threads = CONFIG.threads threads = CONFIG.threads
redirect = CONFIG.redirect
Kemal.config.extra_options do |parser| Kemal.config.extra_options do |parser|
parser.banner = "Usage: invidious [arguments]" parser.banner = "Usage: invidious [arguments]"
@ -44,6 +45,16 @@ Kemal.config.extra_options do |parser|
exit exit
end end
end end
parser.on("-r REDIRECT", "--redirect=BOOL", "Whether insecure requests should be forced to HTTPS, requires -s (default #{redirect})") do |boolean|
if boolean == "true"
redirect = true
elsif boolean == "false"
redirect = false
else
puts "REDIRECT must be 'true' or 'false'"
exit
end
end
end end
Kemal::CLI.new Kemal::CLI.new
@ -327,6 +338,19 @@ error 500 do |env|
templated "error" templated "error"
end end
# Add redirect if SSL is enabled and redirect is enabled
if Kemal.config.ssl && redirect
spawn do
server = HTTP::Server.new("0.0.0.0", 80) do |context|
context.response.headers.add "Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload"
context.response.headers.add "Location", "https://#{context.request.headers["Host"]}"
context.response.status_code = 302
end
server.listen
end
end
static_headers do |response, filepath, filestat| static_headers do |response, filepath, filestat|
response.headers.add("Cache-Control", "max-age=86400") response.headers.add("Cache-Control", "max-age=86400")
end end