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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8d686d850e36f8f0ca476fa18866bfd73fb913de0e8b134a2fdca08b580a2187
4
- data.tar.gz: faa84394c013ca04239bd3f9a5659cf82129f90a8f5750a4cd8b8b2c1a66e07d
3
+ metadata.gz: 2c500b521381a697f0db03d78359f84358f9bbc518bb10fcceb5346032e1f473
4
+ data.tar.gz: 61a5059a6b49f492184d27b053b696927de371127abb5b1bb8b5bc0140af3d01
5
5
  SHA512:
6
- metadata.gz: 9f4af38fd52d322d6a2a4844e29c3c013c88f74af7e1a3c91e7fe5d540dbbbb28e973eb142f44ff97f46c0b35451a0fa008970c7ac4653e8fb075fe9f1e3ed45
7
- data.tar.gz: b70dc522431b30f6cdd4edc57bc3053090e2694e3ee8569f4ac54bd6cb137bbc88450da4d031e3376b551e1bd1bd9184a67090ff39ec746255b4dd030ad61050
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 'googleauth/stores/file_token_store'
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
- OOB_URI = ENV['OOB_URI'] || 'urn:ietf:wg:oauth:2.0:oob'
23
- CREDENTIALS_PATH = ENV['CREDENTIALS_PATH'] || File.join( Dir.home, '.credentials', "admin-directory_v1-ruby-accounts.yaml")
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
- client_id = Google::Auth::ClientId.from_file(CLIENT_SECRETS_PATH)
92
- token_store = Google::Auth::Stores::FileTokenStore.new(file: CREDENTIALS_PATH)
93
- authorizer = Google::Auth::UserAuthorizer.new( client_id, SCOPE, token_store )
94
- user_id = 'default'
95
- credentials = authorizer.get_credentials(user_id)
96
- if credentials.nil?
97
- url = authorizer.get_authorization_url(
98
- base_url: OOB_URI)
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
- user_object = Google::Apis::AdminDirectoryV1::User.new user_attr
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
- user_object = Google::Apis::AdminDirectoryV1::User.new user_attr
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
- response = service.list_users( filters )
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
 
@@ -1,5 +1,5 @@
1
1
  module GoogleDirectory
2
2
  module Version
3
- VERSION = "0.2.3"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
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.2.3
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: 2018-06-14 00:00:00.000000000 Z
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.21'
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.21'
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.16'
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.16'
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: '10.0'
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: '10.0'
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.0'
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.0'
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.11'
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.11'
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: '0'
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
- rubyforge_project:
117
- rubygems_version: 2.7.6
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: []