google-directory 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +29 -19
- data/google-directory.gemspec +5 -6
- data/lib/google-directory.rb +93 -104
- data/lib/google-directory/version.rb +1 -1
- metadata +4 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80b661f11277fc8460c4e7c2397ecb5f88693bf9
|
4
|
+
data.tar.gz: 225a3ddcd0aefb129923c95b24297164bd449729
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8a06cce05e7ea09eb87f3220d1adf3e0c3f0df9bd4e50f03fdd2f2c35fc876603894cead23f1d39e184b0618a5ae168eece2954d960db8610453366cfd5ab63
|
7
|
+
data.tar.gz: 0550b57fd0e411351c199d7b5292b49e222a1c5654b93cda61a1987635753d54362f804a50600fc8f2150f6e23e168283704b3029e789ef8b7839cd0ec8b8bb0
|
data/README.md
CHANGED
@@ -3,7 +3,17 @@
|
|
3
3
|
## Description
|
4
4
|
|
5
5
|
Simple Google Directory API wrapper for Ruby on Rails.
|
6
|
-
This relies on the [Google API Ruby Client](https://github.com/
|
6
|
+
This relies on the [Google API Ruby Client](https://github.com/google/google-api-ruby-client).
|
7
|
+
|
8
|
+
**This library is in alpha. Future incompatible changes may be necessary.**
|
9
|
+
|
10
|
+
## Requirements
|
11
|
+
|
12
|
+
* An active project in the Google Developers Console.
|
13
|
+
* A service-to-service Client ID. [How to](https://developers.google.com/console/help/new/#serviceaccounts).
|
14
|
+
* A valid P12 key.
|
15
|
+
* The Admin SDK enabled.
|
16
|
+
* Authorization from the Google Apps Admin Console to the Client ID to access the scope `https://www.googleapis.com/auth/admin.directory.user`.
|
7
17
|
|
8
18
|
## Install
|
9
19
|
|
@@ -15,22 +25,22 @@ gem 'google-directory'
|
|
15
25
|
|
16
26
|
## Configuration
|
17
27
|
|
18
|
-
First configure your API in `initializers/google_directory.rb`
|
28
|
+
First configure your API in `config/initializers/google_directory.rb`
|
19
29
|
|
20
30
|
``` ruby
|
21
31
|
GoogleDirectory.configure do
|
22
32
|
|
23
|
-
#
|
33
|
+
# OPTIONAL. Use a YAML file to store the requested access tokens. When the token is refreshed, this file will be updated.
|
24
34
|
use_yaml Rails.root.join('config', 'google_directory.yaml')
|
25
35
|
|
26
|
-
# Required
|
27
|
-
admin_email
|
28
|
-
key_file
|
29
|
-
key_passphrase
|
30
|
-
issuer
|
36
|
+
# Required attributes
|
37
|
+
admin_email 'admin@domain.com'
|
38
|
+
key_file Rails.root.join('config', 'keys', 'private_key.p12')
|
39
|
+
key_passphrase 'notasecret'
|
40
|
+
issuer 'xxxxxxx@developer.gserviceaccount.com'
|
31
41
|
|
32
42
|
# Optional attributes
|
33
|
-
application_name
|
43
|
+
application_name 'My Application'
|
34
44
|
application_version '1.0.0'
|
35
45
|
|
36
46
|
end
|
@@ -47,14 +57,12 @@ development:
|
|
47
57
|
expires_in: 3600
|
48
58
|
```
|
49
59
|
|
50
|
-
### Multiple
|
60
|
+
### Multiple API clients using scopes
|
51
61
|
|
52
|
-
Specify a scope in the configuration `initializers/google_directory.rb`.
|
62
|
+
Specify a scope in the configuration `config/initializers/google_directory.rb`.
|
53
63
|
|
54
64
|
``` ruby
|
55
65
|
GoogleDirectory.configure do
|
56
|
-
|
57
|
-
use_yaml Rails.root.join('config', 'google_directory.yaml')
|
58
66
|
|
59
67
|
scope :domain_one do
|
60
68
|
admin_email 'admin@domain_one.com'
|
@@ -68,21 +76,21 @@ GoogleDirectory.configure do
|
|
68
76
|
|
69
77
|
end
|
70
78
|
```
|
71
|
-
Keep in mind that the Token Store will be the same for all the scopes configured.
|
72
79
|
|
73
80
|
## Usage
|
81
|
+
|
74
82
|
``` ruby
|
75
83
|
google = GoogleDirectory::Client.new
|
76
84
|
|
77
85
|
google.find_users
|
78
86
|
|
79
|
-
google.create_user(email, "given_name", "family_name", "password")
|
87
|
+
google.create_user("email", "given_name", "family_name", "password")
|
80
88
|
|
81
|
-
google.update_user(email, update_data)
|
89
|
+
google.update_user("email", update_data)
|
82
90
|
|
83
|
-
google.delete_user(email)
|
91
|
+
google.delete_user("email")
|
84
92
|
|
85
|
-
google.update_user_password(email, new_password)
|
93
|
+
google.update_user_password("email", "new_password")
|
86
94
|
|
87
95
|
```
|
88
96
|
|
@@ -100,5 +108,7 @@ domain_two.find_users
|
|
100
108
|
|
101
109
|
* `use_active_model` for database token store.
|
102
110
|
* Build the configuration generator.
|
103
|
-
* Implement more parameters
|
111
|
+
* Implement more parameters and calls to the Admin SDK.
|
112
|
+
* Better error handling.
|
113
|
+
* Documentation.
|
104
114
|
* Testing.
|
data/google-directory.gemspec
CHANGED
@@ -7,19 +7,18 @@ require "google-directory/version"
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "google-directory"
|
9
9
|
s.version = GoogleDirectory::VERSION
|
10
|
+
|
10
11
|
s.authors = ["Omar Osorio"]
|
11
12
|
s.email = ["omar@kioru.com"]
|
12
|
-
s.homepage = "https://github.com/
|
13
|
+
s.homepage = "https://github.com/kioru/google-directory"
|
14
|
+
|
13
15
|
s.summary = "Simple Google Directory API client wrapper for Rails"
|
14
|
-
s.description = "Relying on the Google Ruby API gem you are able to set up a Rails project for consuming the Directory API (or the Admin SDK). Even multiple domain access is
|
16
|
+
s.description = "Relying on the Google Ruby API gem you are able to set up a Rails project for consuming the Directory API (or the Admin SDK). Even multiple domain access is possible using scopes."
|
15
17
|
s.license = "MIT"
|
16
18
|
|
17
|
-
s.files = `git ls-files`.split("\
|
19
|
+
s.files = `git ls-files -z`.split("\x0")
|
18
20
|
s.test_files = Dir["test/**/*"]
|
19
21
|
s.require_paths = ['lib']
|
20
22
|
|
21
23
|
s.add_dependency 'google-api-client', '~> 0.8'
|
22
|
-
|
23
|
-
s.add_development_dependency 'rails', '~> 4.2'
|
24
|
-
s.add_development_dependency "sqlite3"
|
25
24
|
end
|
data/lib/google-directory.rb
CHANGED
@@ -4,109 +4,98 @@ require 'google/api_client'
|
|
4
4
|
|
5
5
|
module GoogleDirectory
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
config.save_token(token)
|
101
|
-
end
|
102
|
-
|
103
|
-
result = client.execute(opts)
|
104
|
-
return JSON.parse(result.body) if result.status == 200
|
105
|
-
return nil if [204, 404].include?(result.status)
|
106
|
-
|
107
|
-
Rails.logger.error("== Google ERROR ==\n\t- execute(#{opts})\n\t- response:\n#{result.response.to_yaml}")
|
108
|
-
|
109
|
-
end
|
110
|
-
end
|
7
|
+
class Client
|
8
|
+
|
9
|
+
attr_reader :directory_api, :client, :config, :result
|
10
|
+
|
11
|
+
def initialize(scope = :main)
|
12
|
+
@config = GoogleDirectory.configuration
|
13
|
+
@config = @config.using(scope) if @config.scope_name != scope
|
14
|
+
|
15
|
+
|
16
|
+
@key = Google::APIClient::KeyUtils.load_from_pkcs12(@config.key_file, @config.key_passphrase)
|
17
|
+
@client = Google::APIClient.new(:application_name => @config.application_name, :application_version => @config.application_version )
|
18
|
+
|
19
|
+
@client.authorization = Signet::OAuth2::Client.new(
|
20
|
+
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
|
21
|
+
:audience => 'https://accounts.google.com/o/oauth2/token',
|
22
|
+
:scope => 'https://www.googleapis.com/auth/admin.directory.user',
|
23
|
+
:issuer => @config.issuer,
|
24
|
+
:person => @config.admin_email,
|
25
|
+
:signing_key => @key
|
26
|
+
)
|
27
|
+
|
28
|
+
if token = @config.load_token
|
29
|
+
|
30
|
+
token['issued_at'] = Time.parse( token['issued_at'] )
|
31
|
+
@client.authorization.update_token!(token)
|
32
|
+
|
33
|
+
else
|
34
|
+
token = @client.authorization.fetch_access_token!
|
35
|
+
token['issued_at'] = @client.authorization.issued_at.to_s
|
36
|
+
@config.save_token(token)
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
@directory_api = @client.discovered_api('admin', 'directory_v1')
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
def find_users(params)
|
45
|
+
execute(:api_method => directory_api.users.list, :parameters => params)
|
46
|
+
end
|
47
|
+
|
48
|
+
def find_user_by_email(email)
|
49
|
+
execute(:api_method => directory_api.users.get, :parameters => { 'userKey' => email })
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# https://developers.google.com/admin-sdk/directory/v1/reference/users/insert
|
54
|
+
#
|
55
|
+
def create_user(email, given_name, family_name, password, opts = {})
|
56
|
+
opts = {
|
57
|
+
'name' => { 'givenName' => given_name, 'familyName' => family_name},
|
58
|
+
'password' => password,
|
59
|
+
'primaryEmail' => email,
|
60
|
+
'changePasswordAtNextLogin' => true
|
61
|
+
}.merge(opts)
|
62
|
+
|
63
|
+
execute(:api_method => directory_api.users.insert, :body_object => opts)
|
64
|
+
end
|
65
|
+
|
66
|
+
def delete_user(email)
|
67
|
+
execute(:api_method => directory_api.users.delete, :parameters => {'userKey' => email})
|
68
|
+
end
|
69
|
+
|
70
|
+
def update_user(email, update_data = {})
|
71
|
+
execute(:api_method => directory_api.users.update, :parameters => {'userKey' => email}, :body_object => update_data)
|
72
|
+
end
|
73
|
+
|
74
|
+
def update_user_password(email, password)
|
75
|
+
update_user(email, {'password' => password, 'changePasswordAtNextLogin' => false})
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def execute(opts)
|
81
|
+
if client.authorization.expired?
|
82
|
+
token = client.authorization.refresh!
|
83
|
+
token['issued_at'] = client.authorization.issued_at.to_s
|
84
|
+
config.save_token(token)
|
85
|
+
end
|
86
|
+
|
87
|
+
@result = client.execute(opts)
|
88
|
+
|
89
|
+
case result.status
|
90
|
+
when 204 then return true
|
91
|
+
when 404 then return false
|
92
|
+
when 200 then return JSON.parse(result.body)
|
93
|
+
end
|
94
|
+
|
95
|
+
Rails.logger.error("== Google ERROR ==\n\t- execute(#{opts})\n\t- response:\n#{result.response.to_yaml}")
|
96
|
+
|
97
|
+
false
|
98
|
+
end
|
99
|
+
end
|
111
100
|
|
112
101
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-directory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Omar Osorio
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-api-client
|
@@ -24,37 +24,9 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.8'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rails
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '4.2'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '4.2'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: sqlite3
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
27
|
description: Relying on the Google Ruby API gem you are able to set up a Rails project
|
56
28
|
for consuming the Directory API (or the Admin SDK). Even multiple domain access
|
57
|
-
is
|
29
|
+
is possible using scopes.
|
58
30
|
email:
|
59
31
|
- omar@kioru.com
|
60
32
|
executables: []
|
@@ -114,7 +86,7 @@ files:
|
|
114
86
|
- test/dummy/public/favicon.ico
|
115
87
|
- test/google-directory_test.rb
|
116
88
|
- test/test_helper.rb
|
117
|
-
homepage: https://github.com/
|
89
|
+
homepage: https://github.com/kioru/google-directory
|
118
90
|
licenses:
|
119
91
|
- MIT
|
120
92
|
metadata: {}
|