Files
old-holivud2/lib/microsoft_graph.rb
2020-08-12 16:36:47 +02:00

83 lines
2.2 KiB
Ruby

require 'httparty'
class MicrosoftGraph
BASE_URL = 'https://graph.microsoft.com/v1.0'.freeze
BETA_BASE_URL = 'https://graph.microsoft.com/beta'.freeze
# Documentation says that "common" can be used (instead of tenantID) to refresh access token
REFRESH_TOKEN_URL = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'.freeze
def initialize(current_user, client_id, client_secret, scopes)
@current_user = current_user
@uid = current_user.microsoft_user_id
@token = current_user.microsoft_access_token
@refresh_token = current_user.microsoft_refresh_token
@expires_at = current_user.microsoft_token_expires_at
@client_id = client_id
@client_secret = client_secret
@scopes = scopes
end
def request(resource)
return false unless @token
response = HTTParty.get(
"#{BASE_URL}/#{resource}",
headers: {
Authorization: "Bearer #{@token}"
}
)
if response.code != 200
p '[Microsoft Graph API Error]'
p response.inspect
false
else
JSON.parse(response.body)
end
end
def create_teams_meeting(start_date_time, end_date_time, subject)
# check if token expired and obtain new access_token using refresh token
response = HTTParty.post(
"#{BETA_BASE_URL}/me/onlineMeetings",
body: {
startDateTime: start_date_time,
endDateTime: end_date_time,
subject: subject,
participants: {
organizer: {
identity: {
user: {
id: @uid
}
}
}
}
},
headers: {
Authorization: "Bearer #{@token}"
}
)
if response.code != 201
p '[Microsoft Graph API Error] Failed to create online meeting'
p response.inspect
else
JSON.parse(response.body)
end
end
def refresh_token
response = HTTParty.post(REFRESH_TOKEN_URL,
body: {
client_id: @client_id,
client_secret: @client_secret,
refresh_token: @refresh_token,
grant_type: 'refresh_token',
scope: @scopes
})
end
end