mydrive-aws-mfa 0.5.2 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: fc32e4eb8cb29f396af0187ef970d9b98552558c
4
- data.tar.gz: d4810f09a4877d807b358bb7ff2c17b50a57e65b
2
+ SHA256:
3
+ metadata.gz: c272882302abaecec8f71659b7ce8cc73b447cc0a8439aa44ef347056d37a679
4
+ data.tar.gz: bdb70dc1ab732d04b380d3f4cd22df09f40c219a71b9ecefb780f01d53faf054
5
5
  SHA512:
6
- metadata.gz: a59069e8ad84b8c79ca51df4a666957fdbdc679f4210e52a482060788faa34f7c77e1f27fa1eb8776d9cf7c2ea0adc0f3e9ac75616fced535cafcd18c0e4ae20
7
- data.tar.gz: eccced2cdc4e5ce34cfe26b33b2726448e3e4a04f005625991f8f16d10fba58fae47232223cc2589d53ad1517c57fc5743c52a0c1e5e3526d0e55d541c4b428f
6
+ metadata.gz: f6f5cce0cab0f4d803e07eb4014e700140ac289a8589b46f8bb122de636062f85a24de8487a1c162382e197133d8840428d8895b05d7daacc4810389c9255797
7
+ data.tar.gz: ca27d8f5078a4bb36fd628a513b79faaee617d96964bb0cd38401cfdc328e8b7626b860b582dadd142ec77d68ee0dbb9b27903edc1477f30dac5ee411560f72c
data/lib/aws_mfa.rb CHANGED
@@ -59,10 +59,17 @@ class AwsMfa
59
59
  end
60
60
 
61
61
  def load_credentials(profile_config)
62
- CredentialsLoader.new(mydrive_credentials_cache_dir).load_credentials(profile_config)
62
+ CredentialsLoader.new(
63
+ mydrive_credentials_cache_dir,
64
+ expiration_buffer_minutes: expiration_buffer_minutes
65
+ ).load_credentials(profile_config)
63
66
  end
64
67
 
65
68
  def execute_output(execution_output, credentials)
66
69
  CredentialsOutputExecutor.new.execute_output(execution_output, credentials)
67
70
  end
71
+
72
+ def expiration_buffer_minutes
73
+ ENV.fetch("MYDRIVE_MFA_TOKEN_EXPIRATION_BUFFER", 0).to_i
74
+ end
68
75
  end
@@ -1,19 +1,20 @@
1
- require 'io/console'
2
- require_relative 'errors'
3
- require_relative 'shell_command'
1
+ require "io/console"
2
+ require "json"
3
+ require "time"
4
+ require_relative "errors"
5
+ require_relative "shell_command"
4
6
 
5
7
  class AwsMfa
6
8
  class CredentialsLoader
7
- MFA_EXPIRATION_PERIOD_IN_SECONDS = 3600
8
-
9
- def initialize(mydrive_credentials_cache_dir)
9
+ def initialize(mydrive_credentials_cache_dir, expiration_buffer_minutes: 0)
10
10
  @mydrive_credentials_cache_dir = mydrive_credentials_cache_dir
11
+ @expiration_buffer_seconds = expiration_buffer_minutes * 60
11
12
  end
12
13
 
13
14
  def load_credentials(profile_config)
14
15
  credentials_file = File.join(mydrive_credentials_cache_dir, build_credentials_file_name(profile_config))
15
16
 
16
- if File.readable?(credentials_file) && token_not_expired?(credentials_file)
17
+ if File.readable?(credentials_file) && !token_expired?(credentials_file)
17
18
  credentials = File.read(credentials_file)
18
19
  else
19
20
  credentials = load_credentials_from_aws(profile_config)
@@ -32,9 +33,10 @@ class AwsMfa
32
33
  "#{source_profile}_#{profile_config.profile}_mfa_credentials"
33
34
  end
34
35
 
35
- def token_not_expired?(credentials_file)
36
- mtime = File.stat(credentials_file).mtime
37
- Time.new - mtime < MFA_EXPIRATION_PERIOD_IN_SECONDS
36
+ def token_expired?(credentials_file)
37
+ credentials_file_content = JSON.parse(File.read(credentials_file))
38
+ expiration_time = Time.parse(credentials_file_content["Credentials"]["Expiration"])
39
+ Time.now.to_i + @expiration_buffer_seconds >= expiration_time.to_i
38
40
  end
39
41
 
40
42
  def load_credentials_from_aws(profile_config)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mydrive-aws-mfa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - MyDrive Solutions Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-12 00:00:00.000000000 Z
11
+ date: 2018-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
91
  requirements:
92
92
  - aws-cli
93
93
  rubyforge_project:
94
- rubygems_version: 2.6.13
94
+ rubygems_version: 2.7.6
95
95
  signing_key:
96
96
  specification_version: 4
97
97
  summary: Run AWS commands with MFA (MyDrive fork)