class GoogleDirectory::Client

Attributes

client[R]
config[R]
directory_api[R]
result[R]

Public Class Methods

new(scope = :main) click to toggle source
# File lib/google-directory.rb, line 11
def initialize(scope = :main)
        @config = GoogleDirectory.configuration
        @config = @config.using(scope) if @config.scope_name != scope

        
        @key = Google::APIClient::KeyUtils.load_from_pkcs12(@config.key_file, @config.key_passphrase)
        @client = Google::APIClient.new(:application_name => @config.application_name, :application_version => @config.application_version )

        @client.authorization = Signet::OAuth2::Client.new(
                :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
                :audience => 'https://accounts.google.com/o/oauth2/token',
                :scope => 'https://www.googleapis.com/auth/admin.directory.user',
                :issuer => @config.issuer, 
                :person => @config.admin_email,
                :signing_key => @key
        )

        if token = @config.load_token

                token['issued_at'] = Time.parse( token['issued_at'] )
                @client.authorization.update_token!(token)

        else
                token = @client.authorization.fetch_access_token!
                token['issued_at'] = @client.authorization.issued_at.to_s
                @config.save_token(token)

        end
        
        @directory_api = @client.discovered_api('admin', 'directory_v1')
end

Public Instance Methods

create_user(email, given_name, family_name, password, opts = {}) click to toggle source

developers.google.com/admin-sdk/directory/v1/reference/users/insert

# File lib/google-directory.rb, line 55
def create_user(email, given_name, family_name, password, opts = {})
        opts = {
                'name'                       => { 'givenName' => given_name, 'familyName' => family_name},
                'password'                   => password,
                'primaryEmail'               => email,
                'changePasswordAtNextLogin'  => true
        }.merge(opts)

        execute(:api_method => directory_api.users.insert, :body_object => opts)
end
delete_user(email) click to toggle source
# File lib/google-directory.rb, line 66
def delete_user(email)
        execute(:api_method => directory_api.users.delete, :parameters => {'userKey' => email})
end
find_user_by_email(email) click to toggle source
# File lib/google-directory.rb, line 48
def find_user_by_email(email)
        execute(:api_method => directory_api.users.get, :parameters => { 'userKey' => email })
end
find_users(params) click to toggle source
# File lib/google-directory.rb, line 44
def find_users(params)
        execute(:api_method => directory_api.users.list, :parameters => params)
end
update_user(email, update_data = {}) click to toggle source
# File lib/google-directory.rb, line 70
def update_user(email, update_data = {})
        execute(:api_method => directory_api.users.update, :parameters => {'userKey' => email}, :body_object => update_data)
end
update_user_password(email, password) click to toggle source
# File lib/google-directory.rb, line 74
def update_user_password(email, password)
        update_user(email, {'password' => password, 'changePasswordAtNextLogin' => false})
end

Private Instance Methods

execute(opts) click to toggle source
# File lib/google-directory.rb, line 80
def execute(opts)
        if client.authorization.expired?
                token = client.authorization.refresh!
                token['issued_at'] = client.authorization.issued_at.to_s
                config.save_token(token)
        end

        @result = client.execute(opts)
        
        case result.status
        when 204 then return true
        when 404 then return false
        when 200 then return JSON.parse(result.body)
        end

        Rails.logger.error("== Google ERROR ==\n\t- execute(#{opts})\n\t- response:\n#{result.response.to_yaml}")

        false
end