mirror of
https://github.com/jnunemaker/httparty
synced 2023-03-27 23:23:07 -04:00
Create example for Microsoft Graph
This commit is contained in:
parent
85d7c71160
commit
161556805f
2 changed files with 52 additions and 18 deletions
|
@ -5,7 +5,6 @@ Makes http fun again!
|
|||
## Table of contents
|
||||
- [Parsing JSON](#parsing-json)
|
||||
- [Working with SSL](#working-with-ssl)
|
||||
- [Multipart Post](#multipart-post)
|
||||
|
||||
## Parsing JSON
|
||||
If the response Content Type is `application/json`, HTTParty will parse the response and return Ruby objects such as a hash or array. The default behavior for parsing JSON will return keys as strings. This can be supressed with the `format` option. To get hash keys as symbols:
|
||||
|
@ -104,21 +103,4 @@ class Client
|
|||
# get("resources", verify_peer: false)
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
## Multipart Post
|
||||
|
||||
Sending a `multipart/form-data` post request with HTTParty is easy, for example to request a bearer token from Microsoft's Graph API:
|
||||
|
||||
```ruby
|
||||
HTTParty.post(
|
||||
"https://login.microsoftonline.com/tenant_id/oauth2/v2.0/token",
|
||||
body: {
|
||||
multipart: true,
|
||||
client_id: 'id',
|
||||
client_secret: 'secret',
|
||||
scope: 'https://graph.microsoft.com/.default',
|
||||
grant_type: 'client_credentials'
|
||||
}
|
||||
)
|
||||
```
|
52
examples/microsoft_graph.rb
Normal file
52
examples/microsoft_graph.rb
Normal file
|
@ -0,0 +1,52 @@
|
|||
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
|
||||
# the specified tenant_id.
|
||||
#
|
||||
# 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}",
|
||||
body: {
|
||||
multipart: true,
|
||||
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
|
||||
end
|
Loading…
Reference in a new issue