demarches-normaliennes/app/models/concerns/trusted_device_concern.rb

43 lines
1 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2018-10-30 18:24:29 +01:00
module TrustedDeviceConcern
extend ActiveSupport::Concern
TRUSTED_DEVICE_COOKIE_NAME = :trusted_device
TRUSTED_DEVICE_PERIOD = 1.month
def trust_device(start_at)
2018-10-30 18:24:29 +01:00
cookies.encrypted[TRUSTED_DEVICE_COOKIE_NAME] = {
value: JSON.generate({ created_at: start_at }),
expires: start_at + TRUSTED_DEVICE_PERIOD,
httponly: true,
secure: Rails.env.production?
2018-10-30 18:24:29 +01:00
}
end
def trusted_device?
trusted_device_cookie.present? &&
(Time.zone.now - TRUSTED_DEVICE_PERIOD) < trusted_device_cookie_created_at
2018-10-30 18:24:29 +01:00
end
def send_login_token_or_bufferize(instructeur)
if !instructeur.young_login_token?
token = instructeur.create_trusted_device_token
InstructeurMailer.send_login_token(instructeur, token).deliver_later
true
else
false
2019-02-01 17:17:10 +01:00
end
end
2018-10-30 18:24:29 +01:00
private
def trusted_device_cookie_created_at
Time.zone.parse(JSON.parse(trusted_device_cookie)['created_at'])
end
2018-10-30 18:24:29 +01:00
def trusted_device_cookie
cookies.encrypted[TRUSTED_DEVICE_COOKIE_NAME]
end
end