Finalize frontend of session management
This commit is contained in:
32
session.rb
32
session.rb
@@ -5,32 +5,32 @@ class Sessions
|
||||
@response = response
|
||||
end
|
||||
|
||||
def signed_in?(code)
|
||||
$active_users[code]
|
||||
def signed_in?
|
||||
$active_users[self["user"]]
|
||||
end
|
||||
|
||||
def logout(uid)
|
||||
def logout
|
||||
uid = self["user"]
|
||||
$active_users.delete(uid)
|
||||
delete("user")
|
||||
DB["delete from SignedInUsers where code = ?", uid].delete
|
||||
true
|
||||
rescue Sequel::Error => e
|
||||
Logman.log "DB Error: #{e.message}\n"
|
||||
Logman.log "DB Error: #{e.message}"
|
||||
false
|
||||
end
|
||||
|
||||
def login(username, pass)
|
||||
Logman.log "Logging in: #{username} & #{pass} #{ENV_HASH["SALT"]}\n"
|
||||
|
||||
Logman.log "Logging in: #{username} & #{pass} #{ENV_HASH["SALT"]}"
|
||||
player = Players.authorized?(username, pass)
|
||||
if player
|
||||
code = Array.new(24) { ALPHANUM.sample }.join
|
||||
self["user", code] = code
|
||||
self["user"] = code
|
||||
$active_users[code] = username
|
||||
begin
|
||||
DB["insert into SignedInUsers (code, player) values (?, ?)", code, username].insert
|
||||
rescue Sequel::Error => e
|
||||
Logman.log "DB Error: #{e.message}\n"
|
||||
Logman.log "DB Error: #{e.message}"
|
||||
return [500, "Internal server error when signing you in!"]
|
||||
end
|
||||
return [200, "Remember to verify your email!"] unless Players.verified?(username)
|
||||
@@ -40,7 +40,7 @@ class Sessions
|
||||
end
|
||||
end
|
||||
|
||||
def []=(key, uid, val)
|
||||
def []=(key, val)
|
||||
session = @request.cookies["session"]
|
||||
session = session.nil? ? "{}" : Zlib::Inflate.inflate(Base64.decode64(session))
|
||||
session = JSON.parse(session)
|
||||
@@ -51,21 +51,23 @@ class Sessions
|
||||
value: encoded,
|
||||
path: "/",
|
||||
expires: Time.now + 360 * 24 * 60 * 60)
|
||||
uid = session["user"]
|
||||
DB["UPDATE SignedInUsers SET last_used_at = CURRENT_TIMESTAMP WHERE code = ?", uid].update if uid
|
||||
rescue JSON::ParserError, Zlib::Error
|
||||
@response.delete_cookie("session")
|
||||
rescue Sequel::Error => e
|
||||
Logman.log "DB Error: #{e.message} when updating last_used_at for #{uid}\n"
|
||||
Logman.log "DB Error: #{e.message} when updating last_used_at for #{uid}"
|
||||
end
|
||||
|
||||
def [](key, uid: nil)
|
||||
def [](key)
|
||||
session = @request.cookies["session"]
|
||||
session = session.nil? ? "{}" : Zlib::Inflate.inflate(Base64.decode64(session))
|
||||
session = JSON.parse(session)
|
||||
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}\n"
|
||||
Logman.log "DB Error: #{e.message} when updating last_used_at for #{uid}"
|
||||
end
|
||||
session[key]
|
||||
rescue JSON::ParserError, Zlib::Error
|
||||
@@ -121,16 +123,16 @@ class Sessions
|
||||
begin
|
||||
DB[:SignedInUsers].where(code: session[:code]).delete
|
||||
rescue StandardError => e
|
||||
Logman.log "Thread DB error: #{e.message} on #{session[:code]} for #{session[:player]}\n"
|
||||
Logman.log "Thread DB error: #{e.message} on #{session[:code]} for #{session[:player]}"
|
||||
end
|
||||
$active_users.delete(session[:code])
|
||||
puts "Auto-logged out: #{session[:player]} (expired session)"
|
||||
end
|
||||
rescue StandardError => e
|
||||
Logman.log "Thread error: #{e.message}\n"
|
||||
Logman.log "Thread error: #{e.message}"
|
||||
ensure
|
||||
sleep 60 * 60 * 24
|
||||
Logman.log "Thread sleeping\n"
|
||||
Logman.log "Thread sleeping"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user