From 30eac00647edec41358cd6fb71d79450c611c1ab Mon Sep 17 00:00:00 2001 From: Mikkel Malmberg Date: Sat, 17 Jun 2023 08:47:00 +0200 Subject: [PATCH] Allow setting the session token manually --- app/models/passwordless/session.rb | 13 +++++++++---- test/models/passwordless/session_test.rb | 6 ++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/models/passwordless/session.rb b/app/models/passwordless/session.rb index 4b0b0b8..8779792 100644 --- a/app/models/passwordless/session.rb +++ b/app/models/passwordless/session.rb @@ -24,15 +24,20 @@ class Session < ApplicationRecord before_validation :set_defaults - # save the token in memory so we can put it in emails but only save the - # hashed version in the database - attr_accessor :token - scope( :available, lambda { where("expires_at > ?", Time.current) } ) + # save the token in memory so we can put it in emails but only save the + # hashed version in the database + attr_reader :token + + def token=(plaintext) + self.token_digest = Passwordless.digest(plaintext) + @token = (plaintext) + end + def expired? expires_at <= Time.current end diff --git a/test/models/passwordless/session_test.rb b/test/models/passwordless/session_test.rb index 1aada86..fe05071 100644 --- a/test/models/passwordless/session_test.rb +++ b/test/models/passwordless/session_test.rb @@ -68,6 +68,12 @@ def call(_session) Passwordless.token_generator = old_generator end + test("setting token manually") do + session = Session.new(token: "hi") + assert_equal "hi", session.token + assert_equal Passwordless.digest("hi"), session.token_digest + end + test("with a custom expire at function") do custom_expire_at = Time.parse("01-01-2100").utc old_expires_at = Passwordless.expires_at