Fix pasted certificate path handling
This commit is contained in:
+31
-15
@@ -133,6 +133,22 @@ read_multiline_block() {
|
|||||||
printf -v "$var" '%s' "$block"
|
printf -v "$var" '%s' "$block"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
normalize_path() {
|
||||||
|
# normalize_path <path>
|
||||||
|
# Convert Windows drive-letter paths to MSYS-style paths when running under Git Bash.
|
||||||
|
local path="$1"
|
||||||
|
|
||||||
|
if [[ "$path" =~ ^[A-Za-z]:[\\/].* ]]; then
|
||||||
|
local drive="${path:0:1}"
|
||||||
|
local rest="${path:2}"
|
||||||
|
rest="${rest//\\//}"
|
||||||
|
rest="${rest#/}"
|
||||||
|
printf '/mnt/%s/%s' "${drive,,}" "$rest"
|
||||||
|
else
|
||||||
|
printf '%s' "$path"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# ── Arg parsing ───────────────────────────────────────────────────────────────
|
# ── Arg parsing ───────────────────────────────────────────────────────────────
|
||||||
DRY_RUN=false
|
DRY_RUN=false
|
||||||
OUTPUT_DIR="."
|
OUTPUT_DIR="."
|
||||||
@@ -148,6 +164,7 @@ for arg in "$@"; do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
OUTPUT_DIR="$(normalize_path "$OUTPUT_DIR")"
|
||||||
mkdir -p "$OUTPUT_DIR"
|
mkdir -p "$OUTPUT_DIR"
|
||||||
|
|
||||||
# ── Banner ────────────────────────────────────────────────────────────────────
|
# ── Banner ────────────────────────────────────────────────────────────────────
|
||||||
@@ -230,6 +247,7 @@ for (( i=1; i<=RELAY_COUNT; i++ )); do
|
|||||||
|
|
||||||
# ── Output directory (ask first so we can read existing config) ───────────
|
# ── Output directory (ask first so we can read existing config) ───────────
|
||||||
ask RELAY_DIR " Output directory for this relay's files" "/opt/netbird-relay"
|
ask RELAY_DIR " Output directory for this relay's files" "/opt/netbird-relay"
|
||||||
|
RELAY_DIR="$(normalize_path "$RELAY_DIR")"
|
||||||
|
|
||||||
# ── Load existing config as defaults if relay.env is present ─────────────
|
# ── Load existing config as defaults if relay.env is present ─────────────
|
||||||
EX_DOMAIN=""; EX_LISTEN_PORT="443"; EX_LOG_LEVEL="info"
|
EX_DOMAIN=""; EX_LISTEN_PORT="443"; EX_LOG_LEVEL="info"
|
||||||
@@ -291,13 +309,14 @@ for (( i=1; i<=RELAY_COUNT; i++ )); do
|
|||||||
| awk -F: '{print $1}' | sed 's/^ *- *//' || true
|
| awk -F: '{print $1}' | sed 's/^ *- *//' || true
|
||||||
)"
|
)"
|
||||||
ask CERT_HOST_PATH " Host path to certs directory" "${_EX_CERT_HOST:-/opt/1panel/www/sites/${DOMAIN}/ssl}"
|
ask CERT_HOST_PATH " Host path to certs directory" "${_EX_CERT_HOST:-/opt/1panel/www/sites/${DOMAIN}/ssl}"
|
||||||
|
CERT_HOST_PATH="$(normalize_path "$CERT_HOST_PATH")"
|
||||||
ask CERT_FILE " Cert file path inside container" "${EX_CERT_FILE:-/certs/fullchain.pem}"
|
ask CERT_FILE " Cert file path inside container" "${EX_CERT_FILE:-/certs/fullchain.pem}"
|
||||||
ask KEY_FILE " Key file path inside container" "${EX_KEY_FILE:-/certs/privkey.pem}"
|
ask KEY_FILE " Key file path inside container" "${EX_KEY_FILE:-/certs/privkey.pem}"
|
||||||
LE_EMAIL=""; LE_DATA_DIR=""
|
LE_EMAIL=""; LE_DATA_DIR=""
|
||||||
elif [[ "$TLS_MODE" == "4" ]]; then
|
elif [[ "$TLS_MODE" == "4" ]]; then
|
||||||
echo ""
|
echo ""
|
||||||
echo " ── Pasted certificate details ──"
|
echo " ── Pasted certificate details ──"
|
||||||
CERT_HOST_PATH="${RELAY_DIR}/certs"
|
CERT_HOST_PATH="$(normalize_path "${RELAY_DIR}/certs")"
|
||||||
CERT_FILE="/certs/fullchain.pem"
|
CERT_FILE="/certs/fullchain.pem"
|
||||||
KEY_FILE="/certs/privkey.pem"
|
KEY_FILE="/certs/privkey.pem"
|
||||||
LE_EMAIL=""; LE_DATA_DIR=""
|
LE_EMAIL=""; LE_DATA_DIR=""
|
||||||
@@ -305,6 +324,17 @@ for (( i=1; i<=RELAY_COUNT; i++ )); do
|
|||||||
success " Certificate directory: ${CERT_HOST_PATH}"
|
success " Certificate directory: ${CERT_HOST_PATH}"
|
||||||
read_multiline_block PASTED_CERT " Paste the certificate PEM" "END_CERT"
|
read_multiline_block PASTED_CERT " Paste the certificate PEM" "END_CERT"
|
||||||
read_multiline_block PASTED_KEY " Paste the private key PEM" "END_KEY"
|
read_multiline_block PASTED_KEY " Paste the private key PEM" "END_KEY"
|
||||||
|
info " Writing pasted certificate ..."
|
||||||
|
printf '%s' "${PASTED_CERT}" > "${CERT_HOST_PATH}/fullchain.pem"
|
||||||
|
printf '%s' "${PASTED_KEY}" > "${CERT_HOST_PATH}/privkey.pem"
|
||||||
|
chmod 600 "${CERT_HOST_PATH}/privkey.pem"
|
||||||
|
if [[ ! -s "${CERT_HOST_PATH}/fullchain.pem" ]] || [[ ! -s "${CERT_HOST_PATH}/privkey.pem" ]]; then
|
||||||
|
error " Failed to write pasted certificate files to ${CERT_HOST_PATH}."
|
||||||
|
error " Please re-run and paste complete PEM blocks ending with END_CERT and END_KEY."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
success " Certificate : ${CERT_HOST_PATH}/fullchain.pem"
|
||||||
|
success " Private key : ${CERT_HOST_PATH}/privkey.pem"
|
||||||
else
|
else
|
||||||
echo ""
|
echo ""
|
||||||
echo " ── Self-signed certificate details ──"
|
echo " ── Self-signed certificate details ──"
|
||||||
@@ -570,20 +600,6 @@ volumes:
|
|||||||
info " SANs : ${SS_SANS}"
|
info " SANs : ${SS_SANS}"
|
||||||
info " Valid for : ${SS_DAYS} days"
|
info " Valid for : ${SS_DAYS} days"
|
||||||
fi
|
fi
|
||||||
if [[ "$TLS_MODE" == "4" ]]; then
|
|
||||||
info " Writing pasted certificate ..."
|
|
||||||
mkdir -p "${CERT_HOST_PATH}"
|
|
||||||
printf '%s' "${PASTED_CERT}" > "${CERT_HOST_PATH}/fullchain.pem"
|
|
||||||
printf '%s' "${PASTED_KEY}" > "${CERT_HOST_PATH}/privkey.pem"
|
|
||||||
chmod 600 "${CERT_HOST_PATH}/privkey.pem"
|
|
||||||
if [[ ! -s "${CERT_HOST_PATH}/fullchain.pem" ]] || [[ ! -s "${CERT_HOST_PATH}/privkey.pem" ]]; then
|
|
||||||
error " Failed to write pasted certificate files to ${CERT_HOST_PATH}."
|
|
||||||
error " Please re-run and paste complete PEM blocks ending with END_CERT and END_KEY."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
success " Certificate : ${CERT_HOST_PATH}/fullchain.pem"
|
|
||||||
success " Private key : ${CERT_HOST_PATH}/privkey.pem"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user