jets 4.0.2 → 4.0.4

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: 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