summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2022-02-04 06:43:43 +0100
committerSamantaz Fox <coding@samantaz.fr>2022-02-07 17:39:15 +0100
commit71a8867a4a719023230802f2927617d676bfa0b4 (patch)
tree53555c7ab44ab9955ed0fb150f217625d17a288b
parent2bbd424fce4ad1d19643b370250c9f8cee8f1e6f (diff)
downloadinvidious-71a8867a4a719023230802f2927617d676bfa0b4.tar.gz
invidious-71a8867a4a719023230802f2927617d676bfa0b4.tar.bz2
invidious-71a8867a4a719023230802f2927617d676bfa0b4.zip
Move user cookies to their own module
-rw-r--r--src/invidious/routes/login.cr40
-rw-r--r--src/invidious/routes/preferences.cr30
-rw-r--r--src/invidious/user/cookies.cr37
3 files changed, 42 insertions, 65 deletions
diff --git a/src/invidious/routes/login.cr b/src/invidious/routes/login.cr
index 42ac0b1d..8767ec22 100644
--- a/src/invidious/routes/login.cr
+++ b/src/invidious/routes/login.cr
@@ -282,18 +282,8 @@ module Invidious::Routes::Login
host = URI.parse(env.request.headers["Host"]).host
- if Kemal.config.ssl || CONFIG.https_only
- secure = true
- else
- secure = false
- end
-
cookies.each do |cookie|
- if Kemal.config.ssl || CONFIG.https_only
- cookie.secure = secure
- else
- cookie.secure = secure
- end
+ cookie.secure = Invidious::User::Cookies::SECURE
if cookie.extension
cookie.extension = cookie.extension.not_nil!.gsub(".youtube.com", host)
@@ -338,19 +328,7 @@ module Invidious::Routes::Login
sid = Base64.urlsafe_encode(Random::Secure.random_bytes(32))
Invidious::Database::SessionIDs.insert(sid, email)
- if Kemal.config.ssl || CONFIG.https_only
- secure = true
- else
- secure = false
- end
-
- if CONFIG.domain
- env.response.cookies["SID"] = HTTP::Cookie.new(name: "SID", domain: "#{CONFIG.domain}", value: sid, expires: Time.utc + 2.years,
- secure: secure, http_only: true)
- else
- env.response.cookies["SID"] = HTTP::Cookie.new(name: "SID", value: sid, expires: Time.utc + 2.years,
- secure: secure, http_only: true)
- end
+ env.response.cookies["SID"] = Invidious::User::Cookies.sid(CONFIG.domain, sid)
else
return error_template(401, "Wrong username or password")
end
@@ -455,19 +433,7 @@ module Invidious::Routes::Login
view_name = "subscriptions_#{sha256(user.email)}"
PG_DB.exec("CREATE MATERIALIZED VIEW #{view_name} AS #{MATERIALIZED_VIEW_SQL.call(user.email)}")
- if Kemal.config.ssl || CONFIG.https_only
- secure = true
- else
- secure = false
- end
-
- if CONFIG.domain
- env.response.cookies["SID"] = HTTP::Cookie.new(name: "SID", domain: "#{CONFIG.domain}", value: sid, expires: Time.utc + 2.years,
- secure: secure, http_only: true)
- else
- env.response.cookies["SID"] = HTTP::Cookie.new(name: "SID", value: sid, expires: Time.utc + 2.years,
- secure: secure, http_only: true)
- end
+ env.response.cookies["SID"] = Invidious::User::Cookies.sid(CONFIG.domain, sid)
if env.request.cookies["PREFS"]?
user.preferences = env.get("preferences").as(Preferences)
diff --git a/src/invidious/routes/preferences.cr b/src/invidious/routes/preferences.cr
index b574c1c1..294932eb 100644
--- a/src/invidious/routes/preferences.cr
+++ b/src/invidious/routes/preferences.cr
@@ -214,19 +214,7 @@ module Invidious::Routes::PreferencesRoute
File.write("config/config.yml", CONFIG.to_yaml)
end
else
- if Kemal.config.ssl || CONFIG.https_only
- secure = true
- else
- secure = false
- end
-
- if CONFIG.domain
- env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", domain: "#{CONFIG.domain}", value: URI.encode_www_form(preferences.to_json), expires: Time.utc + 2.years,
- secure: secure, http_only: true)
- else
- env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", value: URI.encode_www_form(preferences.to_json), expires: Time.utc + 2.years,
- secure: secure, http_only: true)
- end
+ env.response.cookies["PREFS"] = Invidious::User::Cookies.prefs(CONFIG.domain, preferences)
end
env.redirect referer
@@ -261,21 +249,7 @@ module Invidious::Routes::PreferencesRoute
preferences.dark_mode = "dark"
end
- preferences = preferences.to_json
-
- if Kemal.config.ssl || CONFIG.https_only
- secure = true
- else
- secure = false
- end
-
- if CONFIG.domain
- env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", domain: "#{CONFIG.domain}", value: URI.encode_www_form(preferences), expires: Time.utc + 2.years,
- secure: secure, http_only: true)
- else
- env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", value: URI.encode_www_form(preferences), expires: Time.utc + 2.years,
- secure: secure, http_only: true)
- end
+ env.response.cookies["PREFS"] = Invidious::User::Cookies.prefs(CONFIG.domain, preferences)
end
if redirect
diff --git a/src/invidious/user/cookies.cr b/src/invidious/user/cookies.cr
new file mode 100644
index 00000000..99df1b07
--- /dev/null
+++ b/src/invidious/user/cookies.cr
@@ -0,0 +1,37 @@
+require "http/cookie"
+
+struct Invidious::User
+ module Cookies
+ extend self
+
+ # Note: we use ternary operator because the two variables
+ # used in here are not booleans.
+ SECURE = (Kemal.config.ssl || CONFIG.https_only) ? true : false
+
+ # Session ID (SID) cookie
+ # Parameter "domain" comes from the global config
+ def sid(domain : String?, sid) : HTTP::Cookie
+ return HTTP::Cookie.new(
+ name: "SID",
+ domain: domain,
+ value: sid,
+ expires: Time.utc + 2.years,
+ secure: SECURE,
+ http_only: true
+ )
+ end
+
+ # Preferences (PREFS) cookie
+ # Parameter "domain" comes from the global config
+ def prefs(domain : String?, preferences : Preferences) : HTTP::Cookie
+ return HTTP::Cookie.new(
+ name: "PREFS",
+ domain: domain,
+ value: URI.encode_www_form(preferences.to_json),
+ expires: Time.utc + 2.years,
+ secure: SECURE,
+ http_only: true
+ )
+ end
+ end
+end