class OmniAuth::Strategies::MicrosoftGraph
Constants
- BASE_SCOPES
- BASE_SCOPE_URL
- DEFAULT_SCOPE
- MICROSOFT_GRAPH_PROFILE_URL
- YAMMER_PROFILE_URL
Public Instance Methods
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 49 def auth_hash super.tap do |ah| verify_email(ah, access_token) end end
Calls superclass method
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 72 def callback_url options[:callback_url] || full_host + script_name + callback_path end
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 76 def custom_build_access_token access_token = get_access_token(request) # Get the profile(microsoft graph / yammer) endpoint choice based on returned bearer token @profile_endpoint = determine_profile_endpoint(request) access_token end
Also aliased as: build_access_token
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 89 def determine_profile_endpoint(request) scope = request&.env&.dig('omniauth.params', 'scope') if scope&.include?('yammer') YAMMER_PROFILE_URL else MICROSOFT_GRAPH_PROFILE_URL end end
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 85 def profile_endpoint @profile_endpoint ||= MICROSOFT_GRAPH_PROFILE_URL end
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 68 def raw_info @raw_info ||= access_token.get(profile_endpoint).parsed end
Private Instance Methods
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 122 def client_get_token(verifier, redirect_uri) client.auth_code.get_token(verifier, get_token_options(redirect_uri), get_token_params) end
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 101 def get_access_token(request) verifier = request.params['code'] redirect_uri = request.params['redirect_uri'] || request.params['callback_url'] if verifier && request.xhr? client_get_token(verifier, redirect_uri || '/auth/microsoft_graph/callback') elsif verifier client_get_token(verifier, redirect_uri || callback_url) elsif verify_token(request.params['access_token']) ::OAuth2::AccessToken.from_hash(client, request.params.dup) elsif request.content_type =~ /json/i begin body = JSON.parse(request.body.read) request.body.rewind # rewind request body for downstream middlewares verifier = body && body['code'] client_get_token(verifier, '/auth/microsoft_graph/callback') if verifier rescue JSON::ParserError => e warn "[omniauth microsoft_graph] JSON parse error=#{e}" end end end
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 134 def get_scope(params) raw_scope = params[:scope] || DEFAULT_SCOPE scope_list = raw_scope.split(' ').map { |item| item.split(',') }.flatten scope_list.map! { |s| s =~ %r{^https?://} || BASE_SCOPES.include?(s) ? s : "#{BASE_SCOPE_URL}#{s}" } scope_list.join(' ') end
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 130 def get_token_options(redirect_uri = '') { redirect_uri: redirect_uri }.merge(token_params.to_hash(symbolize_keys: true)) end
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 126 def get_token_params deep_symbolize(options.auth_token_params || {}) end
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 149 def verify_email(auth_hash, access_token) OmniAuth::MicrosoftGraph::DomainVerifier.verify!(auth_hash, access_token, options) end
Source
# File lib/omniauth/strategies/microsoft_graph.rb, line 141 def verify_token(access_token) return false unless access_token # access_token.get('https://graph.microsoft.com/v1.0/me').parsed raw_response = client.request(:get, 'https://graph.microsoft.com/v1.0/me', params: { access_token: access_token }).parsed (raw_response['aud'] == options.client_id) || options.authorized_client_ids.include?(raw_response['aud']) end