Sha256: 265dae2a85cfd04e6532ef300464a463e636198390ddbdfe6f4e3415fea8f384

Contents?: true

Size: 1.47 KB

Versions: 9

Compression:

Stored size: 1.47 KB

Contents

module PandaPal
  class Session < PandaPalRecord
    belongs_to :panda_pal_organization, class_name: 'PandaPal::Organization', optional: true

    after_initialize do
      self.session_key ||= SecureRandom.urlsafe_base64(60)
    end

    def lti_platform
      return nil unless data[:lti_platform].present?

      @lti_platform ||= Platform.from_serialized(data[:lti_platform])
    end

    def custom_lti_params
      launch_params = data[:launch_params] || {}

      # LT 1.3
      custom_params = launch_params["https://purl.imsglobal.org/spec/lti/claim/custom"]
      return custom_params if custom_params.present?

      # LTI 1.0/1.1
      custom_params = {}
      launch_params.each do |k, v|
        next unless k.start_with?("custom_")
        custom_params[k[7..-1]] = v
      end

      custom_params.with_indifferent_access
    end

    class DataSerializer
      def self.load(str)
        return {} unless str.present?
        begin
          parsed = JSON.parse(str)
        rescue JSON::ParserError
          parsed = yaml_load(str)
        end
        parsed.is_a?(Hash) ? HashWithIndifferentAccess.new(parsed) : parsed
      end

      def self.dump(obj)
        JSON.dump(obj)
      end

      private

      if YAML.respond_to?(:unsafe_load)
        def self.yaml_load(payload)
          YAML.unsafe_load(payload)
        end
      else
        def self.yaml_load(payload)
          YAML.load(payload)
        end
      end
    end

    serialize :data, DataSerializer
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
panda_pal-5.9.7 app/models/panda_pal/session.rb
panda_pal-5.9.6 app/models/panda_pal/session.rb
panda_pal-5.9.5 app/models/panda_pal/session.rb
panda_pal-5.9.4 app/models/panda_pal/session.rb
panda_pal-5.9.3 app/models/panda_pal/session.rb
panda_pal-5.9.1 app/models/panda_pal/session.rb
panda_pal-5.9.0 app/models/panda_pal/session.rb
panda_pal-5.8.5 app/models/panda_pal/session.rb
panda_pal-5.8.4 app/models/panda_pal/session.rb