Implementacion de sistema distribuido de boton de ayuda
This commit is contained in:
@@ -65,6 +65,17 @@ exec_pg_sql() {
|
||||
-t -c "${sql}" 2>&1
|
||||
}
|
||||
|
||||
# Ejecutar SQL en el PostgreSQL del Cliente (Simulación)
|
||||
exec_pg_sql_client() {
|
||||
local sql="$1"
|
||||
# Solo ejecutar si el contenedor existe y está corriendo
|
||||
if docker ps --format '{{.Names}}' | grep -q "^anexo76-postgres-client$"; then
|
||||
docker exec -e PGPASSWORD="${POSTGRES_PASSWORD}" anexo76-postgres-client \
|
||||
psql -h localhost -p 5432 -U "${POSTGRES_USER}" -d "anexo76_client" \
|
||||
-t -c "${sql}" 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
# Crear mapper de tenant_id para un cliente
|
||||
create_tenant_mapper() {
|
||||
local client_id="$1"
|
||||
@@ -337,8 +348,47 @@ FRONTEND_CLIENT_EXISTS=$(curl -s -X GET "${KEYCLOAK_URL}/admin/realms/${KEYCLOAK
|
||||
-H "Content-Type: application/json")
|
||||
|
||||
if echo "$FRONTEND_CLIENT_EXISTS" | jq -e '.[] | select(.clientId == "anexo76-frontend")' >/dev/null 2>&1; then
|
||||
echo -e "${YELLOW}⚠ Cliente Frontend ya existe${NC}"
|
||||
echo -e "${YELLOW}⚠ Cliente Frontend ya existe, actualizando configuración...${NC}"
|
||||
FRONTEND_CLIENT_ID=$(echo "$FRONTEND_CLIENT_EXISTS" | jq -r '.[0].id')
|
||||
|
||||
# Actualizar configuración del cliente existente para incluir puerto 5174
|
||||
UPDATE_FRONTEND=$(curl -s -w "\n%{http_code}" -X PUT "${KEYCLOAK_URL}/admin/realms/${KEYCLOAK_REALM}/clients/${FRONTEND_CLIENT_ID}" \
|
||||
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"clientId": "anexo76-frontend",
|
||||
"name": "Anexo76 Frontend",
|
||||
"description": "Aplicación web frontend para el sistema Anexo76",
|
||||
"enabled": true,
|
||||
"protocol": "openid-connect",
|
||||
"publicClient": true,
|
||||
"directAccessGrantsEnabled": false,
|
||||
"standardFlowEnabled": true,
|
||||
"implicitFlowEnabled": false,
|
||||
"rootUrl": "http://localhost:5173",
|
||||
"baseUrl": "http://localhost:5173",
|
||||
"redirectUris": [
|
||||
"http://localhost:5173/*",
|
||||
"http://localhost:5174/*",
|
||||
"http://localhost:3000/*"
|
||||
],
|
||||
"webOrigins": [
|
||||
"http://localhost:5173",
|
||||
"http://localhost:5174",
|
||||
"http://localhost:3000"
|
||||
],
|
||||
"attributes": {
|
||||
"pkce.code.challenge.method": "S256"
|
||||
}
|
||||
}')
|
||||
|
||||
HTTP_CODE=$(echo "$UPDATE_FRONTEND" | tail -n1)
|
||||
if [ "$HTTP_CODE" = "204" ] || [ "$HTTP_CODE" = "200" ]; then
|
||||
echo -e "${GREEN}✓ Cliente Frontend actualizado (Puerto 5174 agregado)${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ Error al actualizar cliente Frontend (HTTP ${HTTP_CODE})${NC}"
|
||||
fi
|
||||
|
||||
else
|
||||
CREATE_FRONTEND=$(curl -s -w "\n%{http_code}" -X POST "${KEYCLOAK_URL}/admin/realms/${KEYCLOAK_REALM}/clients" \
|
||||
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
|
||||
@@ -357,10 +407,12 @@ else
|
||||
"baseUrl": "http://localhost:5173",
|
||||
"redirectUris": [
|
||||
"http://localhost:5173/*",
|
||||
"http://localhost:5174/*",
|
||||
"http://localhost:3000/*"
|
||||
],
|
||||
"webOrigins": [
|
||||
"http://localhost:5173",
|
||||
"http://localhost:5174",
|
||||
"http://localhost:3000"
|
||||
],
|
||||
"attributes": {
|
||||
@@ -516,8 +568,9 @@ if [ $PG_RETRY_COUNT -eq $MAX_PG_RETRIES ]; then
|
||||
fi
|
||||
|
||||
# Insertar o actualizar tenant
|
||||
echo "Insertando tenant en PostgreSQL..."
|
||||
echo "Insertando tenant en PostgreSQL (Hub y Cliente)..."
|
||||
exec_pg_sql "INSERT INTO core.tenants (name, slug, type, keycloak_realm, contact_email, is_active, created_at, updated_at) VALUES ('${TENANT_NAME}', '${TENANT_SLUG}', 'SHARED'::tenanttype, '${KEYCLOAK_REALM}', '${DEMO_EMAIL}', true, now(), now()) ON CONFLICT (slug) DO UPDATE SET name = EXCLUDED.name, contact_email = EXCLUDED.contact_email, updated_at = CURRENT_TIMESTAMP;" >/dev/null
|
||||
exec_pg_sql_client "INSERT INTO core.tenants (name, slug, type, keycloak_realm, contact_email, is_active, created_at, updated_at) VALUES ('${TENANT_NAME}', '${TENANT_SLUG}', 'SHARED'::tenanttype, '${KEYCLOAK_REALM}', '${DEMO_EMAIL}', true, now(), now()) ON CONFLICT (slug) DO UPDATE SET name = EXCLUDED.name, contact_email = EXCLUDED.contact_email, updated_at = CURRENT_TIMESTAMP;" >/dev/null
|
||||
|
||||
# Obtener el ID del tenant con mejor manejo de errores
|
||||
echo "Obteniendo ID del tenant..."
|
||||
@@ -552,7 +605,8 @@ COMPANY_EXISTS=$(echo "$COMPANY_EXISTS" | xargs)
|
||||
|
||||
if [ "$COMPANY_EXISTS" = "0" ]; then
|
||||
exec_pg_sql "INSERT INTO a76.company (tenant_id, name, rfc, is_service_company, created_at, updated_at) VALUES (${TENANT_ID}, '${COMPANY_NAME}', '${COMPANY_RFC}', false, now(), now());" >/dev/null
|
||||
echo -e "${GREEN}✓ Company creada${NC}"
|
||||
exec_pg_sql_client "INSERT INTO a76.company (tenant_id, name, rfc, is_service_company, created_at, updated_at) VALUES (${TENANT_ID}, '${COMPANY_NAME}', '${COMPANY_RFC}', false, now(), now());" >/dev/null
|
||||
echo -e "${GREEN}✓ Company creada (Hub y Cliente)${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ Company ya existe para este tenant${NC}"
|
||||
fi
|
||||
@@ -580,8 +634,9 @@ echo -e "${GREEN}✓ Atributo tenant_id asignado al usuario${NC}"
|
||||
echo -e "\n${YELLOW}Creando relación usuario-tenant en la base de datos...${NC}"
|
||||
|
||||
exec_pg_sql "INSERT INTO core.user_tenants (keycloak_user_id, tenant_id, company_id, role, is_active, created_at, updated_at) VALUES ('${USER_ID}', ${TENANT_ID}, 1, 'admin', true, now(), now()) ON CONFLICT (keycloak_user_id, tenant_id, company_id) DO UPDATE SET is_active = true, updated_at = CURRENT_TIMESTAMP;" >/dev/null
|
||||
exec_pg_sql_client "INSERT INTO core.user_tenants (keycloak_user_id, tenant_id, company_id, role, is_active, created_at, updated_at) VALUES ('${USER_ID}', ${TENANT_ID}, 1, 'admin', true, now(), now()) ON CONFLICT (keycloak_user_id, tenant_id, company_id) DO UPDATE SET is_active = true, updated_at = CURRENT_TIMESTAMP;" >/dev/null
|
||||
|
||||
echo -e "${GREEN}✓ Relación usuario-tenant creada en la base de datos${NC}"
|
||||
echo -e "${GREEN}✓ Relación usuario-tenant creada en la base de datos (Hub y Cliente)${NC}"
|
||||
|
||||
###############################################################################
|
||||
# 9. Crear licencia Enterprise para el tenant
|
||||
@@ -604,7 +659,8 @@ if [ "$LICENSE_EXISTS" = "0" ]; then
|
||||
set -e # Reactivar exit on error
|
||||
|
||||
if [ $LICENSE_CREATE_STATUS -eq 0 ]; then
|
||||
echo -e "${GREEN}✓ Licencia Enterprise creada exitosamente${NC}"
|
||||
exec_pg_sql_client "INSERT INTO core.licenses (tenant_id, plan, status, max_users, max_storage_gb, max_monthly_operations, feature_api_access, feature_advanced_reports, feature_integrations, feature_dedicated_support, starts_at, expires_at, created_at, updated_at) VALUES (${TENANT_ID}, 'ENTERPRISE', 'ACTIVE', 999999, 999999, 999999, true, true, true, true, '${LICENSE_START_DATE}'::timestamp, '${LICENSE_EXPIRE_DATE}'::timestamp, now(), now());" >/dev/null 2>&1 || true
|
||||
echo -e "${GREEN}✓ Licencia Enterprise creada exitosamente (Hub y Cliente)${NC}"
|
||||
echo -e "${GREEN} Plan: Enterprise${NC}"
|
||||
echo -e "${GREEN} Usuarios: Ilimitados${NC}"
|
||||
echo -e "${GREEN} Almacenamiento: Ilimitado${NC}"
|
||||
@@ -624,11 +680,12 @@ else
|
||||
# Actualizar licencia existente a Enterprise
|
||||
set +e # Desactivar exit on error temporalmente
|
||||
exec_pg_sql "UPDATE core.licenses SET plan = 'ENTERPRISE', status = 'ACTIVE', max_users = 999999, max_storage_gb = 999999, max_monthly_operations = 999999, feature_api_access = true, feature_advanced_reports = true, feature_integrations = true, feature_dedicated_support = true, starts_at = '${LICENSE_START_DATE}'::timestamp, expires_at = '${LICENSE_EXPIRE_DATE}'::timestamp, updated_at = now() WHERE tenant_id = ${TENANT_ID};" >/dev/null 2>&1
|
||||
exec_pg_sql_client "UPDATE core.licenses SET plan = 'ENTERPRISE', status = 'ACTIVE', max_users = 999999, max_storage_gb = 999999, max_monthly_operations = 999999, feature_api_access = true, feature_advanced_reports = true, feature_integrations = true, feature_dedicated_support = true, starts_at = '${LICENSE_START_DATE}'::timestamp, expires_at = '${LICENSE_EXPIRE_DATE}'::timestamp, updated_at = now() WHERE tenant_id = ${TENANT_ID};" >/dev/null 2>&1 || true
|
||||
LICENSE_UPDATE_STATUS=$?
|
||||
set -e # Reactivar exit on error
|
||||
|
||||
if [ $LICENSE_UPDATE_STATUS -eq 0 ]; then
|
||||
echo -e "${GREEN}✓ Licencia actualizada a Enterprise${NC}"
|
||||
echo -e "${GREEN}✓ Licencia actualizada a Enterprise (Hub y Cliente)${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ Error al actualizar la licencia${NC}"
|
||||
exit 1
|
||||
|
||||
Reference in New Issue
Block a user