2024-02-25 12:15:55 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2011-10-15 16:36:07 -04:00
|
|
|
class SessionCreator
|
2024-12-18 09:02:02 -05:00
|
|
|
attr_reader :request, :session, :cookies, :name, :password, :remember
|
2013-03-19 08:10:10 -04:00
|
|
|
|
2024-12-18 09:02:02 -05:00
|
|
|
def initialize(request, session, cookies, name, password, remember = false)
|
|
|
|
@request = request
|
2011-10-15 16:36:07 -04:00
|
|
|
@session = session
|
|
|
|
@cookies = cookies
|
|
|
|
@name = name
|
|
|
|
@password = password
|
|
|
|
@remember = remember
|
|
|
|
end
|
2013-03-19 08:10:10 -04:00
|
|
|
|
2011-10-15 16:36:07 -04:00
|
|
|
def authenticate
|
|
|
|
if User.authenticate(name, password)
|
|
|
|
user = User.find_by_name(name)
|
2013-03-19 08:10:10 -04:00
|
|
|
|
2011-10-15 16:36:07 -04:00
|
|
|
session[:user_id] = user.id
|
2024-12-18 09:02:02 -05:00
|
|
|
session[:last_authenticated_at] = Time.now.utc.to_s
|
2021-12-18 06:36:19 -05:00
|
|
|
session[:ph] = user.password_token
|
2024-12-18 09:02:02 -05:00
|
|
|
user.update_column(:last_ip_addr, request.remote_ip) unless user.is_blocked?
|
2019-10-31 09:41:21 -04:00
|
|
|
|
2020-04-12 22:08:33 -04:00
|
|
|
if remember
|
2021-02-13 03:59:14 -05:00
|
|
|
verifier = ActiveSupport::MessageVerifier.new(Danbooru.config.remember_key, serializer: JSON, digest: "SHA256")
|
2024-12-18 09:02:02 -05:00
|
|
|
cookies.encrypted[:remember] = { value: verifier.generate("#{user.id}:#{user.password_token}", purpose: "rbr", expires_in: 14.days), expires: Time.now + 14.days, httponly: true, same_site: :lax, secure: Rails.env.production? }
|
2020-04-12 22:08:33 -04:00
|
|
|
end
|
2011-10-15 16:36:07 -04:00
|
|
|
return true
|
|
|
|
else
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|