google_directory 0.2.3 → 1.0.0
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/lib/google_directory/connection.rb +13 -36
- data/lib/google_directory/user_commands.rb +18 -2
- data/lib/google_directory/users_commands.rb +2 -1
- data/lib/google_directory/version.rb +1 -1
- metadata +25 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2c500b521381a697f0db03d78359f84358f9bbc518bb10fcceb5346032e1f473
|
|
4
|
+
data.tar.gz: 61a5059a6b49f492184d27b053b696927de371127abb5b1bb8b5bc0140af3d01
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 218c568d547060affbac27d35f3361d61411991f11a1f90dd4e646c78f0cab19d785cd3725d249eb4d94d09f28deb60c1c7f470f10b39ec7065a6de4ef306c8d
|
|
7
|
+
data.tar.gz: 3b14d88941ee473e25987ab62effde623e65b18f2084cfa789fac640503c9cdda1df54b04733c6306a78e7ad0ab8e04caf481deffc30958ac6b9e9eade27be55
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
require 'google/apis/admin_directory_v1'
|
|
2
1
|
require 'googleauth'
|
|
3
|
-
require '
|
|
2
|
+
require 'google/apis/admin_directory_v1'
|
|
4
3
|
require 'fileutils'
|
|
5
|
-
|
|
6
4
|
require "google_directory/version"
|
|
7
5
|
require "google_directory/user_commands"
|
|
8
6
|
|
|
@@ -19,17 +17,17 @@ module GoogleDirectory
|
|
|
19
17
|
include GoogleDirectory::UserCommands
|
|
20
18
|
|
|
21
19
|
# default settings from google for all users
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
CREDENTIALS_PATH = ENV['CREDENTIALS_JSON_PATH']
|
|
21
|
+
SUB_ACCOUNT = ENV['SUB_ACCOUNT_NAME']
|
|
24
22
|
|
|
25
23
|
# Get info the Google Cloud Admin
|
|
26
24
|
# https://console.cloud.google.com/apis/ or
|
|
27
25
|
# build using: https://developers.google.com/api-client-library/ruby/guide/aaa_client_secrets
|
|
28
|
-
CLIENT_SECRETS_PATH = ENV['CLIENT_SECRETS_PATH'] || 'client_secret.json'
|
|
26
|
+
# CLIENT_SECRETS_PATH = ENV['CLIENT_SECRETS_PATH'] || 'client_secret.json'
|
|
29
27
|
|
|
30
28
|
# Scope options - https://www.googleapis.com/auth/admin.directory.user
|
|
31
29
|
# https://developers.google.com/admin-sdk/directory/v1/guides/authorizing
|
|
32
|
-
SCOPE = Google::Apis::AdminDirectoryV1::AUTH_ADMIN_DIRECTORY_USER
|
|
30
|
+
# SCOPE = Google::Apis::AdminDirectoryV1::AUTH_ADMIN_DIRECTORY_USER
|
|
33
31
|
# SCOPE = 'https://www.googleapis.com/auth/admin.directory.user'
|
|
34
32
|
|
|
35
33
|
# Initialize the API
|
|
@@ -39,9 +37,7 @@ module GoogleDirectory
|
|
|
39
37
|
# @note make connection to google directory services
|
|
40
38
|
# @param service [Class] the default is: Google::Apis::AdminDirectoryV1::DirectoryService
|
|
41
39
|
def initialize( service: Google::Apis::AdminDirectoryV1::DirectoryService )
|
|
42
|
-
app_name ||= ENV['APPLICATION_NAME'] || 'google_cloud_app_name'
|
|
43
40
|
@service = service.new
|
|
44
|
-
@service.client_options.application_name = app_name
|
|
45
41
|
@service.authorization = authorize
|
|
46
42
|
end
|
|
47
43
|
|
|
@@ -49,8 +45,6 @@ module GoogleDirectory
|
|
|
49
45
|
VERSION
|
|
50
46
|
end
|
|
51
47
|
|
|
52
|
-
# @note Run a command against Google Directory
|
|
53
|
-
#
|
|
54
48
|
# @param command [Symbol] choose command to perform these include: :user_get, :user_exists? (t/f), :user_create, :user_delete, :user_update & convience commands :user_suspend, :user_reactivate, :user_change_password
|
|
55
49
|
# @param attributes [Hash] attributes needed to perform command
|
|
56
50
|
# @return [Hash] formatted as: `{success: {command: :command, attributes: {primary_email: "user@domain"}, response: GoogleAnswer} }`
|
|
@@ -78,32 +72,15 @@ module GoogleDirectory
|
|
|
78
72
|
|
|
79
73
|
private
|
|
80
74
|
attr_reader :service
|
|
81
|
-
##
|
|
82
|
-
# FROM:
|
|
83
|
-
# https://www.rubydoc.info/github/google/google-api-ruby-client/Google/Apis/AdminDirectoryV1/DirectoryService
|
|
84
|
-
# Ensure valid credentials, either by restoring from the saved credentials
|
|
85
|
-
# files or intitiating an OAuth2 authorization. If authorization is required,
|
|
86
|
-
# the user's default browser will be launched to approve the request.
|
|
87
|
-
# @return [Google::Auth::UserRefreshCredentials] OAuth2 credentials
|
|
88
|
-
def authorize
|
|
89
|
-
FileUtils.mkdir_p(File.dirname(CREDENTIALS_PATH))
|
|
90
75
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
authorizer
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
puts "Open the following URL in the browser and enter the " +
|
|
100
|
-
"resulting code after authorization"
|
|
101
|
-
puts url
|
|
102
|
-
code = gets
|
|
103
|
-
credentials = authorizer.get_and_store_credentials_from_code(
|
|
104
|
-
user_id: user_id, code: code, base_url: OOB_URI)
|
|
105
|
-
end
|
|
106
|
-
credentials
|
|
76
|
+
def authorize
|
|
77
|
+
scope = ['https://www.googleapis.com/auth/admin.directory.user', 'https://www.googleapis.com/auth/admin.directory.user.security']
|
|
78
|
+
authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
|
|
79
|
+
json_key_io: File.open(CREDENTIALS_PATH),
|
|
80
|
+
scope: scope)
|
|
81
|
+
authorizer.update!(sub: SUB_ACCOUNT)
|
|
82
|
+
authorizer.fetch_access_token!
|
|
83
|
+
return authorizer
|
|
107
84
|
end
|
|
108
85
|
end
|
|
109
86
|
end
|
|
@@ -43,7 +43,15 @@ module GoogleDirectory
|
|
|
43
43
|
defaults = { suspended: true, password: password, change_password_at_next_login: true }
|
|
44
44
|
user_attr = defaults.merge( attributes )
|
|
45
45
|
# create a google user object
|
|
46
|
-
|
|
46
|
+
# Ruby 3: pass keyword args instead of positional Hash
|
|
47
|
+
# Also coerce nested :name Hash into a UserName object if provided
|
|
48
|
+
if user_attr[:name].is_a?(Hash)
|
|
49
|
+
name_hash = user_attr[:name]
|
|
50
|
+
user_attr = user_attr.merge(
|
|
51
|
+
name: Google::Apis::AdminDirectoryV1::UserName.new(**name_hash.transform_keys(&:to_sym))
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
user_object = Google::Apis::AdminDirectoryV1::User.new(**user_attr)
|
|
47
55
|
# create user in directory services
|
|
48
56
|
response = service.insert_user( user_object )
|
|
49
57
|
{response: response, attributes: attributes[:primary_email], command: :user_create}
|
|
@@ -108,7 +116,15 @@ module GoogleDirectory
|
|
|
108
116
|
private
|
|
109
117
|
def update_user( user_attr )
|
|
110
118
|
# create a user object that google will create
|
|
111
|
-
|
|
119
|
+
# Ruby 3: pass keyword args instead of positional Hash
|
|
120
|
+
# Also coerce nested :name Hash into a UserName object if provided
|
|
121
|
+
if user_attr[:name].is_a?(Hash)
|
|
122
|
+
name_hash = user_attr[:name]
|
|
123
|
+
user_attr = user_attr.merge(
|
|
124
|
+
name: Google::Apis::AdminDirectoryV1::UserName.new(**name_hash.transform_keys(&:to_sym))
|
|
125
|
+
)
|
|
126
|
+
end
|
|
127
|
+
user_object = Google::Apis::AdminDirectoryV1::User.new(**user_attr)
|
|
112
128
|
# send user object to google directory
|
|
113
129
|
service.update_user( user_attr[:primary_email], user_object )
|
|
114
130
|
end
|
|
@@ -16,7 +16,8 @@ module GoogleDirectory
|
|
|
16
16
|
def users_list( attributes: {} )
|
|
17
17
|
defaults = { max_results: 10, order_by: 'email' }
|
|
18
18
|
filters = defaults.merge( attributes )
|
|
19
|
-
|
|
19
|
+
# Ruby 3: DirectoryService#list_users accepts only keyword args
|
|
20
|
+
response = service.list_users(**filters)
|
|
20
21
|
{response: response, attributes: filters, command: :users_list}
|
|
21
22
|
end
|
|
22
23
|
|
metadata
CHANGED
|
@@ -1,86 +1,92 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: google_directory
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Bill Tihen
|
|
8
8
|
- Lee Weisbecker
|
|
9
|
-
autorequire:
|
|
9
|
+
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2025-11-20 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: google-api-client
|
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
|
17
17
|
requirements:
|
|
18
|
-
- - "
|
|
18
|
+
- - ">="
|
|
19
|
+
- !ruby/object:Gem::Version
|
|
20
|
+
version: '0.53'
|
|
21
|
+
- - "<"
|
|
19
22
|
- !ruby/object:Gem::Version
|
|
20
|
-
version: '0
|
|
23
|
+
version: '1.0'
|
|
21
24
|
type: :runtime
|
|
22
25
|
prerelease: false
|
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
27
|
requirements:
|
|
25
|
-
- - "
|
|
28
|
+
- - ">="
|
|
26
29
|
- !ruby/object:Gem::Version
|
|
27
|
-
version: '0.
|
|
30
|
+
version: '0.53'
|
|
31
|
+
- - "<"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '1.0'
|
|
28
34
|
- !ruby/object:Gem::Dependency
|
|
29
35
|
name: bundler
|
|
30
36
|
requirement: !ruby/object:Gem::Requirement
|
|
31
37
|
requirements:
|
|
32
38
|
- - "~>"
|
|
33
39
|
- !ruby/object:Gem::Version
|
|
34
|
-
version: '1
|
|
40
|
+
version: '2.1'
|
|
35
41
|
type: :development
|
|
36
42
|
prerelease: false
|
|
37
43
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
44
|
requirements:
|
|
39
45
|
- - "~>"
|
|
40
46
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: '1
|
|
47
|
+
version: '2.1'
|
|
42
48
|
- !ruby/object:Gem::Dependency
|
|
43
49
|
name: rake
|
|
44
50
|
requirement: !ruby/object:Gem::Requirement
|
|
45
51
|
requirements:
|
|
46
52
|
- - "~>"
|
|
47
53
|
- !ruby/object:Gem::Version
|
|
48
|
-
version: '
|
|
54
|
+
version: '13.0'
|
|
49
55
|
type: :development
|
|
50
56
|
prerelease: false
|
|
51
57
|
version_requirements: !ruby/object:Gem::Requirement
|
|
52
58
|
requirements:
|
|
53
59
|
- - "~>"
|
|
54
60
|
- !ruby/object:Gem::Version
|
|
55
|
-
version: '
|
|
61
|
+
version: '13.0'
|
|
56
62
|
- !ruby/object:Gem::Dependency
|
|
57
63
|
name: rspec
|
|
58
64
|
requirement: !ruby/object:Gem::Requirement
|
|
59
65
|
requirements:
|
|
60
66
|
- - "~>"
|
|
61
67
|
- !ruby/object:Gem::Version
|
|
62
|
-
version: '3.
|
|
68
|
+
version: '3.9'
|
|
63
69
|
type: :development
|
|
64
70
|
prerelease: false
|
|
65
71
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
72
|
requirements:
|
|
67
73
|
- - "~>"
|
|
68
74
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: '3.
|
|
75
|
+
version: '3.9'
|
|
70
76
|
- !ruby/object:Gem::Dependency
|
|
71
77
|
name: pry
|
|
72
78
|
requirement: !ruby/object:Gem::Requirement
|
|
73
79
|
requirements:
|
|
74
80
|
- - "~>"
|
|
75
81
|
- !ruby/object:Gem::Version
|
|
76
|
-
version: '0.
|
|
82
|
+
version: '0.12'
|
|
77
83
|
type: :development
|
|
78
84
|
prerelease: false
|
|
79
85
|
version_requirements: !ruby/object:Gem::Requirement
|
|
80
86
|
requirements:
|
|
81
87
|
- - "~>"
|
|
82
88
|
- !ruby/object:Gem::Version
|
|
83
|
-
version: '0.
|
|
89
|
+
version: '0.12'
|
|
84
90
|
description: Authenticate, list, make, check, suspend and activate google users.
|
|
85
91
|
email:
|
|
86
92
|
- btihen@gmail.com
|
|
@@ -98,7 +104,7 @@ homepage: https://github.com/LAS-IT/google_directory
|
|
|
98
104
|
licenses:
|
|
99
105
|
- MIT
|
|
100
106
|
metadata: {}
|
|
101
|
-
post_install_message:
|
|
107
|
+
post_install_message:
|
|
102
108
|
rdoc_options: []
|
|
103
109
|
require_paths:
|
|
104
110
|
- lib
|
|
@@ -106,16 +112,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
106
112
|
requirements:
|
|
107
113
|
- - ">="
|
|
108
114
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: '
|
|
115
|
+
version: '2.7'
|
|
110
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
117
|
requirements:
|
|
112
118
|
- - ">="
|
|
113
119
|
- !ruby/object:Gem::Version
|
|
114
120
|
version: '0'
|
|
115
121
|
requirements: []
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
signing_key:
|
|
122
|
+
rubygems_version: 3.1.6
|
|
123
|
+
signing_key:
|
|
119
124
|
specification_version: 4
|
|
120
125
|
summary: Simple ruby wrapper to manage google accounts - using oauth2.
|
|
121
126
|
test_files: []
|