# frozen_string_literal: true

module OmniAuth
  module Strategies
    class CustomAzureActiveDirectory < AzureActivedirectoryV2
      include OmniAuth::Strategy

      option :name, 'customazureactivedirectory'

      def client
        omni_client = super
        begin
          app_conf =
            Rails.cache.fetch("ad_app_conf_#{options[:client_id]}", expires_in: 1.day) do
              JSON.parse(Net::HTTP.get(URI(options[:conf_url])))
            end
          omni_client.options[:authorize_url] = app_conf['authorization_endpoint']
          omni_client.options[:token_url] = app_conf['token_endpoint']
        rescue StandardError => e
          Rails.logger.error('Failed to load OAuth2 configuration from the remote server! Using defaults.')
          Rails.logger.error(e.message)
        end
        omni_client
      end

      def raw_info
        if @raw_info.nil?
          id_token_data   = ::JWT.decode(access_token.params['id_token'], nil, false).first rescue {}
          auth_token_data = ::JWT.decode(access_token.token,              nil, false).first rescue {}
          @raw_info = auth_token_data.merge(id_token_data)
        end

        @raw_info
      end
    end
  end
end

OmniAuth.config.add_camelization 'custom_azure_activedirectory', 'CustomAzureActiveDirectory'