# frozen_string_literal: true require "rack/session/cookie" require_relative "utils" class Tynn module Session SECRET_MIN_LENGTH = 30 def self.setup(app, options = {}) secret = options[:secret] if secret.nil? Tynn::Utils.raise_error("Secret key is required", ArgumentError) end if secret.length < SECRET_MIN_LENGTH Tynn::Utils.raise_error( "Secret key is shorter than #{ SECRET_MIN_LENGTH } characters", ArgumentError ) end app.use(Rack::Session::Cookie, { coder: Rack::Session::Cookie::Base64::JSON.new, hmac: OpenSSL::Digest::SHA256, same_site: :Lax }.merge(options)) end module InstanceMethods def session req.session end end end end