wahyd4/ocelots

View on GitHub
lib/google_oauth.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'net/http'
require 'google/api_client'

module GoogleOauth
  def google_oauth_url
    google_client.authorization.authorization_uri.to_s
  end

  def verify_google_oauth
    client = google_client
    client.authorization.code = params[:code] if params[:code]
    client.authorization.fetch_access_token!

    http = Net::HTTP.new 'www.googleapis.com', 443
    http.use_ssl = true
    response = http.get "/oauth2/v1/userinfo?access_token=#{client.authorization.access_token}"

    response = JSON.parse response.body
    yield response['email']
  end

  def google_client
    Google::APIClient.new.tap do |client|
      client.authorization.scope = 'https://www.googleapis.com/auth/userinfo.email'
      client.authorization.client_id = ::ENV['GOOGLE_OAUTH_CLIENT_ID']
      client.authorization.client_secret = ::ENV['GOOGLE_OAUTH_CLIENT_SECRET']
      client.authorization.redirect_uri = ::ENV['GOOGLE_OAUTH_REDIRECT']
    end
  end
end