Cybersecurity-Projects/PROJECTS/intermediate/binary-analysis-tool/scripts/init.sh

88 lines
5.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# =============================================================================
# AngelaMos | 2026
# init.sh
# =============================================================================
# Run once after copying the template.
# Prompts for a project name, randomizes ports, updates all the right files.
set -euo pipefail
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# ── prompt ────────────────────────────────────────────────────────────────────
echo ""
read -rp "Project name (kebab-case): " RAW
SLUG="$(echo "$RAW" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-')"
[[ -z "$SLUG" ]] && { echo "Error: empty name" >&2; exit 1; }
TITLE="$(echo "$SLUG" | tr '-' ' ' | python3 -c "import sys; print(sys.stdin.read().strip().title())")"
# ── ports ─────────────────────────────────────────────────────────────────────
mapfile -t ports < <(python3 -c "
import random
for p in random.sample(range(10000, 65001), 4): print(p)
")
PROD_NGINX=${ports[0]}
PROD_FRONTEND=${ports[1]}
DEV_NGINX=${ports[2]}
DEV_FRONTEND=${ports[3]}
echo ""
echo " slug: $SLUG"
echo " title: $TITLE"
echo " prod nginx: $PROD_NGINX"
echo " prod frontend: $PROD_FRONTEND"
echo " dev nginx: $DEV_NGINX"
echo " dev frontend: $DEV_FRONTEND"
echo ""
# ── .env (prod) ───────────────────────────────────────────────────────────────
sed -i "s|^APP_NAME=.*|APP_NAME=$SLUG|" "$DIR/.env"
sed -i "s|^VITE_APP_TITLE=.*|VITE_APP_TITLE=$TITLE|" "$DIR/.env"
sed -i "s|^NGINX_HOST_PORT=.*|NGINX_HOST_PORT=$PROD_NGINX|" "$DIR/.env"
sed -i "s|^FRONTEND_HOST_PORT=.*|FRONTEND_HOST_PORT=$PROD_FRONTEND|" "$DIR/.env"
echo " updated .env"
# ── .env.development ──────────────────────────────────────────────────────────
sed -i "s|^APP_NAME=.*|APP_NAME=$SLUG-dev|" "$DIR/.env.development"
sed -i "s|^VITE_APP_TITLE=.*|VITE_APP_TITLE=\"$TITLE (Dev)\"|" "$DIR/.env.development"
sed -i "s|^NGINX_HOST_PORT=.*|NGINX_HOST_PORT=$DEV_NGINX|" "$DIR/.env.development"
sed -i "s|^FRONTEND_HOST_PORT=.*|FRONTEND_HOST_PORT=$DEV_FRONTEND|" "$DIR/.env.development"
echo " updated .env.development"
# ── .env.example ──────────────────────────────────────────────────────────────
sed -i "s|^APP_NAME=.*|APP_NAME=$SLUG|" "$DIR/.env.example"
sed -i "s|^VITE_APP_TITLE=.*|VITE_APP_TITLE=$TITLE|" "$DIR/.env.example"
sed -i "s|^NGINX_HOST_PORT=.*|NGINX_HOST_PORT=$PROD_NGINX|" "$DIR/.env.example"
sed -i "s|^FRONTEND_HOST_PORT=.*|FRONTEND_HOST_PORT=$PROD_FRONTEND|" "$DIR/.env.example"
echo " updated .env.example"
# ── compose.yml ───────────────────────────────────────────────────────────────
sed -i "s|\${APP_NAME:-[a-z0-9-]*}|\${APP_NAME:-$SLUG}|g" "$DIR/compose.yml"
sed -i "s|\${NGINX_HOST_PORT:-[0-9]\+}|\${NGINX_HOST_PORT:-$PROD_NGINX}|g" "$DIR/compose.yml"
echo " updated compose.yml"
# ── dev.compose.yml ───────────────────────────────────────────────────────────
sed -i "s|\${APP_NAME:-[a-z0-9-]*}|\${APP_NAME:-$SLUG}|g" "$DIR/dev.compose.yml"
sed -i "s|\${NGINX_HOST_PORT:-[0-9]\+}|\${NGINX_HOST_PORT:-$DEV_NGINX}|g" "$DIR/dev.compose.yml"
sed -i "s|\${FRONTEND_HOST_PORT:-[0-9]\+}|\${FRONTEND_HOST_PORT:-$DEV_FRONTEND}|g" "$DIR/dev.compose.yml"
echo " updated dev.compose.yml"
# ── cloudflared.compose.yml ───────────────────────────────────────────────────
sed -i "s|\${APP_NAME:-[a-z0-9-]*}|\${APP_NAME:-$SLUG}|g" "$DIR/cloudflared.compose.yml"
echo " updated cloudflared.compose.yml"
# ── react-scss/package.json ───────────────────────────────────────────────────
sed -i "s|\"name\": \".*\"|\"name\": \"$SLUG\"|" "$DIR/react-scss/package.json"
echo " updated react-scss/package.json"
# ── react-scss/index.html ─────────────────────────────────────────────────────
sed -i "s|Full Stack Template No Auth|$TITLE|g" "$DIR/react-scss/index.html"
echo " updated react-scss/index.html"
echo ""
echo "Done. Go build something."