require "base64" require "zlib" require "json" def set_session(request, response, key, val, uid = nil) session = request.cookies["session"] session = session.nil? ? "{}" : Zlib::Inflate.inflate(Base64.decode64(session)) session = JSON.parse(session) session[key] = val compressed = Zlib::Deflate.deflate(JSON.generate(session)) encoded = Base64.encode64(compressed) response.set_cookie("session", value: encoded, path: "/", expires: Time.now + 360 * 24 * 60 * 60) 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") end def get_session(request, response, key, uid = nil) session = request.cookies["session"] session = session.nil? ? "{}" : Zlib::Inflate.inflate(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] rescue JSON::ParserError, Zlib::Error response.delete_cookie("session") "" end def get_session_all(request, response) session = request.cookies["session"] session = session.nil? ? "{}" : Zlib::Inflate.inflate(Base64.decode64(session)) JSON.parse(session) rescue JSON::ParserError, Zlib::Error response.delete_cookie("session") "" end def rm_session(request, response, key) session = request.cookies["session"] session = session.nil? ? "{}" : Zlib::Inflate.inflate(Base64.decode64(session)) session = JSON.parse(session) session.delete(key) compressed = Zlib::Deflate.deflate(JSON.generate(session)) encoded = Base64.encode64(compressed) response.set_cookie("session", value: encoded, path: "/", expires: Time.now + 360 * 24 * 60 * 60) rescue JSON::ParserError, Zlib::Error response.delete_cookie("session") end