summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOmar Roth <omarroth@hotmail.com>2018-04-15 22:56:58 -0500
committerOmar Roth <omarroth@hotmail.com>2018-04-15 22:56:58 -0500
commitbc068721abc19885d5317838f820b4fa73fe87f8 (patch)
treee53a9338ffdab483cf246044111e6b39a04f0f64
parentf08199e7cf70e6ed298c13ddf481845c4930a4f0 (diff)
downloadinvidious-bc068721abc19885d5317838f820b4fa73fe87f8.tar.gz
invidious-bc068721abc19885d5317838f820b4fa73fe87f8.tar.bz2
invidious-bc068721abc19885d5317838f820b4fa73fe87f8.zip
Add filtered handler for videoplayback
-rw-r--r--src/helpers.cr24
-rw-r--r--src/invidious.cr3
2 files changed, 26 insertions, 1 deletions
diff --git a/src/helpers.cr b/src/helpers.cr
index 110a0831..4f59d639 100644
--- a/src/helpers.cr
+++ b/src/helpers.cr
@@ -29,6 +29,30 @@ class Config
})
end
+class FilteredCompressHandler < Kemal::Handler
+ exclude ["/videoplayback"]
+
+ def call(env)
+ return call_next env if exclude_match? env
+
+ {% if flag?(:without_zlib) %}
+ call_next env
+ {% else %}
+ request_headers = env.request.headers
+
+ if request_headers.includes_word?("Accept-Encoding", "gzip")
+ env.response.headers["Content-Encoding"] = "gzip"
+ env.response.output = Gzip::Writer.new(env.response.output, sync_close: true)
+ elsif request_headers.includes_word?("Accept-Encoding", "deflate")
+ env.response.headers["Content-Encoding"] = "deflate"
+ env.response.output = Flate::Writer.new(env.response.output, sync_close: true)
+ end
+
+ call_next env
+ {% end %}
+ end
+end
+
class Video
module HTTPParamConverter
def self.from_rs(rs)
diff --git a/src/invidious.cr b/src/invidious.cr
index bd510ceb..fb405ffd 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -872,6 +872,7 @@ static_headers do |response, filepath, filestat|
end
public_folder "assets"
-gzip true
+
+add_handler FilteredCompressHandler.new
Kemal.run