Sha256: 3d899153c69334e7b785870f2407cb2984106c8fa82f32df952c5b27889d95fc

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

module Lionel
  class GoogleAuthentication
    include Configurable

    attr_accessor :access_token
    attr_writer :client
    config_accessor :google_client_id, :google_client_secret

    def data
      raise "No access token" unless access_token
      {
        google_token: access_token.token,
        google_refresh_token: access_token.refresh_token,
        google_client_id: google_client_id,
        google_client_secret: google_client_secret
      }
    end

    def retrieve_access_token(authorization_code)
      @access_token = client.auth_code.get_token(authorization_code,
        :redirect_uri => "urn:ietf:wg:oauth:2.0:oob")
    end

    def refresh
      return false unless refresh_token

      current_token = OAuth2::AccessToken.from_hash(client,
          {:refresh_token => refresh_token, :expires_at => 604800}) # 1 week
      @access_token = current_token.refresh! # returns new access_token
    end

    def authorize_url
      client.auth_code.authorize_url(
        :redirect_uri => "urn:ietf:wg:oauth:2.0:oob",
        :scope =>
            "https://docs.google.com/feeds/ " +
            "https://docs.googleusercontent.com/ " +
            "https://spreadsheets.google.com/feeds/")
    end

    def api_console_url
      "https://code.google.com/apis/console"
    end

    def client
      @client ||= OAuth2::Client.new(google_client_id, google_client_secret,
        :site => "https://accounts.google.com",
        :token_url => "/o/oauth2/token",
        :authorize_url => "/o/oauth2/auth")
    end

    private

    def refresh_token
      @refresh_token || configuration.google_refresh_token
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lionel_richie-0.2.0 lib/lionel/google_authentication.rb