kastell 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.tr.md +1 -1
- package/dist/adapters/coolify.d.ts.map +1 -1
- package/dist/adapters/coolify.js +31 -12
- package/dist/adapters/coolify.js.map +1 -1
- package/dist/adapters/dokploy.d.ts.map +1 -1
- package/dist/adapters/dokploy.js +31 -10
- package/dist/adapters/dokploy.js.map +1 -1
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +49 -7
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/interactive.d.ts.map +1 -1
- package/dist/commands/interactive.js +123 -35
- package/dist/commands/interactive.js.map +1 -1
- package/dist/commands/lock.d.ts.map +1 -1
- package/dist/commands/lock.js +62 -9
- package/dist/commands/lock.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/core/audit/checks/firewall.d.ts.map +1 -1
- package/dist/core/audit/checks/firewall.js +6 -2
- package/dist/core/audit/checks/firewall.js.map +1 -1
- package/dist/core/audit/commands.d.ts.map +1 -1
- package/dist/core/audit/commands.js +60 -27
- package/dist/core/audit/commands.js.map +1 -1
- package/dist/core/audit/filter.d.ts +27 -0
- package/dist/core/audit/filter.d.ts.map +1 -0
- package/dist/core/audit/filter.js +53 -0
- package/dist/core/audit/filter.js.map +1 -0
- package/dist/core/audit/fix.d.ts +6 -0
- package/dist/core/audit/fix.d.ts.map +1 -1
- package/dist/core/audit/fix.js +44 -4
- package/dist/core/audit/fix.js.map +1 -1
- package/dist/core/audit/formatters/terminal.d.ts.map +1 -1
- package/dist/core/audit/formatters/terminal.js +15 -0
- package/dist/core/audit/formatters/terminal.js.map +1 -1
- package/dist/core/audit/index.d.ts.map +1 -1
- package/dist/core/audit/index.js +6 -1
- package/dist/core/audit/index.js.map +1 -1
- package/dist/core/audit/listChecks.d.ts.map +1 -1
- package/dist/core/audit/listChecks.js +10 -2
- package/dist/core/audit/listChecks.js.map +1 -1
- package/dist/core/audit/snapshot.d.ts.map +1 -1
- package/dist/core/audit/snapshot.js +6 -0
- package/dist/core/audit/snapshot.js.map +1 -1
- package/dist/core/deploy.d.ts.map +1 -1
- package/dist/core/deploy.js +2 -1
- package/dist/core/deploy.js.map +1 -1
- package/dist/core/lock.d.ts +24 -0
- package/dist/core/lock.d.ts.map +1 -1
- package/dist/core/lock.js +235 -41
- package/dist/core/lock.js.map +1 -1
- package/dist/core/provision.d.ts.map +1 -1
- package/dist/core/provision.js +15 -12
- package/dist/core/provision.js.map +1 -1
- package/dist/core/secure.d.ts.map +1 -1
- package/dist/core/secure.js +3 -2
- package/dist/core/secure.js.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +6 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/serverLock.d.ts.map +1 -1
- package/dist/mcp/tools/serverLock.js +5 -4
- package/dist/mcp/tools/serverLock.js.map +1 -1
- package/dist/utils/ssh.d.ts +4 -1
- package/dist/utils/ssh.d.ts.map +1 -1
- package/dist/utils/ssh.js +40 -19
- package/dist/utils/ssh.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ Running `kastell` without any arguments launches an **interactive search menu**
|
|
|
45
45
|
██║ ██╗ ██║ ██║ ███████║ ██║ ███████╗███████╗███████╗
|
|
46
46
|
╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚══════╝╚══════╝╚══════╝
|
|
47
47
|
|
|
48
|
-
KASTELL v1.
|
|
48
|
+
KASTELL v1.11.0 · Your infrastructure, fortified.
|
|
49
49
|
|
|
50
50
|
$ kastell init --template production → deploy a new server
|
|
51
51
|
$ kastell status --all → check all servers
|
package/README.tr.md
CHANGED
|
@@ -45,7 +45,7 @@ npx kastell
|
|
|
45
45
|
██║ ██╗ ██║ ██║ ███████║ ██║ ███████╗███████╗███████╗
|
|
46
46
|
╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚══════╝╚══════╝╚══════╝
|
|
47
47
|
|
|
48
|
-
KASTELL v1.
|
|
48
|
+
KASTELL v1.11.0 · Your infrastructure, fortified.
|
|
49
49
|
|
|
50
50
|
$ kastell init --template production → deploy a new server
|
|
51
51
|
$ kastell status --all → check all servers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coolify.d.ts","sourceRoot":"","sources":["../../src/adapters/coolify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASxD,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,IAAI,aAAa;IAE1B,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"coolify.d.ts","sourceRoot":"","sources":["../../src/adapters/coolify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASxD,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,IAAI,aAAa;IAE1B,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IA0FlC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAI/D,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,CAAC;IAI1B,aAAa,CACjB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAI3B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIpD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAM/C,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,aAAa;CActB"}
|
package/dist/adapters/coolify.js
CHANGED
|
@@ -9,6 +9,7 @@ export class CoolifyAdapter {
|
|
|
9
9
|
const safeName = serverName.replace(/[^a-z0-9-]/g, "");
|
|
10
10
|
return `#!/bin/bash
|
|
11
11
|
set +e
|
|
12
|
+
export DEBIAN_FRONTEND=noninteractive
|
|
12
13
|
touch /var/log/kastell-install.log
|
|
13
14
|
chmod 600 /var/log/kastell-install.log
|
|
14
15
|
exec > >(tee /var/log/kastell-install.log) 2>&1
|
|
@@ -32,22 +33,21 @@ while [ $ATTEMPTS -lt $MAX_ATTEMPTS ]; do
|
|
|
32
33
|
sleep 2
|
|
33
34
|
done
|
|
34
35
|
|
|
36
|
+
# Disable needrestart to prevent interactive prompts during Docker/package installation
|
|
37
|
+
echo "Disabling needrestart..."
|
|
38
|
+
if dpkg -l needrestart > /dev/null 2>&1; then
|
|
39
|
+
apt-get remove -y needrestart || true
|
|
40
|
+
fi
|
|
41
|
+
export NEEDRESTART_MODE=a
|
|
42
|
+
export NEEDRESTART_SUSPEND=1
|
|
43
|
+
|
|
35
44
|
# Update system
|
|
36
45
|
echo "Updating system packages..."
|
|
37
46
|
apt-get update -y
|
|
38
47
|
|
|
39
|
-
#
|
|
40
|
-
echo "Installing Coolify..."
|
|
41
|
-
curl -fsSL https://cdn.coollabs.io/coolify/install.sh -o /tmp/coolify-install.sh && head -c2 /tmp/coolify-install.sh | grep -q "#!" && [ "$(wc -c < /tmp/coolify-install.sh)" -gt 100 ] && bash /tmp/coolify-install.sh && rm -f /tmp/coolify-install.sh
|
|
42
|
-
|
|
43
|
-
# Wait for services
|
|
44
|
-
echo "Waiting for Coolify services to start..."
|
|
45
|
-
sleep 30
|
|
46
|
-
|
|
47
|
-
# Configure firewall for Coolify
|
|
48
|
+
# Configure firewall BEFORE installer (prevents SSH lockout if installer hangs)
|
|
48
49
|
echo "Configuring firewall..."
|
|
49
50
|
if command -v ufw &> /dev/null; then
|
|
50
|
-
# DigitalOcean and UFW-enabled systems
|
|
51
51
|
ufw allow 22/tcp
|
|
52
52
|
ufw allow 80/tcp
|
|
53
53
|
ufw allow 443/tcp
|
|
@@ -56,7 +56,6 @@ if command -v ufw &> /dev/null; then
|
|
|
56
56
|
ufw allow 6002/tcp
|
|
57
57
|
echo "y" | ufw enable || true
|
|
58
58
|
else
|
|
59
|
-
# Hetzner and iptables-based systems
|
|
60
59
|
iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
|
|
61
60
|
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
|
|
62
61
|
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
|
|
@@ -64,9 +63,29 @@ else
|
|
|
64
63
|
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
|
65
64
|
mkdir -p /etc/iptables
|
|
66
65
|
iptables-save > /etc/iptables/rules.v4 || true
|
|
67
|
-
|
|
66
|
+
apt-get install -y iptables-persistent || true
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Switch from socket activation to traditional SSH service (prevents Ubuntu 24.04 ssh.socket bugs)
|
|
70
|
+
echo "Switching to traditional SSH service..."
|
|
71
|
+
systemctl disable --now ssh.socket 2>/dev/null || true
|
|
72
|
+
systemctl enable --now ssh.service 2>/dev/null || true
|
|
73
|
+
|
|
74
|
+
# Install Coolify
|
|
75
|
+
echo "Installing Coolify..."
|
|
76
|
+
curl -fsSL https://cdn.coollabs.io/coolify/install.sh -o /tmp/coolify-install.sh && head -c2 /tmp/coolify-install.sh | grep -q "#!" && [ "$(wc -c < /tmp/coolify-install.sh)" -gt 100 ] && env DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a NEEDRESTART_SUSPEND=1 bash /tmp/coolify-install.sh && rm -f /tmp/coolify-install.sh
|
|
77
|
+
|
|
78
|
+
# Ensure SSH remains accessible after Coolify installation
|
|
79
|
+
echo "Ensuring SSH service is active..."
|
|
80
|
+
if ! ss -tlnp | grep -q ':22 '; then
|
|
81
|
+
systemctl restart ssh.service 2>/dev/null || systemctl restart sshd.service 2>/dev/null || true
|
|
82
|
+
sleep 2
|
|
68
83
|
fi
|
|
69
84
|
|
|
85
|
+
# Wait for services
|
|
86
|
+
echo "Waiting for Coolify services to start..."
|
|
87
|
+
sleep 30
|
|
88
|
+
|
|
70
89
|
echo "=================================="
|
|
71
90
|
echo "Coolify installation completed!"
|
|
72
91
|
echo "=================================="
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coolify.js","sourceRoot":"","sources":["../../src/adapters/coolify.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGxH,4EAA4E;AAC5E,MAAM,eAAe,GAAG,+DAA+D,CAAC;AACxF,MAAM,kBAAkB,GAAG,cAAc,mBAAmB,kCAAkC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC,mEAAmE,CAAC;AAE5N,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,SAAS,CAAC;IAE1B,YAAY,CAAC,UAAkB;QAC7B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO
|
|
1
|
+
{"version":3,"file":"coolify.js","sourceRoot":"","sources":["../../src/adapters/coolify.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGxH,4EAA4E;AAC5E,MAAM,eAAe,GAAG,+DAA+D,CAAC;AACxF,MAAM,kBAAkB,GAAG,cAAc,mBAAmB,kCAAkC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC,mEAAmE,CAAC;AAE5N,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,SAAS,CAAC;IAE1B,YAAY,CAAC,UAAkB;QAC7B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO;;;;;;;;;gBASK,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EvB,CAAC;IACA,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,MAAe;QAC3C,OAAO,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,EAAU,EACV,UAAkB,EAClB,QAAgB;QAEhB,OAAO,kBAAkB,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,EAAU,EACV,UAAkB,EAClB,QAAwB,EACxB,OAA6B;QAE7B,OAAO,mBAAmB,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU;QACxB,OAAO,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,YAAY,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAC9C,CAAC;IAED,gFAAgF;IAExE,UAAU;QAChB,OAAO,iGAAiG,CAAC;IAC3G,CAAC;IAEO,YAAY;QAClB,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,6GAA6G;YACxH,YAAY,EAAE,8MAA8M;YAC5N,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;YAC7B,UAAU,EAAE,6DAA6D;YACzE,UAAU,EAAE,uBAAuB;YACnC,cAAc,EAAE,uBAAuB;SACxC,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,iGAAiG;YAC1G,UAAU,EAAE,sHAAsH;YAClI,YAAY,EAAE,6FAA6F;YAC3G,gBAAgB,EAAE,4DAA4D;YAC9E,QAAQ,EAAE,kGAAkG;YAC5G,UAAU,EAAE,6DAA6D;YACzE,aAAa,EAAE,kGAAkG;YACjH,UAAU,EAAE,uBAAuB;YACnC,cAAc,EAAE,uBAAuB;SACxC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dokploy.d.ts","sourceRoot":"","sources":["../../src/adapters/dokploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASxD,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,IAAI,aAAa;IAE1B,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"dokploy.d.ts","sourceRoot":"","sources":["../../src/adapters/dokploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASxD,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,IAAI,aAAa;IAE1B,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAiGlC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAI/D,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,CAAC;IAI1B,aAAa,CACjB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAI3B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIpD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAM/C,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,aAAa;CActB"}
|
package/dist/adapters/dokploy.js
CHANGED
|
@@ -9,6 +9,7 @@ export class DokployAdapter {
|
|
|
9
9
|
const safeName = serverName.replace(/[^a-z0-9-]/g, "");
|
|
10
10
|
return `#!/bin/bash
|
|
11
11
|
set +e
|
|
12
|
+
export DEBIAN_FRONTEND=noninteractive
|
|
12
13
|
touch /var/log/kastell-install.log
|
|
13
14
|
chmod 600 /var/log/kastell-install.log
|
|
14
15
|
exec > >(tee /var/log/kastell-install.log) 2>&1
|
|
@@ -33,19 +34,19 @@ while [ $ATTEMPTS -lt $MAX_ATTEMPTS ]; do
|
|
|
33
34
|
sleep 2
|
|
34
35
|
done
|
|
35
36
|
|
|
37
|
+
# Disable needrestart to prevent interactive prompts during Docker/package installation
|
|
38
|
+
echo "Disabling needrestart..."
|
|
39
|
+
if dpkg -l needrestart > /dev/null 2>&1; then
|
|
40
|
+
apt-get remove -y needrestart || true
|
|
41
|
+
fi
|
|
42
|
+
export NEEDRESTART_MODE=a
|
|
43
|
+
export NEEDRESTART_SUSPEND=1
|
|
44
|
+
|
|
36
45
|
# Update system
|
|
37
46
|
echo "Updating system packages..."
|
|
38
47
|
apt-get update -y
|
|
39
48
|
|
|
40
|
-
#
|
|
41
|
-
echo "Installing Dokploy..."
|
|
42
|
-
curl -sSL https://dokploy.com/install.sh -o /tmp/dokploy-install.sh && head -c2 /tmp/dokploy-install.sh | grep -q "#!" && [ "$(wc -c < /tmp/dokploy-install.sh)" -gt 100 ] && sh /tmp/dokploy-install.sh && rm -f /tmp/dokploy-install.sh
|
|
43
|
-
|
|
44
|
-
# Wait for services
|
|
45
|
-
echo "Waiting for Dokploy services to start..."
|
|
46
|
-
sleep 30
|
|
47
|
-
|
|
48
|
-
# Configure firewall for Dokploy + Docker Swarm
|
|
49
|
+
# Configure firewall BEFORE installer (prevents SSH lockout if installer hangs)
|
|
49
50
|
echo "Configuring firewall..."
|
|
50
51
|
if command -v ufw &> /dev/null; then
|
|
51
52
|
ufw allow 22/tcp
|
|
@@ -69,9 +70,29 @@ else
|
|
|
69
70
|
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
|
70
71
|
mkdir -p /etc/iptables
|
|
71
72
|
iptables-save > /etc/iptables/rules.v4 || true
|
|
72
|
-
|
|
73
|
+
apt-get install -y iptables-persistent || true
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
# Switch from socket activation to traditional SSH service (prevents Ubuntu 24.04 ssh.socket bugs)
|
|
77
|
+
echo "Switching to traditional SSH service..."
|
|
78
|
+
systemctl disable --now ssh.socket 2>/dev/null || true
|
|
79
|
+
systemctl enable --now ssh.service 2>/dev/null || true
|
|
80
|
+
|
|
81
|
+
# Install Dokploy
|
|
82
|
+
echo "Installing Dokploy..."
|
|
83
|
+
curl -sSL https://dokploy.com/install.sh -o /tmp/dokploy-install.sh && head -c2 /tmp/dokploy-install.sh | grep -q "#!" && [ "$(wc -c < /tmp/dokploy-install.sh)" -gt 100 ] && env DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a NEEDRESTART_SUSPEND=1 sh /tmp/dokploy-install.sh && rm -f /tmp/dokploy-install.sh
|
|
84
|
+
|
|
85
|
+
# Ensure SSH remains accessible after installation
|
|
86
|
+
echo "Ensuring SSH service is active..."
|
|
87
|
+
if ! ss -tlnp | grep -q ':22 '; then
|
|
88
|
+
systemctl restart ssh.service 2>/dev/null || systemctl restart sshd.service 2>/dev/null || true
|
|
89
|
+
sleep 2
|
|
73
90
|
fi
|
|
74
91
|
|
|
92
|
+
# Wait for services
|
|
93
|
+
echo "Waiting for Dokploy services to start..."
|
|
94
|
+
sleep 30
|
|
95
|
+
|
|
75
96
|
echo "=================================="
|
|
76
97
|
echo "Dokploy installation completed!"
|
|
77
98
|
echo "=================================="
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dokploy.js","sourceRoot":"","sources":["../../src/adapters/dokploy.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGxH,4EAA4E;AAC5E,MAAM,eAAe,GAAG,+DAA+D,CAAC;AACxF,MAAM,kBAAkB,GAAG,aAAa,mBAAmB,kCAAkC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC,wEAAwE,CAAC;AAEhO,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,SAAS,CAAC;IAE1B,YAAY,CAAC,UAAkB;QAC7B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO
|
|
1
|
+
{"version":3,"file":"dokploy.js","sourceRoot":"","sources":["../../src/adapters/dokploy.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGxH,4EAA4E;AAC5E,MAAM,eAAe,GAAG,+DAA+D,CAAC;AACxF,MAAM,kBAAkB,GAAG,aAAa,mBAAmB,kCAAkC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC,wEAAwE,CAAC;AAEhO,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,SAAS,CAAC;IAE1B,YAAY,CAAC,UAAkB;QAC7B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO;;;;;;;;;gBASK,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFvB,CAAC;IACA,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,MAAe;QAC3C,OAAO,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,EAAU,EACV,UAAkB,EAClB,QAAgB;QAEhB,OAAO,kBAAkB,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,EAAU,EACV,UAAkB,EAClB,QAAwB,EACxB,OAA6B;QAE7B,OAAO,mBAAmB,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU;QACxB,OAAO,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,YAAY,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAC9C,CAAC;IAED,+EAA+E;IAEvE,UAAU;QAChB,OAAO,iGAAiG,CAAC;IAC3G,CAAC;IAEO,YAAY;QAClB,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,8JAA8J;YACzK,YAAY,EAAE,sDAAsD;YACpE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;YAC7B,UAAU,EAAE,6DAA6D;YACzE,UAAU,EAAE,uBAAuB;YACnC,cAAc,EAAE,uBAAuB;SACxC,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,gCAAgC;YACzC,UAAU,EAAE,oDAAoD;YAChE,YAAY,EAAE,8IAA8I;YAC5J,gBAAgB,EAAE,oDAAoD;YACtE,QAAQ,EAAE,gCAAgC;YAC1C,UAAU,EAAE,6DAA6D;YACzE,aAAa,EAAE,gCAAgC;YAC/C,UAAU,EAAE,uBAAuB;YACnC,cAAc,EAAE,uBAAuB;SACxC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAYzE,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CA+Uf"}
|
package/dist/commands/audit.js
CHANGED
|
@@ -11,7 +11,7 @@ import { selectFormatter } from "../core/audit/formatters/index.js";
|
|
|
11
11
|
import { saveAuditHistory, loadAuditHistory, detectTrend, computeTrend } from "../core/audit/history.js";
|
|
12
12
|
import { formatTrendTerminal, formatTrendJson } from "../core/audit/formatters/trend.js";
|
|
13
13
|
import { saveSnapshot, listSnapshots } from "../core/audit/snapshot.js";
|
|
14
|
-
import { runFix } from "../core/audit/fix.js";
|
|
14
|
+
import { runFix, runScoreCheck } from "../core/audit/fix.js";
|
|
15
15
|
import { watchAudit } from "../core/audit/watch.js";
|
|
16
16
|
import { diffAudits, resolveSnapshotRef, formatDiffTerminal, formatDiffJson } from "../core/audit/diff.js";
|
|
17
17
|
import { getServers } from "../utils/config.js";
|
|
@@ -19,6 +19,7 @@ import { listAllChecks, formatListChecksTerminal, formatListChecksJson } from ".
|
|
|
19
19
|
import { filterByProfile, calculateComplianceDetail } from "../core/audit/compliance/scoring.js";
|
|
20
20
|
import { formatComplianceReport } from "../core/audit/formatters/compliance.js";
|
|
21
21
|
import { FRAMEWORK_KEY_MAP } from "../core/audit/compliance/types.js";
|
|
22
|
+
import { filterAuditResult, buildFilterAnnotation, parseSeverity } from "../core/audit/filter.js";
|
|
22
23
|
function printDiff(diff, json) {
|
|
23
24
|
console.log(json ? formatDiffJson(diff) : formatDiffTerminal(diff));
|
|
24
25
|
if (diff.regressions.length > 0) {
|
|
@@ -36,7 +37,9 @@ export async function auditCommand(serverName, options = {}) {
|
|
|
36
37
|
if (options.category)
|
|
37
38
|
filter.category = options.category;
|
|
38
39
|
if (options.severity) {
|
|
39
|
-
|
|
40
|
+
const parsed = parseSeverity(options.severity);
|
|
41
|
+
if (parsed)
|
|
42
|
+
filter.severity = parsed;
|
|
40
43
|
}
|
|
41
44
|
const checks = listAllChecks(filter);
|
|
42
45
|
if (options.json) {
|
|
@@ -250,6 +253,18 @@ export async function auditCommand(serverName, options = {}) {
|
|
|
250
253
|
await saveSnapshot(auditResult, snapshotName);
|
|
251
254
|
logger.success(`Snapshot saved for ${name}`);
|
|
252
255
|
}
|
|
256
|
+
// Apply display-only filter (AUX-01, AUX-02, AUX-03)
|
|
257
|
+
// MUST be after saveAuditHistory + saveSnapshot to preserve unfiltered data (AUX-04)
|
|
258
|
+
const parsedSeverity = parseSeverity(options.severity);
|
|
259
|
+
if (options.severity && !parsedSeverity) {
|
|
260
|
+
logger.warning(`Invalid severity "${options.severity}" — expected: critical, warning, info. Showing all.`);
|
|
261
|
+
}
|
|
262
|
+
const auditFilter = {
|
|
263
|
+
category: options.category,
|
|
264
|
+
severity: parsedSeverity,
|
|
265
|
+
};
|
|
266
|
+
const displayResult = filterAuditResult(auditResult, auditFilter);
|
|
267
|
+
const filterAnnotation = buildFilterAnnotation(auditFilter);
|
|
253
268
|
// --fix mode: run fix engine
|
|
254
269
|
if (options.fix) {
|
|
255
270
|
const fixResult = await runFix(ip, auditResult, {
|
|
@@ -275,12 +290,33 @@ export async function auditCommand(serverName, options = {}) {
|
|
|
275
290
|
if (fixResult.errors.length > 0) {
|
|
276
291
|
logger.error(`Errors: ${fixResult.errors.join(", ")}`);
|
|
277
292
|
}
|
|
293
|
+
// Score delta after fix (AUX-05, AUX-06, AUX-07)
|
|
294
|
+
// Guard: only run when fixes were actually applied (not dry-run, not zero-fix)
|
|
295
|
+
if (fixResult.applied.length > 0) {
|
|
296
|
+
const affectedCats = [
|
|
297
|
+
...new Set(fixResult.applied
|
|
298
|
+
.map((checkId) => {
|
|
299
|
+
for (const cat of auditResult.categories) {
|
|
300
|
+
if (cat.checks.some((ch) => ch.id === checkId))
|
|
301
|
+
return cat.name;
|
|
302
|
+
}
|
|
303
|
+
return undefined;
|
|
304
|
+
})
|
|
305
|
+
.filter((name) => name !== undefined)),
|
|
306
|
+
];
|
|
307
|
+
const newScore = await runScoreCheck(ip, platform, auditResult, affectedCats);
|
|
308
|
+
if (newScore !== null) {
|
|
309
|
+
const delta = newScore - auditResult.overallScore;
|
|
310
|
+
const sign = delta >= 0 ? "+" : "";
|
|
311
|
+
logger.success(`Score: ${auditResult.overallScore} \u2192 ${newScore} (${sign}${delta})`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
278
314
|
}
|
|
279
315
|
return;
|
|
280
316
|
}
|
|
281
317
|
// --score-only: just print score and exit
|
|
282
318
|
if (options.scoreOnly) {
|
|
283
|
-
console.log(`${auditResult.overallScore}/100`);
|
|
319
|
+
console.log(`${auditResult.overallScore}/100${filterAnnotation}`);
|
|
284
320
|
if (options.threshold) {
|
|
285
321
|
const threshold = parseInt(options.threshold, 10);
|
|
286
322
|
if (isNaN(threshold)) {
|
|
@@ -288,15 +324,20 @@ export async function auditCommand(serverName, options = {}) {
|
|
|
288
324
|
return;
|
|
289
325
|
}
|
|
290
326
|
if (auditResult.overallScore < threshold) {
|
|
291
|
-
process.
|
|
327
|
+
process.exitCode = 1;
|
|
328
|
+
return;
|
|
292
329
|
}
|
|
293
330
|
}
|
|
294
331
|
return;
|
|
295
332
|
}
|
|
296
|
-
// Select and run formatter
|
|
333
|
+
// Select and run formatter (uses displayResult for filtered output)
|
|
297
334
|
const formatter = await selectFormatter(options);
|
|
298
|
-
const output = formatter(
|
|
335
|
+
const output = formatter(displayResult);
|
|
299
336
|
console.log(output);
|
|
337
|
+
// Show filter annotation when active
|
|
338
|
+
if (filterAnnotation) {
|
|
339
|
+
logger.info(`Score: ${auditResult.overallScore}/100${filterAnnotation}`);
|
|
340
|
+
}
|
|
300
341
|
// Show quick wins in terminal output
|
|
301
342
|
if (auditResult.quickWins.length > 0 && !options.json && !options.badge && !options.report) {
|
|
302
343
|
const lastWin = auditResult.quickWins[auditResult.quickWins.length - 1];
|
|
@@ -311,7 +352,8 @@ export async function auditCommand(serverName, options = {}) {
|
|
|
311
352
|
}
|
|
312
353
|
if (auditResult.overallScore < threshold) {
|
|
313
354
|
logger.error(`Score ${auditResult.overallScore} is below threshold ${threshold}`);
|
|
314
|
-
process.
|
|
355
|
+
process.exitCode = 1;
|
|
356
|
+
return;
|
|
315
357
|
}
|
|
316
358
|
}
|
|
317
359
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/commands/interactive.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/commands/interactive.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AA+FhC,KAAK,iBAAiB,GAAG,YAAY,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjE,KAAK,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,iBAAiB,CAAC;AAkBxF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAsBpE;AA0gBD,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAiChE"}
|
|
@@ -23,7 +23,7 @@ const MENU = [
|
|
|
23
23
|
actions: [
|
|
24
24
|
{ name: "Run security audit", value: "audit", description: "Score server security across 27 categories with compliance mapping" },
|
|
25
25
|
{ name: "Harden SSH & fail2ban", value: "secure", description: "Configure SSH security and brute-force protection" },
|
|
26
|
-
{ name: "Lock server (production hardening)", value: "lock", description: "Apply SSH
|
|
26
|
+
{ name: "Lock server (production hardening)", value: "lock", description: "Apply 16-step hardening: SSH, fail2ban, UFW, sysctl, auditd, AIDE, and more" },
|
|
27
27
|
{ name: "Manage firewall (UFW)", value: "firewall", description: "View, add, or remove UFW firewall port rules" },
|
|
28
28
|
{ name: "Manage domain & SSL", value: "domain", description: "Set custom domains and configure SSL certificates" },
|
|
29
29
|
{ name: "Collect forensic evidence", value: "evidence", description: "Gather logs, ports, firewall rules with SHA256 checksums" },
|
|
@@ -74,6 +74,7 @@ const MENU = [
|
|
|
74
74
|
{ name: "Export server list", value: "export", description: "Export server configuration to a JSON file" },
|
|
75
75
|
{ name: "Import server list", value: "import", description: "Import servers from a previously exported JSON file" },
|
|
76
76
|
{ name: "Shell completions", value: "completions", description: "Generate bash, zsh, or fish completion scripts" },
|
|
77
|
+
{ name: "Check version", value: "version", description: "Show current Kastell version and check for updates" },
|
|
77
78
|
],
|
|
78
79
|
},
|
|
79
80
|
];
|
|
@@ -261,57 +262,62 @@ async function promptSnapshot() {
|
|
|
261
262
|
return ["snapshot", sub];
|
|
262
263
|
}
|
|
263
264
|
async function promptMonitor() {
|
|
264
|
-
const
|
|
265
|
-
{
|
|
266
|
-
|
|
267
|
-
name: "containers",
|
|
268
|
-
message: "Include Docker container list?",
|
|
269
|
-
default: false,
|
|
270
|
-
},
|
|
265
|
+
const mode = await promptList("Monitor options:", [
|
|
266
|
+
{ name: "Basic (CPU/RAM/Disk)", value: "basic" },
|
|
267
|
+
{ name: "With Docker containers", value: "containers" },
|
|
271
268
|
]);
|
|
269
|
+
if (!mode)
|
|
270
|
+
return null;
|
|
272
271
|
const args = ["monitor"];
|
|
273
|
-
if (containers)
|
|
272
|
+
if (mode === "containers")
|
|
274
273
|
args.push("--containers");
|
|
275
274
|
return args;
|
|
276
275
|
}
|
|
277
276
|
async function promptMaintain() {
|
|
278
|
-
const
|
|
279
|
-
{
|
|
280
|
-
|
|
281
|
-
name: "skipReboot",
|
|
282
|
-
message: "Skip reboot step? (useful during business hours)",
|
|
283
|
-
default: false,
|
|
284
|
-
},
|
|
277
|
+
const mode = await promptList("Maintenance mode:", [
|
|
278
|
+
{ name: "Full cycle (update + reboot)", value: "full" },
|
|
279
|
+
{ name: "Skip reboot (business hours)", value: "skip-reboot" },
|
|
285
280
|
]);
|
|
281
|
+
if (!mode)
|
|
282
|
+
return null;
|
|
286
283
|
const args = ["maintain"];
|
|
287
|
-
if (
|
|
284
|
+
if (mode === "skip-reboot")
|
|
288
285
|
args.push("--skip-reboot");
|
|
289
286
|
return args;
|
|
290
287
|
}
|
|
291
288
|
async function promptStatus() {
|
|
292
|
-
const
|
|
293
|
-
{
|
|
289
|
+
const mode = await promptList("Status check:", [
|
|
290
|
+
{ name: "Single server", value: "single" },
|
|
291
|
+
{ name: "All servers at once", value: "all" },
|
|
294
292
|
]);
|
|
293
|
+
if (!mode)
|
|
294
|
+
return null;
|
|
295
295
|
const args = ["status"];
|
|
296
|
-
if (all)
|
|
296
|
+
if (mode === "all")
|
|
297
297
|
args.push("--all");
|
|
298
298
|
return args;
|
|
299
299
|
}
|
|
300
300
|
async function promptUpdate() {
|
|
301
|
-
const
|
|
302
|
-
{
|
|
301
|
+
const mode = await promptList("Update scope:", [
|
|
302
|
+
{ name: "Single server", value: "single" },
|
|
303
|
+
{ name: "All servers at once", value: "all" },
|
|
303
304
|
]);
|
|
305
|
+
if (!mode)
|
|
306
|
+
return null;
|
|
304
307
|
const args = ["update"];
|
|
305
|
-
if (all)
|
|
308
|
+
if (mode === "all")
|
|
306
309
|
args.push("--all");
|
|
307
310
|
return args;
|
|
308
311
|
}
|
|
309
312
|
async function promptDoctor() {
|
|
310
|
-
const
|
|
311
|
-
{
|
|
313
|
+
const mode = await promptList("Doctor mode:", [
|
|
314
|
+
{ name: "Fresh data via SSH (accurate)", value: "fresh" },
|
|
315
|
+
{ name: "Use cached metrics (fast)", value: "cached" },
|
|
312
316
|
]);
|
|
317
|
+
if (!mode)
|
|
318
|
+
return null;
|
|
313
319
|
const args = ["doctor"];
|
|
314
|
-
if (fresh)
|
|
320
|
+
if (mode === "fresh")
|
|
315
321
|
args.push("--fresh");
|
|
316
322
|
return args;
|
|
317
323
|
}
|
|
@@ -364,6 +370,11 @@ async function promptBackup() {
|
|
|
364
370
|
return args;
|
|
365
371
|
}
|
|
366
372
|
async function promptImport() {
|
|
373
|
+
const action = await promptList("Import server list:", [
|
|
374
|
+
{ name: "Import from JSON file", value: "file" },
|
|
375
|
+
]);
|
|
376
|
+
if (!action)
|
|
377
|
+
return null;
|
|
367
378
|
const { path } = await inquirer.prompt([
|
|
368
379
|
{
|
|
369
380
|
type: "input",
|
|
@@ -447,6 +458,74 @@ async function promptAudit() {
|
|
|
447
458
|
args.push("--badge");
|
|
448
459
|
else if (format === "trend")
|
|
449
460
|
args.push("--trend");
|
|
461
|
+
// Optional category/severity filters (AUX-01, AUX-02)
|
|
462
|
+
const filter = await promptList("Filter results?", [
|
|
463
|
+
{ name: "No filter (show all)", value: "none" },
|
|
464
|
+
{ name: "Filter by category", value: "category" },
|
|
465
|
+
{ name: "Filter by severity", value: "severity" },
|
|
466
|
+
{ name: "Filter by both", value: "both" },
|
|
467
|
+
]);
|
|
468
|
+
if (!filter)
|
|
469
|
+
return null;
|
|
470
|
+
if (filter === "category" || filter === "both") {
|
|
471
|
+
const TOP_CATEGORIES = [
|
|
472
|
+
{ name: "SSH", value: "ssh" },
|
|
473
|
+
{ name: "Firewall", value: "firewall" },
|
|
474
|
+
{ name: "Updates", value: "updates" },
|
|
475
|
+
{ name: "Auth", value: "auth" },
|
|
476
|
+
{ name: "Docker", value: "docker" },
|
|
477
|
+
{ name: "Network", value: "network" },
|
|
478
|
+
{ name: "Kernel", value: "kernel" },
|
|
479
|
+
{ name: "Logging", value: "logging" },
|
|
480
|
+
];
|
|
481
|
+
const ALL_CATEGORIES = [
|
|
482
|
+
...TOP_CATEGORIES,
|
|
483
|
+
{ name: "Filesystem", value: "filesystem" },
|
|
484
|
+
{ name: "Accounts", value: "accounts" },
|
|
485
|
+
{ name: "Services", value: "services" },
|
|
486
|
+
{ name: "Boot", value: "boot" },
|
|
487
|
+
{ name: "Scheduling", value: "scheduling" },
|
|
488
|
+
{ name: "Time", value: "time" },
|
|
489
|
+
{ name: "Banners", value: "banners" },
|
|
490
|
+
{ name: "Crypto", value: "crypto" },
|
|
491
|
+
{ name: "File Integrity", value: "file integrity" },
|
|
492
|
+
{ name: "Malware", value: "malware" },
|
|
493
|
+
{ name: "MAC", value: "mac" },
|
|
494
|
+
{ name: "Memory", value: "memory" },
|
|
495
|
+
{ name: "Secrets", value: "secrets" },
|
|
496
|
+
{ name: "Cloud Metadata", value: "cloud metadata" },
|
|
497
|
+
{ name: "Supply Chain", value: "supply chain" },
|
|
498
|
+
{ name: "Backup Hygiene", value: "backup hygiene" },
|
|
499
|
+
{ name: "Resource Limits", value: "resource limits" },
|
|
500
|
+
{ name: "Incident Readiness", value: "incident readiness" },
|
|
501
|
+
{ name: "DNS Security", value: "dns security" },
|
|
502
|
+
];
|
|
503
|
+
const category = await promptList("Category:", [
|
|
504
|
+
...TOP_CATEGORIES,
|
|
505
|
+
{ name: "Show all 27 categories...", value: "__all__" },
|
|
506
|
+
]);
|
|
507
|
+
if (!category)
|
|
508
|
+
return null;
|
|
509
|
+
if (category === "__all__") {
|
|
510
|
+
const fullCategory = await promptList("Category:", ALL_CATEGORIES);
|
|
511
|
+
if (!fullCategory)
|
|
512
|
+
return null;
|
|
513
|
+
args.push("--category", fullCategory);
|
|
514
|
+
}
|
|
515
|
+
else {
|
|
516
|
+
args.push("--category", category);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
if (filter === "severity" || filter === "both") {
|
|
520
|
+
const severity = await promptList("Severity:", [
|
|
521
|
+
{ name: "Critical only", value: "critical" },
|
|
522
|
+
{ name: "Warning", value: "warning" },
|
|
523
|
+
{ name: "Info", value: "info" },
|
|
524
|
+
]);
|
|
525
|
+
if (!severity)
|
|
526
|
+
return null;
|
|
527
|
+
args.push("--severity", severity);
|
|
528
|
+
}
|
|
450
529
|
return args;
|
|
451
530
|
}
|
|
452
531
|
async function promptLock() {
|
|
@@ -464,15 +543,24 @@ async function promptLock() {
|
|
|
464
543
|
return args;
|
|
465
544
|
}
|
|
466
545
|
async function promptEvidence() {
|
|
467
|
-
const
|
|
468
|
-
{
|
|
469
|
-
|
|
470
|
-
name: "name",
|
|
471
|
-
message: "Evidence label (e.g. pre-incident, weekly-check):",
|
|
472
|
-
default: "manual",
|
|
473
|
-
},
|
|
546
|
+
const action = await promptList("Evidence collection:", [
|
|
547
|
+
{ name: "Collect with default label", value: "default" },
|
|
548
|
+
{ name: "Collect with custom label", value: "custom" },
|
|
474
549
|
]);
|
|
475
|
-
|
|
550
|
+
if (!action)
|
|
551
|
+
return null;
|
|
552
|
+
if (action === "custom") {
|
|
553
|
+
const { name } = await inquirer.prompt([
|
|
554
|
+
{
|
|
555
|
+
type: "input",
|
|
556
|
+
name: "name",
|
|
557
|
+
message: "Evidence label (e.g. pre-incident, weekly-check):",
|
|
558
|
+
default: "manual",
|
|
559
|
+
},
|
|
560
|
+
]);
|
|
561
|
+
return ["evidence", "--name", name];
|
|
562
|
+
}
|
|
563
|
+
return ["evidence", "--name", "manual"];
|
|
476
564
|
}
|
|
477
565
|
async function promptGuard() {
|
|
478
566
|
const sub = await promptList("Guard action:", [
|
|
@@ -531,7 +619,7 @@ const SUB_PROMPTS = {
|
|
|
531
619
|
};
|
|
532
620
|
const DIRECT_COMMANDS = new Set([
|
|
533
621
|
"list", "add", "destroy", "restart", "remove", "restore", "export", "config",
|
|
534
|
-
"health", "fleet", "backup-list",
|
|
622
|
+
"health", "fleet", "backup-list", "version",
|
|
535
623
|
]);
|
|
536
624
|
export async function interactiveMenu() {
|
|
537
625
|
// Header is printed by index.ts before calling interactiveMenu()
|