mirror of
https://gitea.invidious.io/iv-org/invidious-copy-2022-08-14.git
synced 2024-08-15 00:53:20 +00:00
Merge pull request #1584 from matthewmcgarvey/user-preferences
Extract out User Preferences endpoints
This commit is contained in:
commit
c7c732ebc0
2 changed files with 254 additions and 250 deletions
253
src/invidious.cr
253
src/invidious.cr
|
@ -318,259 +318,12 @@ Invidious::Routing.get "/search", Invidious::Routes::Search, :search
|
||||||
Invidious::Routing.get "/login", Invidious::Routes::Login, :login_page
|
Invidious::Routing.get "/login", Invidious::Routes::Login, :login_page
|
||||||
Invidious::Routing.post "/login", Invidious::Routes::Login, :login
|
Invidious::Routing.post "/login", Invidious::Routes::Login, :login
|
||||||
Invidious::Routing.post "/signout", Invidious::Routes::Login, :signout
|
Invidious::Routing.post "/signout", Invidious::Routes::Login, :signout
|
||||||
|
Invidious::Routing.get "/preferences", Invidious::Routes::UserPreferences, :show
|
||||||
|
Invidious::Routing.post "/preferences", Invidious::Routes::UserPreferences, :update
|
||||||
|
Invidious::Routing.get "/toggle_theme", Invidious::Routes::UserPreferences, :toggle_theme
|
||||||
|
|
||||||
# Users
|
# Users
|
||||||
|
|
||||||
get "/preferences" do |env|
|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
|
||||||
|
|
||||||
referer = get_referer(env)
|
|
||||||
|
|
||||||
preferences = env.get("preferences").as(Preferences)
|
|
||||||
|
|
||||||
templated "preferences"
|
|
||||||
end
|
|
||||||
|
|
||||||
post "/preferences" do |env|
|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
|
||||||
referer = get_referer(env)
|
|
||||||
|
|
||||||
video_loop = env.params.body["video_loop"]?.try &.as(String)
|
|
||||||
video_loop ||= "off"
|
|
||||||
video_loop = video_loop == "on"
|
|
||||||
|
|
||||||
annotations = env.params.body["annotations"]?.try &.as(String)
|
|
||||||
annotations ||= "off"
|
|
||||||
annotations = annotations == "on"
|
|
||||||
|
|
||||||
annotations_subscribed = env.params.body["annotations_subscribed"]?.try &.as(String)
|
|
||||||
annotations_subscribed ||= "off"
|
|
||||||
annotations_subscribed = annotations_subscribed == "on"
|
|
||||||
|
|
||||||
autoplay = env.params.body["autoplay"]?.try &.as(String)
|
|
||||||
autoplay ||= "off"
|
|
||||||
autoplay = autoplay == "on"
|
|
||||||
|
|
||||||
continue = env.params.body["continue"]?.try &.as(String)
|
|
||||||
continue ||= "off"
|
|
||||||
continue = continue == "on"
|
|
||||||
|
|
||||||
continue_autoplay = env.params.body["continue_autoplay"]?.try &.as(String)
|
|
||||||
continue_autoplay ||= "off"
|
|
||||||
continue_autoplay = continue_autoplay == "on"
|
|
||||||
|
|
||||||
listen = env.params.body["listen"]?.try &.as(String)
|
|
||||||
listen ||= "off"
|
|
||||||
listen = listen == "on"
|
|
||||||
|
|
||||||
local = env.params.body["local"]?.try &.as(String)
|
|
||||||
local ||= "off"
|
|
||||||
local = local == "on"
|
|
||||||
|
|
||||||
speed = env.params.body["speed"]?.try &.as(String).to_f32?
|
|
||||||
speed ||= CONFIG.default_user_preferences.speed
|
|
||||||
|
|
||||||
player_style = env.params.body["player_style"]?.try &.as(String)
|
|
||||||
player_style ||= CONFIG.default_user_preferences.player_style
|
|
||||||
|
|
||||||
quality = env.params.body["quality"]?.try &.as(String)
|
|
||||||
quality ||= CONFIG.default_user_preferences.quality
|
|
||||||
|
|
||||||
volume = env.params.body["volume"]?.try &.as(String).to_i?
|
|
||||||
volume ||= CONFIG.default_user_preferences.volume
|
|
||||||
|
|
||||||
comments = [] of String
|
|
||||||
2.times do |i|
|
|
||||||
comments << (env.params.body["comments[#{i}]"]?.try &.as(String) || CONFIG.default_user_preferences.comments[i])
|
|
||||||
end
|
|
||||||
|
|
||||||
captions = [] of String
|
|
||||||
3.times do |i|
|
|
||||||
captions << (env.params.body["captions[#{i}]"]?.try &.as(String) || CONFIG.default_user_preferences.captions[i])
|
|
||||||
end
|
|
||||||
|
|
||||||
related_videos = env.params.body["related_videos"]?.try &.as(String)
|
|
||||||
related_videos ||= "off"
|
|
||||||
related_videos = related_videos == "on"
|
|
||||||
|
|
||||||
default_home = env.params.body["default_home"]?.try &.as(String) || CONFIG.default_user_preferences.default_home
|
|
||||||
|
|
||||||
feed_menu = [] of String
|
|
||||||
5.times do |index|
|
|
||||||
option = env.params.body["feed_menu[#{index}]"]?.try &.as(String) || ""
|
|
||||||
if !option.empty?
|
|
||||||
feed_menu << option
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
locale = env.params.body["locale"]?.try &.as(String)
|
|
||||||
locale ||= CONFIG.default_user_preferences.locale
|
|
||||||
|
|
||||||
dark_mode = env.params.body["dark_mode"]?.try &.as(String)
|
|
||||||
dark_mode ||= CONFIG.default_user_preferences.dark_mode
|
|
||||||
|
|
||||||
thin_mode = env.params.body["thin_mode"]?.try &.as(String)
|
|
||||||
thin_mode ||= "off"
|
|
||||||
thin_mode = thin_mode == "on"
|
|
||||||
|
|
||||||
max_results = env.params.body["max_results"]?.try &.as(String).to_i?
|
|
||||||
max_results ||= CONFIG.default_user_preferences.max_results
|
|
||||||
|
|
||||||
sort = env.params.body["sort"]?.try &.as(String)
|
|
||||||
sort ||= CONFIG.default_user_preferences.sort
|
|
||||||
|
|
||||||
latest_only = env.params.body["latest_only"]?.try &.as(String)
|
|
||||||
latest_only ||= "off"
|
|
||||||
latest_only = latest_only == "on"
|
|
||||||
|
|
||||||
unseen_only = env.params.body["unseen_only"]?.try &.as(String)
|
|
||||||
unseen_only ||= "off"
|
|
||||||
unseen_only = unseen_only == "on"
|
|
||||||
|
|
||||||
notifications_only = env.params.body["notifications_only"]?.try &.as(String)
|
|
||||||
notifications_only ||= "off"
|
|
||||||
notifications_only = notifications_only == "on"
|
|
||||||
|
|
||||||
# Convert to JSON and back again to take advantage of converters used for compatability
|
|
||||||
preferences = Preferences.from_json({
|
|
||||||
annotations: annotations,
|
|
||||||
annotations_subscribed: annotations_subscribed,
|
|
||||||
autoplay: autoplay,
|
|
||||||
captions: captions,
|
|
||||||
comments: comments,
|
|
||||||
continue: continue,
|
|
||||||
continue_autoplay: continue_autoplay,
|
|
||||||
dark_mode: dark_mode,
|
|
||||||
latest_only: latest_only,
|
|
||||||
listen: listen,
|
|
||||||
local: local,
|
|
||||||
locale: locale,
|
|
||||||
max_results: max_results,
|
|
||||||
notifications_only: notifications_only,
|
|
||||||
player_style: player_style,
|
|
||||||
quality: quality,
|
|
||||||
default_home: default_home,
|
|
||||||
feed_menu: feed_menu,
|
|
||||||
related_videos: related_videos,
|
|
||||||
sort: sort,
|
|
||||||
speed: speed,
|
|
||||||
thin_mode: thin_mode,
|
|
||||||
unseen_only: unseen_only,
|
|
||||||
video_loop: video_loop,
|
|
||||||
volume: volume,
|
|
||||||
}.to_json).to_json
|
|
||||||
|
|
||||||
if user = env.get? "user"
|
|
||||||
user = user.as(User)
|
|
||||||
PG_DB.exec("UPDATE users SET preferences = $1 WHERE email = $2", preferences, user.email)
|
|
||||||
|
|
||||||
if config.admins.includes? user.email
|
|
||||||
config.default_user_preferences.default_home = env.params.body["admin_default_home"]?.try &.as(String) || config.default_user_preferences.default_home
|
|
||||||
|
|
||||||
admin_feed_menu = [] of String
|
|
||||||
5.times do |index|
|
|
||||||
option = env.params.body["admin_feed_menu[#{index}]"]?.try &.as(String) || ""
|
|
||||||
if !option.empty?
|
|
||||||
admin_feed_menu << option
|
|
||||||
end
|
|
||||||
end
|
|
||||||
config.default_user_preferences.feed_menu = admin_feed_menu
|
|
||||||
|
|
||||||
captcha_enabled = env.params.body["captcha_enabled"]?.try &.as(String)
|
|
||||||
captcha_enabled ||= "off"
|
|
||||||
config.captcha_enabled = captcha_enabled == "on"
|
|
||||||
|
|
||||||
login_enabled = env.params.body["login_enabled"]?.try &.as(String)
|
|
||||||
login_enabled ||= "off"
|
|
||||||
config.login_enabled = login_enabled == "on"
|
|
||||||
|
|
||||||
registration_enabled = env.params.body["registration_enabled"]?.try &.as(String)
|
|
||||||
registration_enabled ||= "off"
|
|
||||||
config.registration_enabled = registration_enabled == "on"
|
|
||||||
|
|
||||||
statistics_enabled = env.params.body["statistics_enabled"]?.try &.as(String)
|
|
||||||
statistics_enabled ||= "off"
|
|
||||||
config.statistics_enabled = statistics_enabled == "on"
|
|
||||||
|
|
||||||
CONFIG.default_user_preferences = config.default_user_preferences
|
|
||||||
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: preferences, expires: Time.utc + 2.years,
|
|
||||||
secure: secure, http_only: true)
|
|
||||||
else
|
|
||||||
env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", value: preferences, expires: Time.utc + 2.years,
|
|
||||||
secure: secure, http_only: true)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
env.redirect referer
|
|
||||||
end
|
|
||||||
|
|
||||||
get "/toggle_theme" do |env|
|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
|
||||||
referer = get_referer(env, unroll: false)
|
|
||||||
|
|
||||||
redirect = env.params.query["redirect"]?
|
|
||||||
redirect ||= "true"
|
|
||||||
redirect = redirect == "true"
|
|
||||||
|
|
||||||
if user = env.get? "user"
|
|
||||||
user = user.as(User)
|
|
||||||
preferences = user.preferences
|
|
||||||
|
|
||||||
case preferences.dark_mode
|
|
||||||
when "dark"
|
|
||||||
preferences.dark_mode = "light"
|
|
||||||
else
|
|
||||||
preferences.dark_mode = "dark"
|
|
||||||
end
|
|
||||||
|
|
||||||
preferences = preferences.to_json
|
|
||||||
|
|
||||||
PG_DB.exec("UPDATE users SET preferences = $1 WHERE email = $2", preferences, user.email)
|
|
||||||
else
|
|
||||||
preferences = env.get("preferences").as(Preferences)
|
|
||||||
|
|
||||||
case preferences.dark_mode
|
|
||||||
when "dark"
|
|
||||||
preferences.dark_mode = "light"
|
|
||||||
else
|
|
||||||
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: preferences, expires: Time.utc + 2.years,
|
|
||||||
secure: secure, http_only: true)
|
|
||||||
else
|
|
||||||
env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", value: preferences, expires: Time.utc + 2.years,
|
|
||||||
secure: secure, http_only: true)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if redirect
|
|
||||||
env.redirect referer
|
|
||||||
else
|
|
||||||
env.response.content_type = "application/json"
|
|
||||||
"{}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
post "/watch_ajax" do |env|
|
post "/watch_ajax" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
||||||
|
|
||||||
|
|
251
src/invidious/routes/user_preferences.cr
Normal file
251
src/invidious/routes/user_preferences.cr
Normal file
|
@ -0,0 +1,251 @@
|
||||||
|
class Invidious::Routes::UserPreferences < Invidious::Routes::BaseRoute
|
||||||
|
def show(env)
|
||||||
|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
||||||
|
|
||||||
|
referer = get_referer(env)
|
||||||
|
|
||||||
|
preferences = env.get("preferences").as(Preferences)
|
||||||
|
|
||||||
|
templated "preferences"
|
||||||
|
end
|
||||||
|
|
||||||
|
def update(env)
|
||||||
|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
||||||
|
referer = get_referer(env)
|
||||||
|
|
||||||
|
video_loop = env.params.body["video_loop"]?.try &.as(String)
|
||||||
|
video_loop ||= "off"
|
||||||
|
video_loop = video_loop == "on"
|
||||||
|
|
||||||
|
annotations = env.params.body["annotations"]?.try &.as(String)
|
||||||
|
annotations ||= "off"
|
||||||
|
annotations = annotations == "on"
|
||||||
|
|
||||||
|
annotations_subscribed = env.params.body["annotations_subscribed"]?.try &.as(String)
|
||||||
|
annotations_subscribed ||= "off"
|
||||||
|
annotations_subscribed = annotations_subscribed == "on"
|
||||||
|
|
||||||
|
autoplay = env.params.body["autoplay"]?.try &.as(String)
|
||||||
|
autoplay ||= "off"
|
||||||
|
autoplay = autoplay == "on"
|
||||||
|
|
||||||
|
continue = env.params.body["continue"]?.try &.as(String)
|
||||||
|
continue ||= "off"
|
||||||
|
continue = continue == "on"
|
||||||
|
|
||||||
|
continue_autoplay = env.params.body["continue_autoplay"]?.try &.as(String)
|
||||||
|
continue_autoplay ||= "off"
|
||||||
|
continue_autoplay = continue_autoplay == "on"
|
||||||
|
|
||||||
|
listen = env.params.body["listen"]?.try &.as(String)
|
||||||
|
listen ||= "off"
|
||||||
|
listen = listen == "on"
|
||||||
|
|
||||||
|
local = env.params.body["local"]?.try &.as(String)
|
||||||
|
local ||= "off"
|
||||||
|
local = local == "on"
|
||||||
|
|
||||||
|
speed = env.params.body["speed"]?.try &.as(String).to_f32?
|
||||||
|
speed ||= CONFIG.default_user_preferences.speed
|
||||||
|
|
||||||
|
player_style = env.params.body["player_style"]?.try &.as(String)
|
||||||
|
player_style ||= CONFIG.default_user_preferences.player_style
|
||||||
|
|
||||||
|
quality = env.params.body["quality"]?.try &.as(String)
|
||||||
|
quality ||= CONFIG.default_user_preferences.quality
|
||||||
|
|
||||||
|
volume = env.params.body["volume"]?.try &.as(String).to_i?
|
||||||
|
volume ||= CONFIG.default_user_preferences.volume
|
||||||
|
|
||||||
|
comments = [] of String
|
||||||
|
2.times do |i|
|
||||||
|
comments << (env.params.body["comments[#{i}]"]?.try &.as(String) || CONFIG.default_user_preferences.comments[i])
|
||||||
|
end
|
||||||
|
|
||||||
|
captions = [] of String
|
||||||
|
3.times do |i|
|
||||||
|
captions << (env.params.body["captions[#{i}]"]?.try &.as(String) || CONFIG.default_user_preferences.captions[i])
|
||||||
|
end
|
||||||
|
|
||||||
|
related_videos = env.params.body["related_videos"]?.try &.as(String)
|
||||||
|
related_videos ||= "off"
|
||||||
|
related_videos = related_videos == "on"
|
||||||
|
|
||||||
|
default_home = env.params.body["default_home"]?.try &.as(String) || CONFIG.default_user_preferences.default_home
|
||||||
|
|
||||||
|
feed_menu = [] of String
|
||||||
|
5.times do |index|
|
||||||
|
option = env.params.body["feed_menu[#{index}]"]?.try &.as(String) || ""
|
||||||
|
if !option.empty?
|
||||||
|
feed_menu << option
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
locale = env.params.body["locale"]?.try &.as(String)
|
||||||
|
locale ||= CONFIG.default_user_preferences.locale
|
||||||
|
|
||||||
|
dark_mode = env.params.body["dark_mode"]?.try &.as(String)
|
||||||
|
dark_mode ||= CONFIG.default_user_preferences.dark_mode
|
||||||
|
|
||||||
|
thin_mode = env.params.body["thin_mode"]?.try &.as(String)
|
||||||
|
thin_mode ||= "off"
|
||||||
|
thin_mode = thin_mode == "on"
|
||||||
|
|
||||||
|
max_results = env.params.body["max_results"]?.try &.as(String).to_i?
|
||||||
|
max_results ||= CONFIG.default_user_preferences.max_results
|
||||||
|
|
||||||
|
sort = env.params.body["sort"]?.try &.as(String)
|
||||||
|
sort ||= CONFIG.default_user_preferences.sort
|
||||||
|
|
||||||
|
latest_only = env.params.body["latest_only"]?.try &.as(String)
|
||||||
|
latest_only ||= "off"
|
||||||
|
latest_only = latest_only == "on"
|
||||||
|
|
||||||
|
unseen_only = env.params.body["unseen_only"]?.try &.as(String)
|
||||||
|
unseen_only ||= "off"
|
||||||
|
unseen_only = unseen_only == "on"
|
||||||
|
|
||||||
|
notifications_only = env.params.body["notifications_only"]?.try &.as(String)
|
||||||
|
notifications_only ||= "off"
|
||||||
|
notifications_only = notifications_only == "on"
|
||||||
|
|
||||||
|
# Convert to JSON and back again to take advantage of converters used for compatability
|
||||||
|
preferences = Preferences.from_json({
|
||||||
|
annotations: annotations,
|
||||||
|
annotations_subscribed: annotations_subscribed,
|
||||||
|
autoplay: autoplay,
|
||||||
|
captions: captions,
|
||||||
|
comments: comments,
|
||||||
|
continue: continue,
|
||||||
|
continue_autoplay: continue_autoplay,
|
||||||
|
dark_mode: dark_mode,
|
||||||
|
latest_only: latest_only,
|
||||||
|
listen: listen,
|
||||||
|
local: local,
|
||||||
|
locale: locale,
|
||||||
|
max_results: max_results,
|
||||||
|
notifications_only: notifications_only,
|
||||||
|
player_style: player_style,
|
||||||
|
quality: quality,
|
||||||
|
default_home: default_home,
|
||||||
|
feed_menu: feed_menu,
|
||||||
|
related_videos: related_videos,
|
||||||
|
sort: sort,
|
||||||
|
speed: speed,
|
||||||
|
thin_mode: thin_mode,
|
||||||
|
unseen_only: unseen_only,
|
||||||
|
video_loop: video_loop,
|
||||||
|
volume: volume,
|
||||||
|
}.to_json).to_json
|
||||||
|
|
||||||
|
if user = env.get? "user"
|
||||||
|
user = user.as(User)
|
||||||
|
PG_DB.exec("UPDATE users SET preferences = $1 WHERE email = $2", preferences, user.email)
|
||||||
|
|
||||||
|
if config.admins.includes? user.email
|
||||||
|
config.default_user_preferences.default_home = env.params.body["admin_default_home"]?.try &.as(String) || config.default_user_preferences.default_home
|
||||||
|
|
||||||
|
admin_feed_menu = [] of String
|
||||||
|
5.times do |index|
|
||||||
|
option = env.params.body["admin_feed_menu[#{index}]"]?.try &.as(String) || ""
|
||||||
|
if !option.empty?
|
||||||
|
admin_feed_menu << option
|
||||||
|
end
|
||||||
|
end
|
||||||
|
config.default_user_preferences.feed_menu = admin_feed_menu
|
||||||
|
|
||||||
|
captcha_enabled = env.params.body["captcha_enabled"]?.try &.as(String)
|
||||||
|
captcha_enabled ||= "off"
|
||||||
|
config.captcha_enabled = captcha_enabled == "on"
|
||||||
|
|
||||||
|
login_enabled = env.params.body["login_enabled"]?.try &.as(String)
|
||||||
|
login_enabled ||= "off"
|
||||||
|
config.login_enabled = login_enabled == "on"
|
||||||
|
|
||||||
|
registration_enabled = env.params.body["registration_enabled"]?.try &.as(String)
|
||||||
|
registration_enabled ||= "off"
|
||||||
|
config.registration_enabled = registration_enabled == "on"
|
||||||
|
|
||||||
|
statistics_enabled = env.params.body["statistics_enabled"]?.try &.as(String)
|
||||||
|
statistics_enabled ||= "off"
|
||||||
|
config.statistics_enabled = statistics_enabled == "on"
|
||||||
|
|
||||||
|
CONFIG.default_user_preferences = config.default_user_preferences
|
||||||
|
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: preferences, expires: Time.utc + 2.years,
|
||||||
|
secure: secure, http_only: true)
|
||||||
|
else
|
||||||
|
env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", value: preferences, expires: Time.utc + 2.years,
|
||||||
|
secure: secure, http_only: true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
env.redirect referer
|
||||||
|
end
|
||||||
|
|
||||||
|
def toggle_theme(env)
|
||||||
|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
||||||
|
referer = get_referer(env, unroll: false)
|
||||||
|
|
||||||
|
redirect = env.params.query["redirect"]?
|
||||||
|
redirect ||= "true"
|
||||||
|
redirect = redirect == "true"
|
||||||
|
|
||||||
|
if user = env.get? "user"
|
||||||
|
user = user.as(User)
|
||||||
|
preferences = user.preferences
|
||||||
|
|
||||||
|
case preferences.dark_mode
|
||||||
|
when "dark"
|
||||||
|
preferences.dark_mode = "light"
|
||||||
|
else
|
||||||
|
preferences.dark_mode = "dark"
|
||||||
|
end
|
||||||
|
|
||||||
|
preferences = preferences.to_json
|
||||||
|
|
||||||
|
PG_DB.exec("UPDATE users SET preferences = $1 WHERE email = $2", preferences, user.email)
|
||||||
|
else
|
||||||
|
preferences = env.get("preferences").as(Preferences)
|
||||||
|
|
||||||
|
case preferences.dark_mode
|
||||||
|
when "dark"
|
||||||
|
preferences.dark_mode = "light"
|
||||||
|
else
|
||||||
|
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: preferences, expires: Time.utc + 2.years,
|
||||||
|
secure: secure, http_only: true)
|
||||||
|
else
|
||||||
|
env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", value: preferences, expires: Time.utc + 2.years,
|
||||||
|
secure: secure, http_only: true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if redirect
|
||||||
|
env.redirect referer
|
||||||
|
else
|
||||||
|
env.response.content_type = "application/json"
|
||||||
|
"{}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue