diff --git a/deploy-amipro.sh b/deploy-amipro.sh new file mode 100755 index 0000000..750b846 --- /dev/null +++ b/deploy-amipro.sh @@ -0,0 +1,103 @@ +#!/usr/bin/env bash + +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "$0")" && pwd)" +SFTP_USER="${SFTP_USER:-witmatec}" +SFTP_HOST="${SFTP_HOST:-74.220.219.141}" +REMOTE_DIR="${REMOTE_DIR:-/home1/witmatec/public_html/amipro}" +LIVE_BASE_URL="${LIVE_BASE_URL:-https://amipro.me}" + +batch_file="$(mktemp)" +cleanup() { + rm -f "$batch_file" +} +trap cleanup EXIT + +emit_site_file_commands() { + while IFS= read -r -d '' file_path; do + local relative_path + relative_path="${file_path#"$ROOT_DIR"/}" + printf 'put "%s" "%s"\n' "$relative_path" "$relative_path" >> "$batch_file" + done < <( + find "$ROOT_DIR" -maxdepth 1 -type f \( -name '*.html' -o -name '*.txt' -o -name '*.xml' \) -print0 | sort -z + ) +} + +emit_directory_commands() { + local local_dir="$1" + + if [[ ! -d "$ROOT_DIR/$local_dir" ]]; then + return + fi + + printf -- '-mkdir "%s"\n' "$local_dir" >> "$batch_file" + + while IFS= read -r -d '' dir_path; do + local relative_dir + relative_dir="${dir_path#"$ROOT_DIR"/}" + [[ "$relative_dir" == "$local_dir" ]] && continue + printf -- '-mkdir "%s"\n' "$relative_dir" >> "$batch_file" + done < <( + find "$ROOT_DIR/$local_dir" -type d -print0 | sort -z + ) + + while IFS= read -r -d '' file_path; do + local relative_path + relative_path="${file_path#"$ROOT_DIR"/}" + printf 'put "%s" "%s"\n' "$relative_path" "$relative_path" >> "$batch_file" + done < <( + find "$ROOT_DIR/$local_dir" -type f ! -name '.DS_Store' -print0 | sort -z + ) +} + +emit_verify_urls() { + cat <<'EOF' +/ +/fido2_top.html +/contextwizard_top.html +/integration_api.html +/passkey.html +EOF +} + +verify_live_page() { + local relative_path="$1" + local local_file url local_hash remote_hash + + if [[ "$relative_path" == "/" ]]; then + local_file="$ROOT_DIR/index.html" + url="$LIVE_BASE_URL/" + else + local_file="$ROOT_DIR/${relative_path#/}" + url="$LIVE_BASE_URL$relative_path" + fi + + local_hash="$(shasum -a 256 "$local_file" | awk '{print $1}')" + remote_hash="$(curl -LfsS "$url" | shasum -a 256 | awk '{print $1}')" + + if [[ "$local_hash" != "$remote_hash" ]]; then + printf 'Verification failed for %s\n' "$url" >&2 + return 1 + fi + + printf 'Verified %s\n' "$url" +} + +printf 'cd "%s"\n' "$REMOTE_DIR" > "$batch_file" +emit_site_file_commands +emit_directory_commands contextwizard-files +emit_directory_commands files + +echo "Deploying to $SFTP_USER@$SFTP_HOST:$REMOTE_DIR" +sftp -b "$batch_file" "$SFTP_USER@$SFTP_HOST" + +if command -v curl >/dev/null 2>&1 && command -v shasum >/dev/null 2>&1; then + while IFS= read -r verify_path; do + verify_live_page "$verify_path" + done < <(emit_verify_urls) +else + echo "Skipped live verification because curl or shasum is unavailable." +fi + +echo "Deployment complete." \ No newline at end of file diff --git a/fido2_top.html b/fido2_top.html index 2e55498..9c5e68e 100644 --- a/fido2_top.html +++ b/fido2_top.html @@ -465,7 +465,7 @@ FIDO certified