Skip to content

Commit 79eb531

Browse files
committed
remove receiver installer default credentials and harden paths
1 parent 7a01e76 commit 79eb531

1 file changed

Lines changed: 96 additions & 33 deletions

File tree

Lines changed: 96 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,119 @@
11
#!/usr/bin/env bash
22
# receiver-install.sh — Install NWE Receiver-Only Mode
3-
# MEARVK LLC — Max Rupplin
4-
# Installs dependencies, generates TLS keystore, sets up MySQL DB or wallet dir.
3+
# Credentials are supplied/generated locally; no default passwords are committed.
54
set -euo pipefail
65

7-
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
6+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7+
ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
8+
SECRETS_DIR="$ROOT/data/secrets"
9+
SECRETS_FILE="$SECRETS_DIR/receiver.env"
10+
11+
[[ -d "$ROOT" && -f "$ROOT/configuration/receiver.only.xml" ]] || {
12+
echo "[FAIL] Unable to resolve receiver project root: $ROOT" >&2
13+
exit 1
14+
}
15+
16+
as_root() {
17+
if [[ "$(id -u)" -eq 0 ]]; then
18+
"$@"
19+
else
20+
sudo "$@"
21+
fi
22+
}
823

924
echo "═══════════════════════════════════════════════════════"
1025
echo " NitroWebExpress™ — Receiver-Only Installer"
11-
echo " Contact: SSA Durham NC (proof of life)"
26+
echo " Project: $ROOT"
1227
echo "═══════════════════════════════════════════════════════"
1328

14-
# 1. Ensure Java 21+
15-
if ! command -v java &>/dev/null; then
29+
if ! command -v java >/dev/null 2>&1; then
30+
command -v apt-get >/dev/null 2>&1 || {
31+
echo "[FAIL] Java 21 is missing and apt-get is unavailable." >&2
32+
exit 1
33+
}
1634
echo "[INSTALL] Java not found. Installing OpenJDK 21..."
17-
sudo apt-get update && sudo apt-get install -y openjdk-21-jdk
35+
as_root apt-get update
36+
as_root apt-get install -y openjdk-21-jdk
1837
fi
38+
39+
JAVA_MAJOR="$(java -version 2>&1 | awk -F '[\".]' '/version/ {print $2; exit}')"
40+
[[ "$JAVA_MAJOR" =~ ^[0-9]+$ && "$JAVA_MAJOR" -ge 21 ]] || {
41+
echo "[FAIL] Java 21+ is required; detected: $(java -version 2>&1 | head -1)" >&2
42+
exit 1
43+
}
1944
echo "[INSTALL] Java: $(java -version 2>&1 | head -1)"
2045

21-
# 2. Generate TLS keystore if missing
22-
KEYSTORE="$ROOT/psychiatry/secrets/receiver.keystore.jks"
23-
if [ ! -f "$KEYSTORE" ]; then
24-
echo "[INSTALL] Generating RSA keystore for port 443..."
25-
mkdir -p "$(dirname "$KEYSTORE")"
26-
keytool -genkeypair -alias receiver -keyalg RSA -keysize 2048 \
27-
-validity 3650 -keystore "$KEYSTORE" -storepass changeit \
28-
-dname "CN=NWE Receiver, OU=MEARVK LLC, O=MEARVK, L=Durham, ST=NC, C=US" \
46+
mkdir -p "$SECRETS_DIR"
47+
chmod 700 "$SECRETS_DIR"
48+
49+
if [[ ! -f "$SECRETS_FILE" ]]; then
50+
command -v openssl >/dev/null 2>&1 || as_root apt-get install -y openssl
51+
umask 077
52+
KEYSTORE_PASSWORD="${NWE_KEYSTORE_PASSWORD:-$(openssl rand -base64 32)}"
53+
DB_PASSWORD="${NWE_DB_PASSWORD:-$(openssl rand -base64 32)}"
54+
cat > "$SECRETS_FILE" <<EOF
55+
# Generated locally. Keep mode 0600.
56+
NWE_KEYSTORE_PASSWORD='$KEYSTORE_PASSWORD'
57+
NWE_DB_PASSWORD='$DB_PASSWORD'
58+
EOF
59+
chmod 600 "$SECRETS_FILE"
60+
else
61+
# shellcheck disable=SC1090
62+
source "$SECRETS_FILE"
63+
: "${NWE_KEYSTORE_PASSWORD:?Missing NWE_KEYSTORE_PASSWORD in $SECRETS_FILE}"
64+
: "${NWE_DB_PASSWORD:?Missing NWE_DB_PASSWORD in $SECRETS_FILE}"
65+
fi
66+
67+
KEYSTORE="$SECRETS_DIR/receiver.keystore.jks"
68+
if [[ ! -f "$KEYSTORE" ]]; then
69+
echo "[INSTALL] Generating receiver TLS keystore..."
70+
keytool -genkeypair \
71+
-alias receiver \
72+
-keyalg RSA \
73+
-keysize 2048 \
74+
-validity 3650 \
75+
-keystore "$KEYSTORE" \
76+
-storepass "$NWE_KEYSTORE_PASSWORD" \
77+
-dname "CN=NWE Receiver, O=MEARVK, C=US" \
2978
-noprompt
30-
echo "[INSTALL] Keystore created: $KEYSTORE"
79+
chmod 600 "$KEYSTORE"
3180
fi
3281

33-
# 3. Open port 443
3482
echo "[INSTALL] Allowing port 443/tcp..."
35-
sudo ufw allow 443/tcp 2>/dev/null || sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
83+
if command -v ufw >/dev/null 2>&1; then
84+
as_root ufw allow 443/tcp >/dev/null
85+
elif command -v iptables >/dev/null 2>&1; then
86+
as_root iptables -C INPUT -p tcp --dport 443 -j ACCEPT 2>/dev/null ||
87+
as_root iptables -A INPUT -p tcp --dport 443 -j ACCEPT
88+
else
89+
echo "[WARN] Neither ufw nor iptables is available; configure port 443 manually."
90+
fi
3691

37-
# 4. MySQL setup (optional — only if backend=mysql in config)
38-
if grep -q '<backend>mysql</backend>' "$ROOT/configuration/receiver.only.xml" 2>/dev/null; then
39-
echo "[INSTALL] MySQL backend selected. Ensuring mysql-server is installed..."
40-
if ! command -v mysql &>/dev/null; then
41-
sudo apt-get install -y mysql-server
92+
if grep -q '<backend>mysql</backend>' "$ROOT/configuration/receiver.only.xml"; then
93+
echo "[INSTALL] MySQL backend selected."
94+
if ! command -v mysql >/dev/null 2>&1; then
95+
command -v apt-get >/dev/null 2>&1 || {
96+
echo "[FAIL] MySQL is missing and apt-get is unavailable." >&2
97+
exit 1
98+
}
99+
as_root apt-get install -y mysql-server
42100
fi
43-
echo "[INSTALL] Creating receiver database..."
44-
sudo mysql -e "CREATE DATABASE IF NOT EXISTS nwe_receiver;" 2>/dev/null || true
45-
sudo mysql -e "CREATE USER IF NOT EXISTS 'nwe'@'localhost' IDENTIFIED BY 'nwe_receiver_pass';" 2>/dev/null || true
46-
sudo mysql -e "GRANT ALL ON nwe_receiver.* TO 'nwe'@'localhost';" 2>/dev/null || true
47-
sudo mysql -e "FLUSH PRIVILEGES;" 2>/dev/null || true
48-
echo "[INSTALL] MySQL ready."
101+
102+
as_root mysql <<SQL
103+
CREATE DATABASE IF NOT EXISTS nwe_receiver;
104+
CREATE USER IF NOT EXISTS 'nwe'@'localhost' IDENTIFIED BY '${NWE_DB_PASSWORD}';
105+
ALTER USER 'nwe'@'localhost' IDENTIFIED BY '${NWE_DB_PASSWORD}';
106+
GRANT ALL ON nwe_receiver.* TO 'nwe'@'localhost';
107+
FLUSH PRIVILEGES;
108+
SQL
109+
echo "[INSTALL] MySQL ready; credentials stored in $SECRETS_FILE"
49110
fi
50111

51-
# 5. Binary wallet directory
52112
mkdir -p "$ROOT/data"
53113

54-
echo ""
55-
echo "[INSTALL] Done. Run: bash scripts/receiver/receiver-compile.sh"
56-
echo " Then: sudo bash scripts/receiver/receiver-run.sh"
114+
echo
115+
echo "[INSTALL] Done."
116+
echo " Secrets: $SECRETS_FILE"
117+
echo " Keystore: $KEYSTORE"
118+
echo " Compile: bash \"$ROOT/scripts/receiver/receiver-compile.sh\""
119+
echo " Run: sudo bash \"$ROOT/scripts/receiver/receiver-run.sh\""

0 commit comments

Comments
 (0)