Google Directory API

Description

Simple Google Directory API wrapper for Ruby on Rails. This relies on the Google API Ruby Client.

This library is in alpha. Future incompatible changes may be necessary.

Requirements

  • An active project in the Google Developers Console.
  • A service-to-service Client ID. How to.
  • A valid P12 key.
  • The Admin SDK enabled.
  • Authorization from the Google Apps Admin Console to the Client ID to access the scope https://www.googleapis.com/auth/admin.directory.user.

Install

Add the gem to the Gemfile

gem 'google-directory'

Configuration

First configure your API in config/initializers/google_directory.rb

GoogleDirectory.configure do

    # OPTIONAL. Use a YAML file to store the requested access tokens. When the token is refreshed, this file will be updated.
    use_yaml Rails.root.join('config', 'google_directory.yaml')

    # Required attributes
    admin_email      '[email protected]'
    key_file         Rails.root.join('config', 'keys', 'private_key.p12')
    key_passphrase   'notasecret'
    issuer           '[email protected]'

    # Optional attributes
    application_name    'My Application'
    application_version '1.0.0'

end

Using YAML as the Token Store will create a file with the access tokens. The gem will refresh the token automatically when after they expire and it will rewrite the new access token to the YAML file. Producing something like this:

development: 
  scope:
    token_type: Bearer
    issued_at: ISSUED_DATE
    access_token: ACCESS_TOKEN
    expires_in: 3600

Multiple API clients using scopes

Specify a scope in the configuration config/initializers/google_directory.rb.

GoogleDirectory.configure do

    scope :domain_one do
        admin_email 'admin@domain_one.com'
        # [...]
    end

    scope :domain_two do
        admin_email 'admin@domain_two.com'
        # [...]
    end

end

Usage

google = GoogleDirectory::Client.new

google.find_users

google.create_user("email", "given_name", "family_name", "password")

google.update_user("email", update_data)

google.delete_user("email")

google.update_user_password("email", "new_password")

Multiple Scopes

domain_one = GoogleDirectory::Client.new(:domain_one)
domain_one.find_users

domain_two = GoogleDirectory::Client.new(:domain_two)
domain_two.find_users

TO DO

  • use_active_model for database token store.
  • Build the configuration generator.
  • Implement more parameters and calls to the Admin SDK.
  • Better error handling.
  • Documentation.
  • Testing.