lib/addy_lambda/aws.rb in addy_lambda-0.1.0 vs lib/addy_lambda/aws.rb in addy_lambda-0.1.1
- old
+ new
@@ -1,16 +1,89 @@
# frozen_string_literal: true
+require 'aws-sdk-lambda'
+
module AddyLambda
+ class JwtIssuers
+ ADDY = 0
+ end
+
+ class JwtAudiences
+ GENERIC = 0
+ PDF_ANNOTATE = 1
+ SUBSCRIPTION = 2
+ end
+
+ JWT_AUDIENCES = %w[generic pdf_annotate subscription].freeze
+ JWT_ISSUERS = ['addy'].freeze
# Common functionality for AWS related activities
class AWS
# ssm_client = Aws::SSM::Client.new
def self.get_ssm_value(ssm_client, path)
request = {
name: path,
with_decryption: true
}
response = ssm_client.get_parameter(request)
response.parameter.value
+ end
+
+ def self.invoke_lambda(lambda_client, function_name, payload, syncronous: true)
+ resp = lambda_client.invoke({
+ function_name: function_name,
+ invocation_type: syncronous ? 'RequestResponse' : 'Event',
+ payload: payload.to_json
+ })
+ AddyLambda::Common.valid_json?(resp.payload.string) ? JSON.parse(resp.payload.string) : resp.payload.string
+ end
+
+ # Lambda client can be obtained by running: lambda_client = Aws::Lambda::Client.new
+ def self.post_slack_message(lambda_client, channel, message, emoji = ':tada', unfurl_links: false)
+ input_params = {
+ 'user' => 'Signature Request',
+ 'channel' => channel,
+ 'message' => message,
+ 'emoji' => emoji,
+ 'unfurl_links' => unfurl_links
+ }
+ response_body = AddyLambda::AWS.invoke_lambda(lambda_client, 'slack-client', input_params)
+ return response_body unless response_body.key?('error')
+
+ logger.error(response_body['error'])
+ end
+
+ def self.send_email(lambda_client, recipient_emails, from_name, from_email, subject, content_html)
+ input_params = {
+ 'recipient_list' => recipient_emails,
+ 'from_name' => from_name,
+ 'from_email' => from_email,
+ 'subject' => subject,
+ 'content_html' => content_html
+ }
+
+ response_body = AddyLambda::AWS.invoke_lambda(lambda_client, 'mailgun-client', input_params)
+ return response_body unless response_body.key?('error')
+
+ logger.error(response_body['error'])
+ end
+
+ # NOTE: issuer AddyLambda::JwtIssuers::..., Audience AddyLambda::JwtAudiences::...
+ def self.generate_jwt(lambda_client, issuer, audience, expire, payload)
+ lambda_payload = {
+ 'issuer' => JWT_ISSUERS[issuer],
+ 'audience' => JWT_AUDIENCES[audience],
+ 'expire' => expire,
+ 'payload' => payload
+ }
+ jwt_response = AddyLambda::AWS.invoke_lambda(lambda_client, 'jwt-generate', lambda_payload)
+ jwt_response.key?('jwt') ? jwt_response['jwt'] : jwt_response
+ end
+
+ def self.validate_jwt(lambda_client, jwt)
+ lambda_payload = {
+ 'jwt' => jwt
+ }
+ response = AddyLambda::AWS.invoke_lambda(lambda_client, 'jwt-validate', lambda_payload)
+ response['statusCode'] == 200 ? JSON.parse(response['body']) : response
end
end
end