module SyncAttrWithAuth0::Auth0

Public Class Methods

create_auth0_client( api_version: 2, config: SyncAttrWithAuth0.configuration ) click to toggle source
# File lib/sync_attr_with_auth0/auth0.rb, line 26
def self.create_auth0_client(
  api_version: 2,
  config: SyncAttrWithAuth0.configuration
)
  validate_auth0_config_for_api(api_version, config: config)

  case api_version
  when 1
    auth0 = Auth0Client.new(client_id: config.auth0_client_id, client_secret: config.auth0_client_secret, namespace: config.auth0_namespace)
  when 2
    jwt = SyncAttrWithAuth0::Auth0.create_auth0_jwt(global_client_id: config.auth0_global_client_id, global_client_secret: config.auth0_global_client_secret)
    auth0 = Auth0Client.new(api_version: 2, access_token: jwt, namespace: config.auth0_namespace)
  end

  return auth0
end
create_auth0_jwt(global_client_id: ENV['AUTH0_GLOBAL_CLIENT_ID'], global_client_secret: ENV['AUTH0_GLOBAL_CLIENT_SECRET']) click to toggle source
# File lib/sync_attr_with_auth0/auth0.rb, line 8
def self.create_auth0_jwt(global_client_id: ENV['AUTH0_GLOBAL_CLIENT_ID'], global_client_secret: ENV['AUTH0_GLOBAL_CLIENT_SECRET'])
  payload = {
    'aud' => global_client_id,
    'scopes' => {
      'users' => {
        'actions' => ['create', 'update', 'read']
      }
    },
    'iat' => Time.now.to_i,
    'jti' => UUIDTools::UUID.random_create.to_s
  }

  jwt = JWT.encode(payload, JWT::Base64.url_decode(global_client_secret), 'HS256', { typ: 'JWT' })

  return jwt
end
create_user(params, config: SyncAttrWithAuth0.configuration) click to toggle source
# File lib/sync_attr_with_auth0/auth0.rb, line 89
def self.create_user(params, config: SyncAttrWithAuth0.configuration)
  auth0 = SyncAttrWithAuth0::Auth0.create_auth0_client(config: config)
  return auth0.create_user(params.delete('connection'), params)
end
find_users_by_email(email, exclude_user_id: nil, config: SyncAttrWithAuth0.configuration) click to toggle source
# File lib/sync_attr_with_auth0/auth0.rb, line 67
def self.find_users_by_email(email, exclude_user_id: nil, config: SyncAttrWithAuth0.configuration)
  auth0 = SyncAttrWithAuth0::Auth0.create_auth0_client(config: config)

  # Use the Lucene search because Find by Email is case sensitive
  query = "email:#{email}"
  unless config.search_connections.empty?
    conn_query = config.search_connections
      .collect { |conn| %Q{identities.connection:"#{conn}"} }
      .join ' OR '
    query = "#{query} AND (#{conn_query})"
  end

  results = auth0.get('/api/v2/users', q: query, search_engine: 'v3')

  if exclude_user_id
    results = results.reject { |r| r['user_id'] == exclude_user_id }
  end

  return results
end
patch_user(uid, params, config: SyncAttrWithAuth0.configuration) click to toggle source
# File lib/sync_attr_with_auth0/auth0.rb, line 95
def self.patch_user(uid, params, config: SyncAttrWithAuth0.configuration)
  auth0 = SyncAttrWithAuth0::Auth0.create_auth0_client(config: config)

  return auth0.patch_user(uid, params)
end
validate_auth0_config_for_api(api_version, config: SyncAttrWithAuth0.configuration) click to toggle source
# File lib/sync_attr_with_auth0/auth0.rb, line 44
def self.validate_auth0_config_for_api(api_version, config: SyncAttrWithAuth0.configuration)
  settings_to_validate = []
  invalid_settings = []

  case api_version
  when 1
    settings_to_validate = [:auth0_client_id, :auth0_client_secret, :auth0_namespace]
  when 2
    settings_to_validate = [:auth0_global_client_id, :auth0_global_client_secret, :auth0_namespace]
  end

  settings_to_validate.each do |setting_name|
    unless config.send(setting_name)
      invalid_settings << setting_name
    end
  end

  if invalid_settings.length > 0
    raise InvalidAuth0ConfigurationException.new("The following required auth0 settings were invalid: #{invalid_settings.join(', ')}")
  end
end