class OmniAuth::Strategies::OsmOauth2

Public Class Methods

site() click to toggle source
# File lib/omniauth/strategies/osm_oauth2.rb, line 11
def self.site
  ENV['OSM_AUTH_SITE'] || 'https://www.openstreetmap.org'
end

Public Instance Methods

authorize_params() click to toggle source
Calls superclass method
# File lib/omniauth/strategies/osm_oauth2.rb, line 27
def authorize_params
  super.tap do |params|
    params[:scope] = options[:scope].split(',').join(' ')
  end
end
raw_info() click to toggle source
# File lib/omniauth/strategies/osm_oauth2.rb, line 46
def raw_info
  @raw_info ||= parse_details(access_token.get('/api/0.6/user/details').body)
  @raw_info['permissions'] ||= parse_permissions(access_token.get('/api/0.6/permissions').body) if options[:fetch_permissions]
  @raw_info
rescue ::Errno::ETIMEDOUT
  raise ::Timeout::Error
end

Private Instance Methods

parse_details(xml_data) click to toggle source

extract /api/0.6/user/details

# File lib/omniauth/strategies/osm_oauth2.rb, line 57
def parse_details(xml_data)
  doc = REXML::Document.new(xml_data)
  user = doc.elements['//user']
  home = doc.elements['//home']
  languages = doc.get_elements('//lang')
  image = doc.elements['//img']
  description = doc.elements['//description']
  basic_attributes = {}
  if user
    basic_attributes['id']           = user.attribute('id').value
    basic_attributes['display_name'] = user.attribute('display_name').value
  end
  basic_attributes['languages']    = languages.map(&:text) if languages
  basic_attributes['image_url']    = image.attribute('href').value if image
  if home
    basic_attributes['lat']          = home.attribute('lat').value.to_f
    basic_attributes['lon']          = home.attribute('lon').value.to_f
  end
  basic_attributes['description']  = description.text if description
  basic_attributes
end
parse_permissions(xml_data) click to toggle source

extract /api/0.6/permissions

# File lib/omniauth/strategies/osm_oauth2.rb, line 80
def parse_permissions(xml_data)
  doc = REXML::Document.new(xml_data)
  doc.get_elements('//permission').map { |p| p.attribute('name').value }
end