addy_lambda 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/README.md +9 -2
- data/deleteme.rb +11 -2
- data/lib/addy_lambda/aws.rb +73 -0
- data/lib/addy_lambda/common.rb +1 -28
- data/lib/addy_lambda/version.rb +1 -1
- data/lib/addy_lambda.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6e0c3ac7b853a06d75aed86d86c507c8b26eaa012572ec6e075782fc11c554a
|
4
|
+
data.tar.gz: dfd63b81d918faed64600bd88cb5e03773697aa2b6aa2fc09898ebb4923c2b59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ec0bc266dcbeeae6e680437e9172b773ee71856238a1a285d58395883171f585a052614a38b7e05a1f1094b8253b1b0eae57b48cb983995fcb744adf97db959
|
7
|
+
data.tar.gz: ee662005af9a3efcf3536b3dee8c9db79718d0dc8840fd00756a2cad094c6d1d416cc5f12abdba149b3303d2da978053c75e61940da7fa1aa574c4df83b9046c
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
The purpose of this gem, is to make common functionality for Lambdas be available across all of our Lambda implementaitons.
|
4
4
|
|
5
5
|
Things like:
|
6
|
+
|
6
7
|
- calling API endpoints
|
7
8
|
- Posting to slack
|
8
9
|
- Getting a JWT token
|
@@ -27,9 +28,16 @@ Or install it yourself as:
|
|
27
28
|
|
28
29
|
$ gem install addy_lambda
|
29
30
|
|
31
|
+
## Publishing a new version
|
32
|
+
|
33
|
+
- Make your changes
|
34
|
+
- Bump the version in `lib/addy_lambda/version.rb`
|
35
|
+
- Build using `gem build addy_lambda.gemspec`
|
36
|
+
|
30
37
|
## Usage
|
31
38
|
|
32
39
|
Run the tests:
|
40
|
+
|
33
41
|
```
|
34
42
|
ruby "/home/cabox/workspace/addy_lambda/test/addy_lambda_test.rb"
|
35
43
|
```
|
@@ -55,7 +63,7 @@ puts(test)
|
|
55
63
|
|
56
64
|
## Development
|
57
65
|
|
58
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `
|
66
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec ruby test/test_helper.rb` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
59
67
|
|
60
68
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
61
69
|
|
@@ -63,7 +71,6 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
63
71
|
|
64
72
|
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/addy_lambda. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/addy_lambda/blob/master/CODE_OF_CONDUCT.md).
|
65
73
|
|
66
|
-
|
67
74
|
## License
|
68
75
|
|
69
76
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/deleteme.rb
CHANGED
@@ -2,5 +2,14 @@ require_relative 'lib/addy_lambda'
|
|
2
2
|
|
3
3
|
lambda_client = Aws::Lambda::Client.new
|
4
4
|
|
5
|
-
resp = AddyLambda::
|
6
|
-
|
5
|
+
# resp = AddyLambda::AWS.send_email(lambda_client, ['alon@sabi.me', 'alon@addyinvest.com'], 'alon', 'alon@addyinvest.com',
|
6
|
+
# 'This is the subject', 'This is the content')
|
7
|
+
|
8
|
+
# resp = AddyLambda::AWS.post_slack_message(lambda_client, '@alon', 'This is the mess', ':tada:')
|
9
|
+
|
10
|
+
# pdf_annotate / subscription
|
11
|
+
resp = AddyLambda::AWS.generate_jwt(lambda_client, AddyLambda::JwtIssuers::ADDY, AddyLambda::JwtAudiences::GENERIC,
|
12
|
+
3000, { 'alon' => 'sabi' })
|
13
|
+
# resp = AddyLambda::AWS.validate_jwt(lambda_client,
|
14
|
+
# 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhbG9uIjoic2FiaSIsImlzcyI6ImFkZHkiLCJhdWQiOiJnZW5lcmljIiwiaWF0IjoxNjM5NDQxMzk5LCJleHAiOjE2Mzk0NDQzOTl9.jj2OhiEZnJ9s6tamHdc0wGNzlgW3Jwq-S8YquTxe_JWhHuOZKYUhlCM1J1AtaLBqwbnFONCI1geK6cDXIA57lwikh2GcBZGecFfn3hq5IuoSqkhSW-PypTsw2dVCPX-W-qOj6ktbVkTU-d9NvTJJAR4nkJdQMBFtDDgMP_huzxldUjkV9i4ruiebev9blinLuwS_pHIOeqpnTkqRxQ9U6oZscYT8dxHUVoTG03_1dbnnfq3xoBjmBzENz9j2CtZO_fnM96iwqPR4EfxpM7TU7o9NxIzunmN4_Z6Jmjh5yQWpRSp5ItnqQ5N9m6a5bE3NyGDfJh3tVHs7wg3VNqxsLQ')
|
15
|
+
puts(resp)
|
data/lib/addy_lambda/aws.rb
CHANGED
@@ -1,6 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'aws-sdk-lambda'
|
4
|
+
|
3
5
|
module AddyLambda
|
6
|
+
class JwtIssuers
|
7
|
+
ADDY = 0
|
8
|
+
end
|
9
|
+
|
10
|
+
class JwtAudiences
|
11
|
+
GENERIC = 0
|
12
|
+
PDF_ANNOTATE = 1
|
13
|
+
SUBSCRIPTION = 2
|
14
|
+
end
|
15
|
+
|
16
|
+
JWT_AUDIENCES = %w[generic pdf_annotate subscription].freeze
|
17
|
+
JWT_ISSUERS = ['addy'].freeze
|
4
18
|
# Common functionality for AWS related activities
|
5
19
|
class AWS
|
6
20
|
# ssm_client = Aws::SSM::Client.new
|
@@ -12,5 +26,64 @@ module AddyLambda
|
|
12
26
|
response = ssm_client.get_parameter(request)
|
13
27
|
response.parameter.value
|
14
28
|
end
|
29
|
+
|
30
|
+
def self.invoke_lambda(lambda_client, function_name, payload, syncronous: true)
|
31
|
+
resp = lambda_client.invoke({
|
32
|
+
function_name: function_name,
|
33
|
+
invocation_type: syncronous ? 'RequestResponse' : 'Event',
|
34
|
+
payload: payload.to_json
|
35
|
+
})
|
36
|
+
AddyLambda::Common.valid_json?(resp.payload.string) ? JSON.parse(resp.payload.string) : resp.payload.string
|
37
|
+
end
|
38
|
+
|
39
|
+
# Lambda client can be obtained by running: lambda_client = Aws::Lambda::Client.new
|
40
|
+
def self.post_slack_message(lambda_client, channel, message, emoji = ':tada', unfurl_links: false)
|
41
|
+
input_params = {
|
42
|
+
'user' => 'Signature Request',
|
43
|
+
'channel' => channel,
|
44
|
+
'message' => message,
|
45
|
+
'emoji' => emoji,
|
46
|
+
'unfurl_links' => unfurl_links
|
47
|
+
}
|
48
|
+
response_body = AddyLambda::AWS.invoke_lambda(lambda_client, 'slack-client', input_params)
|
49
|
+
return response_body unless response_body.key?('error')
|
50
|
+
|
51
|
+
logger.error(response_body['error'])
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.send_email(lambda_client, recipient_emails, from_name, from_email, subject, content_html)
|
55
|
+
input_params = {
|
56
|
+
'recipient_list' => recipient_emails,
|
57
|
+
'from_name' => from_name,
|
58
|
+
'from_email' => from_email,
|
59
|
+
'subject' => subject,
|
60
|
+
'content_html' => content_html
|
61
|
+
}
|
62
|
+
|
63
|
+
response_body = AddyLambda::AWS.invoke_lambda(lambda_client, 'mailgun-client', input_params)
|
64
|
+
return response_body unless response_body.key?('error')
|
65
|
+
|
66
|
+
logger.error(response_body['error'])
|
67
|
+
end
|
68
|
+
|
69
|
+
# NOTE: issuer AddyLambda::JwtIssuers::..., Audience AddyLambda::JwtAudiences::...
|
70
|
+
def self.generate_jwt(lambda_client, issuer, audience, expire, payload)
|
71
|
+
lambda_payload = {
|
72
|
+
'issuer' => JWT_ISSUERS[issuer],
|
73
|
+
'audience' => JWT_AUDIENCES[audience],
|
74
|
+
'expire' => expire,
|
75
|
+
'payload' => payload
|
76
|
+
}
|
77
|
+
jwt_response = AddyLambda::AWS.invoke_lambda(lambda_client, 'jwt-generate', lambda_payload)
|
78
|
+
jwt_response.key?('jwt') ? jwt_response['jwt'] : jwt_response
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.validate_jwt(lambda_client, jwt)
|
82
|
+
lambda_payload = {
|
83
|
+
'jwt' => jwt
|
84
|
+
}
|
85
|
+
response = AddyLambda::AWS.invoke_lambda(lambda_client, 'jwt-validate', lambda_payload)
|
86
|
+
response['statusCode'] == 200 ? JSON.parse(response['body']) : response
|
87
|
+
end
|
15
88
|
end
|
16
89
|
end
|
data/lib/addy_lambda/common.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'json'
|
2
|
-
require 'aws-sdk-lambda'
|
3
2
|
|
4
3
|
module AddyLambda
|
5
4
|
# Generic methods such as logging, error handling HTTP requests etc.
|
@@ -51,37 +50,11 @@ module AddyLambda
|
|
51
50
|
ScoutApm::Agent.instance.install
|
52
51
|
end
|
53
52
|
|
54
|
-
# Lambda client can be obtained by running: lambda_client = Aws::Lambda::Client.new
|
55
|
-
def self.post_slack_message(lambda_client, channel, message, emoji = ':tada', unfurl_links: false)
|
56
|
-
input_params = {
|
57
|
-
'user' => 'Signature Request',
|
58
|
-
'channel' => channel,
|
59
|
-
'message' => message,
|
60
|
-
'emoji' => emoji,
|
61
|
-
'unfurl_links' => unfurl_links
|
62
|
-
}
|
63
|
-
response_body = invoke_lambda(lambda_client, 'slack-client', input_params)
|
64
|
-
return response_body unless response_body.key?('error')
|
65
|
-
|
66
|
-
logger.error(response_body['error'])
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.invoke_lambda(lambda_client, function_name, payload)
|
70
|
-
resp = lambda_client.invoke({
|
71
|
-
function_name: function_name,
|
72
|
-
invocation_type: 'RequestResponse',
|
73
|
-
payload: payload.to_json
|
74
|
-
})
|
75
|
-
valid_json?(resp.payload.string)
|
76
|
-
response_obj = JSON.parse(resp.payload.string)
|
77
|
-
valid_json?(resp.payload.string) ? JSON.parse(response_obj['body']) : resp.payload.string
|
78
|
-
end
|
79
|
-
|
80
53
|
def self.get_request(url, params = nil, headers = nil)
|
81
54
|
uri = URI(url)
|
82
55
|
uri.query = URI.encode_www_form(params) if params
|
83
56
|
request = Net::HTTP::Get.new(uri.request_uri)
|
84
|
-
|
57
|
+
http_request(request, uri, headers)
|
85
58
|
end
|
86
59
|
|
87
60
|
def self.delete_request(url, headers = nil)
|
data/lib/addy_lambda/version.rb
CHANGED
data/lib/addy_lambda.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
require_relative 'addy_lambda/version'
|
4
|
+
require_relative 'addy_lambda/aws'
|
5
|
+
require_relative 'addy_lambda/common'
|
6
6
|
|
7
7
|
# Module for general functionality
|
8
8
|
module AddyLambda
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: addy_lambda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alon Sabi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-ssm
|