slack-ruby-client 0.15.0 → 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.
Files changed (264) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +6 -1
  3. data/.rubocop_todo.yml +75 -43
  4. data/.travis.yml +2 -4
  5. data/CHANGELOG.md +32 -0
  6. data/CONTRIBUTING.md +6 -13
  7. data/LICENSE.md +1 -1
  8. data/README.md +19 -36
  9. data/RELEASING.md +1 -1
  10. data/UPGRADING.md +56 -2
  11. data/bin/commands/admin_analytics.rb +16 -0
  12. data/bin/commands/admin_apps.rb +26 -2
  13. data/bin/commands/admin_apps_requests.rb +1 -0
  14. data/bin/commands/admin_auth_policy.rb +39 -0
  15. data/bin/commands/admin_barriers.rb +47 -0
  16. data/bin/commands/admin_conversations.rb +154 -2
  17. data/bin/commands/admin_conversations_ekm.rb +17 -0
  18. data/bin/commands/admin_conversations_restrictAccess.rb +3 -3
  19. data/bin/commands/admin_conversations_whitelist.rb +1 -1
  20. data/bin/commands/admin_emoji.rb +1 -1
  21. data/bin/commands/admin_teams.rb +1 -1
  22. data/bin/commands/admin_usergroups.rb +2 -2
  23. data/bin/commands/admin_users.rb +3 -2
  24. data/bin/commands/admin_users_session.rb +62 -0
  25. data/bin/commands/api.rb +0 -1
  26. data/bin/commands/apps_connections.rb +13 -0
  27. data/bin/commands/apps_event_authorizations.rb +16 -0
  28. data/bin/commands/apps_manifest.rb +51 -0
  29. data/bin/commands/auth_teams.rb +16 -0
  30. data/bin/commands/bots.rb +1 -0
  31. data/bin/commands/channels.rb +1 -155
  32. data/bin/commands/chat.rb +12 -7
  33. data/bin/commands/chat_scheduledMessages.rb +1 -0
  34. data/bin/commands/conversations.rb +71 -2
  35. data/bin/commands/dnd.rb +2 -0
  36. data/bin/commands/files.rb +6 -4
  37. data/bin/commands/files_remote.rb +2 -2
  38. data/bin/commands/groups.rb +1 -162
  39. data/bin/commands/im.rb +1 -63
  40. data/bin/commands/migration.rb +1 -0
  41. data/bin/commands/mpim.rb +1 -61
  42. data/bin/commands/oauth.rb +0 -13
  43. data/bin/commands/oauth_v2.rb +13 -1
  44. data/bin/commands/openid_connect.rb +27 -0
  45. data/bin/commands/pins.rb +2 -4
  46. data/bin/commands/reactions.rb +1 -0
  47. data/bin/commands/reminders.rb +6 -0
  48. data/bin/commands/rtm.rb +2 -2
  49. data/bin/commands/search.rb +4 -0
  50. data/bin/commands/stars.rb +7 -6
  51. data/bin/commands/team.rb +3 -0
  52. data/bin/commands/team_billing.rb +13 -0
  53. data/bin/commands/team_preferences.rb +13 -0
  54. data/bin/commands/tooling_tokens.rb +14 -0
  55. data/bin/commands/usergroups.rb +5 -0
  56. data/bin/commands/usergroups_users.rb +2 -0
  57. data/bin/commands/users.rb +4 -2
  58. data/bin/commands/users_profile.rb +5 -5
  59. data/bin/commands/views.rb +2 -2
  60. data/bin/commands/workflows.rb +38 -0
  61. data/bin/commands.rb +13 -9
  62. data/lib/slack/config.rb +1 -2
  63. data/lib/slack/events/request.rb +10 -4
  64. data/lib/slack/real_time/client.rb +6 -6
  65. data/lib/slack/real_time/concurrency/async.rb +6 -8
  66. data/lib/slack/real_time/concurrency.rb +0 -2
  67. data/lib/slack/real_time/config.rb +5 -14
  68. data/lib/slack/real_time/socket.rb +1 -2
  69. data/lib/slack/real_time/stores/base.rb +1 -6
  70. data/lib/slack/real_time/stores/starter.rb +6 -3
  71. data/lib/slack/real_time/stores/store.rb +5 -0
  72. data/lib/slack/version.rb +1 -1
  73. data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
  74. data/lib/slack/web/api/endpoints/admin_apps.rb +42 -6
  75. data/lib/slack/web/api/endpoints/admin_apps_approved.rb +2 -2
  76. data/lib/slack/web/api/endpoints/admin_apps_requests.rb +4 -2
  77. data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +2 -2
  78. data/lib/slack/web/api/endpoints/admin_auth_policy.rb +72 -0
  79. data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
  80. data/lib/slack/web/api/endpoints/admin_conversations.rb +233 -3
  81. data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -0
  82. data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +3 -3
  83. data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +3 -3
  84. data/lib/slack/web/api/endpoints/admin_emoji.rb +10 -10
  85. data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +7 -7
  86. data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +3 -3
  87. data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +2 -2
  88. data/lib/slack/web/api/endpoints/admin_teams.rb +7 -7
  89. data/lib/slack/web/api/endpoints/admin_teams_admins.rb +2 -2
  90. data/lib/slack/web/api/endpoints/admin_teams_owners.rb +2 -2
  91. data/lib/slack/web/api/endpoints/admin_teams_settings.rb +5 -5
  92. data/lib/slack/web/api/endpoints/admin_usergroups.rb +11 -11
  93. data/lib/slack/web/api/endpoints/admin_users.rb +23 -23
  94. data/lib/slack/web/api/endpoints/admin_users_session.rb +97 -3
  95. data/lib/slack/web/api/endpoints/api.rb +1 -3
  96. data/lib/slack/web/api/endpoints/apps.rb +2 -2
  97. data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
  98. data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
  99. data/lib/slack/web/api/endpoints/apps_manifest.rb +75 -0
  100. data/lib/slack/web/api/endpoints/auth.rb +1 -1
  101. data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
  102. data/lib/slack/web/api/endpoints/bots.rb +3 -1
  103. data/lib/slack/web/api/endpoints/calls.rb +15 -15
  104. data/lib/slack/web/api/endpoints/calls_participants.rb +4 -4
  105. data/lib/slack/web/api/endpoints/channels.rb +0 -259
  106. data/lib/slack/web/api/endpoints/chat.rb +65 -55
  107. data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +4 -2
  108. data/lib/slack/web/api/endpoints/conversations.rb +134 -24
  109. data/lib/slack/web/api/endpoints/dialog.rb +2 -2
  110. data/lib/slack/web/api/endpoints/dnd.rb +6 -3
  111. data/lib/slack/web/api/endpoints/files.rb +19 -15
  112. data/lib/slack/web/api/endpoints/files_comments.rb +1 -1
  113. data/lib/slack/web/api/endpoints/files_remote.rb +22 -22
  114. data/lib/slack/web/api/endpoints/groups.rb +0 -269
  115. data/lib/slack/web/api/endpoints/im.rb +0 -107
  116. data/lib/slack/web/api/endpoints/migration.rb +4 -2
  117. data/lib/slack/web/api/endpoints/mpim.rb +0 -102
  118. data/lib/slack/web/api/endpoints/oauth.rb +5 -27
  119. data/lib/slack/web/api/endpoints/oauth_v2.rb +24 -6
  120. data/lib/slack/web/api/endpoints/openid_connect.rb +42 -0
  121. data/lib/slack/web/api/endpoints/pins.rb +4 -9
  122. data/lib/slack/web/api/endpoints/reactions.rb +13 -11
  123. data/lib/slack/web/api/endpoints/reminders.rb +17 -5
  124. data/lib/slack/web/api/endpoints/rtm.rb +10 -10
  125. data/lib/slack/web/api/endpoints/search.rb +27 -13
  126. data/lib/slack/web/api/endpoints/stars.rb +11 -9
  127. data/lib/slack/web/api/endpoints/team.rb +11 -5
  128. data/lib/slack/web/api/endpoints/team_billing.rb +21 -0
  129. data/lib/slack/web/api/endpoints/team_preferences.rb +21 -0
  130. data/lib/slack/web/api/endpoints/team_profile.rb +1 -1
  131. data/lib/slack/web/api/endpoints/tooling_tokens.rb +24 -0
  132. data/lib/slack/web/api/endpoints/usergroups.rb +26 -16
  133. data/lib/slack/web/api/endpoints/usergroups_users.rb +9 -5
  134. data/lib/slack/web/api/endpoints/users.rb +20 -18
  135. data/lib/slack/web/api/endpoints/users_profile.rb +7 -7
  136. data/lib/slack/web/api/endpoints/views.rb +13 -13
  137. data/lib/slack/web/api/endpoints/workflows.rb +61 -0
  138. data/lib/slack/web/api/endpoints.rb +26 -20
  139. data/lib/slack/web/api/errors/server_error.rb +37 -0
  140. data/lib/slack/web/api/errors/too_many_requests_error.rb +1 -4
  141. data/lib/slack/web/api/errors.rb +394 -10
  142. data/lib/slack/web/api/mixins/conversations.id.rb +1 -3
  143. data/lib/slack/web/api/mixins/ids.id.rb +2 -2
  144. data/lib/slack/web/api/mixins/users.id.rb +1 -3
  145. data/lib/slack/web/api/mixins.rb +0 -2
  146. data/lib/slack/web/api/patches/chat.1.patch +6 -8
  147. data/lib/slack/web/api/templates/endpoints.erb +1 -2
  148. data/lib/slack/web/api/templates/method_spec.erb +1 -1
  149. data/lib/slack/web/config.rb +2 -0
  150. data/lib/slack/web/faraday/connection.rb +2 -2
  151. data/lib/slack/web/faraday/request.rb +2 -1
  152. data/lib/slack/web/faraday/response/raise_error.rb +12 -1
  153. data/lib/slack/web/faraday/response/wrap_error.rb +24 -0
  154. data/lib/slack/web/pagination/cursor.rb +1 -5
  155. data/lib/slack-ruby-client.rb +2 -0
  156. data/lib/tasks/web.rake +11 -3
  157. data/slack-ruby-client.gemspec +2 -3
  158. data/spec/fixtures/slack/web/429_error.yml +50 -54
  159. data/spec/fixtures/slack/web/auth_test_error.yml +51 -18
  160. data/spec/fixtures/slack/web/auth_test_success.yml +50 -26
  161. data/spec/fixtures/slack/web/conversations_info.yml +167 -0
  162. data/spec/fixtures/slack/web/conversations_setTopic.yml +84 -0
  163. data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +172 -0
  164. data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +253 -0
  165. data/spec/fixtures/slack/web/paginated_users_list.yml +501 -69
  166. data/spec/fixtures/slack/web/rtm_connect.yml +267 -30
  167. data/spec/fixtures/slack/web/rtm_start.yml +771 -60
  168. data/spec/fixtures/slack/web/users_info.yml +153 -69
  169. data/spec/fixtures/slack/web/users_list.yml +102 -41
  170. data/spec/fixtures/slack/web/views_open_error.yml +49 -42
  171. data/spec/slack/events/request_spec.rb +13 -8
  172. data/spec/slack/real_time/client_spec.rb +35 -22
  173. data/spec/slack/real_time/concurrency/with_concurrency_spec.rb +10 -0
  174. data/spec/slack/real_time/concurrency/without_concurrency_spec.rb +10 -0
  175. data/spec/slack/real_time/event_handlers/bot_spec.rb +1 -1
  176. data/spec/slack/real_time/event_handlers/channel_spec.rb +1 -1
  177. data/spec/slack/real_time/event_handlers/im_spec.rb +5 -5
  178. data/spec/slack/real_time/event_handlers/user_spec.rb +2 -2
  179. data/spec/slack/real_time/rtm_connect_spec.rb +1 -1
  180. data/spec/slack/real_time/rtm_start_spec.rb +1 -1
  181. data/spec/slack/slack_spec.rb +3 -1
  182. data/spec/slack/web/api/endpoints/admin_analytics_spec.rb +13 -0
  183. data/spec/slack/web/api/endpoints/admin_apps_spec.rb +10 -0
  184. data/spec/slack/web/api/endpoints/admin_auth_policy_spec.rb +35 -0
  185. data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +38 -0
  186. data/spec/slack/web/api/endpoints/{apps_permissions_scopes_spec.rb → admin_conversations_ekm_spec.rb} +1 -1
  187. data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +5 -5
  188. data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +85 -0
  189. data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +6 -6
  190. data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +10 -10
  191. data/spec/slack/web/api/endpoints/admin_teams_spec.rb +2 -2
  192. data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +6 -6
  193. data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +28 -0
  194. data/spec/slack/web/api/endpoints/admin_users_spec.rb +15 -23
  195. data/spec/slack/web/api/endpoints/{apps_permissions_resources_spec.rb → apps_connections_spec.rb} +1 -1
  196. data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +13 -0
  197. data/spec/slack/web/api/endpoints/apps_manifest_spec.rb +36 -0
  198. data/spec/slack/web/api/endpoints/apps_spec.rb +2 -2
  199. data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -0
  200. data/spec/slack/web/api/endpoints/calls_participants_spec.rb +4 -4
  201. data/spec/slack/web/api/endpoints/calls_spec.rb +2 -2
  202. data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +4 -6
  203. data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
  204. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +2 -2
  205. data/spec/slack/web/api/endpoints/dnd_spec.rb +0 -5
  206. data/spec/slack/web/api/endpoints/files_comments_spec.rb +2 -2
  207. data/spec/slack/web/api/endpoints/files_remote_spec.rb +3 -3
  208. data/spec/slack/web/api/endpoints/files_spec.rb +4 -4
  209. data/spec/slack/web/api/endpoints/oauth_spec.rb +0 -11
  210. data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +6 -3
  211. data/spec/slack/web/api/endpoints/openid_connect_spec.rb +8 -0
  212. data/spec/slack/web/api/endpoints/pins_spec.rb +1 -4
  213. data/spec/slack/web/api/endpoints/reactions_spec.rb +3 -3
  214. data/spec/slack/web/api/endpoints/reminders_spec.rb +2 -2
  215. data/spec/slack/web/api/endpoints/team_billing_spec.rb +8 -0
  216. data/spec/slack/web/api/endpoints/team_preferences_spec.rb +8 -0
  217. data/spec/slack/web/api/endpoints/tooling_tokens_spec.rb +13 -0
  218. data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +2 -2
  219. data/spec/slack/web/api/endpoints/workflows_spec.rb +26 -0
  220. data/spec/slack/web/api/error_spec.rb +5 -7
  221. data/spec/slack/web/api/errors/slack_error_spec.rb +21 -26
  222. data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
  223. data/spec/slack/web/api/mixins/conversations_spec.rb +11 -9
  224. data/spec/slack/web/api/mixins/users_spec.rb +1 -1
  225. data/spec/slack/web/api/pagination/cursor_spec.rb +1 -3
  226. data/spec/slack/web/client_spec.rb +112 -16
  227. data/spec/slack/web/faraday/request_spec.rb +80 -0
  228. data/spec/slack/web/faraday/response/raise_error_spec.rb +8 -6
  229. data/spec/spec_helper.rb +1 -1
  230. data/spec/support/real_time/connected_client.rb +1 -7
  231. data/spec/support/vcr.rb +36 -1
  232. metadata +58 -155
  233. data/examples/hi_real_time/Gemfile +0 -6
  234. data/examples/hi_real_time/hi.gif +0 -0
  235. data/examples/hi_real_time/hi.rb +0 -41
  236. data/examples/hi_real_time_async_celluloid/Gemfile +0 -7
  237. data/examples/hi_real_time_async_celluloid/Procfile +0 -2
  238. data/examples/hi_real_time_async_celluloid/hi.rb +0 -39
  239. data/examples/hi_real_time_async_eventmachine/Gemfile +0 -7
  240. data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
  241. data/examples/hi_real_time_async_eventmachine/hi.rb +0 -39
  242. data/lib/slack/real_time/concurrency/celluloid.rb +0 -142
  243. data/lib/slack/real_time/concurrency/eventmachine.rb +0 -85
  244. data/lib/slack/web/api/mixins/channels.id.json +0 -20
  245. data/lib/slack/web/api/mixins/channels.id.rb +0 -27
  246. data/lib/slack/web/api/mixins/groups.id.json +0 -20
  247. data/lib/slack/web/api/mixins/groups.id.rb +0 -27
  248. data/spec/fixtures/slack/web/503_error.yml +0 -14
  249. data/spec/fixtures/slack/web/channels_info.yml +0 -139
  250. data/spec/fixtures/slack/web/groups_info.yml +0 -43
  251. data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -116
  252. data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -57
  253. data/spec/slack/web/api/endpoints/admin_conversations_whitelist_spec.rb +0 -32
  254. data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +0 -16
  255. data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +0 -19
  256. data/spec/slack/web/api/endpoints/conversations_spec.rb +0 -101
  257. data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +0 -13
  258. data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +0 -13
  259. data/spec/slack/web/api/endpoints/im_spec.rb +0 -39
  260. data/spec/slack/web/api/endpoints/mpim_spec.rb +0 -39
  261. data/spec/slack/web/api/endpoints/views_spec.rb +0 -29
  262. data/spec/slack/web/api/errors/service_unavailable_spec.rb +0 -17
  263. data/spec/slack/web/api/mixins/channels_spec.rb +0 -43
  264. data/spec/slack/web/api/mixins/groups_spec.rb +0 -43
data/bin/commands.rb CHANGED
@@ -1,13 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
  # This file was auto-generated by lib/tasks/web.rake
3
3
 
4
+ require 'commands/admin_analytics'
4
5
  require 'commands/admin_apps'
5
6
  require 'commands/admin_apps_approved'
6
7
  require 'commands/admin_apps_requests'
7
8
  require 'commands/admin_apps_restricted'
9
+ require 'commands/admin_auth_policy'
10
+ require 'commands/admin_barriers'
8
11
  require 'commands/admin_conversations'
12
+ require 'commands/admin_conversations_ekm'
9
13
  require 'commands/admin_conversations_restrictAccess'
10
- require 'commands/admin_conversations_whitelist'
11
14
  require 'commands/admin_emoji'
12
15
  require 'commands/admin_inviteRequests'
13
16
  require 'commands/admin_inviteRequests_approved'
@@ -21,15 +24,14 @@ require 'commands/admin_users'
21
24
  require 'commands/admin_users_session'
22
25
  require 'commands/api'
23
26
  require 'commands/apps'
24
- require 'commands/apps_permissions'
25
- require 'commands/apps_permissions_resources'
26
- require 'commands/apps_permissions_scopes'
27
- require 'commands/apps_permissions_users'
27
+ require 'commands/apps_connections'
28
+ require 'commands/apps_event_authorizations'
29
+ require 'commands/apps_manifest'
28
30
  require 'commands/auth'
31
+ require 'commands/auth_teams'
29
32
  require 'commands/bots'
30
33
  require 'commands/calls'
31
34
  require 'commands/calls_participants'
32
- require 'commands/channels'
33
35
  require 'commands/chat'
34
36
  require 'commands/chat_scheduledMessages'
35
37
  require 'commands/conversations'
@@ -39,12 +41,10 @@ require 'commands/emoji'
39
41
  require 'commands/files'
40
42
  require 'commands/files_comments'
41
43
  require 'commands/files_remote'
42
- require 'commands/groups'
43
- require 'commands/im'
44
44
  require 'commands/migration'
45
- require 'commands/mpim'
46
45
  require 'commands/oauth'
47
46
  require 'commands/oauth_v2'
47
+ require 'commands/openid_connect'
48
48
  require 'commands/pins'
49
49
  require 'commands/reactions'
50
50
  require 'commands/reminders'
@@ -52,7 +52,10 @@ require 'commands/rtm'
52
52
  require 'commands/search'
53
53
  require 'commands/stars'
54
54
  require 'commands/team'
55
+ require 'commands/team_billing'
56
+ require 'commands/team_preferences'
55
57
  require 'commands/team_profile'
58
+ require 'commands/tooling_tokens'
56
59
  require 'commands/usergroups'
57
60
  require 'commands/usergroups_users'
58
61
  require 'commands/users'
@@ -60,3 +63,4 @@ require 'commands/users_admin'
60
63
  require 'commands/users_prefs'
61
64
  require 'commands/users_profile'
62
65
  require 'commands/views'
66
+ require 'commands/workflows'
data/lib/slack/config.rb CHANGED
@@ -3,8 +3,7 @@ module Slack
3
3
  module Config
4
4
  extend self
5
5
 
6
- attr_accessor :token
7
- attr_accessor :logger
6
+ attr_accessor :token, :logger
8
7
 
9
8
  def reset
10
9
  self.token = nil
@@ -3,7 +3,9 @@ module Slack
3
3
  module Events
4
4
  class Request
5
5
  class MissingSigningSecret < StandardError; end
6
+
6
7
  class TimestampExpired < StandardError; end
8
+
7
9
  class InvalidSignature < StandardError; end
8
10
 
9
11
  attr_reader :http_request,
@@ -19,13 +21,13 @@ module Slack
19
21
 
20
22
  # Request timestamp.
21
23
  def timestamp
22
- @timestamp ||= http_request.headers['X-Slack-Request-Timestamp']
24
+ @timestamp ||= http_request.get_header('HTTP_X_SLACK_REQUEST_TIMESTAMP')
23
25
  end
24
26
 
25
27
  # The signature is created by combining the signing secret with the body of the request
26
28
  # Slack is sending using a standard HMAC-SHA256 keyed hash.
27
29
  def signature
28
- @signature ||= http_request.headers['X-Slack-Signature']
30
+ @signature ||= http_request.get_header('HTTP_X_SLACK_SIGNATURE')
29
31
  end
30
32
 
31
33
  # Signature version.
@@ -35,7 +37,11 @@ module Slack
35
37
 
36
38
  # Request body.
37
39
  def body
38
- @body ||= http_request.body.read
40
+ @body ||= begin
41
+ body = http_request.body.read
42
+ http_request.body.rewind
43
+ body
44
+ end
39
45
  end
40
46
 
41
47
  # Returns true if the signature coming from Slack has expired.
@@ -47,7 +53,7 @@ module Slack
47
53
  def valid?
48
54
  raise MissingSigningSecret unless signing_secret
49
55
 
50
- digest = OpenSSL::Digest::SHA256.new
56
+ digest = OpenSSL::Digest.new('SHA256')
51
57
  signature_basestring = [version, timestamp, body].join(':')
52
58
  hex_hash = OpenSSL::HMAC.hexdigest(digest, signing_secret, signature_basestring)
53
59
  computed_signature = [version, hex_hash].join('=')
@@ -3,6 +3,7 @@ module Slack
3
3
  module RealTime
4
4
  class Client
5
5
  class ClientNotStartedError < StandardError; end
6
+
6
7
  class ClientAlreadyStartedError < StandardError; end
7
8
 
8
9
  include Api::MessageId
@@ -16,11 +17,7 @@ module Slack
16
17
  attr_accessor :events
17
18
  end
18
19
 
19
- attr_accessor :web_client
20
- attr_accessor :store
21
- attr_accessor :url
22
- attr_accessor(*Config::ATTRIBUTES)
23
- attr_accessor :logger
20
+ attr_accessor :web_client, :store, :url, *Config::ATTRIBUTES
24
21
 
25
22
  protected :store_class, :store_class=
26
23
 
@@ -134,7 +131,7 @@ module Slack
134
131
  rescue Slack::Web::Api::Errors::SlackError => e
135
132
  # stop pinging if bot was uninstalled
136
133
  case e.message
137
- when 'account_inactive', 'invalid_auth' then
134
+ when 'account_inactive', 'invalid_auth'
138
135
  logger.warn(to_s) { e.message }
139
136
  raise e
140
137
  end
@@ -202,6 +199,7 @@ module Slack
202
199
  end
203
200
 
204
201
  attr_reader :callbacks
202
+
205
203
  def socket_class
206
204
  concurrency::Socket
207
205
  end
@@ -251,6 +249,8 @@ module Slack
251
249
  end
252
250
 
253
251
  def run_handlers(type, data)
252
+ return unless store.class.events
253
+
254
254
  handlers = store.class.events[type.to_s]
255
255
  handlers&.each do |handler|
256
256
  store.instance_exec(data, &handler)
@@ -45,14 +45,12 @@ module Slack
45
45
  @client_task&.stop
46
46
 
47
47
  @client_task = task.async do |subtask|
48
- begin
49
- subtask.annotate "#{client} run-loop"
50
- client.run_loop
51
- rescue ::Async::Wrapper::Cancelled => e
52
- # Will get restarted by ping worker.
53
- rescue StandardError => e
54
- client.logger.error(subtask.to_s) { e.message }
55
- end
48
+ subtask.annotate "#{client} run-loop"
49
+ client.run_loop
50
+ rescue ::Async::Wrapper::Cancelled => e
51
+ # Will get restarted by ping worker.
52
+ rescue StandardError => e
53
+ client.logger.error(subtask.to_s) { e.message }
56
54
  end
57
55
 
58
56
  @restart.wait
@@ -3,8 +3,6 @@ module Slack
3
3
  module RealTime
4
4
  module Concurrency
5
5
  autoload :Async, 'slack/real_time/concurrency/async'
6
- autoload :Eventmachine, 'slack/real_time/concurrency/eventmachine'
7
- autoload :Celluloid, 'slack/real_time/concurrency/celluloid'
8
6
  end
9
7
  end
10
8
  end
@@ -17,7 +17,8 @@ module Slack
17
17
  logger
18
18
  ].freeze
19
19
 
20
- attr_accessor(*Config::ATTRIBUTES)
20
+ attr_accessor(*Config::ATTRIBUTES - [:concurrency])
21
+ attr_writer :concurrency
21
22
 
22
23
  def reset
23
24
  self.websocket_ping = 30
@@ -37,19 +38,9 @@ module Slack
37
38
  private
38
39
 
39
40
  def detect_concurrency
40
- %i[Async Eventmachine Celluloid].each do |concurrency|
41
- begin
42
- return Slack::RealTime::Concurrency.const_get(concurrency)
43
- rescue LoadError, NameError
44
- false # could not be loaded, missing dependencies
45
- end
46
- end
47
-
48
- raise(
49
- NoConcurrencyError,
50
- 'Missing concurrency. Add async-websocket, faye-websocket ' \
51
- 'or celluloid-io to your Gemfile.'
52
- )
41
+ Slack::RealTime::Concurrency.const_get(:Async)
42
+ rescue LoadError, NameError
43
+ raise NoConcurrencyError, 'Missing concurrency. Add async-websocket to your Gemfile.'
53
44
  end
54
45
  end
55
46
 
@@ -2,8 +2,7 @@
2
2
  module Slack
3
3
  module RealTime
4
4
  class Socket
5
- attr_accessor :url
6
- attr_accessor :options
5
+ attr_accessor :url, :options
7
6
  attr_reader :driver
8
7
 
9
8
  def initialize(url, options = {})
@@ -8,12 +8,7 @@ module Slack
8
8
  attr_accessor :events
9
9
  end
10
10
 
11
- attr_accessor :users
12
- attr_accessor :bots
13
- attr_accessor :channels
14
- attr_accessor :groups
15
- attr_accessor :teams
16
- attr_accessor :ims
11
+ attr_accessor :users, :bots, :channels, :groups, :teams, :ims
17
12
 
18
13
  def self
19
14
  nil
@@ -4,9 +4,7 @@ module Slack
4
4
  module Stores
5
5
  # Only stores initial information.
6
6
  class Starter < Base
7
- attr_reader :self
8
-
9
- attr_reader :team
7
+ attr_reader :self, :team
10
8
 
11
9
  def initialize(attrs)
12
10
  @team = Models::Team.new(attrs.team)
@@ -15,6 +13,11 @@ module Slack
15
13
 
16
14
  ### RealTime Events
17
15
 
16
+ # A shared channel invite was sent to a Slack user.
17
+ # @see https://api.slack.com/events/shared_channel_invite_received
18
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/shared_channel_invite_received.json
19
+ # on :shared_channel_invite_received do |data|
20
+
18
21
  # An enterprise grid migration has started on an external workspace..
19
22
  # @see https://api.slack.com/events/external_org_migration_started
20
23
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/external_org_migration_started.json
@@ -55,6 +55,11 @@ module Slack
55
55
 
56
56
  ### RealTime Events
57
57
 
58
+ # A shared channel invite was sent to a Slack user.
59
+ # @see https://api.slack.com/events/shared_channel_invite_received
60
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/shared_channel_invite_received.json
61
+ # on :shared_channel_invite_received do |data|
62
+
58
63
  # An enterprise grid migration has started on an external workspace..
59
64
  # @see https://api.slack.com/events/external_org_migration_started
60
65
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/external_org_migration_started.json
data/lib/slack/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Slack
3
- VERSION = '0.15.0'
3
+ VERSION = '1.0.0'
4
4
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ module Slack
5
+ module Web
6
+ module Api
7
+ module Endpoints
8
+ module AdminAnalytics
9
+ #
10
+ # Retrieve analytics data for a given date, presented as a compressed JSON file
11
+ #
12
+ # @option options [string] :type
13
+ # The type of analytics to retrieve. The options are currently limited to member (for grid member analytics) and public_channel (for public channel analytics).
14
+ # @option options [date] :date
15
+ # Date to retrieve the analytics data for, expressed as YYYY-MM-DD in UTC.
16
+ # @option options [boolean] :metadata_only
17
+ # Retrieve metadata for the type of analytics indicated. Can be used only with type set to public_channel analytics. See detail below. Omit the date parameter when using this argument.
18
+ # @see https://api.slack.com/methods/admin.analytics.getFile
19
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.analytics/admin.analytics.getFile.json
20
+ def admin_analytics_getFile(options = {})
21
+ throw ArgumentError.new('Required arguments :type missing') if options[:type].nil?
22
+ post('admin.analytics.getFile', options)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -9,32 +9,68 @@ module Slack
9
9
  #
10
10
  # Approve an app for installation on a workspace.
11
11
  #
12
- # @option options [Object] :app_id
12
+ # @option options [string] :app_id
13
13
  # The id of the app to approve.
14
- # @option options [Object] :request_id
14
+ # @option options [Object] :enterprise_id
15
+ # The ID of the enterprise to approve the app on.
16
+ # @option options [string] :request_id
15
17
  # The id of the request to approve.
16
18
  # @option options [Object] :team_id
17
- # .
19
+ # The ID of the workspace to approve the app on.
18
20
  # @see https://api.slack.com/methods/admin.apps.approve
19
21
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.apps/admin.apps.approve.json
20
22
  def admin_apps_approve(options = {})
21
23
  post('admin.apps.approve', options)
22
24
  end
23
25
 
26
+ #
27
+ # Clear an app resolution
28
+ #
29
+ # @option options [string] :app_id
30
+ # The id of the app whose resolution you want to clear/undo.
31
+ # @option options [Object] :enterprise_id
32
+ # The enterprise to clear the app resolution from.
33
+ # @option options [Object] :team_id
34
+ # The workspace to clear the app resolution from.
35
+ # @see https://api.slack.com/methods/admin.apps.clearResolution
36
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.apps/admin.apps.clearResolution.json
37
+ def admin_apps_clearResolution(options = {})
38
+ throw ArgumentError.new('Required arguments :app_id missing') if options[:app_id].nil?
39
+ post('admin.apps.clearResolution', options)
40
+ end
41
+
24
42
  #
25
43
  # Restrict an app for installation on a workspace.
26
44
  #
27
- # @option options [Object] :app_id
45
+ # @option options [string] :app_id
28
46
  # The id of the app to restrict.
29
- # @option options [Object] :request_id
47
+ # @option options [Object] :enterprise_id
48
+ # The ID of the enterprise to approve the app on.
49
+ # @option options [string] :request_id
30
50
  # The id of the request to restrict.
31
51
  # @option options [Object] :team_id
32
- # .
52
+ # The ID of the workspace to approve the app on.
33
53
  # @see https://api.slack.com/methods/admin.apps.restrict
34
54
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.apps/admin.apps.restrict.json
35
55
  def admin_apps_restrict(options = {})
36
56
  post('admin.apps.restrict', options)
37
57
  end
58
+
59
+ #
60
+ # Uninstall an app from one or many workspaces, or an entire enterprise organization.
61
+ #
62
+ # @option options [string] :app_id
63
+ # The ID of the app to uninstall.
64
+ # @option options [string] :enterprise_id
65
+ # The enterprise to completely uninstall the application from (across all workspaces). With an org-level token, this or team_ids is required.
66
+ # @option options [string] :team_ids
67
+ # IDs of the teams to uninstall from (max 100). With an org-level token, this or enterprise_id is required.
68
+ # @see https://api.slack.com/methods/admin.apps.uninstall
69
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.apps/admin.apps.uninstall.json
70
+ def admin_apps_uninstall(options = {})
71
+ throw ArgumentError.new('Required arguments :app_id missing') if options[:app_id].nil?
72
+ post('admin.apps.uninstall', options)
73
+ end
38
74
  end
39
75
  end
40
76
  end
@@ -9,11 +9,11 @@ module Slack
9
9
  #
10
10
  # List approved apps for an org or workspace.
11
11
  #
12
- # @option options [Object] :cursor
12
+ # @option options [string] :cursor
13
13
  # Set cursor to next_cursor returned by the previous call to list items in the next page.
14
14
  # @option options [Object] :enterprise_id
15
15
  # .
16
- # @option options [Object] :limit
16
+ # @option options [integer] :limit
17
17
  # The maximum number of items to return. Must be between 1 - 1000 both inclusive.
18
18
  # @option options [Object] :team_id
19
19
  # .
@@ -9,9 +9,11 @@ module Slack
9
9
  #
10
10
  # List app requests for a team/workspace.
11
11
  #
12
- # @option options [Object] :cursor
12
+ # @option options [string] :cursor
13
13
  # Set cursor to next_cursor returned by the previous call to list items in the next page.
14
- # @option options [Object] :limit
14
+ # @option options [Object] :enterprise_id
15
+ # .
16
+ # @option options [integer] :limit
15
17
  # The maximum number of items to return. Must be between 1 - 1000 both inclusive.
16
18
  # @option options [Object] :team_id
17
19
  # .
@@ -9,11 +9,11 @@ module Slack
9
9
  #
10
10
  # List restricted apps for an org or workspace.
11
11
  #
12
- # @option options [Object] :cursor
12
+ # @option options [string] :cursor
13
13
  # Set cursor to next_cursor returned by the previous call to list items in the next page.
14
14
  # @option options [Object] :enterprise_id
15
15
  # .
16
- # @option options [Object] :limit
16
+ # @option options [integer] :limit
17
17
  # The maximum number of items to return. Must be between 1 - 1000 both inclusive.
18
18
  # @option options [Object] :team_id
19
19
  # .
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ module Slack
5
+ module Web
6
+ module Api
7
+ module Endpoints
8
+ module AdminAuthPolicy
9
+ #
10
+ # Assign entities to a particular authentication policy.
11
+ #
12
+ # @option options [array] :entity_ids
13
+ # Array of IDs to assign to the policy.
14
+ # @option options [Object] :entity_type
15
+ # The type of entity to assign to the policy. Currently, USER is supported.
16
+ # @option options [string] :policy_name
17
+ # The name of the authentication policy to assign the entities to. Currently, email_password is the only policy that may be used with this method.
18
+ # @see https://api.slack.com/methods/admin.auth.policy.assignEntities
19
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.auth.policy/admin.auth.policy.assignEntities.json
20
+ def admin_auth_policy_assignEntities(options = {})
21
+ throw ArgumentError.new('Required arguments :entity_ids missing') if options[:entity_ids].nil?
22
+ throw ArgumentError.new('Required arguments :entity_type missing') if options[:entity_type].nil?
23
+ throw ArgumentError.new('Required arguments :policy_name missing') if options[:policy_name].nil?
24
+ post('admin.auth.policy.assignEntities', options)
25
+ end
26
+
27
+ #
28
+ # Fetch all the entities assigned to a particular authentication policy by name.
29
+ #
30
+ # @option options [string] :policy_name
31
+ # The name of the policy to fetch entities for. Currently, email_password is the only policy that may be used with this method.
32
+ # @option options [string] :cursor
33
+ # Set cursor to next_cursor returned by the previous call to list items in the next page.
34
+ # @option options [Object] :entity_type
35
+ # The type of entity to assign to the policy. Currently, USER is supported.
36
+ # @option options [integer] :limit
37
+ # The maximum number of items to return. Must be between 1 and 1000, both inclusive.
38
+ # @see https://api.slack.com/methods/admin.auth.policy.getEntities
39
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.auth.policy/admin.auth.policy.getEntities.json
40
+ def admin_auth_policy_getEntities(options = {})
41
+ throw ArgumentError.new('Required arguments :policy_name missing') if options[:policy_name].nil?
42
+ if block_given?
43
+ Pagination::Cursor.new(self, :admin_auth_policy_getEntities, options).each do |page|
44
+ yield page
45
+ end
46
+ else
47
+ post('admin.auth.policy.getEntities', options)
48
+ end
49
+ end
50
+
51
+ #
52
+ # Remove specified entities from a specified authentication policy.
53
+ #
54
+ # @option options [array] :entity_ids
55
+ # Encoded IDs of the entities you'd like to remove from the policy.
56
+ # @option options [Object] :entity_type
57
+ # The type of entity to assign to the policy. Currently, USER is supported.
58
+ # @option options [string] :policy_name
59
+ # The name of the policy to remove entities from. Currently, email_password is the only policy that may be used with this method.
60
+ # @see https://api.slack.com/methods/admin.auth.policy.removeEntities
61
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.auth.policy/admin.auth.policy.removeEntities.json
62
+ def admin_auth_policy_removeEntities(options = {})
63
+ throw ArgumentError.new('Required arguments :entity_ids missing') if options[:entity_ids].nil?
64
+ throw ArgumentError.new('Required arguments :entity_type missing') if options[:entity_type].nil?
65
+ throw ArgumentError.new('Required arguments :policy_name missing') if options[:policy_name].nil?
66
+ post('admin.auth.policy.removeEntities', options)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ module Slack
5
+ module Web
6
+ module Api
7
+ module Endpoints
8
+ module AdminBarriers
9
+ #
10
+ # Create an Information Barrier
11
+ #
12
+ # @option options [array] :barriered_from_usergroup_ids
13
+ # A list of IDP Groups ids that the primary usergroup is to be barriered from.
14
+ # @option options [Object] :primary_usergroup_id
15
+ # The id of the primary IDP Group.
16
+ # @option options [array] :restricted_subjects
17
+ # What kind of interactions are blocked by this barrier? For v1, we only support a list of all 3, eg im, mpim, call.
18
+ # @see https://api.slack.com/methods/admin.barriers.create
19
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.barriers/admin.barriers.create.json
20
+ def admin_barriers_create(options = {})
21
+ throw ArgumentError.new('Required arguments :barriered_from_usergroup_ids missing') if options[:barriered_from_usergroup_ids].nil?
22
+ throw ArgumentError.new('Required arguments :primary_usergroup_id missing') if options[:primary_usergroup_id].nil?
23
+ throw ArgumentError.new('Required arguments :restricted_subjects missing') if options[:restricted_subjects].nil?
24
+ post('admin.barriers.create', options)
25
+ end
26
+
27
+ #
28
+ # Delete an existing Information Barrier
29
+ #
30
+ # @option options [Object] :barrier_id
31
+ # The ID of the barrier you're trying to delete.
32
+ # @see https://api.slack.com/methods/admin.barriers.delete
33
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.barriers/admin.barriers.delete.json
34
+ def admin_barriers_delete(options = {})
35
+ throw ArgumentError.new('Required arguments :barrier_id missing') if options[:barrier_id].nil?
36
+ post('admin.barriers.delete', options)
37
+ end
38
+
39
+ #
40
+ # Get all Information Barriers for your organization
41
+ #
42
+ # @option options [string] :cursor
43
+ # Set cursor to next_cursor returned by the previous call to list items in the next page.
44
+ # @option options [integer] :limit
45
+ # The maximum number of items to return. Must be between 1 - 1000 both inclusive.
46
+ # @see https://api.slack.com/methods/admin.barriers.list
47
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.barriers/admin.barriers.list.json
48
+ def admin_barriers_list(options = {})
49
+ if block_given?
50
+ Pagination::Cursor.new(self, :admin_barriers_list, options).each do |page|
51
+ yield page
52
+ end
53
+ else
54
+ post('admin.barriers.list', options)
55
+ end
56
+ end
57
+
58
+ #
59
+ # Update an existing Information Barrier
60
+ #
61
+ # @option options [Object] :barrier_id
62
+ # The ID of the barrier you're trying to modify.
63
+ # @option options [array] :barriered_from_usergroup_ids
64
+ # A list of IDP Groups ids that the primary usergroup is to be barriered from.
65
+ # @option options [Object] :primary_usergroup_id
66
+ # The id of the primary IDP Group.
67
+ # @option options [array] :restricted_subjects
68
+ # What kind of interactions are blocked by this barrier? For v1, we only support a list of all 3, eg im, mpim, call.
69
+ # @see https://api.slack.com/methods/admin.barriers.update
70
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/admin.barriers/admin.barriers.update.json
71
+ def admin_barriers_update(options = {})
72
+ throw ArgumentError.new('Required arguments :barrier_id missing') if options[:barrier_id].nil?
73
+ throw ArgumentError.new('Required arguments :barriered_from_usergroup_ids missing') if options[:barriered_from_usergroup_ids].nil?
74
+ throw ArgumentError.new('Required arguments :primary_usergroup_id missing') if options[:primary_usergroup_id].nil?
75
+ throw ArgumentError.new('Required arguments :restricted_subjects missing') if options[:restricted_subjects].nil?
76
+ post('admin.barriers.update', options)
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end