jets 4.0.2 → 4.0.4

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: 898dace94ebd7b32151b27fa45377e873facc028dfd8a70545f9dd85a3aebf2b
4
- data.tar.gz: c91297479c8dd6dbe4a66edec38ff2fd3baefca8fc338300a349180935d1d8c3
3
+ metadata.gz: a04cac354e7cc219602bd9a156eb26be7517025997ebfd4965e2d0678ddaee56
4
+ data.tar.gz: 1e4d52b85a38f8058dc38538f32f6e0c551aacde7cd2ee444368f787486c7779
5
5
  SHA512:
6
- metadata.gz: a60f58645caf94956e029721d160954deadd0f6b826841f6178ba0d03b296ad8af13f6a88b376503e47a1e70c8486751d22cb432a03494ef03f9811176fbfc83
7
- data.tar.gz: e83434bf93f3f7d139877f2969a5b31fa85e5a49254a42c145e6eec728f3c0a47faaf3c5fe2a2e2c229d55202a149eddf273e93b365c018677e1d8dc967d4db7
6
+ metadata.gz: 9e8216af98538a02cfd1baed256f0b452daa5d626c6e7bde0093bbe37007e207dccd736122903351eba55615af1750ea1272134c6e8fc32c504f53d252e58fdc
7
+ data.tar.gz: 7968a375e5a80deafc70b1c8261095b9ff9237471c73fb616c63531ed6080483d83745243d08f5ca33a9b92871ea9b1280c6f0e5beb64b26ee57fa9f2621bd75
data/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [4.0.4] - 2023-09-07
7
+ - [#662](https://github.com/boltops-tools/jets/pull/662) fix vpc iam permissions
8
+
9
+ ## [4.0.3] - 2023-08-03
10
+ - [#657](https://github.com/boltops-tools/jets/pull/657) [Fix] ApiGateway for local Middleware: fix query_string_parameters
11
+
6
12
  ## [4.0.2] - 2023-08-03
7
13
  - [#660](https://github.com/boltops-tools/jets/pull/660) Fix prewarming
8
14
 
@@ -2,8 +2,8 @@ class Jets::Application
2
2
  module Defaults
3
3
  extend ActiveSupport::Concern
4
4
 
5
- included do
6
- def self.default_iam_policy
5
+ class_methods do
6
+ def default_iam_policy
7
7
  project_namespace = Jets.project_namespace
8
8
  logs = {
9
9
  action: ["logs:*"],
@@ -24,24 +24,23 @@ class Jets::Application
24
24
  }
25
25
  policies << cloudformation
26
26
 
27
- if Jets.config.function.vpc_config
28
- vpc = {
29
- action: %w[
30
- ec2:CreateNetworkInterface
31
- ec2:DeleteNetworkInterface
32
- ec2:DescribeNetworkInterfaces
33
- ec2:DescribeVpcs
34
- ec2:DescribeSubnets
35
- ec2:DescribeSecurityGroups
36
- ],
37
- effect: "Allow",
38
- resource: "*",
39
- }
40
- policies << vpc
41
- end
42
-
43
27
  policies
44
28
  end
29
+
30
+ def vpc_iam_policy_statement
31
+ {
32
+ Action: %w[
33
+ ec2:CreateNetworkInterface
34
+ ec2:DeleteNetworkInterface
35
+ ec2:DescribeNetworkInterfaces
36
+ ec2:DescribeVpcs
37
+ ec2:DescribeSubnets
38
+ ec2:DescribeSecurityGroups
39
+ ],
40
+ Effect: "Allow",
41
+ Resource: "*",
42
+ }
43
+ end
45
44
  end
46
45
 
47
46
  def default_config
@@ -201,5 +200,29 @@ class Jets::Application
201
200
  app/shared/functions
202
201
  ]
203
202
  end
203
+
204
+ # Used by app/jobs/jets/preheat_job.rb
205
+ def preheat_job_iam_policy
206
+ policy = [
207
+ {
208
+ Sid: "Statement1",
209
+ Action: ["logs:*"],
210
+ Effect: "Allow",
211
+ Resource: [{
212
+ "Fn::Sub": "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${JetsPreheatJobWarmLambdaFunction}"
213
+ }]
214
+ },
215
+ {
216
+ Sid: "Statement2",
217
+ Action: ["lambda:InvokeFunction", "lambda:InvokeAsync"],
218
+ Effect: "Allow",
219
+ Resource: [{
220
+ "Fn::Sub": "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:#{Jets.project_namespace}-*"
221
+ }]
222
+ }
223
+ ]
224
+ policy << Jets::Application.vpc_iam_policy_statement if Jets.config.function.vpc_config
225
+ policy
226
+ end
204
227
  end
205
228
  end
@@ -16,6 +16,7 @@ class Jets::Controller::Middleware::Local
16
16
  "httpMethod" => @env['REQUEST_METHOD'], # GET
17
17
  "headers" => request_headers,
18
18
  "queryStringParameters" => query_string_parameters,
19
+ "multiValueQueryStringParameters" => multi_value_query_string_parameters,
19
20
  "pathParameters" => @route.extract_parameters(path),
20
21
  "stageVariables" => nil,
21
22
  "requestContext" => {},
@@ -77,7 +78,18 @@ class Jets::Controller::Middleware::Local
77
78
  end
78
79
 
79
80
  def query_string_parameters
80
- Rack::Utils.parse_nested_query(@env['QUERY_STRING'])
81
+ @env['QUERY_STRING']&.split('&')&.each_with_object({}) do |parameter, hash|
82
+ key, value = parameter.split('=')
83
+ hash[key] = value
84
+ end || {}
85
+ end
86
+
87
+ def multi_value_query_string_parameters
88
+ @env['QUERY_STRING']&.split('&')&.each_with_object({}) do |parameter, hash|
89
+ key, value = parameter.split('=')
90
+ hash[key] = [] if hash[key].nil?
91
+ hash[key] << value
92
+ end || {}
81
93
  end
82
94
 
83
95
  # To get the post body:
@@ -112,9 +112,15 @@ module Jets::Controller::Rack
112
112
  end
113
113
 
114
114
  def query_string
115
- qs_params = @event["queryStringParameters"] || {} # always set with API Gateway but when testing node shim might not be
116
- hash = Jets::Mega::HashConverter.encode(qs_params)
117
- hash.to_query
115
+ qs_params = @event["multiValueQueryStringParameters"] || {} # always set with API Gateway but when testing node shim might not be
116
+
117
+ array = qs_params.each_with_object([]) do |(key, value), arr|
118
+ arr << value.map do |v|
119
+ v.to_query(key)
120
+ end
121
+ end
122
+
123
+ array.join("&")
118
124
  end
119
125
 
120
126
  def headers
@@ -7,24 +7,7 @@ class Jets::PreheatJob < ApplicationJob
7
7
 
8
8
  class_timeout 30
9
9
  class_memory 1024
10
- class_iam_policy(
11
- {
12
- sid: "Statement1",
13
- action: ["logs:*"],
14
- effect: "Allow",
15
- resource: [
16
- sub("arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${WarmLambdaFunction}"),
17
- ]
18
- },
19
- {
20
- Sid: "Statement2",
21
- Action: ["lambda:InvokeFunction", "lambda:InvokeAsync"],
22
- Effect: "Allow",
23
- Resource: [
24
- sub("arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:#{Jets.project_namespace}-*")
25
- ]
26
- }
27
- )
10
+ class_iam_policy(Jets.config.preheat_job_iam_policy)
28
11
 
29
12
  rate(PREWARM_RATE) if torching
30
13
  def torch
@@ -7,7 +7,7 @@ module Jets::Mega
7
7
  value.each { |k,v| encode(v, append_key(key,k), out_hash) }
8
8
  out_hash
9
9
  when Array then
10
- value.each { |v| encode(v, "#{key}[]", out_hash) }
10
+ value.each { |v| encode(v, "#{key}", out_hash) }
11
11
  out_hash
12
12
  when nil then ''
13
13
  else
@@ -22,4 +22,4 @@ module Jets::Mega
22
22
  root_key.nil? ? :"#{key}" : :"#{root_key}[#{key.to_s}]"
23
23
  end
24
24
  end
25
- end
25
+ end
@@ -24,6 +24,12 @@ module Jets::Resource::Iam
24
24
  }
25
25
  }
26
26
 
27
+ # Add vpc permissions to all policies
28
+ definition[logical_id][:properties][:policies] = [
29
+ policy_name: "vpc", # required, limited to 128-chars
30
+ policy_document: vpc_policy_document,
31
+ ] if vpc_policy_document
32
+
27
33
  unless managed_policy_arns.empty?
28
34
  definition[logical_id][:properties][:managed_policy_arns] = managed_policy_arns
29
35
  end
@@ -31,6 +37,14 @@ module Jets::Resource::Iam
31
37
  definition
32
38
  end
33
39
 
40
+ def vpc_policy_document
41
+ if Jets.config.function.vpc_config
42
+ {
43
+ Statement: [Jets::Application.vpc_iam_policy_statement]
44
+ }
45
+ end
46
+ end
47
+
34
48
  def policy_document
35
49
  PolicyDocument.new(@policy_definitions.flatten.uniq).policy_document
36
50
  end
data/lib/jets/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "4.0.2"
2
+ VERSION = "4.0.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jets
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.2
4
+ version: 4.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-03 00:00:00.000000000 Z
11
+ date: 2023-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionmailer