mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-11-29 10:24:20 +01:00
48 lines
1.8 KiB
Ruby
48 lines
1.8 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module OmniAuth::DataMapping
|
||
|
# Build the data mapping for the given provider
|
||
|
module Mapper
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
included do
|
||
|
require 'sso_logger'
|
||
|
require_relative 'base'
|
||
|
include OmniAuth::DataMapping::Base
|
||
|
|
||
|
def mapped_info(mappings, raw_info)
|
||
|
logger = SsoLogger.new
|
||
|
@info ||= {}
|
||
|
|
||
|
logger.debug "[mapped_info] @info = #{@info.to_json}"
|
||
|
|
||
|
unless @info.size.positive?
|
||
|
mappings.each do |mapping|
|
||
|
|
||
|
raw_data = ::JsonPath.new(mapping.api_field).on(raw_info[mapping.api_endpoint.to_sym]).first
|
||
|
logger.debug "@parsed_info[#{local_sym(mapping)}] mapped from #{raw_data}"
|
||
|
@info[local_sym(mapping)] = if mapping.transformation
|
||
|
case mapping.transformation['type']
|
||
|
when 'integer'
|
||
|
map_transformation(mapping.transformation, raw_data)
|
||
|
when 'boolean'
|
||
|
map_boolean(mapping.transformation, raw_data)
|
||
|
when 'date'
|
||
|
map_date(mapping.transformation, raw_data)
|
||
|
when 'string'
|
||
|
map_transformation(mapping.transformation, raw_data)
|
||
|
else
|
||
|
# other unsupported transformation
|
||
|
raw_data
|
||
|
end
|
||
|
else
|
||
|
raw_data
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
@info
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|