cased-ruby 0.4.3 → 0.4.8

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: 5356c39c08774c8e104858515fbb9111264c526e72984dd9da83874f87107903
4
- data.tar.gz: 4ca2cf761ef6d0abc7110988f38038d952bec2be593d4ae2e01a291b46c5cb69
3
+ metadata.gz: 5d2e582beb818f03f7211310ca694248b25aaf28a1ed625c0fa82afafbb4af71
4
+ data.tar.gz: 85dfd3af819d73e055401b8461d156e990021362b7b3acfa67ea0c690a359a4c
5
5
  SHA512:
6
- metadata.gz: 04b3651c4658c938257d333f167ab7846f9d7d9efe9a162e3986457af8acf86431ee4bc2b12ed393aed92073474da7f78c0283e584a82deb207041002c9d7bd0
7
- data.tar.gz: de40f52b7145f88ea18c6f9cfeaa5508a025e3f0d4498db9bd8821f45ba6b412804745f01ffb5ea13cbdc1ba942ac6496f622305af4ba705e6a2d94ccddb5390
6
+ metadata.gz: 15d5ef3b76f2187d030928d448488560784beb0fad6a462dcd6339e5697874c822bfd1efcd2fca6c7307b95f10d2465761693a1d422baea4e789f84d77bae6a8
7
+ data.tar.gz: 9969f4cf476784ac3e4747d0053035fd61fd329a425bb5e67f04a64125792c7842f3ddb9fe966920f118825960af1477c1843d8779600c706bea5c3a6a364e2d
@@ -28,19 +28,3 @@ jobs:
28
28
  - name: Run Tests
29
29
  run: |
30
30
  bundle exec rake test
31
-
32
- - name: Generate yard documentation
33
- run: |
34
- bundle exec yard
35
-
36
- - name: Upload test coverage report
37
- uses: actions/upload-artifact@v2
38
- with:
39
- name: coverage
40
- path: coverage/**/*
41
-
42
- - name: Upload generated yard documentation
43
- uses: actions/upload-artifact@v2
44
- with:
45
- name: yard
46
- path: doc/**/*
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cased-ruby (0.4.3)
4
+ cased-ruby (0.4.8)
5
5
  activesupport (~> 6)
6
6
  dotpath (= 0.1.0)
7
7
  faraday (~> 1.0)
@@ -14,7 +14,7 @@ PATH
14
14
  GEM
15
15
  remote: https://rubygems.org/
16
16
  specs:
17
- activesupport (6.1.3)
17
+ activesupport (6.1.3.1)
18
18
  concurrent-ruby (~> 1.0, >= 1.0.2)
19
19
  i18n (>= 1.6, < 2)
20
20
  minitest (>= 5.1)
@@ -30,15 +30,19 @@ GEM
30
30
  safe_yaml (~> 1.0.0)
31
31
  docile (1.3.2)
32
32
  dotpath (0.1.0)
33
- faraday (1.3.0)
33
+ faraday (1.4.1)
34
+ faraday-excon (~> 1.1)
34
35
  faraday-net_http (~> 1.0)
36
+ faraday-net_http_persistent (~> 1.1)
35
37
  multipart-post (>= 1.2, < 3)
36
- ruby2_keywords
38
+ ruby2_keywords (>= 0.0.4)
39
+ faraday-excon (1.1.0)
37
40
  faraday-net_http (1.0.1)
41
+ faraday-net_http_persistent (1.1.0)
38
42
  faraday_middleware (1.0.0)
39
43
  faraday (~> 1.0)
40
44
  hashdiff (1.0.1)
41
- i18n (1.8.9)
45
+ i18n (1.8.10)
42
46
  concurrent-ruby (~> 1.0)
43
47
  jaro_winkler (1.5.4)
44
48
  json (2.5.1)
data/README.md CHANGED
@@ -9,6 +9,7 @@ A Cased client for Ruby applications in your organization to control and monitor
9
9
  - [Usage](#usage)
10
10
  - [Cased CLI](#cased-cli)
11
11
  - [Starting an approval workflow](#starting-an-approval-workflow)
12
+ - [Attaching metadata to all CLI requests](#attaching-metadata-to-all-cli-requests)
12
13
  - [Audit trails](#audit-trails)
13
14
  - [Publishing events to Cased](#publishing-events-to-cased)
14
15
  - [Retrieving events from a Cased audit trail](#retrieving-events-from-a-cased-audit-trail)
@@ -85,6 +86,17 @@ Cased.configure do |config|
85
86
 
86
87
  # CASED_HTTP_READ_TIMEOUT=10
87
88
  config.http_read_timeout = 10
89
+
90
+ # Attach metadata to all CLI requests. This metadata will appear in Cased and
91
+ # any notification source such as email or Slack.
92
+ #
93
+ # You are limited to 20 properties and cannot be a nested dictionary. Metadata
94
+ # specified in the CLI request overrides any configured globally.
95
+ config.cli.metadata = {
96
+ rails_env: ENV['RAILS_ENV'],
97
+ heroku_application: ENV['HEROKU_APP_NAME'],
98
+ git_commit: ENV['GIT_COMMIT'],
99
+ }
88
100
  end
89
101
  ```
90
102
 
@@ -135,7 +147,8 @@ end
135
147
 
136
148
  authentication = Cased::CLI::Authentication.new
137
149
  identity = Cased::CLI::Identity.new
138
- authentication.token = identity.identify
150
+ token, ip_address = identity.identify
151
+ authentication.token = token
139
152
 
140
153
  session = Cased::CLI::Session.new(
141
154
  authentication: authentication,
@@ -180,6 +193,27 @@ You no longer need to handle obtaining the user token or asking for a reason up
180
193
  front, `Cased::CLI::InteractiveSession` will prompt the user for any reason
181
194
  being required as necessary.
182
195
 
196
+ #### Attaching metadata to all CLI requests
197
+
198
+ While you can customize the metadata included for each CLI request, it may prove
199
+ useful to specify metadata globally that will be included with each CLI request.
200
+ Some useful information to include may be the current Rails environment, Heroku
201
+ application, Git commit deployed, and more.
202
+
203
+ Metadata is limited to 20 properties and cannot be a nested dictionary.
204
+
205
+ ```ruby
206
+ Cased.configure do |config|
207
+ config.cli.metadata = {
208
+ rails_env: ENV['RAILS_ENV'],
209
+ heroku_application: ENV['HEROKU_APP_NAME'],
210
+ git_commit: ENV['GIT_COMMIT'],
211
+ }
212
+ end
213
+ ```
214
+
215
+ Note: Metadata specified in the CLI request overrides any configured globally.
216
+
183
217
  ### Audit trails
184
218
 
185
219
  #### Publishing events to Cased
@@ -15,12 +15,17 @@ module Cased
15
15
  end
16
16
 
17
17
  def self.from_cast(cast)
18
+ return if cast.blank?
19
+
18
20
  stream = cast.split("\n").collect do |data|
19
21
  JSON.parse(data)
20
22
  end
21
23
  header = stream.shift
24
+ return unless header.is_a?(Hash)
22
25
 
23
26
  new(header, stream)
27
+ rescue JSON::ParserError
28
+ nil
24
29
  end
25
30
 
26
31
  # Required
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cased
4
+ module CLI
5
+ class Config
6
+ # @example
7
+ # Cased.configure do |config|
8
+ # config.cli.metadata = {
9
+ # rails_env: ENV['RAILS_ENV'],
10
+ # heroku_application: ENV['HEROKU_APP_NAME'],
11
+ # git_commit: ENV['GIT_COMMIT'],
12
+ # }
13
+ # end
14
+ attr_accessor :metadata
15
+
16
+ def initialize
17
+ @metadata = {}
18
+ end
19
+ end
20
+ end
21
+ end
@@ -23,15 +23,20 @@ module Cased
23
23
  def poll(poll_url)
24
24
  count = 0
25
25
  user_id = nil
26
+ ip_address = nil
26
27
 
27
28
  while user_id.nil?
28
29
  count += 1
29
30
  response = Cased.clients.cli.get(poll_url)
30
- user_id = response.body.dig('user', 'id')
31
- sleep 1 if user_id.nil?
31
+ if response.success?
32
+ user_id = response.body.dig('user', 'id')
33
+ ip_address = response.body.fetch('ip_address')
34
+ else
35
+ sleep 1
36
+ end
32
37
  end
33
38
 
34
- user_id
39
+ [user_id, ip_address]
35
40
  end
36
41
  end
37
42
  end
@@ -50,7 +50,9 @@ module Cased
50
50
  Cased::CLI::Log.log "You must re-authenticate with Cased due to recent changes to this application's settings."
51
51
 
52
52
  identity = Cased::CLI::Identity.new
53
- session.authentication.token = identity.identify
53
+ token, ip_address = identity.identify
54
+ session.authentication.token = token
55
+ session.forwarded_ip_address = ip_address
54
56
 
55
57
  create
56
58
  elsif session.unauthorized?
@@ -61,7 +63,9 @@ module Cased
61
63
  end
62
64
 
63
65
  identity = Cased::CLI::Identity.new
64
- session.authentication.token = identity.identify
66
+ token, ip_address = identity.identify
67
+ session.authentication.token = token
68
+ session.forwarded_ip_address = ip_address
65
69
 
66
70
  create
67
71
  elsif session.reason_required?
@@ -108,8 +112,10 @@ module Cased
108
112
  exit 1
109
113
  when 'timed_out'
110
114
  Cased::CLI::Log.log 'CLI session has timed out'
115
+ exit 1
111
116
  when 'canceled'
112
117
  Cased::CLI::Log.log 'CLI session has been canceled'
118
+ exit 0
113
119
  end
114
120
  end
115
121
  end
@@ -86,9 +86,17 @@ module Cased
86
86
  # @return [String, nil]
87
87
  attr_accessor :reason
88
88
 
89
+ # Public: The forwarded IP V4 or IP V6 address of the user that initiated
90
+ # the CLI session.
91
+ #
92
+ # @example
93
+ # session.forwarded_ip_address #=> "1.1.1.1"
94
+ # @return [String, nil]
95
+ attr_accessor :forwarded_ip_address
96
+
89
97
  # Public: The client's IP V4 or IP V6 address that initiated the CLI session.
90
98
  # @example
91
- # session.reason #=> "1.1.1.1"
99
+ # session.ip_address #=> "1.1.1.1"
92
100
  # @return [String, nil]
93
101
  attr_reader :ip_address
94
102
 
@@ -116,11 +124,18 @@ module Cased
116
124
  # @return [Hash, nil]
117
125
  attr_reader :guard_application
118
126
 
127
+ # Public: Cased may filter out sensitive data in the command, we shouldn't
128
+ # execute what is returned from the server.
129
+ #
130
+ # @return [String, nil]
131
+ attr_reader :original_command
132
+
119
133
  def initialize(reason: nil, command: nil, metadata: {}, authentication: nil)
120
134
  @authentication = authentication || Cased::CLI::Authentication.new
121
135
  @reason = reason
122
- @command = command || [$PROGRAM_NAME, *ARGV].join(' ')
123
- @metadata = metadata
136
+ @original_command = command || [$PROGRAM_NAME, *ARGV].join(' ')
137
+ @command = @original_command
138
+ @metadata = Cased.config.cli.metadata.merge(metadata)
124
139
  @requester = {}
125
140
  @responder = {}
126
141
  @guard_application = {}
@@ -144,6 +159,7 @@ module Cased
144
159
  @command = session.fetch('command')
145
160
  @metadata = session.fetch('metadata')
146
161
  @reason = session.fetch('reason')
162
+ @forwarded_ip_address = session.fetch('forwarded_ip_address')
147
163
  @ip_address = session.fetch('ip_address')
148
164
  @requester = session.fetch('requester')
149
165
  @responded_at = session['responded_at']
@@ -207,7 +223,7 @@ module Cased
207
223
 
208
224
  Cased::CLI::Log.log 'CLI session is now recording'
209
225
 
210
- recorder = Cased::CLI::Recorder.new(command.split(' '), env: {
226
+ recorder = Cased::CLI::Recorder.new(original_command.split(' '), env: {
211
227
  'GUARD_SESSION_ID' => id,
212
228
  'GUARD_APPLICATION_ID' => guard_application.fetch('id'),
213
229
  'GUARD_USER_TOKEN' => requester.fetch('id'),
@@ -226,6 +242,7 @@ module Cased
226
242
 
227
243
  response = Cased.clients.cli.post('cli/sessions',
228
244
  user_token: authentication.token,
245
+ forwarded_ip_address: forwarded_ip_address,
229
246
  reason: reason,
230
247
  metadata: metadata,
231
248
  command: command)
data/lib/cased/config.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'cased/cli/config'
4
+
3
5
  module Cased
4
6
  class Config
5
7
  # The amount of time in seconds to allow the HTTP client to open a
@@ -149,6 +151,16 @@ module Cased
149
151
  # end
150
152
  attr_writer :silence
151
153
 
154
+ # @example
155
+ # Cased.configure do |config|
156
+ # config.cli.metadata = {
157
+ # rails_env: ENV['RAILS_ENV'],
158
+ # heroku_application: ENV['HEROKU_APP_NAME'],
159
+ # git_commit: ENV['GIT_COMMIT'],
160
+ # }
161
+ # end
162
+ attr_reader :cli
163
+
152
164
  def initialize
153
165
  @http_read_timeout = ENV.fetch('CASED_HTTP_READ_TIMEOUT', 10).to_i
154
166
  @http_open_timeout = ENV.fetch('CASED_HTTP_OPEN_TIMEOUT', 5).to_i
@@ -172,6 +184,7 @@ module Cased
172
184
  hash[normalized_key] = api_key if api_key
173
185
  end
174
186
  end
187
+ @cli = Cased::CLI::Config.new
175
188
  end
176
189
 
177
190
  # Policy keys are used to query for events from audit trails.
data/lib/cased/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cased
4
- VERSION = '0.4.3'
4
+ VERSION = '0.4.8'
5
5
  end
Binary file
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cased-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garrett Bjerkhoel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-15 00:00:00.000000000 Z
11
+ date: 2021-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -305,6 +305,7 @@ files:
305
305
  - lib/cased/cli/asciinema/file.rb
306
306
  - lib/cased/cli/asciinema/writer.rb
307
307
  - lib/cased/cli/authentication.rb
308
+ - lib/cased/cli/config.rb
308
309
  - lib/cased/cli/identity.rb
309
310
  - lib/cased/cli/interactive_session.rb
310
311
  - lib/cased/cli/log.rb
@@ -343,7 +344,7 @@ files:
343
344
  - lib/cased/sensitive/string.rb
344
345
  - lib/cased/test_helper.rb
345
346
  - lib/cased/version.rb
346
- - vendor/cache/activesupport-6.1.3.gem
347
+ - vendor/cache/activesupport-6.1.3.1.gem
347
348
  - vendor/cache/addressable-2.7.0.gem
348
349
  - vendor/cache/ast-2.4.0.gem
349
350
  - vendor/cache/byebug-11.0.1.gem
@@ -352,11 +353,13 @@ files:
352
353
  - vendor/cache/crack-0.4.3.gem
353
354
  - vendor/cache/docile-1.3.2.gem
354
355
  - vendor/cache/dotpath-0.1.0.gem
355
- - vendor/cache/faraday-1.3.0.gem
356
+ - vendor/cache/faraday-1.4.1.gem
357
+ - vendor/cache/faraday-excon-1.1.0.gem
356
358
  - vendor/cache/faraday-net_http-1.0.1.gem
359
+ - vendor/cache/faraday-net_http_persistent-1.1.0.gem
357
360
  - vendor/cache/faraday_middleware-1.0.0.gem
358
361
  - vendor/cache/hashdiff-1.0.1.gem
359
- - vendor/cache/i18n-1.8.9.gem
362
+ - vendor/cache/i18n-1.8.10.gem
360
363
  - vendor/cache/jaro_winkler-1.5.4.gem
361
364
  - vendor/cache/json-2.5.1.gem
362
365
  - vendor/cache/jwt-2.2.2.gem
Binary file
Binary file
Binary file