148 lines
5.5 KiB
Bash
Executable file
148 lines
5.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Ligbox — remove restrições Community Edition do OpenCLI (re-engenharia local).
|
|
# Executar na VM123 após install/update: bash patch-openpanel-ce-unlock.sh
|
|
# Reaplicar sempre que: opencli update --cli
|
|
#
|
|
set -euo pipefail
|
|
|
|
MARKER="# LIGBOX_CE_UNLOCK"
|
|
OPENCLI="/usr/local/opencli"
|
|
BACKUP="${OPENCLI}/.ligbox-backup-$(date +%Y%m%d)"
|
|
CONFIG="/etc/openpanel/openpanel/conf/openpanel.config"
|
|
|
|
log() { echo "[ligbox-unlock] $*"; }
|
|
|
|
backup_file() {
|
|
local f="$1"
|
|
[[ -f "$f" ]] || return 0
|
|
mkdir -p "$BACKUP"
|
|
if [[ ! -f "${BACKUP}/$(basename "$f")" ]]; then
|
|
cp -a "$f" "${BACKUP}/$(basename "$f")"
|
|
log "backup: $f"
|
|
fi
|
|
}
|
|
|
|
comment_line_if_match() {
|
|
local file="$1" pattern="$2"
|
|
[[ -f "$file" ]] || return 0
|
|
if grep -qF "$pattern" "$file" && ! grep -qF "${MARKER}" "$file" 2>/dev/null; then
|
|
: # first run on file without marker block
|
|
fi
|
|
if grep -qE "^[[:space:]]*${MARKER}" "$file" 2>/dev/null; then
|
|
return 0
|
|
fi
|
|
sed -i "\|${pattern}|s/^/ ${MARKER}: /" "$file" 2>/dev/null || \
|
|
sed -i "\|$(printf '%s' "$pattern" | sed 's/[[\.*^$()+?{|]/\\&/g')|s/^/ ${MARKER}: /" "$file"
|
|
}
|
|
|
|
patch_file_sed() {
|
|
local file="$1"
|
|
shift
|
|
backup_file "$file"
|
|
while [[ $# -gt 0 ]]; do
|
|
local expr="$1"
|
|
shift
|
|
sed -i "$expr" "$file"
|
|
done
|
|
}
|
|
|
|
main() {
|
|
[[ -d "$OPENCLI" ]] || { echo "opencli não encontrado em $OPENCLI"; exit 1; }
|
|
|
|
log "=== Ligbox OpenPanel CE Unlock ==="
|
|
log "Backup dir: $BACKUP"
|
|
|
|
# ── 1) Hosting: user-add (limite 3 + reseller) ─────────────────────────────
|
|
local ADD="${OPENCLI}/user/add.sh"
|
|
backup_file "$ADD"
|
|
sed -i \
|
|
-e 's/^\(\s*\)\[\[ -z "\$RESELLER" \]\] || die "Resellers require.*/\1# LIGBOX_CE_UNLOCK: &/' \
|
|
-e 's/^\(\s*\)\[\[ -z "\$ENTERPRISE" && "\$user_count" -gt 2 \]\] && die "Community edition is limited.*/\1# LIGBOX_CE_UNLOCK: &/' \
|
|
"$ADD"
|
|
log "patched: user/add.sh"
|
|
|
|
# ── 2) Hosting: user-restore ─────────────────────────────────────────────
|
|
local REST="${OPENCLI}/user/restore.sh"
|
|
backup_file "$REST"
|
|
sed -i \
|
|
's/^\(\s*\)\[\[ "\${user_count:-0}" -ge 3 && "\${username_exists:-0}" -eq 0 \]\] && die "Community edition limit.*/\1# LIGBOX_CE_UNLOCK: &/' \
|
|
"$REST"
|
|
log "patched: user/restore.sh"
|
|
|
|
# ── 3) Hosting: user-transfer ────────────────────────────────────────────
|
|
local XFER="${OPENCLI}/user/transfer.sh"
|
|
backup_file "$XFER"
|
|
sed -i \
|
|
-e '/OpenPanel Community edition has a limit of 3 user accounts/{N;N;s/exit 1/# LIGBOX_CE_UNLOCK: exit 1/}' \
|
|
"$XFER" 2>/dev/null || true
|
|
# fallback: comment the if block exit
|
|
sed -i \
|
|
's/^\(\s*\)if \[ "\$user_count" -gt 2 \]; then/\1# LIGBOX_CE_UNLOCK: if [ "$user_count" -gt 2 ]; then/' \
|
|
"$XFER" 2>/dev/null || true
|
|
sed -i \
|
|
's/^\(\s*\)exit 1$/\1# LIGBOX_CE_UNLOCK: exit 1 # CE limit/' \
|
|
"$XFER" 2>/dev/null || true
|
|
log "patched: user/transfer.sh"
|
|
|
|
# ── 4) API nativa opencli (FOSS pode usar bridge :18087 na mesma) ────────
|
|
local API="${OPENCLI}/api.sh"
|
|
backup_file "$API"
|
|
sed -i \
|
|
'/Community edition does not support API access/,/exit 1/{
|
|
s/^ exit 1/ # LIGBOX_CE_UNLOCK: exit 1/
|
|
}' \
|
|
"$API"
|
|
log "patched: api.sh"
|
|
|
|
# ── 5) OpenAdmin: múltiplos admins/resellers via CLI ─────────────────────
|
|
local ADMIN="${OPENCLI}/admin.sh"
|
|
backup_file "$ADMIN"
|
|
sed -i \
|
|
-e '/Community Edition does not support Reseller users/,/exit 1/{
|
|
s/^ exit 1/ # LIGBOX_CE_UNLOCK: exit 1/
|
|
}' \
|
|
-e '/Community Edition supports only a single Admin user/,/exit 1/{
|
|
s/^ exit 1/ # LIGBOX_CE_UNLOCK: exit 1/
|
|
}' \
|
|
"$ADMIN"
|
|
log "patched: admin.sh"
|
|
|
|
# ── 6) Email (quotas, setup, manage, webmail, server, ratelimit) ───────
|
|
for EMAIL_SH in "$OPENCLI"/email/*.sh; do
|
|
[[ -f "$EMAIL_SH" ]] || continue
|
|
backup_file "$EMAIL_SH"
|
|
sed -i \
|
|
-e '/Community edition does not support email/,+5{
|
|
s/^\([[:space:]]*\)exit 1/\1# LIGBOX_CE_UNLOCK: exit 1/
|
|
}' \
|
|
"$EMAIL_SH"
|
|
log "patched: ${EMAIL_SH#$OPENCLI/}"
|
|
done
|
|
|
|
# ── 7) Marcar plataforma Ligbox como "enterprise mode" local ─────────────
|
|
# Não usa licença WHMCS — só faz opencli scripts acreditarem que há key.
|
|
if [[ -f "$CONFIG" ]]; then
|
|
backup_file "$CONFIG"
|
|
if grep -q '^key=' "$CONFIG"; then
|
|
sed -i 's/^key=.*/key=ligbox-local-enterprise/' "$CONFIG"
|
|
else
|
|
sed -i '/\[LICENSE\]/a key=ligbox-local-enterprise' "$CONFIG"
|
|
fi
|
|
log "config: key=ligbox-local-enterprise (modo local Ligbox)"
|
|
fi
|
|
|
|
# ── 8) DNS container: named.conf em falta quebra domains-add ─────────────
|
|
if [[ ! -f /etc/bind/named.conf && -f /etc/openpanel/bind9/named.conf ]]; then
|
|
cp /etc/openpanel/bind9/named.conf /etc/bind/named.conf
|
|
cp /etc/openpanel/bind9/named.conf.options /etc/bind/named.conf.options 2>/dev/null || true
|
|
cp /etc/openpanel/bind9/named.conf.default-zones /etc/bind/named.conf.default-zones 2>/dev/null || true
|
|
docker restart openpanel_dns 2>/dev/null || true
|
|
log "fix: /etc/bind/named.conf restaurado + openpanel_dns restart"
|
|
fi
|
|
|
|
log "=== Concluído ==="
|
|
log "Reaplicar após: opencli update --cli"
|
|
log "Bridge FOSS: systemctl restart openpanel-foss-bridge"
|
|
}
|
|
|
|
main "$@"
|