Merge 93065c4bfd97be4e39acb4914d42db7abe1754bc into d10f2a48021f1768f2d6ff3bd1b9f3de4e0b2d22

This commit is contained in:
Michael D 2026-08-16 16:51:03 +07:00 committed by GitHub
commit 5bb8810d90
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 23 additions and 19 deletions

View File

@ -7,7 +7,7 @@ module Invidious::Database::SessionIDs
# Insert # Insert
# ------------------- # -------------------
def insert(sid : String, email : String, handle_conflicts : Bool = false) def insert(sid : String, email : String, handle_conflicts : Bool = false, *, conn : DB::Database | DB::Connection | DB::Transaction = PG_DB)
request = <<-SQL request = <<-SQL
INSERT INTO session_ids INSERT INTO session_ids
VALUES ($1, $2, now()) VALUES ($1, $2, now())
@ -15,38 +15,38 @@ module Invidious::Database::SessionIDs
request += " ON CONFLICT (id) DO NOTHING" if handle_conflicts request += " ON CONFLICT (id) DO NOTHING" if handle_conflicts
PG_DB.exec(request, sid, email) conn.exec(request, sid, email)
end end
# ------------------- # -------------------
# Delete # Delete
# ------------------- # -------------------
def delete(*, sid : String) def delete(*, sid : String, conn : DB::Database | DB::Connection | DB::Transaction = PG_DB)
request = <<-SQL request = <<-SQL
DELETE FROM session_ids * DELETE FROM session_ids *
WHERE id = $1 WHERE id = $1
SQL SQL
PG_DB.exec(request, sid) conn.exec(request, sid)
end end
def delete(*, email : String) def delete(*, email : String, conn : DB::Database | DB::Connection | DB::Transaction = PG_DB)
request = <<-SQL request = <<-SQL
DELETE FROM session_ids * DELETE FROM session_ids *
WHERE email = $1 WHERE email = $1
SQL SQL
PG_DB.exec(request, email) conn.exec(request, email)
end end
def delete(*, sid : String, email : String) def delete(*, sid : String, email : String, conn : DB::Database | DB::Connection | DB::Transaction = PG_DB)
request = <<-SQL request = <<-SQL
DELETE FROM session_ids * DELETE FROM session_ids *
WHERE id = $1 AND email = $2 WHERE id = $1 AND email = $2
SQL SQL
PG_DB.exec(request, sid, email) conn.exec(request, sid, email)
end end
# ------------------- # -------------------

View File

@ -7,7 +7,7 @@ module Invidious::Database::Users
# Insert / delete # Insert / delete
# ------------------- # -------------------
def insert(user : User, update_on_conflict : Bool = false) def insert(user : User, update_on_conflict : Bool = false, *, conn : DB::Database | DB::Connection | DB::Transaction = PG_DB)
user_array = user.to_a user_array = user.to_a
user_array[4] = user_array[4].to_json # User preferences user_array[4] = user_array[4].to_json # User preferences
@ -23,16 +23,16 @@ module Invidious::Database::Users
SQL SQL
end end
PG_DB.exec(request, args: user_array) conn.exec(request, args: user_array)
end end
def delete(user : User) def delete(user : User, *, conn : DB::Database | DB::Connection | DB::Transaction = PG_DB)
request = <<-SQL request = <<-SQL
DELETE FROM users * DELETE FROM users *
WHERE email = $1 WHERE email = $1
SQL SQL
PG_DB.exec(request, user.email) conn.exec(request, user.email)
end end
# ------------------- # -------------------

View File

@ -124,9 +124,11 @@ module Invidious::Routes::Account
end end
view_name = "subscriptions_#{sha256(user.email)}" view_name = "subscriptions_#{sha256(user.email)}"
Invidious::Database::Users.delete(user) PG_DB.transaction do |tx|
Invidious::Database::SessionIDs.delete(email: user.email) Invidious::Database::Users.delete(user, conn: tx.connection)
PG_DB.exec("DROP MATERIALIZED VIEW #{view_name}") Invidious::Database::SessionIDs.delete(email: user.email, conn: tx.connection)
tx.connection.exec("DROP MATERIALIZED VIEW #{view_name}")
end
env.request.cookies.each do |cookie| env.request.cookies.each do |cookie|
cookie.expires = Time.utc(1990, 1, 1) cookie.expires = Time.utc(1990, 1, 1)

View File

@ -122,11 +122,13 @@ module Invidious::Routes::Login
end end
end end
Invidious::Database::Users.insert(user) PG_DB.transaction do |tx|
Invidious::Database::SessionIDs.insert(sid, email) Invidious::Database::Users.insert(user, conn: tx.connection)
Invidious::Database::SessionIDs.insert(sid, email, conn: tx.connection)
view_name = "subscriptions_#{sha256(user.email)}" view_name = "subscriptions_#{sha256(user.email)}"
PG_DB.exec("CREATE MATERIALIZED VIEW #{view_name} AS #{MATERIALIZED_VIEW_SQL.call(user.email)}") tx.connection.exec("CREATE MATERIALIZED VIEW #{view_name} AS #{MATERIALIZED_VIEW_SQL.call(user.email)}")
end
if alt = CONFIG.alternative_domains.index(host) if alt = CONFIG.alternative_domains.index(host)
env.response.cookies["SID"] = Invidious::User::Cookies.sid(CONFIG.alternative_domains[alt], sid) env.response.cookies["SID"] = Invidious::User::Cookies.sid(CONFIG.alternative_domains[alt], sid)