1
0
Fork 0
mirror of https://github.com/jnunemaker/httparty synced 2023-03-27 23:23:07 -04:00
httparty/examples/microsoft_graph.rb

53 lines
1.5 KiB
Ruby
Raw Permalink Normal View History

2018-10-08 17:27:31 -04:00
require 'httparty'
class MicrosoftGraph
MS_BASE_URL = "https://login.microsoftonline.com".freeze
TOKEN_REQUEST_PATH = "oauth2/v2.0/token".freeze
def initialize(tenant_id)
@tenant_id = tenant_id
end
# Make a request to the Microsoft Graph API, for instance https://graph.microsoft.com/v1.0/users
def request(url)
return false unless (token = bearer_token)
response = HTTParty.get(
url,
headers: {
Authorization: "Bearer #{token}"
}
)
return false unless response.code == 200
return JSON.parse(response.body)
end
private
# A post to the Microsoft Graph to get a bearer token for the specified tenant. In this example
# our Rails application has already been given permission to request these tokens by the admin of
2018-10-19 18:55:49 -04:00
# the specified tenant_id.
#
2018-10-08 17:27:31 -04:00
# See here for more information https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_service
#
# This request also makes use of the multipart/form-data post body.
def bearer_token
response = HTTParty.post(
"#{MS_BASE_URL}/#{@tenant_id}/#{TOKEN_REQUEST_PATH}",
2018-10-19 18:55:49 -04:00
multipart: true,
2018-10-08 17:27:31 -04:00
body: {
client_id: Rails.application.credentials[Rails.env.to_sym][:microsoft_client_id],
client_secret: Rails.application.credentials[Rails.env.to_sym][:microsoft_client_secret],
scope: 'https://graph.microsoft.com/.default',
grant_type: 'client_credentials'
}
)
return false unless response.code == 200
JSON.parse(response.body)['access_token']
end
2018-10-19 18:55:49 -04:00
end