gitlab_support_readiness 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/support_readiness/client.rb +108 -0
- data/lib/support_readiness/gitlab/client.rb +64 -0
- data/lib/support_readiness/gitlab/configuration.rb +46 -0
- data/lib/support_readiness/gitlab/groups.rb +180 -0
- data/lib/support_readiness/gitlab/issues.rb +410 -0
- data/lib/support_readiness/gitlab/namespaces.rb +190 -0
- data/lib/support_readiness/gitlab/projects.rb +510 -0
- data/lib/support_readiness/gitlab/repositories.rb +267 -0
- data/lib/support_readiness/gitlab/users.rb +488 -0
- data/lib/support_readiness/gitlab.rb +19 -0
- data/lib/support_readiness/pagerduty/client.rb +66 -0
- data/lib/support_readiness/pagerduty/configuration.rb +43 -0
- data/lib/support_readiness/pagerduty/escalation_policies.rb +123 -0
- data/lib/support_readiness/pagerduty/schedules.rb +223 -0
- data/lib/support_readiness/pagerduty/services.rb +132 -0
- data/lib/support_readiness/pagerduty.rb +16 -0
- data/lib/support_readiness/redis.rb +90 -0
- data/lib/support_readiness/zendesk/articles.rb +210 -0
- data/lib/support_readiness/zendesk/automations.rb +304 -0
- data/lib/support_readiness/zendesk/client.rb +84 -0
- data/lib/support_readiness/zendesk/configuration.rb +49 -0
- data/lib/support_readiness/zendesk/group_memberships.rb +256 -0
- data/lib/support_readiness/zendesk/groups.rb +249 -0
- data/lib/support_readiness/zendesk/job_statuses.rb +188 -0
- data/lib/support_readiness/zendesk/macros.rb +267 -0
- data/lib/support_readiness/zendesk/organization_fields.rb +233 -0
- data/lib/support_readiness/zendesk/organization_memberships.rb +257 -0
- data/lib/support_readiness/zendesk/organizations.rb +515 -0
- data/lib/support_readiness/zendesk/roles.rb +194 -0
- data/lib/support_readiness/zendesk/search.rb +159 -0
- data/lib/support_readiness/zendesk/sla_policies.rb +232 -0
- data/lib/support_readiness/zendesk/ticket_fields.rb +222 -0
- data/lib/support_readiness/zendesk/ticket_forms.rb +290 -0
- data/lib/support_readiness/zendesk/tickets.rb +854 -0
- data/lib/support_readiness/zendesk/triggers.rb +269 -0
- data/lib/support_readiness/zendesk/users.rb +946 -0
- data/lib/support_readiness/zendesk/views.rb +469 -0
- data/lib/support_readiness/zendesk.rb +31 -0
- data/lib/support_readiness.rb +29 -0
- metadata +215 -0
@@ -0,0 +1,488 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Defines the module Readiness.
|
4
|
+
module Readiness
|
5
|
+
# Defines the module GitLab
|
6
|
+
module GitLab
|
7
|
+
##
|
8
|
+
# Defines the class Projects within the module {Readiness::GitLab}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
# @todo Anything listed on https://docs.gitlab.com/ee/api/users.html not currently here
|
13
|
+
class Users < Readiness::Client
|
14
|
+
attr_accessor :avatar_url, :bio, :bot, :can_create_group, :can_create_project, :color_scheme_id, :commit_email, :confirmed_at, :created_at, :created_by, :current_sign_in_at, :current_sign_in_ip, :discord, :email, :email_reset_offered_at, :enterprise_group_associated_at, :enterprise_group_id, :external, :extra_shared_runners_minutes_limit, :followers, :following, :highest_role, :id, :identities, :is_admin, :is_auditor, :is_followed, :job_title, :last_activity_on, :last_sign_in_at, :last_sign_in_ip, :linkedin, :local_time, :location, :locked, :name, :namespace_id, :note, :organization, :plan, :private_profile, :projects_limit, :pronouns, :provisioned_by_group_id, :public_email, :scim_identities, :shared_runners_minutes_limit, :sign_in_count, :skype, :state, :theme_id, :trial, :twitter, :two_factor_enabled, :username, :using_license_seat, :website_url, :web_url, :work_information
|
15
|
+
|
16
|
+
##
|
17
|
+
# Creates a new {Readiness::GitLab::Users} instance
|
18
|
+
#
|
19
|
+
# @author Jason Colyer
|
20
|
+
# @since 1.0.0
|
21
|
+
# @param object [Object] An instance of {Readiness::GitLab::Users}
|
22
|
+
# @example
|
23
|
+
# require 'support_readiness'
|
24
|
+
# Readiness::GitLab::Users.new
|
25
|
+
def initialize(object = {})
|
26
|
+
@avatar_url = object['avatar_url']
|
27
|
+
@bio = object['bio']
|
28
|
+
@bot = object['bot']
|
29
|
+
@can_create_group = object['can_create_group']
|
30
|
+
@can_create_project = object['can_create_project']
|
31
|
+
@color_scheme_id = object['color_scheme_id']
|
32
|
+
@commit_email = object['commit_email']
|
33
|
+
@confirmed_at = object['confirmed_at']
|
34
|
+
@created_at = object['created_at']
|
35
|
+
@created_by = object['created_by']
|
36
|
+
@current_sign_in_at = object['current_sign_in_at']
|
37
|
+
@current_sign_in_ip = object['current_sign_in_ip']
|
38
|
+
@discord = object['discord']
|
39
|
+
@email = object['email']
|
40
|
+
@email_reset_offered_at = object['email_reset_offered_at']
|
41
|
+
@enterprise_group_associated_at = object['enterprise_group_associated_at']
|
42
|
+
@enterprise_group_id = object['enterprise_group_id']
|
43
|
+
@external = object['external']
|
44
|
+
@extra_shared_runners_minutes_limit = object['extra_shared_runners_minutes_limit']
|
45
|
+
@followers = object['followers']
|
46
|
+
@following = object['following']
|
47
|
+
@highest_role = object['highest_role']
|
48
|
+
@id = object['id']
|
49
|
+
@identities = object['identities']
|
50
|
+
@is_admin = object['is_admin']
|
51
|
+
@is_auditor = object['is_auditor']
|
52
|
+
@is_followed = object['is_followed']
|
53
|
+
@job_title = object['job_title']
|
54
|
+
@last_activity_on = object['last_activity_on']
|
55
|
+
@last_sign_in_at = object['last_sign_in_at']
|
56
|
+
@last_sign_in_ip = object['last_sign_in_ip']
|
57
|
+
@linkedin = object['linkedin']
|
58
|
+
@local_time = object['local_time']
|
59
|
+
@location = object['location']
|
60
|
+
@locked = object['locked']
|
61
|
+
@name = object['name']
|
62
|
+
@namespace_id = object['namespace_id']
|
63
|
+
@note = object['note']
|
64
|
+
@organization = object['organization']
|
65
|
+
@plan = object['plan']
|
66
|
+
@private_profile = object['private_profile']
|
67
|
+
@projects_limit = object['projects_limit']
|
68
|
+
@pronouns = object['pronouns']
|
69
|
+
@provisioned_by_group_id = object['provisioned_by_group_id']
|
70
|
+
@public_email = object['public_email']
|
71
|
+
@scim_identities = object['scim_identities']
|
72
|
+
@shared_runners_minutes_limit = object['shared_runners_minutes_limit']
|
73
|
+
@sign_in_count = object['sign_in_count']
|
74
|
+
@skype = object['skype']
|
75
|
+
@state = object['state']
|
76
|
+
@theme_id = object['theme_id']
|
77
|
+
@trial = object['trial']
|
78
|
+
@twitter = object['twitter']
|
79
|
+
@two_factor_enabled = object['two_factor_enabled']
|
80
|
+
@username = object['username']
|
81
|
+
@using_license_seat = object['using_license_seat']
|
82
|
+
@website_url = object['website_url']
|
83
|
+
@web_url = object['web_url']
|
84
|
+
@work_information = object['work_information']
|
85
|
+
end
|
86
|
+
|
87
|
+
##
|
88
|
+
# Locates a user within GitLab. This will not exit on error (except Authentication errors)
|
89
|
+
#
|
90
|
+
# @author Jason Colyer
|
91
|
+
# @since 1.0.0
|
92
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
93
|
+
# @param uid [Integer] The user ID to find
|
94
|
+
# @return [Hash]
|
95
|
+
# @see https://docs.gitlab.com/ee/api/users.html#get-a-single-user GitLab API > Users > Get a single user
|
96
|
+
# @example
|
97
|
+
# require 'support_readiness'
|
98
|
+
# config = Readiness::GitLab::Configuration.new
|
99
|
+
# config.token = 'test123abc'
|
100
|
+
# client = Readiness::GitLab::Client.new(config)
|
101
|
+
# user = Readiness::GitLab::Users.find(client, 123456)
|
102
|
+
# pp user.username
|
103
|
+
# # => 'test_user123456'
|
104
|
+
def self.find(client, uid)
|
105
|
+
response = client.connection.get "users/#{uid}"
|
106
|
+
handle_request_error(0, 'GitLab', response.status, { action: 'get', id: uid }) unless response.status == 200
|
107
|
+
return Users.new(Oj.load(response.body)) if response.status == 200
|
108
|
+
|
109
|
+
Oj.load(response.body)
|
110
|
+
end
|
111
|
+
|
112
|
+
##
|
113
|
+
# Locates a user within GitLab. This will exit on error
|
114
|
+
#
|
115
|
+
# @author Jason Colyer
|
116
|
+
# @since 1.0.0
|
117
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
118
|
+
# @param uid [Integer] The user ID to find
|
119
|
+
# @return [Object] An instance of {Readiness::GitLab::Users}
|
120
|
+
# @see https://docs.gitlab.com/ee/api/users.html#get-a-single-user GitLab API > Users > Get a single user
|
121
|
+
# @example
|
122
|
+
# require 'support_readiness'
|
123
|
+
# config = Readiness::GitLab::Configuration.new
|
124
|
+
# config.token = 'test123abc'
|
125
|
+
# client = Readiness::GitLab::Client.new(config)
|
126
|
+
# user = Readiness::GitLab::Users.find!(client, 123456)
|
127
|
+
# pp user.username
|
128
|
+
# # => 'test_user123456'
|
129
|
+
def self.find!(client, uid, attributes = [])
|
130
|
+
response = client.connection.get "users/#{uid}"
|
131
|
+
handle_request_error(1, 'GitLab', response.status, { action: 'Find user', id: uid }) unless response.status == 200
|
132
|
+
Users.new(Oj.load(response.body))
|
133
|
+
end
|
134
|
+
|
135
|
+
##
|
136
|
+
# Locates the first 20 users matching a username within GitLab.
|
137
|
+
#
|
138
|
+
# @author Jason Colyer
|
139
|
+
# @since 1.0.0
|
140
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
141
|
+
# @param username [String] The username to look for
|
142
|
+
# @return [Array]
|
143
|
+
# @see https://docs.gitlab.com/ee/api/users.html#list-users GitLab API > Users > List users
|
144
|
+
# @example
|
145
|
+
# require 'support_readiness'
|
146
|
+
# config = Readiness::GitLab::Configuration.new
|
147
|
+
# config.token = 'test123abc'
|
148
|
+
# client = Readiness::GitLab::Client.new(config)
|
149
|
+
# users = Readiness::GitLab::Users.search_by_username(client, 'test_user123456')
|
150
|
+
# pp users.first.id
|
151
|
+
# # => 123456
|
152
|
+
def self.search_by_username(client, username)
|
153
|
+
response = client.connection.get "users?username=#{username}"
|
154
|
+
handle_request_error(0, 'GitLab', response.status, { action: 'Find user by username', id: username }) unless response.status == 200
|
155
|
+
Oj.load(response.body).map { |u| Users.new(u) }
|
156
|
+
end
|
157
|
+
|
158
|
+
##
|
159
|
+
# Locates the first 20 users matching a email within GitLab.
|
160
|
+
#
|
161
|
+
# @author Jason Colyer
|
162
|
+
# @since 1.0.0
|
163
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
164
|
+
# @param email [String] The email to look for
|
165
|
+
# @return [Array]
|
166
|
+
# @see https://docs.gitlab.com/ee/api/users.html#list-users GitLab API > Users > List users
|
167
|
+
# @example
|
168
|
+
# require 'support_readiness'
|
169
|
+
# config = Readiness::GitLab::Configuration.new
|
170
|
+
# config.token = 'test123abc'
|
171
|
+
# client = Readiness::GitLab::Client.new(config)
|
172
|
+
# users = Readiness::GitLab::Users.search_by_email(client, 'test_user123456@example.com')
|
173
|
+
# pp users.first.name
|
174
|
+
# # => "test_user_123456"
|
175
|
+
def self.search_by_email(client, email)
|
176
|
+
response = client.connection.get "users?search=#{CGI.escape(email)}"
|
177
|
+
handle_request_error(0, 'GitLab', response.status, { action: 'Find user by email', id: email }) unless response.status == 200
|
178
|
+
Oj.load(response.body).map { |u| Users.new(u) }
|
179
|
+
end
|
180
|
+
|
181
|
+
##
|
182
|
+
# Updates a user within GitLab. This will exit on error
|
183
|
+
#
|
184
|
+
# @author Jason Colyer
|
185
|
+
# @since 1.0.0
|
186
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
187
|
+
# @param user [Object] An instance of {Readiness::GitLab::Users}
|
188
|
+
# @return [Object] An instance of {Readiness::GitLab::Users}
|
189
|
+
# @see https://docs.gitlab.com/ee/api/users.html#modify-a-user GitLab API > Users > Modify a user
|
190
|
+
# @example
|
191
|
+
# require 'support_readiness'
|
192
|
+
# config = Readiness::GitLab::Configuration.new
|
193
|
+
# config.token = 'test123abc'
|
194
|
+
# client = Readiness::GitLab::Client.new(config)
|
195
|
+
# user = Readiness::GitLab::Users.find!(client, 123456)
|
196
|
+
# user.name = 'Test User 123456'
|
197
|
+
# update = Readiness::GitLab::Users.update!(client, user)
|
198
|
+
# pp update.name
|
199
|
+
# # => "Test User 123456"
|
200
|
+
def self.update!(client, user)
|
201
|
+
response = client.connection.put "users/#{user.id}", to_clean_json(user)
|
202
|
+
handle_request_error(1, 'GitLab', response.status, { action: 'Update an user', id: "#{user.id}" }) unless response.status == 200
|
203
|
+
Users.new(Oj.load(response.body))
|
204
|
+
end
|
205
|
+
|
206
|
+
##
|
207
|
+
# Lists all memberships for a user.
|
208
|
+
# This method can take a long time to run depending on the parameters used.
|
209
|
+
#
|
210
|
+
# @author Jason Colyer
|
211
|
+
# @since 1.0.0
|
212
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
213
|
+
# @param user [Object] An instance of {Readiness::GitLab::Users}
|
214
|
+
# @param params [Array] An array of filter Strings to use. Should be in the format of key=value
|
215
|
+
# @return [Array]
|
216
|
+
# @see https://docs.gitlab.com/ee/api/users.html#user-memberships GitLab API > Users > Get memberships
|
217
|
+
# @example
|
218
|
+
# require 'support_readiness'
|
219
|
+
# config = Readiness::GitLab::Configuration.new
|
220
|
+
# config.token = 'test123abc'
|
221
|
+
# client = Readiness::GitLab::Client.new(config)
|
222
|
+
# user = Readiness::GitLab::Users.find!(client, 123456)
|
223
|
+
# memberships = Readiness::GitLab::Users.memberships(client, user)
|
224
|
+
# pp memberships.select { |m| m['access_level'] == 50 }.count
|
225
|
+
# # => 28
|
226
|
+
def self.memberships(client, user, params = [])
|
227
|
+
array = []
|
228
|
+
page = 1
|
229
|
+
loop do
|
230
|
+
response = client.connection.get "users/#{user.id}/memberships?per_page=100&page=#{page}&#{to_param_string(filters)}"
|
231
|
+
handle_request_error(0, 'GitLab', response.status) unless response.status == 200
|
232
|
+
body = Oj.load(response.body)
|
233
|
+
array += body
|
234
|
+
break if body.count < 100
|
235
|
+
|
236
|
+
page += 1
|
237
|
+
end
|
238
|
+
array
|
239
|
+
end
|
240
|
+
|
241
|
+
##
|
242
|
+
# Lists all user projects.
|
243
|
+
# This method can take a long time to run depending on the parameters used.
|
244
|
+
#
|
245
|
+
# @author Jason Colyer
|
246
|
+
# @since 1.0.0
|
247
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
248
|
+
# @param user [Object] An instance of {Readiness::GitLab::Users}
|
249
|
+
# @param filters [Array] An array of filter Strings to use. Should be in the format of key=value
|
250
|
+
# @return [Array]
|
251
|
+
# @see https://docs.gitlab.com/ee/api/projects.html#list-user-projects GitLab API > Projects > List user projects
|
252
|
+
# @example
|
253
|
+
# require 'support_readiness'
|
254
|
+
# config = Readiness::GitLab::Configuration.new
|
255
|
+
# config.token = 'test123abc'
|
256
|
+
# client = Readiness::GitLab::Client.new(config)
|
257
|
+
# user = Readiness::GitLab::Users.find!(client, 123456)
|
258
|
+
# memberships = Readiness::GitLab::Users.projects(client, user)
|
259
|
+
# pp projects.first.web_url
|
260
|
+
# # => "https://gitlab.com/test_user123456/awesome_project"
|
261
|
+
def self.projects(client, user, filters = [])
|
262
|
+
array = []
|
263
|
+
page = 1
|
264
|
+
loop do
|
265
|
+
response = client.connection.get "users/#{user.id}/projects?per_page=100&page=#{page}&#{to_param_string(filters)}"
|
266
|
+
handle_request_error(0, 'GitLab', response.status) unless response.status == 200
|
267
|
+
body = Oj.load(response.body)
|
268
|
+
array += body.map { |p| Projects.new(p) }
|
269
|
+
break if body.count < 100
|
270
|
+
|
271
|
+
page += 1
|
272
|
+
end
|
273
|
+
array
|
274
|
+
end
|
275
|
+
|
276
|
+
##
|
277
|
+
# Lists SSH keys for a user.
|
278
|
+
#
|
279
|
+
# @author Jason Colyer
|
280
|
+
# @since 1.0.0
|
281
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
282
|
+
# @param user [Object] An instance of {Readiness::GitLab::Users}
|
283
|
+
# @return [Array]
|
284
|
+
# @see https://docs.gitlab.com/ee/api/user_keys.html#list-ssh-keys-for-a-user GitLab API > Users > SSH and GPG keys > List SSH keys for a user
|
285
|
+
# @example
|
286
|
+
# require 'support_readiness'
|
287
|
+
# config = Readiness::GitLab::Configuration.new
|
288
|
+
# config.token = 'test123abc'
|
289
|
+
# client = Readiness::GitLab::Client.new(config)
|
290
|
+
# user = Readiness::GitLab::Users.find!(client, 2672834)
|
291
|
+
# keys = Readiness::GitLab::Users.ssh_keys(client, user)
|
292
|
+
# pp keys.last['title']
|
293
|
+
# # => "Linux Laptop"
|
294
|
+
def self.ssh_keys(client, user)
|
295
|
+
response = client.connection.get "users/#{user.id}/keys"
|
296
|
+
handle_request_error(0, 'GitLab', response.status) unless response.status == 200
|
297
|
+
Oj.load(response.body)
|
298
|
+
end
|
299
|
+
|
300
|
+
##
|
301
|
+
# Lists SSH keys for a user.
|
302
|
+
#
|
303
|
+
# @author Jason Colyer
|
304
|
+
# @since 1.0.0
|
305
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
306
|
+
# @param user [Object] An instance of {Readiness::GitLab::Users}
|
307
|
+
# @return [Array]
|
308
|
+
# @see https://docs.gitlab.com/ee/api/user_keys.html#list-gpg-keys-for-a-user GitLab API > Users > SSH and GPG keys > List GPG keys for a user
|
309
|
+
# @example
|
310
|
+
# require 'support_readiness'
|
311
|
+
# config = Readiness::GitLab::Configuration.new
|
312
|
+
# config.token = 'test123abc'
|
313
|
+
# client = Readiness::GitLab::Client.new(config)
|
314
|
+
# user = Readiness::GitLab::Users.find!(client, 2672834)
|
315
|
+
# keys = Readiness::GitLab::Users.gpg_keys(client, user)
|
316
|
+
# pp keys.count
|
317
|
+
# # => 1
|
318
|
+
def self.gpg_keys(client, user)
|
319
|
+
response = client.connection.get "users/#{user.id}/gpg_keys"
|
320
|
+
handle_request_error(0, 'GitLab', response.status) unless response.status == 200
|
321
|
+
Oj.load(response.body)
|
322
|
+
end
|
323
|
+
|
324
|
+
##
|
325
|
+
# Lists all personal access tokens for a user.
|
326
|
+
# This method can take a long time to run depending on the parameters used.
|
327
|
+
#
|
328
|
+
# @author Jason Colyer
|
329
|
+
# @since 1.0.0
|
330
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
331
|
+
# @param user [Object] An instance of {Readiness::GitLab::Users}
|
332
|
+
# @param filters [Array] An array of filter Strings to use. Should be in the format of key=value
|
333
|
+
# @return [Array]
|
334
|
+
# @see https://docs.gitlab.com/ee/api/personal_access_tokens.html#list-personal-access-tokens GitLab API > Personal access tokens > List personal access tokens
|
335
|
+
# @example
|
336
|
+
# require 'support_readiness'
|
337
|
+
# config = Readiness::GitLab::Configuration.new
|
338
|
+
# config.token = 'test123abc'
|
339
|
+
# client = Readiness::GitLab::Client.new(config)
|
340
|
+
# user = Readiness::GitLab::Users.find!(client, 2672834)
|
341
|
+
# tokens = Readiness::GitLab::Users.tokens(client, user)
|
342
|
+
# pp tokens.select { |t| Date.parse(t['expires_at']) <= (Date.today + 7.days) }.count
|
343
|
+
# # => 3
|
344
|
+
def self.tokens(client, user, filters = [])
|
345
|
+
array = []
|
346
|
+
page = 1
|
347
|
+
loop do
|
348
|
+
response = client.connection.get "personal_access_tokens?user_id=#{user.id}&per_page=100&page=#{page}&#{to_param_string(filters)}"
|
349
|
+
handle_request_error(0, 'GitLab', response.status) unless response.status == 200
|
350
|
+
body = Oj.load(response.body)
|
351
|
+
array += body
|
352
|
+
break if body.count < 100
|
353
|
+
|
354
|
+
page += 1
|
355
|
+
end
|
356
|
+
array
|
357
|
+
end
|
358
|
+
|
359
|
+
##
|
360
|
+
# Creates a personal access token for a user within GitLab. This will exit on error
|
361
|
+
#
|
362
|
+
# @author Jason Colyer
|
363
|
+
# @since 1.0.0
|
364
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
365
|
+
# @param user [Object] An instance of {Readiness::GitLab::Users}
|
366
|
+
# @param params [Hash] The parameters to create the token with. At a minimum needs { name: 'xxx' }.
|
367
|
+
# @return [Object] An instance of {Readiness::GitLab::Users}
|
368
|
+
# @see https://docs.gitlab.com/ee/api/user_tokens.html#create-a-personal-access-token GitLab API > Users > User tokens
|
369
|
+
# @example
|
370
|
+
# require 'support_readiness'
|
371
|
+
# config = Readiness::GitLab::Configuration.new
|
372
|
+
# config.token = 'test123abc'
|
373
|
+
# client = Readiness::GitLab::Client.new(config)
|
374
|
+
# user = Readiness::GitLab::Users.find!(client, 2672834)
|
375
|
+
# token_params = {
|
376
|
+
# name: 'Token for updating submodule of test_user123456/awesome_project',
|
377
|
+
# expires_at: '2024-10-13',
|
378
|
+
# scopes: [
|
379
|
+
# 'api'
|
380
|
+
# ]
|
381
|
+
# }
|
382
|
+
# token = Readiness::GitLab::Users.create_token!(client, user, token_params)
|
383
|
+
# pp token['token']
|
384
|
+
# # => "s3cr3t1"
|
385
|
+
def self.create_token!(client, user, params)
|
386
|
+
response = client.connection.post "users/#{user.id}/personal_access_tokens", to_clean_json(params)
|
387
|
+
handle_request_error(1, 'GitLab', response.status, { action: 'Create PAT for a user', id: "#{user.id}" }) unless response.status == 200
|
388
|
+
Oj.load(response.body)
|
389
|
+
end
|
390
|
+
|
391
|
+
##
|
392
|
+
# Revokes a personal access token within GitLab. This will exit on error
|
393
|
+
#
|
394
|
+
# @author Jason Colyer
|
395
|
+
# @since 1.0.0
|
396
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
397
|
+
# @param tid [Integer] The personal access token ID
|
398
|
+
# @return [Boolean]
|
399
|
+
# @see https://docs.gitlab.com/ee/api/personal_access_tokens.html#revoke-a-personal-access-token GitLab API > Personal access tokens > Revoke a personal access token
|
400
|
+
# @example
|
401
|
+
# require 'support_readiness'
|
402
|
+
# config = Readiness::GitLab::Configuration.new
|
403
|
+
# config.token = 'test123abc'
|
404
|
+
# client = Readiness::GitLab::Client.new(config)
|
405
|
+
# user = Readiness::GitLab::Users.find!(client, 2672834)
|
406
|
+
# token = Readiness::GitLab::Users.revoke_token!(client, 123456)
|
407
|
+
# pp token
|
408
|
+
# # => true
|
409
|
+
def self.revoke_token!(client, tid)
|
410
|
+
response = client.connection.delete "personal_access_tokens/#{tid}"
|
411
|
+
handle_request_error(1, 'GitLab', response.status, { action: 'Revoke PAT', id: tid }) unless response.status == 204
|
412
|
+
true
|
413
|
+
end
|
414
|
+
|
415
|
+
##
|
416
|
+
# Rotates a personal access token (revokes it and makes a new one with the same user). This will exit on error
|
417
|
+
#
|
418
|
+
# @author Jason Colyer
|
419
|
+
# @since 1.0.0
|
420
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
421
|
+
# @param tid [Integer] The personal access token ID
|
422
|
+
# @return [Hash]
|
423
|
+
# @see https://docs.gitlab.com/ee/api/personal_access_tokens.html#rotate-a-personal-access-token GitLab API > Personal access tokens > Rotate a personal access token
|
424
|
+
# @example
|
425
|
+
# require 'support_readiness'
|
426
|
+
# config = Readiness::GitLab::Configuration.new
|
427
|
+
# config.token = 'test123abc'
|
428
|
+
# client = Readiness::GitLab::Client.new(config)
|
429
|
+
# user = Readiness::GitLab::Users.find!(client, 2672834)
|
430
|
+
# token = Readiness::GitLab::Users.rotate_token!(client, 123456)
|
431
|
+
# pp token['token']
|
432
|
+
# # => "s3cr3t2"
|
433
|
+
def self.rotate_token!(client, tid)
|
434
|
+
response = client.connection.post "personal_access_tokens/#{tid}/rotate"
|
435
|
+
handle_request_error(1, 'GitLab', response.status, { action: 'Rotate PAT', id: tid }) unless response.status == 200
|
436
|
+
Oj.load(response.body)
|
437
|
+
end
|
438
|
+
|
439
|
+
##
|
440
|
+
# Blocks a user in GitLab. This will exit on error
|
441
|
+
#
|
442
|
+
# @author Jason Colyer
|
443
|
+
# @since 1.0.0
|
444
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
445
|
+
# @param user [Object] An instance of {Readiness::GitLab::Users}
|
446
|
+
# @return [Boolean]
|
447
|
+
# @see https://docs.gitlab.com/ee/api/user_moderation.html#block-a-user GitLab API > Users > Block a user
|
448
|
+
# @example
|
449
|
+
# require 'support_readiness'
|
450
|
+
# config = Readiness::GitLab::Configuration.new
|
451
|
+
# config.token = 'test123abc'
|
452
|
+
# client = Readiness::GitLab::Client.new(config)
|
453
|
+
# user = Readiness::GitLab::Users.find!(client, 2672834)
|
454
|
+
# block = Readiness::GitLab::Users.block!(client, user)
|
455
|
+
# pp block
|
456
|
+
# # => true
|
457
|
+
def self.block!(client, user)
|
458
|
+
response = client.connection.post "users/#{user.id}/block"
|
459
|
+
handle_request_error(1, 'GitLab', response.status, { action: 'Block a user', id: user.id }) unless response.status == 201
|
460
|
+
true
|
461
|
+
end
|
462
|
+
|
463
|
+
##
|
464
|
+
# Unblocks a user in GitLab. This will exit on error
|
465
|
+
#
|
466
|
+
# @author Jason Colyer
|
467
|
+
# @since 1.0.0
|
468
|
+
# @param client [Object] An instance of {Readiness::GitLab::Client}
|
469
|
+
# @param user [Object] An instance of {Readiness::GitLab::Users}
|
470
|
+
# @return [Boolean]
|
471
|
+
# @see https://docs.gitlab.com/ee/api/user_moderation.html#unblock-a-user GitLab API > Users > Unblock a user
|
472
|
+
# @example
|
473
|
+
# require 'support_readiness'
|
474
|
+
# config = Readiness::GitLab::Configuration.new
|
475
|
+
# config.token = 'test123abc'
|
476
|
+
# client = Readiness::GitLab::Client.new(config)
|
477
|
+
# user = Readiness::GitLab::Users.find!(client, 2672834)
|
478
|
+
# block = Readiness::GitLab::Users.unblock!(client, user)
|
479
|
+
# pp block
|
480
|
+
# # => true
|
481
|
+
def self.unblock!(client, user)
|
482
|
+
response = client.connection.post "users/#{user.id}/unblock"
|
483
|
+
handle_request_error(1, 'GitLab', response.status, { action: 'Unblock a user', id: user.id }) unless response.status == 201
|
484
|
+
true
|
485
|
+
end
|
486
|
+
end
|
487
|
+
end
|
488
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Defines the module Readiness.
|
4
|
+
module Readiness
|
5
|
+
##
|
6
|
+
# Defines the module GitLab
|
7
|
+
# @author Jason Colyer
|
8
|
+
# @since 1.0.0
|
9
|
+
module GitLab
|
10
|
+
require "#{__dir__}/gitlab/client"
|
11
|
+
require "#{__dir__}/gitlab/configuration"
|
12
|
+
require "#{__dir__}/gitlab/groups"
|
13
|
+
require "#{__dir__}/gitlab/issues"
|
14
|
+
require "#{__dir__}/gitlab/namespaces"
|
15
|
+
require "#{__dir__}/gitlab/projects"
|
16
|
+
require "#{__dir__}/gitlab/repositories"
|
17
|
+
require "#{__dir__}/gitlab/users"
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Defines the module Readiness.
|
4
|
+
module Readiness
|
5
|
+
# Defines the module Pagerduty
|
6
|
+
module Pagerduty
|
7
|
+
##
|
8
|
+
# Defines the class Client within the module {Readiness::Pagerduty}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
class Client
|
13
|
+
attr_reader :connection, :upload_connection
|
14
|
+
|
15
|
+
##
|
16
|
+
# Creates a new {Readiness::Pagerduty::Client} instance
|
17
|
+
#
|
18
|
+
# @author Jason Colyer
|
19
|
+
# @since 1.0.0
|
20
|
+
# @param config [Object] An instance of {Readiness::Pagerduty::Configuration}
|
21
|
+
# @example
|
22
|
+
# require 'support_readiness'
|
23
|
+
# config = Readiness::Pagerduty::Configuration.new
|
24
|
+
# config.token = 'test123abc'
|
25
|
+
# Readiness::Pagerduty::Client.new(config)
|
26
|
+
def initialize(config = Readiness::Pagerduty::Configuration.new)
|
27
|
+
@connection = generate_connection(config)
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# Used to generate the retry options passed to Faraday via faraday-retry
|
32
|
+
#
|
33
|
+
# @author Jason Colyer
|
34
|
+
# @since 1.0.0
|
35
|
+
# @param config [Object] An instance of {Readiness::Zendesk::Configuration}
|
36
|
+
# @return [Hash]
|
37
|
+
def retry_options(config)
|
38
|
+
{
|
39
|
+
max: config.retry_max,
|
40
|
+
interval: config.retry_interval,
|
41
|
+
interval_randomness: config.retry_randomness,
|
42
|
+
backoff_factor: config.retry_backoff,
|
43
|
+
exceptions: config.retry_exceptions
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# Used to generate a Faraday connection
|
49
|
+
#
|
50
|
+
# @author Jason Colyer
|
51
|
+
# @since 1.0.0
|
52
|
+
# @param config [Object] An instance of {Readiness::Zendesk::Configuration}
|
53
|
+
# @return [Object]
|
54
|
+
def generate_connection(config)
|
55
|
+
Faraday.new('https://api.pagerduty.com') do |c|
|
56
|
+
c.request :retry, retry_options(config)
|
57
|
+
c.adapter Faraday.default_adapter
|
58
|
+
c.request :url_encoded
|
59
|
+
c.headers['Content-Type'] = 'application/json'
|
60
|
+
c.headers['Accept'] = 'application/vnd.pagerduty+json;version=2'
|
61
|
+
c.headers['Authorization'] = "Token token=#{config.token}"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Defines the module Readiness.
|
4
|
+
module Readiness
|
5
|
+
# Defines the module Pagerduty
|
6
|
+
module Pagerduty
|
7
|
+
##
|
8
|
+
# Defines the class Configuration within the module {Readiness::Pagerduty}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
class Configuration
|
13
|
+
attr_accessor :token, :retry_options, :retry_max, :retry_interval, :retry_randomness, :retry_backoff, :retry_exceptions
|
14
|
+
|
15
|
+
##
|
16
|
+
# Creates a new {Readiness::Pagerduty::Configuration} instance
|
17
|
+
#
|
18
|
+
# @author Jason Colyer
|
19
|
+
# @since 1.0.0
|
20
|
+
# @example
|
21
|
+
# require 'support_readiness'
|
22
|
+
# config = Readiness::GitLab::Configuration.new
|
23
|
+
# config.token = 'test123abc'
|
24
|
+
# pp config
|
25
|
+
# # => #<Readiness::GitLab::Configuration:0x00007f352fdd1420
|
26
|
+
# @retry_backoff=2,
|
27
|
+
# @retry_exceptions=
|
28
|
+
# [Errno::ETIMEDOUT, "Timeout::Error", Faraday::TimeoutError, Faraday::RetriableResponse, Faraday::ConnectionFailed],
|
29
|
+
# @retry_interval=1,
|
30
|
+
# @retry_max=5,
|
31
|
+
# @retry_randomness=0.5,
|
32
|
+
# @token="test123abc">
|
33
|
+
def initialize
|
34
|
+
@token = ''
|
35
|
+
@retry_max = 5
|
36
|
+
@retry_interval = 1
|
37
|
+
@retry_randomness = 0.5
|
38
|
+
@retry_backoff = 2
|
39
|
+
@retry_exceptions = Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS + [Faraday::ConnectionFailed]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|