summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/invidious.cr17
-rw-r--r--src/invidious/routes/login.cr7
2 files changed, 21 insertions, 3 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index c940dadf..4d739340 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -17,6 +17,7 @@
require "digest/md5"
require "file_utils"
require "kemal"
+require "athena-negotiation"
require "openssl/hmac"
require "option_parser"
require "pg"
@@ -166,10 +167,20 @@ def popular_videos
end
before_all do |env|
- preferences = begin
- Preferences.from_json(URI.decode_www_form(env.request.cookies["PREFS"]?.try &.value || "{}"))
+ preferences = Preferences.from_json("{}")
+
+ begin
+ if prefs_cookie = env.request.cookies["PREFS"]?
+ preferences = Preferences.from_json(URI.decode_www_form(prefs_cookie.value))
+ else
+ if language_header = env.request.headers["Accept-Language"]?
+ if language = ANG.language_negotiator.best(language_header, LOCALES.keys)
+ preferences.locale = language.header
+ end
+ end
+ end
rescue
- Preferences.from_json("{}")
+ preferences = Preferences.from_json("{}")
end
env.set "preferences", preferences
diff --git a/src/invidious/routes/login.cr b/src/invidious/routes/login.cr
index 21d3fafd..f052d3f4 100644
--- a/src/invidious/routes/login.cr
+++ b/src/invidious/routes/login.cr
@@ -434,6 +434,13 @@ module Invidious::Routes::Login
sid = Base64.urlsafe_encode(Random::Secure.random_bytes(32))
user, sid = create_user(sid, email, password)
+
+ if language_header = env.request.headers["Accept-Language"]?
+ if language = ANG.language_negotiator.best(language_header, LOCALES.keys)
+ user.preferences.locale = language.header
+ end
+ end
+
user_array = user.to_a
user_array[4] = user_array[4].to_json # User preferences