Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
cd13aee3
Unverified
Commit
cd13aee3
authored
Jul 08, 2023
by
neil
Committed by
GitHub
Jul 08, 2023
Browse files
Merge pull request #4687 from szhu25/ses-notifyhook
Notify hook: AWS SES
parents
41b6aebe
a6b5f0c9
Changes
1
Show whitespace changes
Inline
Side-by-side
notify/aws_ses.sh
0 → 100644
View file @
cd13aee3
#!/usr/bin/env sh
#
#AWS_ACCESS_KEY_ID="sdfsdfsdfljlbjkljlkjsdfoiwje"
#
#AWS_SECRET_ACCESS_KEY="xxxxxxx"
#
#AWS_SES_REGION="us-east-1"
#
#AWS_SES_TO="xxxx@xxx.com"
#
#AWS_SES_FROM="xxxx@cccc.com"
#
#AWS_SES_FROM_NAME="Something something"
#This is the Amazon SES api wrapper for acme.sh
AWS_WIKI
=
"https://docs.aws.amazon.com/ses/latest/dg/send-email-api.html"
aws_ses_send
()
{
_subject
=
"
$1
"
_content
=
"
$2
"
_statusCode
=
"
$3
"
#0: success, 1: error 2($RENEW_SKIP): skipped
_debug
"_statusCode"
"
$_statusCode
"
AWS_ACCESS_KEY_ID
=
"
${
AWS_ACCESS_KEY_ID
:-
$(
_readaccountconf_mutable AWS_ACCESS_KEY_ID
)
}
"
AWS_SECRET_ACCESS_KEY
=
"
${
AWS_SECRET_ACCESS_KEY
:-
$(
_readaccountconf_mutable AWS_SECRET_ACCESS_KEY
)
}
"
AWS_SES_REGION
=
"
${
AWS_SES_REGION
:-
$(
_readaccountconf_mutable AWS_SES_REGION
)
}
"
if
[
-z
"
$AWS_ACCESS_KEY_ID
"
]
||
[
-z
"
$AWS_SECRET_ACCESS_KEY
"
]
;
then
_use_container_role
||
_use_instance_role
fi
if
[
-z
"
$AWS_ACCESS_KEY_ID
"
]
||
[
-z
"
$AWS_SECRET_ACCESS_KEY
"
]
;
then
AWS_ACCESS_KEY_ID
=
""
AWS_SECRET_ACCESS_KEY
=
""
_err
"You haven't specified the aws SES api key id and and api key secret yet."
_err
"Please create your key and try again. see
$(
__green
$AWS_WIKI
)
"
return
1
fi
if
[
-z
"
$AWS_SES_REGION
"
]
;
then
AWS_SES_REGION
=
""
_err
"You haven't specified the aws SES api region yet."
_err
"Please specify your region and try again. see https://docs.aws.amazon.com/general/latest/gr/ses.html"
return
1
fi
#save for future use, unless using a role which will be fetched as needed
if
[
-z
"
$_using_role
"
]
;
then
_saveaccountconf_mutable AWS_ACCESS_KEY_ID
"
$AWS_ACCESS_KEY_ID
"
_saveaccountconf_mutable AWS_SECRET_ACCESS_KEY
"
$AWS_SECRET_ACCESS_KEY
"
fi
AWS_SES_TO
=
"
${
AWS_SES_TO
:-
$(
_readaccountconf_mutable AWS_SES_TO
)
}
"
if
[
-z
"
$AWS_SES_TO
"
]
;
then
AWS_SES_TO
=
""
_err
"You didn't specify an email to AWS_SES_TO receive messages."
return
1
fi
_saveaccountconf_mutable AWS_SES_TO
"
$AWS_SES_TO
"
AWS_SES_FROM
=
"
${
AWS_SES_FROM
:-
$(
_readaccountconf_mutable AWS_SES_FROM
)
}
"
if
[
-z
"
$AWS_SES_FROM
"
]
;
then
AWS_SES_FROM
=
""
_err
"You didn't specify an email to AWS_SES_FROM receive messages."
return
1
fi
_saveaccountconf_mutable AWS_SES_FROM
"
$AWS_SES_FROM
"
AWS_SES_FROM_NAME
=
"
${
AWS_SES_FROM_NAME
:-
$(
_readaccountconf_mutable AWS_SES_FROM_NAME
)
}
"
_saveaccountconf_mutable AWS_SES_FROM_NAME
"
$AWS_SES_FROM_NAME
"
AWS_SES_SENDFROM
=
"
$AWS_SES_FROM_NAME
<
$AWS_SES_FROM
>"
AWS_SES_ACTION
=
"Action=SendEmail"
AWS_SES_SOURCE
=
"Source=
$AWS_SES_SENDFROM
"
AWS_SES_TO
=
"Destination.ToAddresses.member.1=
$AWS_SES_TO
"
AWS_SES_SUBJECT
=
"Message.Subject.Data=
$_subject
"
AWS_SES_MESSAGE
=
"Message.Body.Text.Data=
$_content
"
_data
=
"
${
AWS_SES_ACTION
}
&
${
AWS_SES_SOURCE
}
&
${
AWS_SES_TO
}
&
${
AWS_SES_SUBJECT
}
&
${
AWS_SES_MESSAGE
}
"
response
=
"
$(
aws_rest POST
""
""
"
$_data
"
)
"
}
_use_metadata
()
{
_aws_creds
=
"
$(
_get
"
$1
"
""
1 |
_normalizeJson |
tr
'{,}'
'\n'
|
while
read
-r
_line
;
do
_key
=
"
$(
echo
"
${
_line
%%
:
*
}
"
|
tr
-d
'"'
)
"
_value
=
"
${
_line
#*
:
}
"
_debug3
"_key"
"
$_key
"
_secure_debug3
"_value"
"
$_value
"
case
"
$_key
"
in
AccessKeyId
)
echo
"AWS_ACCESS_KEY_ID=
$_value
"
;;
SecretAccessKey
)
echo
"AWS_SECRET_ACCESS_KEY=
$_value
"
;;
Token
)
echo
"AWS_SESSION_TOKEN=
$_value
"
;;
esac
done
|
paste
-sd
' '
-
)
"
_secure_debug
"_aws_creds"
"
$_aws_creds
"
if
[
-z
"
$_aws_creds
"
]
;
then
return
1
fi
eval
"
$_aws_creds
"
_using_role
=
true
}
#method uri qstr data
aws_rest
()
{
mtd
=
"
$1
"
ep
=
"
$2
"
qsr
=
"
$3
"
data
=
"
$4
"
_debug mtd
"
$mtd
"
_debug ep
"
$ep
"
_debug qsr
"
$qsr
"
_debug data
"
$data
"
CanonicalURI
=
"/
$ep
"
_debug2 CanonicalURI
"
$CanonicalURI
"
CanonicalQueryString
=
"
$qsr
"
_debug2 CanonicalQueryString
"
$CanonicalQueryString
"
RequestDate
=
"
$(
date
-u
+
"%Y%m%dT%H%M%SZ"
)
"
_debug2 RequestDate
"
$RequestDate
"
#RequestDate="20161120T141056Z" ##############
export
_H1
=
"x-amz-date:
$RequestDate
"
aws_host
=
"email.
$AWS_SES_REGION
.amazonaws.com"
CanonicalHeaders
=
"host:
$aws_host
\n
x-amz-date:
$RequestDate
\n
"
SignedHeaders
=
"host;x-amz-date"
if
[
-n
"
$AWS_SESSION_TOKEN
"
]
;
then
export
_H3
=
"x-amz-security-token:
$AWS_SESSION_TOKEN
"
CanonicalHeaders
=
"
${
CanonicalHeaders
}
x-amz-security-token:
$AWS_SESSION_TOKEN
\n
"
SignedHeaders
=
"
${
SignedHeaders
}
;x-amz-security-token"
fi
_debug2 CanonicalHeaders
"
$CanonicalHeaders
"
_debug2 SignedHeaders
"
$SignedHeaders
"
RequestPayload
=
"
$data
"
_debug2 RequestPayload
"
$RequestPayload
"
Hash
=
"sha256"
CanonicalRequest
=
"
$mtd
\n
$CanonicalURI
\n
$CanonicalQueryString
\n
$CanonicalHeaders
\n
$SignedHeaders
\n
$(
printf
"%s"
"
$RequestPayload
"
| _digest
"
$Hash
"
hex
)
"
_debug2 CanonicalRequest
"
$CanonicalRequest
"
HashedCanonicalRequest
=
"
$(
printf
"
$CanonicalRequest
%s"
| _digest
"
$Hash
"
hex
)
"
_debug2 HashedCanonicalRequest
"
$HashedCanonicalRequest
"
Algorithm
=
"AWS4-HMAC-SHA256"
_debug2 Algorithm
"
$Algorithm
"
RequestDateOnly
=
"
$(
echo
"
$RequestDate
"
|
cut
-c
1-8
)
"
_debug2 RequestDateOnly
"
$RequestDateOnly
"
Region
=
"
$AWS_SES_REGION
"
Service
=
"ses"
CredentialScope
=
"
$RequestDateOnly
/
$Region
/
$Service
/aws4_request"
_debug2 CredentialScope
"
$CredentialScope
"
StringToSign
=
"
$Algorithm
\n
$RequestDate
\n
$CredentialScope
\n
$HashedCanonicalRequest
"
_debug2 StringToSign
"
$StringToSign
"
kSecret
=
"AWS4
$AWS_SECRET_ACCESS_KEY
"
#kSecret="wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY" ############################
_secure_debug2 kSecret
"
$kSecret
"
kSecretH
=
"
$(
printf
"%s"
"
$kSecret
"
| _hex_dump |
tr
-d
" "
)
"
_secure_debug2 kSecretH
"
$kSecretH
"
kDateH
=
"
$(
printf
"
$RequestDateOnly
%s"
| _hmac
"
$Hash
"
"
$kSecretH
"
hex
)
"
_debug2 kDateH
"
$kDateH
"
kRegionH
=
"
$(
printf
"
$Region
%s"
| _hmac
"
$Hash
"
"
$kDateH
"
hex
)
"
_debug2 kRegionH
"
$kRegionH
"
kServiceH
=
"
$(
printf
"
$Service
%s"
| _hmac
"
$Hash
"
"
$kRegionH
"
hex
)
"
_debug2 kServiceH
"
$kServiceH
"
kSigningH
=
"
$(
printf
"%s"
"aws4_request"
| _hmac
"
$Hash
"
"
$kServiceH
"
hex
)
"
_debug2 kSigningH
"
$kSigningH
"
signature
=
"
$(
printf
"
$StringToSign
%s"
| _hmac
"
$Hash
"
"
$kSigningH
"
hex
)
"
_debug2 signature
"
$signature
"
Authorization
=
"
$Algorithm
Credential=
$AWS_ACCESS_KEY_ID
/
$CredentialScope
, SignedHeaders=
$SignedHeaders
, Signature=
$signature
"
_debug2 Authorization
"
$Authorization
"
_H2
=
"Authorization:
$Authorization
"
_debug _H2
"
$_H2
"
url
=
"https://
$aws_host
/
$ep
"
if
[
"
$qsr
"
]
;
then
url
=
"https://
$aws_host
/
$ep
?
$qsr
"
fi
if
[
"
$mtd
"
=
"GET"
]
;
then
response
=
"
$(
_get
"
$url
"
)
"
else
response
=
"
$(
_post
"
$data
"
"
$url
"
)
"
fi
_ret
=
"
$?
"
_debug2 response
"
$response
"
if
[
"
$_ret
"
=
"0"
]
;
then
if
_contains
"
$response
"
"<ErrorResponse"
;
then
_err
"Response error:
$response
"
return
1
fi
fi
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment