Mapeamento ligit.com.br + ligbox.com.br, benchmark Google/Zoho, catálogo 20 slugs (mail/site/combo/managed TI), scripts deploy VM123 e tabela FOSS product_id + OpenPanel plan id.
143 lines
5.3 KiB
Bash
Executable file
143 lines
5.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Cria catálogo 20 pacotes Ligbox/LIG-it — FOSS + OpenPanel (VM123)
|
|
set -euo pipefail
|
|
|
|
FOSS_URL="${FOSS_URL:-https://financeiro.ligbox.com.br}"
|
|
ADMIN_EMAIL="${FOSS_ADMIN_EMAIL:-admin@ligbox.com.br}"
|
|
ADMIN_PASS="${FOSS_ADMIN_PASS:-LbFossAdmin805353}"
|
|
CATALOG="${CATALOG:-/tmp/ligbox-catalog-20.csv}"
|
|
RESULTS="${RESULTS:-/tmp/ligbox-catalog-20-results.tsv}"
|
|
COOKIE_JAR="$(mktemp)"
|
|
trap 'rm -f "$COOKIE_JAR"' EXIT
|
|
|
|
echo -e "slug\tfoss_id\top_plan\tstatus" > "$RESULTS"
|
|
|
|
foss_login() {
|
|
curl -sk -c "$COOKIE_JAR" -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/guest/staff/login" \
|
|
-d "email=${ADMIN_EMAIL}&password=${ADMIN_PASS}" | grep -q '"role":"admin"' || exit 1
|
|
curl -sk -c "$COOKIE_JAR" -b "$COOKIE_JAR" "${FOSS_URL}/admin" >/dev/null
|
|
CSRF=$(awk '$6=="csrf_token" {print $7}' "$COOKIE_JAR" | tail -1)
|
|
}
|
|
|
|
foss_product_exists() {
|
|
local slug="$1"
|
|
curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/product/get_list" \
|
|
-d "CSRFToken=${CSRF}&per_page=100" | grep -q "\"slug\":\"${slug}\""
|
|
}
|
|
|
|
foss_get_product_id() {
|
|
local slug="$1"
|
|
curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/product/get_list" \
|
|
-d "CSRFToken=${CSRF}&per_page=100" | python3 -c "
|
|
import sys,json
|
|
d=json.load(sys.stdin)
|
|
for i in (d.get('result') or {}).get('list') or []:
|
|
if i.get('slug')=='$slug':
|
|
print(i.get('id')); break
|
|
"
|
|
}
|
|
|
|
ensure_hp() {
|
|
local name="$1"
|
|
local plans
|
|
plans=$(curl -sk -b "$COOKIE_JAR" "${FOSS_URL}/api/admin/servicehosting/hp_get_list?CSRFToken=${CSRF}")
|
|
if ! echo "$plans" | grep -q "\"name\":\"${name}\""; then
|
|
curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/servicehosting/hp_create" \
|
|
-d "CSRFToken=${CSRF}&name=${name}" >/dev/null
|
|
fi
|
|
echo "$plans" | python3 -c "
|
|
import sys,json
|
|
d=json.load(sys.stdin)
|
|
items=(d.get('result') or {}).get('list') or []
|
|
name='$name'
|
|
for i in items:
|
|
if i.get('name')==name:
|
|
print(i.get('id')); break
|
|
else:
|
|
import urllib.request,os
|
|
# refresh
|
|
pass
|
|
" 2>/dev/null || true
|
|
curl -sk -b "$COOKIE_JAR" "${FOSS_URL}/api/admin/servicehosting/hp_get_list?CSRFToken=${CSRF}" | python3 -c "
|
|
import sys,json
|
|
d=json.load(sys.stdin)
|
|
for i in (d.get('result') or {}).get('list') or []:
|
|
if i.get('name')=='$name':
|
|
print(i.get('id')); break
|
|
"
|
|
}
|
|
|
|
create_hosting_product() {
|
|
local slug="$1" title="$2"
|
|
local hp_id server_id pid
|
|
if foss_product_exists "$slug"; then
|
|
foss_get_product_id "$slug"
|
|
return
|
|
fi
|
|
hp_id=$(ensure_hp "$slug")
|
|
server_id=$(curl -sk -b "$COOKIE_JAR" "${FOSS_URL}/api/admin/servicehosting/server_get_list?CSRFToken=${CSRF}" | python3 -c "
|
|
import sys,json
|
|
d=json.load(sys.stdin)
|
|
items=(d.get('result') or {}).get('list') or []
|
|
print(items[0]['id'] if items else '1')
|
|
")
|
|
pid=$(curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/product/prepare" \
|
|
-d "CSRFToken=${CSRF}&title=${title// /+}&type=hosting" | python3 -c "import sys,json; print(json.load(sys.stdin)['result'])")
|
|
curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/product/update_config" \
|
|
-d "CSRFToken=${CSRF}&id=${pid}&config[server_id]=${server_id}&config[hosting_plan_id]=${hp_id}&config[reseller]=0&config[allow_domain_own]=1&config[allow_domain_register]=0&config[allow_domain_transfer]=0&config[allow_subdomain]=0" >/dev/null
|
|
curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/product/update" \
|
|
-d "CSRFToken=${CSRF}&id=${pid}&status=enabled&slug=${slug}" >/dev/null
|
|
echo "$pid"
|
|
}
|
|
|
|
create_custom_product() {
|
|
local slug="$1" title="$2"
|
|
local pid
|
|
if foss_product_exists "$slug"; then
|
|
foss_get_product_id "$slug"
|
|
return
|
|
fi
|
|
pid=$(curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/product/prepare" \
|
|
-d "CSRFToken=${CSRF}&title=${title// /+}&type=custom" | python3 -c "import sys,json; print(json.load(sys.stdin)['result'])")
|
|
curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/product/update" \
|
|
-d "CSRFToken=${CSRF}&id=${pid}&status=enabled&slug=${slug}" >/dev/null
|
|
echo "$pid"
|
|
}
|
|
|
|
ensure_op_plan() {
|
|
local slug="$1" seats="$2" domains="$3" websites="$4" disk_gb="$5"
|
|
if opencli plan-list 2>/dev/null | grep -q "| ${slug} "; then
|
|
echo "exists"
|
|
return
|
|
fi
|
|
local emails=$(( seats * 2 )); [[ $emails -lt 10 ]] && emails=10
|
|
local disk_mb=$(( disk_gb * 1024 ))
|
|
[[ $disk_mb -lt 2048 ]] && disk_mb=2048
|
|
if opencli plan-create name"${slug}" description="Ligbox ${slug}" emails="${emails}" ftp=2 \
|
|
domains="${domains}" websites="${websites}" disk="${disk_mb}" inodes=500000 databases=2 \
|
|
cpu=100 ram=1024g bandwidth=102400 feature_set=default max_email_quota=512G max_hourly_email=500 \
|
|
>/dev/null 2>&1; then
|
|
echo "created"
|
|
else
|
|
echo "exists_or_error"
|
|
fi
|
|
}
|
|
|
|
foss_login
|
|
echo "FOSS login OK"
|
|
|
|
tail -n +2 "$CATALOG" | while IFS='|' read -r slug title category price seats mail_gb files_gb op_domains op_websites op_disk_gb foss_type; do
|
|
[[ -z "$slug" ]] && continue
|
|
foss_id=""; op_st="n/a"; st="ok"
|
|
if [[ "$foss_type" == "custom" ]]; then
|
|
foss_id=$(create_custom_product "$slug" "$title") || st="foss_error"
|
|
else
|
|
foss_id=$(create_hosting_product "$slug" "$title") || st="foss_error"
|
|
op_st=$(ensure_op_plan "$slug" "$seats" "$op_domains" "$op_websites" "$op_disk_gb") || st="op_error"
|
|
fi
|
|
echo -e "${slug}\t${foss_id}\t${op_st}\t${st}"
|
|
echo -e "${slug}\t${foss_id}\t${op_st}\t${st}" >> "$RESULTS"
|
|
echo "OK $slug foss=$foss_id op=$op_st"
|
|
done
|
|
|
|
echo "Results: $RESULTS"
|