class OmniAuth::Strategies::Samedi

Provides implementation of an OmniAuth strategy that works with samedi Booking API.

For more information, consult the OmniAuth Strategy Contribution Guide: github.com/omniauth/omniauth/wiki/Strategy-Contribution-Guide

Note: this file is explicitly required by config/initializers/omniauth.rb so changes to it won't be automatically reloaded and you need to restart the Rails app after every change to the strategy. Changing `require` to `require_dependency` won't work, because Rails doesn't clear dependencies required by initializers.

Constants

BOOKING_API_URL
BOOKING_AUTH_URL

Private Instance Methods

booking_api_client() click to toggle source
# File lib/omniauth/strategies/samedi.rb, line 79
def booking_api_client
  @booking_api_client ||= Faraday.new(BOOKING_API_URL) do |faraday|
    faraday.headers = { 'Authorization': "Bearer #{access_token.token}" }
    faraday.adapter Faraday.default_adapter
  end
end
fetch_user_info() click to toggle source
# File lib/omniauth/strategies/samedi.rb, line 67
def fetch_user_info
  response = booking_api_client.get('user')

  return response if response.success?

  fail!("error_#{response.status}_getting_user_info")
  nil
rescue Faraday::TimeoutError => e
  fail!(:timeout_getting_user_info, e)
  nil
end
query_string() click to toggle source

samedi Booking API doesn't like a query string inside redirect_uri, so we need to override it explicitly

# File lib/omniauth/strategies/samedi.rb, line 54
def query_string
  ''
end
user_info() click to toggle source
# File lib/omniauth/strategies/samedi.rb, line 58
def user_info
  return @user_info if @user_info

  user_info_response = fetch_user_info
  return {} unless user_info_response

  @user_info = MultiJson.load(user_info_response.body)
end