aboutsummaryrefslogblamecommitdiffstats
path: root/lib/active_storage/verified_key_with_expiration.rb
blob: 870810673503c1cafa58b46211c4abfbbe3c35a0 (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                                                                                                                 
 



                                                        
 

                                                      
 
                                      
       








                                                                    

     
class ActiveStorage::VerifiedKeyWithExpiration
  class_attribute :verifier, default: defined?(Rails) ? Rails.application.message_verifier('ActiveStorage') : nil

  class << self
    def encode(key, expires_in: nil)
      verifier.generate([ key, expires_at(expires_in) ])
    end

    def decode(encoded_key)
      key, expires_at = verifier.verified(encoded_key)

      key if key && fresh?(expires_at)
    end

    private
      def expires_at(expires_in)
        expires_in ? Time.now.utc.advance(seconds: expires_in) : nil
      end

      def fresh?(expires_at)
        expires_at.nil? || Time.now.utc < expires_at
      end
  end
end