|
|
@ -66,6 +66,12 @@ synology_dsm_deploy() { |
|
|
|
_getdeployconf SYNO_Certificate |
|
|
|
_debug SYNO_Certificate "${SYNO_Certificate:-}" |
|
|
|
|
|
|
|
# shellcheck disable=SC1003 # We are not trying to escape a single quote |
|
|
|
if printf "%s" "$SYNO_Certificate" | grep '\\'; then |
|
|
|
_err "Do not use a backslash (\) in your certificate description" |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
|
|
|
|
_base_url="$SYNO_Scheme://$SYNO_Hostname:$SYNO_Port" |
|
|
|
_debug _base_url "$_base_url" |
|
|
|
|
|
|
@ -110,7 +116,9 @@ synology_dsm_deploy() { |
|
|
|
_info "Getting certificates in Synology DSM" |
|
|
|
response=$(_post "api=SYNO.Core.Certificate.CRT&method=list&version=1&_sid=$sid" "$_base_url/webapi/entry.cgi") |
|
|
|
_debug3 response "$response" |
|
|
|
id=$(echo "$response" | sed -n "s/.*\"desc\":\"$SYNO_Certificate\",\"id\":\"\([^\"]*\).*/\1/p") |
|
|
|
escaped_certificate="$(printf "%s" "$SYNO_Certificate" | sed 's/\([].*^$[]\)/\\\1/g;s/"/\\\\"/g')" |
|
|
|
_debug escaped_certificate "$escaped_certificate" |
|
|
|
id=$(echo "$response" | sed -n "s/.*\"desc\":\"$escaped_certificate\",\"id\":\"\([^\"]*\).*/\1/p") |
|
|
|
_debug2 id "$id" |
|
|
|
|
|
|
|
if [ -z "$id" ] && [ -z "${SYNO_Create:-}" ]; then |
|
|
@ -119,7 +127,7 @@ synology_dsm_deploy() { |
|
|
|
fi |
|
|
|
|
|
|
|
# we've verified this certificate description is a thing, so save it |
|
|
|
_savedeployconf SYNO_Certificate "$SYNO_Certificate" |
|
|
|
_savedeployconf SYNO_Certificate "$SYNO_Certificate" "base64" |
|
|
|
|
|
|
|
_info "Generate form POST request" |
|
|
|
nl="\0015\0012" |
|
|
@ -129,7 +137,7 @@ synology_dsm_deploy() { |
|
|
|
content="$content${nl}--$delim${nl}Content-Disposition: form-data; name=\"inter_cert\"; filename=\"$(basename "$_cca")\"${nl}Content-Type: application/octet-stream${nl}${nl}$(cat "$_cca")\0012" |
|
|
|
content="$content${nl}--$delim${nl}Content-Disposition: form-data; name=\"id\"${nl}${nl}$id" |
|
|
|
content="$content${nl}--$delim${nl}Content-Disposition: form-data; name=\"desc\"${nl}${nl}${SYNO_Certificate}" |
|
|
|
if echo "$response" | sed -n "s/.*\"desc\":\"$SYNO_Certificate\",\([^{]*\).*/\1/p" | grep -- 'is_default":true' >/dev/null; then |
|
|
|
if echo "$response" | sed -n "s/.*\"desc\":\"$escaped_certificate\",\([^{]*\).*/\1/p" | grep -- 'is_default":true' >/dev/null; then |
|
|
|
_debug2 default "this is the default certificate" |
|
|
|
content="$content${nl}--$delim${nl}Content-Disposition: form-data; name=\"as_default\"${nl}${nl}true" |
|
|
|
else |
|
|
|