Use zlib for compression when saving session cookie
This commit is contained in:
4
Gemfile
4
Gemfile
@@ -7,3 +7,7 @@ gem "xxhash"
|
|||||||
gem "sequel"
|
gem "sequel"
|
||||||
|
|
||||||
gem "json"
|
gem "json"
|
||||||
|
|
||||||
|
gem "base64"
|
||||||
|
|
||||||
|
gem "zlib"
|
||||||
|
49
session.rb
49
session.rb
@@ -1,49 +1,62 @@
|
|||||||
require "base64"
|
require "base64"
|
||||||
|
require "zlib"
|
||||||
require "json"
|
require "json"
|
||||||
|
|
||||||
def set_session(request, response, key, val)
|
def set_session(request, response, key, val, uid = nil)
|
||||||
session = request.cookies["session"]
|
session = request.cookies["session"]
|
||||||
session = "e30=\n" if session.nil?
|
session = session.nil? ? "{}" : Zlib::Inflate.inflate(Base64.decode64(session))
|
||||||
session = JSON.parse(Base64.decode64(session))
|
session = JSON.parse(session)
|
||||||
session[key] = val
|
session[key] = val
|
||||||
session = Base64.encode64(JSON.generate(session))
|
compressed = Zlib::Deflate.deflate(JSON.generate(session))
|
||||||
|
encoded = Base64.encode64(compressed)
|
||||||
response.set_cookie("session",
|
response.set_cookie("session",
|
||||||
value: session,
|
value: encoded,
|
||||||
path: "/",
|
path: "/",
|
||||||
expires: Time.now + 360 * 24 * 60 * 60)
|
expires: Time.now + 360 * 24 * 60 * 60)
|
||||||
rescue JSON::ParserError
|
begin
|
||||||
|
DB["UPDATE SignedInUsers SET last_used_at = CURRENT_TIMESTAMP WHERE code = ?", uid].update if uid
|
||||||
|
rescue Sequel::Error => e
|
||||||
|
File.write("log/main.log", "DB Error: #{e.message} when updating last_used_at for #{uid}\n", mode: "a")
|
||||||
|
end
|
||||||
|
rescue JSON::ParserError, Zlib::Error
|
||||||
response.delete_cookie("session")
|
response.delete_cookie("session")
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_session(request, response, key)
|
def get_session(request, response, key, uid = nil)
|
||||||
session = request.cookies["session"]
|
session = request.cookies["session"]
|
||||||
session = "{}" if session.nil?
|
session = session.nil? ? "{}" : Zlib::Inflate.inflate(Base64.decode64(session))
|
||||||
session = JSON.parse(Base64.decode64(session))
|
session = JSON.parse(session)
|
||||||
|
begin
|
||||||
|
DB["UPDATE SignedInUsers SET last_used_at = CURRENT_TIMESTAMP WHERE code = ?", uid].update if uid
|
||||||
|
rescue Sequel::Error => e
|
||||||
|
File.write("log/main.log", "DB Error: #{e.message} when updating last_used_at for #{uid}\n", mode: "a")
|
||||||
|
end
|
||||||
session[key]
|
session[key]
|
||||||
rescue JSON::ParserError
|
rescue JSON::ParserError, Zlib::Error
|
||||||
response.delete_cookie("session")
|
response.delete_cookie("session")
|
||||||
""
|
""
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_session_all(request, response)
|
def get_session_all(request, response)
|
||||||
session = request.cookies["session"]
|
session = request.cookies["session"]
|
||||||
session = "{}" if session.nil?
|
session = session.nil? ? "{}" : Zlib::Inflate.inflate(Base64.decode64(session))
|
||||||
JSON.parse(Base64.decode64(session))
|
JSON.parse(session)
|
||||||
rescue JSON::ParserError
|
rescue JSON::ParserError, Zlib::Error
|
||||||
response.delete_cookie("session")
|
response.delete_cookie("session")
|
||||||
""
|
""
|
||||||
end
|
end
|
||||||
|
|
||||||
def rm_session(request, response, key)
|
def rm_session(request, response, key)
|
||||||
session = request.cookies["session"]
|
session = request.cookies["session"]
|
||||||
session = "{}" if session.nil?
|
session = session.nil? ? "{}" : Zlib::Inflate.inflate(Base64.decode64(session))
|
||||||
session = JSON.parse(Base64.decode64(session))
|
session = JSON.parse(session)
|
||||||
session.delete(key)
|
session.delete(key)
|
||||||
session = Base64.encode64(JSON.generate(session))
|
compressed = Zlib::Deflate.deflate(JSON.generate(session))
|
||||||
|
encoded = Base64.encode64(compressed)
|
||||||
response.set_cookie("session",
|
response.set_cookie("session",
|
||||||
value: session,
|
value: encoded,
|
||||||
path: "/",
|
path: "/",
|
||||||
expires: Time.now + 360 * 24 * 60 * 60)
|
expires: Time.now + 360 * 24 * 60 * 60)
|
||||||
rescue JSON::ParserError
|
rescue JSON::ParserError, Zlib::Error
|
||||||
response.delete_cookie("session")
|
response.delete_cookie("session")
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user