lita-hcadmin 0.4.5 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -0
- data/lib/lita/handlers/hcadmin.rb +34 -12
- data/lita-hcadmin.gemspec +1 -1
- data/spec/fixtures/stats.json +1 -1
- data/spec/lita/handlers/hcadmin_spec.rb +59 -19
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c178fe6da37330ea589d254a4544da656a00a1d1
|
4
|
+
data.tar.gz: 4472c5c8421040c42a286f6ac46353fa68f1fe94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d65fb91aa31dcae91f67b7e3db1048cba3cfbf31250101a499a38a04964af18529ac49dbfcd664b5b307d9109b9ebfb5660532bca9a34fe96a8851860b757c4
|
7
|
+
data.tar.gz: f811402bb564ff1e41336e38e3321320f4d42f69ba8ab2a0349fdbd84b69d1dc4286bd2e258382b7ccd08d735570384f32fae992729ada1ba5da2b19e7a72c06
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,27 @@
|
|
1
1
|
# lita-hcadmin
|
2
2
|
|
3
|
+
[0.5.3]
|
4
|
+
---------
|
5
|
+
- [desktophero] -
|
6
|
+
- Fixed pagination for multiple API requests
|
7
|
+
|
8
|
+
[0.5.2]
|
9
|
+
---------
|
10
|
+
- [desktophero] - not released
|
11
|
+
- Modify the HipChat admin pagination from multiple requests to the Get All User API
|
12
|
+
|
13
|
+
[0.5.1]
|
14
|
+
---------
|
15
|
+
- [desktophero] - Not released
|
16
|
+
- Modify the HipChat admin return set
|
17
|
+
|
18
|
+
[0.5.0]
|
19
|
+
---------
|
20
|
+
- [desktophero] - Not released
|
21
|
+
- Update HipChat admin lookup to V2 API
|
22
|
+
- Update applicable tests, including additional fixture for V2 Get Users
|
23
|
+
- Remove old tests
|
24
|
+
|
3
25
|
[0.4.5]
|
4
26
|
---------
|
5
27
|
- [desktophero] - Update tests to use `subject` and objects to validate private methods
|
@@ -148,22 +148,23 @@ module Lita
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def identify_hipchat_admins(response)
|
151
|
-
response.reply 'Admin search takes a
|
152
|
-
|
151
|
+
response.reply 'Admin search takes about a minute ...'
|
152
|
+
@all_admins = []
|
153
|
+
batch_count = user_count_api_iterations
|
154
|
+
|
153
155
|
time = Benchmark.measure do
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
all_users
|
160
|
-
|
161
|
-
|
156
|
+
(0..batch_count + 1).each do |i|
|
157
|
+
i = i * 1000 - 1 unless i == 0 # fun with math!
|
158
|
+
response.reply "Checking users ( through #{i})"
|
159
|
+
parse_users = fetch_all_users_v2(i)
|
160
|
+
return response.reply "Admin list: I ran into an HTTP error ( HTTP code: #{parse_users[:status]} )" if parse_users[:status] != 200
|
161
|
+
all_users = parse(parse_users[:body], 'sponsor')
|
162
|
+
all_users['items'].each do |u|
|
163
|
+
admin_list(u['mention_name']) if u['is_group_admin'] == true
|
162
164
|
end
|
163
|
-
admin_message = 'complete'
|
164
165
|
end
|
165
166
|
end
|
166
|
-
response.reply "Admin list: #{
|
167
|
+
response.reply "Admin list: #{@all_admins.join(', ')} ( #{time.real.to_i} s. to respond )"
|
167
168
|
end
|
168
169
|
|
169
170
|
def identify_room_owner(response)
|
@@ -188,6 +189,8 @@ module Lita
|
|
188
189
|
json = json['rooms']
|
189
190
|
when 'user'
|
190
191
|
json = json['user']
|
192
|
+
when 'items'
|
193
|
+
json = json['items']
|
191
194
|
when 'users'
|
192
195
|
json = json['users']
|
193
196
|
when 'status'
|
@@ -285,6 +288,18 @@ module Lita
|
|
285
288
|
|
286
289
|
private
|
287
290
|
|
291
|
+
def user_count_api_iterations
|
292
|
+
total_users = fetch_stats
|
293
|
+
total_users = parse(total_users[:body], 'users')
|
294
|
+
user_count_api_iterations = total_users / 1000
|
295
|
+
return 1 if user_count_api_iterations < 1
|
296
|
+
user_count_api_iterations
|
297
|
+
end
|
298
|
+
|
299
|
+
def admin_list(admin_mention)
|
300
|
+
@all_admins.push admin_mention
|
301
|
+
end
|
302
|
+
|
288
303
|
def domain_from_email(email)
|
289
304
|
at = email.index('@')
|
290
305
|
email[at..-1]
|
@@ -374,6 +389,13 @@ module Lita
|
|
374
389
|
json
|
375
390
|
end
|
376
391
|
|
392
|
+
def fetch_all_users_v2(iteration)
|
393
|
+
url = "https://api.hipchat.com/v2/user?expand=items&max-results=1000&start-index=#{iteration}&auth_token=#{v2_admin_token}&format=json&"
|
394
|
+
proxy = http_proxy || nil
|
395
|
+
json = get url, proxy
|
396
|
+
json
|
397
|
+
end
|
398
|
+
|
377
399
|
def email_domain_name
|
378
400
|
config.email_domain_name
|
379
401
|
end
|
data/lita-hcadmin.gemspec
CHANGED
data/spec/fixtures/stats.json
CHANGED
@@ -9,6 +9,8 @@ describe Lita::Handlers::Hcadmin, lita_handler: true do
|
|
9
9
|
let(:user_json) { File.read(File.join('spec', 'fixtures', 'user_data.json')) }
|
10
10
|
let(:all_user_json) { File.read(File.join('spec', 'fixtures', 'users_data.json')) }
|
11
11
|
let(:user_v2_json) { File.read(File.join('spec', 'fixtures', 'v2_user_data.json')) }
|
12
|
+
let(:all_users_v2_json) { File.read(File.join('spec', 'fixtures', 'user_v2_all_users.json')) }
|
13
|
+
let(:all_users_v2_json_no_admins) { File.read(File.join('spec', 'fixtures', 'user_v2_all_users_no_admins.json')) }
|
12
14
|
let(:user_v2_noaccount) { File.read(File.join('spec', 'fixtures', 'user_v2_notreal_email.json')) }
|
13
15
|
let(:user_v2_not_found) { File.read(File.join('spec', 'fixtures', 'v2_user_not_found.json')) }
|
14
16
|
let(:room_v2_not_found) { File.read(File.join('spec', 'fixtures', 'v2_room_not_found.json')) }
|
@@ -296,6 +298,58 @@ describe Lita::Handlers::Hcadmin, lita_handler: true do
|
|
296
298
|
body: user_v2_json,
|
297
299
|
headers: {}
|
298
300
|
)
|
301
|
+
|
302
|
+
stub_request(:get, 'https://api.hipchat.com/v2/user?expand=items&auth_token=abc&format=json&max-results=1000&start-index=0')
|
303
|
+
.with(
|
304
|
+
headers: {
|
305
|
+
'Accept' => 'application/json',
|
306
|
+
'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
|
307
|
+
'Content-Type' => 'application/json',
|
308
|
+
'User-Agent' => 'Faraday v0.9.2' })
|
309
|
+
.to_return(
|
310
|
+
status: 200,
|
311
|
+
body: all_users_v2_json,
|
312
|
+
headers: {}
|
313
|
+
)
|
314
|
+
|
315
|
+
stub_request(:get, 'https://api.hipchat.com/v2/user?expand=items&auth_token=abc&format=json&max-results=1000&start-index=999')
|
316
|
+
.with(
|
317
|
+
headers: {
|
318
|
+
'Accept' => 'application/json',
|
319
|
+
'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
|
320
|
+
'Content-Type' => 'application/json',
|
321
|
+
'User-Agent' => 'Faraday v0.9.2' })
|
322
|
+
.to_return(
|
323
|
+
status: 200,
|
324
|
+
body: all_users_v2_json_no_admins,
|
325
|
+
headers: {}
|
326
|
+
)
|
327
|
+
|
328
|
+
stub_request(:get, 'https://api.hipchat.com/v2/user?expand=items&auth_token=abc&format=json&max-results=1000&start-index=1999')
|
329
|
+
.with(
|
330
|
+
headers: {
|
331
|
+
'Accept' => 'application/json',
|
332
|
+
'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
|
333
|
+
'Content-Type' => 'application/json',
|
334
|
+
'User-Agent' => 'Faraday v0.9.2' })
|
335
|
+
.to_return(
|
336
|
+
status: 200,
|
337
|
+
body: all_users_v2_json_no_admins,
|
338
|
+
headers: {}
|
339
|
+
)
|
340
|
+
|
341
|
+
stub_request(:get, 'https://api.hipchat.com/v2/group/171096/statistics?auth_token=abc&format=json')
|
342
|
+
.with(
|
343
|
+
headers: {
|
344
|
+
'Accept' => 'application/json',
|
345
|
+
'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
|
346
|
+
'Content-Type' => 'application/json',
|
347
|
+
'User-Agent' => 'Faraday v0.9.2' })
|
348
|
+
.to_return(
|
349
|
+
status: 200,
|
350
|
+
body: group_stats,
|
351
|
+
headers: {}
|
352
|
+
)
|
299
353
|
end
|
300
354
|
|
301
355
|
it 'routes the identify room owner command room name has spaces' do
|
@@ -389,47 +443,33 @@ describe Lita::Handlers::Hcadmin, lita_handler: true do
|
|
389
443
|
|
390
444
|
describe '#identify_hipchat_admins' do
|
391
445
|
describe 'successful HTTP request against the API' do
|
392
|
-
before(:each) do
|
393
|
-
stub_request(:get, 'https://api.hipchat.com/v1/users/list?auth_token=123&format=json')
|
394
|
-
.with(
|
395
|
-
headers: {
|
396
|
-
'Accept' => 'application/json',
|
397
|
-
'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
|
398
|
-
'Content-Type' => 'application/json',
|
399
|
-
'User-Agent' => 'Faraday v0.9.2' })
|
400
|
-
.to_return(
|
401
|
-
status: 200,
|
402
|
-
body: all_user_json,
|
403
|
-
headers: {}
|
404
|
-
)
|
405
|
-
end
|
406
446
|
it 'receives a list of admins from a JSON payload' do
|
407
447
|
send_command('identify hipchat admins')
|
408
|
-
expect(replies.last).to eq('Admin list:
|
448
|
+
expect(replies.last).to eq('Admin list: DummyAccount, DummyAccount3 ( 0 s. to respond )')
|
409
449
|
end
|
410
450
|
end
|
411
451
|
|
412
452
|
describe 'handles Bad Gateway errors' do
|
413
453
|
before(:each) do
|
414
|
-
stub_request(:get, 'https://api.hipchat.com/
|
454
|
+
stub_request(:get, 'https://api.hipchat.com/v2/user?expand=items&auth_token=abc&format=json&max-results=1000&start-index=0')
|
415
455
|
.with(headers: { 'Accept' => 'application/json', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' })
|
416
456
|
.to_return(status: 502, body: bad_gateway, headers: {})
|
417
457
|
end
|
418
458
|
it 'sends a request for admins that fails with a 502 and responds with exception details' do
|
419
459
|
send_command('identify hipchat admins')
|
420
|
-
expect(replies.last).to eq('Admin list: I ran into an HTTP error ( HTTP code: 502 )
|
460
|
+
expect(replies.last).to eq('Admin list: I ran into an HTTP error ( HTTP code: 502 )')
|
421
461
|
end
|
422
462
|
end
|
423
463
|
|
424
464
|
describe 'handles non-200 series' do
|
425
465
|
before(:each) do
|
426
|
-
stub_request(:get, 'https://api.hipchat.com/
|
466
|
+
stub_request(:get, 'https://api.hipchat.com/v2/user?expand=items&auth_token=abc&format=json&max-results=1000&start-index=0')
|
427
467
|
.with(headers: { 'Accept' => 'application/json', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' })
|
428
468
|
.to_return(status: 501, body: bad_gateway, headers: {})
|
429
469
|
end
|
430
470
|
it 'sends a request for admins that fails with a 501 and responds with exception details' do
|
431
471
|
send_command('identify hipchat admins')
|
432
|
-
expect(replies.last).to eq('Admin list: I ran into an HTTP error ( HTTP code: 501 )
|
472
|
+
expect(replies.last).to eq('Admin list: I ran into an HTTP error ( HTTP code: 501 )')
|
433
473
|
end
|
434
474
|
end
|
435
475
|
end # end identify_hipchat_admins
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-hcadmin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Walker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lita
|