updates and cleanup.
This commit is contained in:
+43
-52
@@ -3,6 +3,36 @@ class Sessions
|
||||
def initialize(request, response)
|
||||
@request = request
|
||||
@response = response
|
||||
@session = load_session
|
||||
end
|
||||
|
||||
def save
|
||||
compressed = Zlib::Deflate.deflate(JSON.generate(@session))
|
||||
encoded = Base64.strict_encode64(compressed)
|
||||
@response.set_cookie(
|
||||
"session",
|
||||
value: encoded,
|
||||
path: "/",
|
||||
expires: Time.now + 360 * 24 * 60 * 60,
|
||||
httponly: true,
|
||||
secure: ENV["ENV"] == "prod",
|
||||
samesite: :strict
|
||||
)
|
||||
uid = @session["user"]
|
||||
if uid
|
||||
DB["UPDATE SignedInUsers SET last_used_at = CURRENT_TIMESTAMP WHERE code = ?", uid].update
|
||||
end
|
||||
rescue Sequel::Error => e
|
||||
Logman.log "DB Error: #{e.message} when updating last_used_at for #{uid}"
|
||||
end
|
||||
|
||||
def load_session
|
||||
cookie = @request.cookies["session"]
|
||||
return {} unless cookie
|
||||
JSON.parse(Zlib::Inflate.inflate(Base64.strict_decode64(cookie)))
|
||||
rescue JSON::ParserError, Zlib::Error, ArgumentError
|
||||
@response.delete_cookie("session")
|
||||
{}
|
||||
end
|
||||
|
||||
def signed_in?
|
||||
@@ -35,38 +65,21 @@ class Sessions
|
||||
return [200, "Remember to verify your email!"] unless Players.verified?(username)
|
||||
[200, "Signed in successfully!"]
|
||||
else
|
||||
[200, "Couldn't sign you in (Username or password incorrect)!"]
|
||||
[401, "Couldn't sign you in (Username or password incorrect)!"]
|
||||
end
|
||||
end
|
||||
|
||||
def []=(key, val)
|
||||
session = all
|
||||
session[key] = val
|
||||
Logman.log "Updated: #{key} to #{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,
|
||||
httponly: true,
|
||||
secure: ENV_HASH["ENV"] == "prod",
|
||||
samesite: :strict)
|
||||
uid = session["user"]
|
||||
DB["UPDATE SignedInUsers SET last_used_at = CURRENT_TIMESTAMP WHERE code = ?", uid].update if uid
|
||||
rescue Sequel::Error => e
|
||||
Logman.log "DB Error: #{e.message} when updating last_used_at for #{uid}"
|
||||
end
|
||||
|
||||
def [](key)
|
||||
session = all
|
||||
begin
|
||||
uid = session["user"]
|
||||
DB["UPDATE SignedInUsers SET last_used_at = CURRENT_TIMESTAMP WHERE code = ?", uid].update if uid
|
||||
rescue Sequel::Error => e
|
||||
Logman.log "DB Error: #{e.message} when updating last_used_at for #{uid}"
|
||||
end
|
||||
session[key]
|
||||
@session[key]
|
||||
end
|
||||
|
||||
def []=(key, val)
|
||||
@session[key] = val
|
||||
save
|
||||
end
|
||||
|
||||
def all
|
||||
@session
|
||||
end
|
||||
|
||||
def message=(val)
|
||||
@@ -86,31 +99,9 @@ class Sessions
|
||||
@request.env["HTTP_X_CSRF_TOKEN"] == self["csrf_token"]
|
||||
end
|
||||
|
||||
def all
|
||||
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 delete(key)
|
||||
session = all
|
||||
session.delete(key)
|
||||
Logman.log "Deleted: #{key}"
|
||||
Logman.log session.inspect
|
||||
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,
|
||||
httponly: true,
|
||||
secure: ENV["ENV"] == "prod",
|
||||
samesite: :strict)
|
||||
rescue JSON::ParserError, Zlib::Error
|
||||
@response.delete_cookie("session")
|
||||
@session.delete(key)
|
||||
save
|
||||
end
|
||||
|
||||
Thread.new do
|
||||
|
||||
Reference in New Issue
Block a user