awskeyring 1.8.4 → 1.8.5

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: 1d6214486cc6877ca62ed23c40f01636f0f5bd726f7d7fdd9dd7f310ec87da84
4
- data.tar.gz: fede3a531c42bab12951bb316e8f4c0f9c3d383f60121c4993359013422fb6b4
3
+ metadata.gz: df8b15491f307691db7f25727bdc12f5a90ba71b816e6b14b14a71bdbd53c594
4
+ data.tar.gz: af3cc61ea5c8c44025254b5fb9a90a087e67a2c556f7391006acc188ab5be214
5
5
  SHA512:
6
- metadata.gz: f23bed2643e3ab8f288ff690f20f540b8486a9aca792ff362696bf867009d36d874391f13b936cc1808a9908f1f16617d2fe81073e08c6620f0997835e653cb3
7
- data.tar.gz: a9732e12755c7465545bdcd59a982f446a33e42988de10158a4db977c4d8fc5a8a391d6c55c67b835fb6af749dd3e77dfef1d335b04fa6683a6df1ce0a36d227
6
+ metadata.gz: c20ade29e6499e0fa836cb7532dd1dd8776659ed7c3e69cc905c6ea34ae5a46b3af24320a94781996af7cdbb0cc4e69fabe86259d7aaa99048b577c5a9a09208
7
+ data.tar.gz: 547a0ad97e0e38b7b6e61d7b8275ab75c18a114d83a540de293c410cd4835f4a429bf829863e62fce4c8350ece488d0d4d4a0571c17b9e1a0b97b4416eaa51e2
data/README.md CHANGED
@@ -62,24 +62,24 @@ more details on this config option.
62
62
  The CLI is using [Thor](http://whatisthor.com) with help provided interactively.
63
63
 
64
64
  Awskeyring commands:
65
- awskeyring --version, -v # Prints the version
66
- awskeyring add ACCOUNT # Adds an ACCOUNT to the keyring
67
- awskeyring add-role ROLE # Adds a ROLE to the keyring
68
- awskeyring console ACCOUNT # Open the AWS Console for the ACCOUNT
69
- awskeyring env ACCOUNT # Outputs bourne shell environment exports for an ACCOUNT
70
- awskeyring exec ACCOUNT command... # Execute a COMMAND with the environment set for an ACCOUNT
71
- awskeyring help [COMMAND] # Describe available commands or one specific command
72
- awskeyring import ACCOUNT # Import an ACCOUNT to the keyring from ~/.aws/credentials
73
- awskeyring initialise # Initialises a new KEYCHAIN
74
- awskeyring json ACCOUNT # Outputs AWS CLI compatible JSON for an ACCOUNT
75
- awskeyring list # Prints a list of accounts in the keyring
76
- awskeyring list-role # Prints a list of roles in the keyring
77
- awskeyring remove ACCOUNT # Removes an ACCOUNT from the keyring
78
- awskeyring remove-role ROLE # Removes a ROLE from the keyring
79
- awskeyring remove-token ACCOUNT # Removes a token for ACCOUNT from the keyring
80
- awskeyring rotate ACCOUNT # Rotate access keys for an ACCOUNT
81
- awskeyring token ACCOUNT [ROLE] [MFA] # Create an STS Token from a ROLE or an MFA code
82
- awskeyring update ACCOUNT # Updates an ACCOUNT in the keyring
65
+ awskeyring --version, -v # Prints the version
66
+ awskeyring add ACCOUNT # Adds an ACCOUNT to the keyring
67
+ awskeyring add-role ROLE # Adds a ROLE to the keyring
68
+ awskeyring console ACCOUNT # Open the AWS Console for the ACCOUNT
69
+ awskeyring env ACCOUNT # Outputs bourne shell environment exports for an ACCOUNT
70
+ awskeyring exec ACCOUNT command... # Execute a COMMAND with the environment set for an ACCOUNT
71
+ awskeyring help [COMMAND] # Describe available commands or one specific command
72
+ awskeyring import ACCOUNT # Import an ACCOUNT to the keyring from ~/.aws/credentials
73
+ awskeyring initialise # Initialises a new KEYCHAIN
74
+ awskeyring json ACCOUNT # Outputs AWS CLI compatible JSON for an ACCOUNT
75
+ awskeyring list # Prints a list of accounts in the keyring
76
+ awskeyring list-role # Prints a list of roles in the keyring
77
+ awskeyring remove ACCOUNT # Removes an ACCOUNT from the keyring
78
+ awskeyring remove-role ROLE # Removes a ROLE from the keyring
79
+ awskeyring remove-token ACCOUNT # Removes a token for ACCOUNT from the keyring
80
+ awskeyring rotate ACCOUNT # Rotate access keys for an ACCOUNT
81
+ awskeyring token ACCOUNT [ROLE] [CODE] # Create an STS Token from a ROLE or an mfa CODE
82
+ awskeyring update ACCOUNT # Updates an ACCOUNT in the keyring
83
83
 
84
84
  and autocomplete that can be installed with:
85
85
 
data/i18n/en.yml CHANGED
@@ -17,7 +17,7 @@ en:
17
17
  remove_role_desc: Removes a ROLE from the keyring
18
18
  remove_token_desc: Removes a token for ACCOUNT from the keyring
19
19
  rotate_desc: Rotate access keys for an ACCOUNT
20
- token_desc: Create an STS Token from a ROLE or an MFA code
20
+ token_desc: Create an STS Token from a ROLE or an mfa CODE
21
21
  update_desc: Updates an ACCOUNT in the keyring
22
22
  method_option:
23
23
  arn: 'AWS role arn.'
@@ -6,7 +6,7 @@ require 'json'
6
6
  # Version const and query of latest.
7
7
  module Awskeyring
8
8
  # The Gem's version number
9
- VERSION = '1.8.4'
9
+ VERSION = '1.8.5'
10
10
  # The Gem's homepage
11
11
  HOMEPAGE = 'https://github.com/servian/awskeyring'
12
12
 
@@ -335,7 +335,7 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
335
335
  puts I18n.t('message.upaccount', account: account)
336
336
  end
337
337
 
338
- desc 'token ACCOUNT [ROLE] [MFA]', I18n.t('token_desc')
338
+ desc 'token ACCOUNT [ROLE] [CODE]', I18n.t('token_desc')
339
339
  method_option :code, type: :string, aliases: '-c', desc: I18n.t('method_option.code')
340
340
  method_option :duration, type: :string, aliases: '-d', desc: I18n.t('method_option.duration')
341
341
  # generate a sessiopn token
@@ -430,7 +430,8 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
430
430
  desc "#{File.basename($PROGRAM_NAME)} CURR PREV", I18n.t('awskeyring_desc'), hide: true
431
431
  map File.basename($PROGRAM_NAME) => :autocomplete
432
432
  # autocomplete
433
- def autocomplete(curr, prev)
433
+ def autocomplete(curr, prev = nil)
434
+ curr, prev = fix_args(curr, prev)
434
435
  comp_line = ENV['COMP_LINE']
435
436
  comp_point_str = ENV['COMP_POINT']
436
437
  unless comp_line && comp_point_str
@@ -448,16 +449,16 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
448
449
 
449
450
  private
450
451
 
451
- def age_check_and_get(account:, no_token:)
452
- cred = Awskeyring.get_valid_creds(account: account, no_token: no_token)
453
-
454
- maxage = Awskeyring.key_age
455
- age = (Time.new - cred[:updated]).div Awskeyring::Awsapi::ONE_DAY
456
- warn I18n.t('message.age_check', account: account, age: age) unless age < maxage
457
-
458
- cred
452
+ # when a double dash is parsed it is dropped from the args but we need it
453
+ def fix_args(curr, prev)
454
+ if prev.nil?
455
+ [ARGV[1], ARGV[2]]
456
+ else
457
+ [curr, prev]
458
+ end
459
459
  end
460
460
 
461
+ # determine the type of completion needed
461
462
  def comp_type(comp_lines:, prev:)
462
463
  sub_cmd = sub_command(comp_lines)
463
464
  comp_idx = comp_lines.rindex(prev)
@@ -475,8 +476,10 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
475
476
  [comp_type, sub_cmd]
476
477
  end
477
478
 
479
+ # check params for named params or fall back to flags
478
480
  def param_type(comp_idx, sub_cmd)
479
- param_list = method(sub_cmd).parameters
481
+ types = %i[opt req]
482
+ param_list = method(sub_cmd).parameters.select { |elem| types.include? elem[0] }
480
483
  if comp_idx.zero?
481
484
  :command
482
485
  elsif comp_idx > param_list.length
@@ -486,6 +489,7 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
486
489
  end
487
490
  end
488
491
 
492
+ # catch the command from prefixes and aliases
489
493
  def sub_command(comp_lines)
490
494
  return '' if comp_lines.nil? || comp_lines.length < 2
491
495
 
@@ -498,6 +502,7 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
498
502
  self.class.map[sub_cmd].to_s
499
503
  end
500
504
 
505
+ # given a type return the right list for completions
501
506
  def fetch_auto_resp(comp_type, sub_cmd)
502
507
  case comp_type
503
508
  when :command
@@ -517,11 +522,13 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
517
522
  end
518
523
  end
519
524
 
525
+ # list command names
520
526
  def list_commands
521
527
  commands = self.class.all_commands.keys.map { |elem| elem.tr('_', '-') }
522
528
  commands.reject! { |elem| %w[autocomplete default].include?(elem) }
523
529
  end
524
530
 
531
+ # list flags for a command
525
532
  def list_arguments(command:)
526
533
  options = self.class.all_commands[command].options.values
527
534
  exit 1 if options.empty?
@@ -530,18 +537,32 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
530
537
  options.map(&:switch_name)
531
538
  end
532
539
 
540
+ # add warning about old keys
541
+ def age_check_and_get(account:, no_token:)
542
+ cred = Awskeyring.get_valid_creds(account: account, no_token: no_token)
543
+
544
+ maxage = Awskeyring.key_age
545
+ age = (Time.new - cred[:updated]).div Awskeyring::Awsapi::ONE_DAY
546
+ warn I18n.t('message.age_check', account: account, age: age) unless age < maxage
547
+
548
+ cred
549
+ end
550
+
551
+ # print exports from map
533
552
  def put_env_string(cred)
534
553
  env_var = Awskeyring::Awsapi.get_env_array(cred)
535
554
  env_var.each { |var, value| puts "export #{var}=\"#{value}\"" }
536
555
  Awskeyring::Awsapi::AWS_ENV_VARS.each { |key| puts "unset #{key}" unless env_var.key?(key) }
537
556
  end
538
557
 
558
+ # select duration for sts token types
539
559
  def default_duration(duration, role, code)
540
560
  duration ||= Awskeyring::Awsapi::ONE_HOUR.to_s if role
541
561
  duration ||= Awskeyring::Awsapi::TWELVE_HOUR.to_s if code
542
562
  duration || Awskeyring::Awsapi::ONE_HOUR.to_s
543
563
  end
544
564
 
565
+ # ask and validate input values.
545
566
  def ask_check(existing:, message:, flags: nil, validator: nil, limited_to: nil) # rubocop:disable Metrics/MethodLength
546
567
  retries ||= 3
547
568
  begin
@@ -562,10 +583,12 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
562
583
  value
563
584
  end
564
585
 
586
+ # ask for somthinng if its missing.
565
587
  def ask_missing(existing:, message:, secure: false, optional: false, limited_to: nil)
566
588
  existing || ask(message: message, secure: secure, optional: optional, limited_to: limited_to).strip
567
589
  end
568
590
 
591
+ # ask in different ways
569
592
  def ask(message:, secure: false, optional: false, limited_to: nil)
570
593
  if secure
571
594
  Awskeyring::Input.read_secret("#{message.rjust(20)}: ")
@@ -578,6 +601,7 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
578
601
  end
579
602
  end
580
603
 
604
+ # undo Bundler env vars
581
605
  def unbundle
582
606
  to_delete = ENV.keys.select { |elem| elem.start_with?('BUNDLER_ORIG_') }
583
607
  bundled_env = to_delete.map { |elem| elem[('BUNDLER_ORIG_'.length)..] }
data/man/awskeyring.5 CHANGED
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "AWSKEYRING" "5" "May 2021" "" ""
4
+ .TH "AWSKEYRING" "5" "June 2021" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBAwskeyring\fR \- is a small tool to manage AWS account keys in the macOS Keychain
@@ -189,10 +189,10 @@ rotate ACCOUNT:
189
189
  Rotate access keys for an ACCOUNT
190
190
  .
191
191
  .TP
192
- token ACCOUNT [ROLE] [MFA]:
192
+ token ACCOUNT [ROLE] [CODE]:
193
193
  .
194
194
  .IP
195
- Create an STS Token from a ROLE or an MFA code
195
+ Create an STS Token from a ROLE or an mfa CODE
196
196
  .
197
197
  .br
198
198
  .
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awskeyring
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.4
4
+ version: 1.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tristan Morgan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-24 00:00:00.000000000 Z
11
+ date: 2021-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-iam
@@ -93,8 +93,8 @@ licenses:
93
93
  metadata:
94
94
  bug_tracker_uri: https://github.com/servian/awskeyring/issues
95
95
  changelog_uri: https://github.com/servian/awskeyring/blob/main/CHANGELOG.md
96
- documentation_uri: https://rubydoc.info/gems/awskeyring/1.8.4
97
- source_code_uri: https://github.com/servian/awskeyring/tree/v1.8.4
96
+ documentation_uri: https://rubydoc.info/gems/awskeyring/1.8.5
97
+ source_code_uri: https://github.com/servian/awskeyring/tree/v1.8.5
98
98
  wiki_uri: https://github.com/servian/awskeyring/wiki
99
99
  post_install_message:
100
100
  rdoc_options: []