lamby 2.5.1 → 2.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea85858e75126722596d3e49dc1818022c608730820b4898315eae359bed946b
4
- data.tar.gz: 99388d1a58a5f750b5d4e98a42c3249a882eaf5604acc2776dcf0bb47f956c8b
3
+ metadata.gz: 6b47ebf99fa0cfc8d6f88c652d05cf97f30d00c119081d2068418731faf88967
4
+ data.tar.gz: ae3e41ee1ff96c3a9868f1d25b9f030d0c971113827fb2751b66bed8e89bf46c
5
5
  SHA512:
6
- metadata.gz: ad20c220066a5388bdd91098facb475c3f146dad0ac5ec7f78ce173c5cbee2d77d5e7fb7f244ea0064d18191e27b218c61a3cac96f680fda528ab483921e5ce5
7
- data.tar.gz: 2a91f225a1dc75594dbf9b315cdf9784f5afa1f26ced765f8e125f0ecb672ae704d6a01a2dd5e81d636dcb76a112ca07e1419c3a14b65e5029ef716ebfc83e75
6
+ metadata.gz: de331c42dc947a6cfe15929c24c3b0c00c5bc81b89a7782149dd3c985fb4894f2ad5d2bf3f789ff699865f1982b690d43c8b983f0c553cf078b3567394508ea0
7
+ data.tar.gz: 992d10b1e0c9e39df59ae2b96e1406d6a53fc331f3eae92ea6d731e89bb43c754bd97cce60817277eedb65ad436ac15beea55ad55c36cb4a3d95486071d6efff
data/CHANGELOG.md CHANGED
@@ -1,57 +1,88 @@
1
1
  <!-- -*- mode: markdown -*- -->
2
+
2
3
  # Keep A Changelog!
3
4
 
4
5
  See this http://keepachangelog.com link for information on how we want this documented formatted.
5
6
 
7
+ ## v2.6.2
8
+
9
+ - Fixed Rack::Deflate usage with an ALB.
10
+
11
+ ## v2.6.1
12
+
13
+ #### Fixed
14
+
15
+ - Support redirects with empty response body.
16
+
17
+ #### Added
18
+
19
+ - Tests for enabling Rack::Deflate middleware by passing RACK_DEFLATE_ENABLED env variable.
20
+
21
+ ## v2.6.0
22
+
23
+ #### Fixed
24
+
25
+ - Support multiple Set-Cookie headers for all rest types.
26
+
27
+ ## v2.5.3
28
+
29
+ #### Fixed
30
+
31
+ - Base64 encode response body if the rack response is gzip or brotli compressed.
32
+
33
+ ## v2.5.2
34
+
35
+ - SSM file always overwrites. Fixes #65.
36
+
6
37
  ## v2.5.1
7
38
 
8
39
  #### Fixed
9
40
 
10
- * Quoting in describe-subnets #62 Thanks @atwoodjw
41
+ - Quoting in describe-subnets #62 Thanks @atwoodjw
11
42
 
12
43
  ## v2.5.0
13
44
 
14
45
  #### Changed
15
46
 
16
- * Install files to favor containers.
47
+ - Install files to favor containers.
17
48
 
18
49
  ## v2.2.2
19
50
 
20
51
  #### Changed
21
52
 
22
- * More ActiveSupport removal. Better ENV.to_h.
53
+ - More ActiveSupport removal. Better ENV.to_h.
23
54
 
24
55
  ## v2.2.1
25
56
 
26
57
  #### Changed
27
58
 
28
- * More ActiveSupport removal from SsmParameterStore.
59
+ - More ActiveSupport removal from SsmParameterStore.
29
60
 
30
61
  ## v2.2.0
31
62
 
32
63
  #### Changed
33
64
 
34
- * Remove dependency on `activesupport` for rack-only applications.
35
- * Remove ActiveSupport artifacts:
65
+ - Remove dependency on `activesupport` for rack-only applications.
66
+ - Remove ActiveSupport artifacts:
36
67
  - Replace `strip_heredoc` with `<<~HEREDOC`.
37
68
  - Remove instances of `Object#try`, replace with `&.`.
38
69
  - Use `Rack::Utils.build_nested_query` in place of `Object#to_query`.
39
70
  - Replace `Object#present?` with `to_s.empty?`.
40
71
  - Replace `Array.wrap` with `Array[obj].compact.flatten`.
41
- * Add a check against the `RAILS_ENV` AND `RACK_ENV` environment
72
+ - Add a check against the `RAILS_ENV` AND `RACK_ENV` environment
42
73
  variables prior to enabling debug mode.
43
74
 
44
75
  ## v2.1.0
45
76
 
46
77
  #### Changed
47
78
 
48
- * Only load the railtie if `Rails` is defined.
79
+ - Only load the railtie if `Rails` is defined.
49
80
 
50
81
  ## v2.0.1
51
82
 
52
83
  #### Changed
53
84
 
54
- * Remove Rails runtime dep. Only rack is needed.
85
+ - Remove Rails runtime dep. Only rack is needed.
55
86
 
56
87
  ## v2.0.0
57
88
 
@@ -59,120 +90,107 @@ Support for new API Gateway HTTP APIs!!!
59
90
 
60
91
  #### Changed
61
92
 
62
- * The `Lamby.handler` must have a `:rack` option. One of `:http`, `:rest`, `:alb`.
63
- * Renamed template generators to match options above.
64
- * The `lamby:install` task now defaults to HTTP API.
65
- * Changed the name of `:api` rack option to `:rest`.
66
- * Removed `export` from Dotenv files. Better Docker compatability.
93
+ - The `Lamby.handler` must have a `:rack` option. One of `:http`, `:rest`, `:alb`.
94
+ - Renamed template generators to match options above.
95
+ - The `lamby:install` task now defaults to HTTP API.
96
+ - Changed the name of `:api` rack option to `:rest`.
97
+ - Removed `export` from Dotenv files. Better Docker compatability.
67
98
 
68
99
  #### Added
69
100
 
70
- * New rack handler for HTTP API v1 and v2.
71
- * Lots of backfill tests for, ALBs & REST APIs.
72
-
101
+ - New rack handler for HTTP API v1 and v2.
102
+ - Lots of backfill tests for, ALBs & REST APIs.
73
103
 
74
104
  ## v1.0.3
75
105
 
76
106
  #### Changed
77
107
 
78
- * Change shebangs to `#!/usr/bin/env bash`
79
-
108
+ - Change shebangs to `#!/usr/bin/env bash`
80
109
 
81
110
  ## v1.0.2
82
111
 
83
112
  #### Changed
84
113
 
85
- * Adds an optional 'overwrite' parameter to #to_env.
114
+ - Adds an optional 'overwrite' parameter to #to_env.
86
115
 
87
116
  ## v1.0.1
88
117
 
89
118
  #### Changed
90
119
 
91
- * Links in bin/build templates to point to lamby.custominktech.com site.
92
-
120
+ - Links in bin/build templates to point to lamby.custominktech.com site.
93
121
 
94
122
  ## v1.0.0
95
123
 
96
124
  #### Fixed
97
125
 
98
- * ALB query params & binary responses. Fixes #38.
99
-
126
+ - ALB query params & binary responses. Fixes #38.
100
127
 
101
128
  ## v0.6.0
102
129
 
103
130
  #### Added
104
131
 
105
- * APPLICATION LOAD BALANACER SUPPORT!!! The new default. Use `rack: :api` option to handler for API Gateway support.
132
+ - APPLICATION LOAD BALANACER SUPPORT!!! The new default. Use `rack: :api` option to handler for API Gateway support.
106
133
 
107
134
  #### Changed
108
135
 
109
- * Rake task `lamby:install` now defaults to `application_load_balancer`
110
-
136
+ - Rake task `lamby:install` now defaults to `application_load_balancer`
111
137
 
112
138
  ## v0.5.1
113
139
 
114
140
  #### Fixed
115
141
 
116
- * The .gitignore file template. Fix .aws-sam dir.
117
-
142
+ - The .gitignore file template. Fix .aws-sam dir.
118
143
 
119
144
  ## v0.5.0
120
145
 
121
146
  #### Added
122
147
 
123
- * Template generators for first install. Ex: `./bin/rake -r lamby lamby:install:api_gateway`.
124
- * New `Lamby::SsmParameterStore.get!` helper.
125
-
148
+ - Template generators for first install. Ex: `./bin/rake -r lamby lamby:install:api_gateway`.
149
+ - New `Lamby::SsmParameterStore.get!` helper.
126
150
 
127
151
  ## v0.4.1
128
152
 
129
153
  #### Fixed
130
154
 
131
- * Fix type in v0.4.0 fix below.
132
-
155
+ - Fix type in v0.4.0 fix below.
133
156
 
134
157
  ## v0.4.0
135
158
 
136
159
  #### Fixed
137
160
 
138
- * File uploads in #33 using `CONTENT_TYPE` and `CONTENT_LENGTH`.
139
-
161
+ - File uploads in #33 using `CONTENT_TYPE` and `CONTENT_LENGTH`.
140
162
 
141
163
  ## v0.3.2
142
164
 
143
165
  #### Added
144
166
 
145
- * Pass Request ID for CloudWatch logs. Fixes #30.
146
-
167
+ - Pass Request ID for CloudWatch logs. Fixes #30.
147
168
 
148
169
  ## v0.3.1
149
170
 
150
171
  #### Changed
151
172
 
152
- * Docs and SAM template tweaks.
153
-
173
+ - Docs and SAM template tweaks.
154
174
 
155
175
  ## v0.3.0
156
176
 
157
177
  #### Added
158
178
 
159
- * Secure configs rake task.
160
- * Project bin setup and tests.
179
+ - Secure configs rake task.
180
+ - Project bin setup and tests.
161
181
 
162
182
  #### Changed
163
183
 
164
- * SAM template tweaks.
165
-
184
+ - SAM template tweaks.
166
185
 
167
186
  ## v0.2.0
168
187
 
169
188
  #### Changed
170
189
 
171
- * Simple docs and project re-organization.
172
-
190
+ - Simple docs and project re-organization.
173
191
 
174
192
  ## v0.1.0
175
193
 
176
194
  #### Added
177
195
 
178
- * New gem and placeholder in rubygems.
196
+ - New gem and placeholder in rubygems.
data/Dockerfile CHANGED
@@ -1,10 +1,5 @@
1
1
  FROM lambci/lambda:build-ruby2.7
2
2
 
3
- # Lock down AWS SAM version.
4
- RUN pip install awscli && \
5
- pip uninstall --yes aws-sam-cli && \
6
- pip install aws-sam-cli==0.45.0
7
-
8
3
  # Asset Pipeline
9
4
  RUN curl -sL https://rpm.nodesource.com/setup_12.x | bash - && \
10
5
  yum install -y nodejs
data/Gemfile.lock CHANGED
@@ -1,155 +1,158 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lamby (2.5.1)
4
+ lamby (2.6.2)
5
5
  rack
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actioncable (6.0.2.2)
11
- actionpack (= 6.0.2.2)
10
+ actioncable (6.1.3.1)
11
+ actionpack (= 6.1.3.1)
12
+ activesupport (= 6.1.3.1)
12
13
  nio4r (~> 2.0)
13
14
  websocket-driver (>= 0.6.1)
14
- actionmailbox (6.0.2.2)
15
- actionpack (= 6.0.2.2)
16
- activejob (= 6.0.2.2)
17
- activerecord (= 6.0.2.2)
18
- activestorage (= 6.0.2.2)
19
- activesupport (= 6.0.2.2)
15
+ actionmailbox (6.1.3.1)
16
+ actionpack (= 6.1.3.1)
17
+ activejob (= 6.1.3.1)
18
+ activerecord (= 6.1.3.1)
19
+ activestorage (= 6.1.3.1)
20
+ activesupport (= 6.1.3.1)
20
21
  mail (>= 2.7.1)
21
- actionmailer (6.0.2.2)
22
- actionpack (= 6.0.2.2)
23
- actionview (= 6.0.2.2)
24
- activejob (= 6.0.2.2)
22
+ actionmailer (6.1.3.1)
23
+ actionpack (= 6.1.3.1)
24
+ actionview (= 6.1.3.1)
25
+ activejob (= 6.1.3.1)
26
+ activesupport (= 6.1.3.1)
25
27
  mail (~> 2.5, >= 2.5.4)
26
28
  rails-dom-testing (~> 2.0)
27
- actionpack (6.0.2.2)
28
- actionview (= 6.0.2.2)
29
- activesupport (= 6.0.2.2)
30
- rack (~> 2.0, >= 2.0.8)
29
+ actionpack (6.1.3.1)
30
+ actionview (= 6.1.3.1)
31
+ activesupport (= 6.1.3.1)
32
+ rack (~> 2.0, >= 2.0.9)
31
33
  rack-test (>= 0.6.3)
32
34
  rails-dom-testing (~> 2.0)
33
35
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
34
- actiontext (6.0.2.2)
35
- actionpack (= 6.0.2.2)
36
- activerecord (= 6.0.2.2)
37
- activestorage (= 6.0.2.2)
38
- activesupport (= 6.0.2.2)
36
+ actiontext (6.1.3.1)
37
+ actionpack (= 6.1.3.1)
38
+ activerecord (= 6.1.3.1)
39
+ activestorage (= 6.1.3.1)
40
+ activesupport (= 6.1.3.1)
39
41
  nokogiri (>= 1.8.5)
40
- actionview (6.0.2.2)
41
- activesupport (= 6.0.2.2)
42
+ actionview (6.1.3.1)
43
+ activesupport (= 6.1.3.1)
42
44
  builder (~> 3.1)
43
45
  erubi (~> 1.4)
44
46
  rails-dom-testing (~> 2.0)
45
47
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
46
- activejob (6.0.2.2)
47
- activesupport (= 6.0.2.2)
48
+ activejob (6.1.3.1)
49
+ activesupport (= 6.1.3.1)
48
50
  globalid (>= 0.3.6)
49
- activemodel (6.0.2.2)
50
- activesupport (= 6.0.2.2)
51
- activerecord (6.0.2.2)
52
- activemodel (= 6.0.2.2)
53
- activesupport (= 6.0.2.2)
54
- activestorage (6.0.2.2)
55
- actionpack (= 6.0.2.2)
56
- activejob (= 6.0.2.2)
57
- activerecord (= 6.0.2.2)
58
- marcel (~> 0.3.1)
59
- activesupport (6.0.2.2)
51
+ activemodel (6.1.3.1)
52
+ activesupport (= 6.1.3.1)
53
+ activerecord (6.1.3.1)
54
+ activemodel (= 6.1.3.1)
55
+ activesupport (= 6.1.3.1)
56
+ activestorage (6.1.3.1)
57
+ actionpack (= 6.1.3.1)
58
+ activejob (= 6.1.3.1)
59
+ activerecord (= 6.1.3.1)
60
+ activesupport (= 6.1.3.1)
61
+ marcel (~> 1.0.0)
62
+ mini_mime (~> 1.0.2)
63
+ activesupport (6.1.3.1)
60
64
  concurrent-ruby (~> 1.0, >= 1.0.2)
61
- i18n (>= 0.7, < 2)
62
- minitest (~> 5.1)
63
- tzinfo (~> 1.1)
64
- zeitwerk (~> 2.2)
65
- aws-eventstream (1.0.3)
66
- aws-partitions (1.287.0)
67
- aws-sdk-core (3.92.0)
68
- aws-eventstream (~> 1.0, >= 1.0.2)
65
+ i18n (>= 1.6, < 2)
66
+ minitest (>= 5.1)
67
+ tzinfo (~> 2.0)
68
+ zeitwerk (~> 2.3)
69
+ aws-eventstream (1.1.1)
70
+ aws-partitions (1.446.0)
71
+ aws-sdk-core (3.114.0)
72
+ aws-eventstream (~> 1, >= 1.0.2)
69
73
  aws-partitions (~> 1, >= 1.239.0)
70
74
  aws-sigv4 (~> 1.1)
71
75
  jmespath (~> 1.0)
72
- aws-sdk-ssm (1.73.0)
73
- aws-sdk-core (~> 3, >= 3.71.0)
76
+ aws-sdk-ssm (1.108.0)
77
+ aws-sdk-core (~> 3, >= 3.112.0)
74
78
  aws-sigv4 (~> 1.1)
75
- aws-sigv4 (1.1.1)
76
- aws-eventstream (~> 1.0, >= 1.0.2)
79
+ aws-sigv4 (1.2.3)
80
+ aws-eventstream (~> 1, >= 1.0.2)
77
81
  builder (3.2.4)
78
- coderay (1.1.2)
79
- concurrent-ruby (1.1.6)
82
+ coderay (1.1.3)
83
+ concurrent-ruby (1.1.8)
80
84
  crass (1.0.6)
81
- erubi (1.9.0)
85
+ erubi (1.10.0)
82
86
  globalid (0.4.2)
83
87
  activesupport (>= 4.2.0)
84
- i18n (1.8.2)
88
+ i18n (1.8.10)
85
89
  concurrent-ruby (~> 1.0)
86
90
  jmespath (1.4.0)
87
- loofah (2.4.0)
91
+ loofah (2.9.1)
88
92
  crass (~> 1.0.2)
89
93
  nokogiri (>= 1.5.9)
90
94
  mail (2.7.1)
91
95
  mini_mime (>= 0.1.1)
92
- marcel (0.3.3)
93
- mimemagic (~> 0.3.2)
96
+ marcel (1.0.1)
94
97
  method_source (1.0.0)
95
- mimemagic (0.3.4)
96
- mini_mime (1.0.2)
97
- mini_portile2 (2.4.0)
98
- minitest (5.14.0)
99
- minitest-focus (1.1.2)
98
+ mini_mime (1.0.3)
99
+ mini_portile2 (2.5.0)
100
+ minitest (5.14.4)
101
+ minitest-focus (1.2.1)
100
102
  minitest (>= 4, < 6)
101
- mocha (1.11.2)
102
- nio4r (2.5.2)
103
- nokogiri (1.10.9)
104
- mini_portile2 (~> 2.4.0)
105
- pry (0.13.0)
103
+ mocha (1.12.0)
104
+ nio4r (2.5.7)
105
+ nokogiri (1.11.3)
106
+ mini_portile2 (~> 2.5.0)
107
+ racc (~> 1.4)
108
+ pry (0.14.1)
106
109
  coderay (~> 1.1)
107
110
  method_source (~> 1.0)
108
- rack (2.2.2)
111
+ racc (1.5.2)
112
+ rack (2.2.3)
109
113
  rack-test (1.1.0)
110
114
  rack (>= 1.0, < 3)
111
- rails (6.0.2.2)
112
- actioncable (= 6.0.2.2)
113
- actionmailbox (= 6.0.2.2)
114
- actionmailer (= 6.0.2.2)
115
- actionpack (= 6.0.2.2)
116
- actiontext (= 6.0.2.2)
117
- actionview (= 6.0.2.2)
118
- activejob (= 6.0.2.2)
119
- activemodel (= 6.0.2.2)
120
- activerecord (= 6.0.2.2)
121
- activestorage (= 6.0.2.2)
122
- activesupport (= 6.0.2.2)
123
- bundler (>= 1.3.0)
124
- railties (= 6.0.2.2)
115
+ rails (6.1.3.1)
116
+ actioncable (= 6.1.3.1)
117
+ actionmailbox (= 6.1.3.1)
118
+ actionmailer (= 6.1.3.1)
119
+ actionpack (= 6.1.3.1)
120
+ actiontext (= 6.1.3.1)
121
+ actionview (= 6.1.3.1)
122
+ activejob (= 6.1.3.1)
123
+ activemodel (= 6.1.3.1)
124
+ activerecord (= 6.1.3.1)
125
+ activestorage (= 6.1.3.1)
126
+ activesupport (= 6.1.3.1)
127
+ bundler (>= 1.15.0)
128
+ railties (= 6.1.3.1)
125
129
  sprockets-rails (>= 2.0.0)
126
130
  rails-dom-testing (2.0.3)
127
131
  activesupport (>= 4.2.0)
128
132
  nokogiri (>= 1.6)
129
133
  rails-html-sanitizer (1.3.0)
130
134
  loofah (~> 2.3)
131
- railties (6.0.2.2)
132
- actionpack (= 6.0.2.2)
133
- activesupport (= 6.0.2.2)
135
+ railties (6.1.3.1)
136
+ actionpack (= 6.1.3.1)
137
+ activesupport (= 6.1.3.1)
134
138
  method_source
135
139
  rake (>= 0.8.7)
136
- thor (>= 0.20.3, < 2.0)
137
- rake (13.0.1)
138
- sprockets (4.0.0)
140
+ thor (~> 1.0)
141
+ rake (13.0.3)
142
+ sprockets (4.0.2)
139
143
  concurrent-ruby (~> 1.0)
140
144
  rack (> 1, < 3)
141
- sprockets-rails (3.2.1)
145
+ sprockets-rails (3.2.2)
142
146
  actionpack (>= 4.0)
143
147
  activesupport (>= 4.0)
144
148
  sprockets (>= 3.0.0)
145
- thor (1.0.1)
146
- thread_safe (0.3.6)
147
- tzinfo (1.2.6)
148
- thread_safe (~> 0.1)
149
- websocket-driver (0.7.1)
149
+ thor (1.1.0)
150
+ tzinfo (2.0.4)
151
+ concurrent-ruby (~> 1.0)
152
+ websocket-driver (0.7.3)
150
153
  websocket-extensions (>= 0.1.0)
151
- websocket-extensions (0.1.4)
152
- zeitwerk (2.3.0)
154
+ websocket-extensions (0.1.5)
155
+ zeitwerk (2.4.2)
153
156
 
154
157
  PLATFORMS
155
158
  ruby
@@ -166,4 +169,4 @@ DEPENDENCIES
166
169
  rake
167
170
 
168
171
  BUNDLED WITH
169
- 2.1.4
172
+ 2.2.15
data/Rakefile CHANGED
@@ -10,4 +10,12 @@ Rake::TestTask.new(:test) do |t|
10
10
  t.warning = false
11
11
  end
12
12
 
13
- task :default => :test
13
+ Rake::TestTask.new(:test_deflate) do |t|
14
+ t.libs << "test"
15
+ t.libs << "lib"
16
+ t.test_files = FileList["test/rack_deflate_test.rb"]
17
+ t.verbose = false
18
+ t.warning = false
19
+ end
20
+
21
+ task :default => [:test, :test_deflate]
data/bin/_test CHANGED
@@ -4,3 +4,4 @@ set -e
4
4
  export RAILS_ENV="test"
5
5
 
6
6
  bundle exec rake test
7
+ RACK_DEFLATE_ENABLED=1 bundle exec rake test_deflate
data/lib/lamby/handler.rb CHANGED
@@ -31,23 +31,32 @@ module Lamby
31
31
  @headers
32
32
  end
33
33
 
34
+ def set_cookies
35
+ return @set_cookies if defined?(@set_cookies)
36
+ @set_cookies = if @headers && @headers['Set-Cookie']
37
+ @headers.delete('Set-Cookie').split("\n")
38
+ end
39
+ end
40
+
34
41
  def body
35
42
  @rbody ||= ''.tap do |rbody|
36
- @body.each { |part| rbody << part }
43
+ @body.each { |part| rbody << part if part }
37
44
  end
38
45
  end
39
46
 
40
47
  def call
41
48
  return self if @called
42
49
  @status, @headers, @body = call_app
50
+ set_cookies
43
51
  @called = true
44
52
  self
45
53
  end
46
54
 
47
- def base64_encodeable?
48
- @headers && (
49
- @headers['Content-Transfer-Encoding'] == 'binary' ||
50
- @headers['X-Lamby-Base64'] == '1'
55
+ def base64_encodeable?(hdrs = @headers)
56
+ hdrs && (
57
+ hdrs['Content-Transfer-Encoding'] == 'binary' ||
58
+ content_encoding_compressed?(hdrs) ||
59
+ hdrs['X-Lamby-Base64'] == '1'
51
60
  )
52
61
  end
53
62
 
@@ -80,5 +89,9 @@ module Lamby
80
89
  end
81
90
  end
82
91
 
92
+ def content_encoding_compressed?(hdrs)
93
+ content_encoding_header = hdrs['Content-Encoding'] || ''
94
+ content_encoding_header.split(', ').any? { |h| ['br', 'gzip'].include?(h) }
95
+ end
83
96
  end
84
97
  end
@@ -11,9 +11,12 @@ module Lamby
11
11
 
12
12
  def response(handler)
13
13
  hhdrs = handler.headers
14
- multivalue_headers = hhdrs.transform_values { |v| Array[v].compact.flatten } if multi_value?
14
+ if multi_value?
15
+ multivalue_headers = hhdrs.transform_values { |v| Array[v].compact.flatten }
16
+ multivalue_headers['Set-Cookie'] = handler.set_cookies if handler.set_cookies
17
+ end
15
18
  status_description = "#{handler.status} #{::Rack::Utils::HTTP_STATUS_CODES[handler.status]}"
16
- base64_encode = hhdrs['Content-Transfer-Encoding'] == 'binary' || hhdrs['X-Lamby-Base64'] == '1'
19
+ base64_encode = handler.base64_encodeable?(hhdrs)
17
20
  body = Base64.strict_encode64(handler.body) if base64_encode
18
21
  { multiValueHeaders: multivalue_headers,
19
22
  statusDescription: status_description,
@@ -6,6 +6,15 @@ module Lamby
6
6
  { isBase64Encoded: true, body: handler.body64 }
7
7
  else
8
8
  super
9
+ end.tap do |r|
10
+ if cookies = handler.set_cookies
11
+ if payload_version_one?
12
+ r[:multiValueHeaders] ||= {}
13
+ r[:multiValueHeaders]['Set-Cookie'] = cookies
14
+ else
15
+ r[:cookies] = cookies
16
+ end
17
+ end
9
18
  end
10
19
  end
11
20
 
@@ -79,6 +88,9 @@ module Lamby
79
88
  'HTTP/1.1'
80
89
  end
81
90
 
91
+ def payload_version_one?
92
+ event['version'] == '1.0'
93
+ end
82
94
 
83
95
  end
84
96
  end
@@ -6,6 +6,11 @@ module Lamby
6
6
  { isBase64Encoded: true, body: handler.body64 }
7
7
  else
8
8
  super
9
+ end.tap do |r|
10
+ if cookies = handler.set_cookies
11
+ r[:multiValueHeaders] ||= {}
12
+ r[:multiValueHeaders]['Set-Cookie'] = cookies
13
+ end
9
14
  end
10
15
  end
11
16
 
@@ -40,7 +40,7 @@ module Lamby
40
40
  end
41
41
 
42
42
  def to_dotenv
43
- File.open(dotenv_file, 'w') { |f| f.write(dotenv_contents) }
43
+ File.open(dotenv_file, 'a') { |f| f.write(dotenv_contents) }
44
44
  end
45
45
 
46
46
  def get!
@@ -1,14 +1,24 @@
1
1
  #!/usr/bin/env bash
2
2
  set -e
3
3
 
4
+ export DEPLOYMENT_NAME="myorg/APPNAMEHERE"
4
5
  export RAILS_ENV=${RAILS_ENV:="production"}
5
6
  export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:=us-east-1}
6
- export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.$(whoami)"}
7
+ export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.${DEPLOYMENT_NAME/\//-}"}
7
8
 
8
9
  # https://github.com/aws/aws-sam-cli/issues/2447
9
10
  export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
10
- export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/myorg/APPNAMEHERE"
11
+ export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${DEPLOYMENT_NAME}"
11
12
 
13
+ echo '== Creating ECR repository =='
14
+ echo 'You can safely ignore any RepositoryAlreadyExistsException errors...'
15
+ aws ecr create-repository \
16
+ --repository-name "$DEPLOYMENT_NAME" \
17
+ --image-tag-mutability MUTABLE \
18
+ --image-scanning-configuration scanOnPush=true \
19
+ --region "$AWS_DEFAULT_REGION" || true
20
+
21
+ # Build our application code into a deployment folder
12
22
  ./bin/_build
13
23
 
14
24
  export VPCID=${VPCID:=$(
@@ -37,13 +47,13 @@ sam package \
37
47
  --output-template-file ./.aws-sam/build/packaged.yaml \
38
48
  --image-repository "$IMAGE_REPOSITORY" \
39
49
  --s3-bucket "${CLOUDFORMATION_BUCKET}" \
40
- --s3-prefix "APPNAMEHERE-${RAILS_ENV}"
50
+ --s3-prefix "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}"
41
51
 
42
52
  echo "== SAM deploy..."
43
53
  sam deploy \
44
54
  --region "$AWS_DEFAULT_REGION" \
45
55
  --template-file ./.aws-sam/build/packaged.yaml \
46
- --stack-name "APPNAMEHERE-${RAILS_ENV}" \
56
+ --stack-name "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}" \
47
57
  --image-repository "$IMAGE_REPOSITORY" \
48
58
  --capabilities "CAPABILITY_IAM" \
49
59
  --parameter-overrides \
@@ -3,6 +3,10 @@ set -e
3
3
 
4
4
  export RAILS_ENV=${RAILS_ENV:=production}
5
5
 
6
+ if [[ "$OSTYPE" == *"darwin"* ]]; then
7
+ export SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock
8
+ fi
9
+
6
10
  docker-compose run \
7
11
  -e CLOUDFORMATION_BUCKET \
8
12
  cicd \
@@ -1,14 +1,24 @@
1
1
  #!/usr/bin/env bash
2
2
  set -e
3
3
 
4
+ export DEPLOYMENT_NAME="myorg/APPNAMEHERE"
4
5
  export RAILS_ENV=${RAILS_ENV:="production"}
5
6
  export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:=us-east-1}
6
- export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.$(whoami)"}
7
+ export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.${DEPLOYMENT_NAME/\//-}"}
7
8
 
8
9
  # https://github.com/aws/aws-sam-cli/issues/2447
9
10
  export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
10
- export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/myorg/APPNAMEHERE"
11
+ export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${DEPLOYMENT_NAME}"
11
12
 
13
+ echo '== Creating ECR repository =='
14
+ echo 'You can safely ignore any RepositoryAlreadyExistsException errors...'
15
+ aws ecr create-repository \
16
+ --repository-name "$DEPLOYMENT_NAME" \
17
+ --image-tag-mutability MUTABLE \
18
+ --image-scanning-configuration scanOnPush=true \
19
+ --region "$AWS_DEFAULT_REGION" || true
20
+
21
+ # Build our application code into a deployment folder
12
22
  ./bin/_build
13
23
 
14
24
  sam build \
@@ -22,13 +32,13 @@ sam package \
22
32
  --output-template-file ./.aws-sam/build/packaged.yaml \
23
33
  --image-repository "$IMAGE_REPOSITORY" \
24
34
  --s3-bucket "${CLOUDFORMATION_BUCKET}" \
25
- --s3-prefix "APPNAMEHERE-${RAILS_ENV}"
35
+ --s3-prefix "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}"
26
36
 
27
37
  echo "== SAM deploy..."
28
38
  sam deploy \
29
39
  --region "$AWS_DEFAULT_REGION" \
30
40
  --template-file ./.aws-sam/build/packaged.yaml \
31
- --stack-name "APPNAMEHERE-${RAILS_ENV}" \
41
+ --stack-name "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}" \
32
42
  --image-repository "$IMAGE_REPOSITORY" \
33
43
  --capabilities "CAPABILITY_IAM" \
34
44
  --parameter-overrides \
@@ -3,6 +3,10 @@ set -e
3
3
 
4
4
  export RAILS_ENV=${RAILS_ENV:=production}
5
5
 
6
+ if [[ "$OSTYPE" == *"darwin"* ]]; then
7
+ export SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock
8
+ fi
9
+
6
10
  docker-compose run \
7
11
  -e CLOUDFORMATION_BUCKET \
8
12
  cicd \
@@ -1,14 +1,24 @@
1
1
  #!/usr/bin/env bash
2
2
  set -e
3
3
 
4
+ export DEPLOYMENT_NAME="myorg/APPNAMEHERE"
4
5
  export RAILS_ENV=${RAILS_ENV:="production"}
5
6
  export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:=us-east-1}
6
- export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.$(whoami)"}
7
+ export CLOUDFORMATION_BUCKET=${CLOUDFORMATION_BUCKET:="lamby.cloudformation.${DEPLOYMENT_NAME/\//-}"}
7
8
 
8
9
  # https://github.com/aws/aws-sam-cli/issues/2447
9
10
  export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
10
- export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/myorg/APPNAMEHERE"
11
+ export IMAGE_REPOSITORY="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${DEPLOYMENT_NAME}"
11
12
 
13
+ echo '== Creating ECR repository =='
14
+ echo 'You can safely ignore any RepositoryAlreadyExistsException errors...'
15
+ aws ecr create-repository \
16
+ --repository-name "$DEPLOYMENT_NAME" \
17
+ --image-tag-mutability MUTABLE \
18
+ --image-scanning-configuration scanOnPush=true \
19
+ --region "$AWS_DEFAULT_REGION" || true
20
+
21
+ # Build our application code into a deployment folder
12
22
  ./bin/_build
13
23
 
14
24
  sam build \
@@ -22,13 +32,13 @@ sam package \
22
32
  --output-template-file ./.aws-sam/build/packaged.yaml \
23
33
  --image-repository "$IMAGE_REPOSITORY" \
24
34
  --s3-bucket "${CLOUDFORMATION_BUCKET}" \
25
- --s3-prefix "APPNAMEHERE-${RAILS_ENV}"
35
+ --s3-prefix "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}"
26
36
 
27
37
  echo "== SAM deploy..."
28
38
  sam deploy \
29
39
  --region "$AWS_DEFAULT_REGION" \
30
40
  --template-file ./.aws-sam/build/packaged.yaml \
31
- --stack-name "APPNAMEHERE-${RAILS_ENV}" \
41
+ --stack-name "${DEPLOYMENT_NAME/\//-}-${RAILS_ENV}" \
32
42
  --image-repository "$IMAGE_REPOSITORY" \
33
43
  --capabilities "CAPABILITY_IAM" \
34
44
  --parameter-overrides \
@@ -3,6 +3,10 @@ set -e
3
3
 
4
4
  export RAILS_ENV=${RAILS_ENV:=production}
5
5
 
6
+ if [[ "$OSTYPE" == *"darwin"* ]]; then
7
+ export SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock
8
+ fi
9
+
6
10
  docker-compose run \
7
11
  -e CLOUDFORMATION_BUCKET \
8
12
  cicd \
data/lib/lamby/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lamby
2
- VERSION = '2.5.1'
2
+ VERSION = '2.6.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lamby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1
4
+ version: 2.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken Collins
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-16 00:00:00.000000000 Z
11
+ date: 2021-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack