Para crear un script bash que permita enviar el curso 1 de tu carpeta cursos a un cliente solo cuando haya pagado por él, necesitarás seguir los siguientes pasos:
Crear una carpeta dentro de la carpeta "CURSOS" de tu máquina con el nombre del cliente que haya pagado por el curso 1. Agregar la carpeta compartida "CURSOS" en Syncthing en la computadora del cliente y agregar la "compartición selectiva" para la carpeta del curso que deseas compartir con el cliente. La carpeta del curso debe aparecer dentro de la ruta /home/nombre_cliente/tron/CURSOS en la computadora del cliente. Crear un archivo bash que se encargue de enviar el curso 1 a la carpeta "CURSOS" del cliente que haya pagado por él. Este archivo debe contener los siguientes comandos:
!/bin/bash¶
Definir la ruta de la carpeta "CURSOS" en tu máquina¶
ruta_cursos="/home/tu_usuario/tron/CURSOS"
Definir la ruta de la carpeta "CURSOS" en la máquina del cliente¶
ruta_cliente="/home/nombre_cliente/tron/CURSOS"
Definir el ID del dispositivo del cliente en Syncthing¶
id_cliente="ID_del_cliente_en_Syncthing"
Verificar si el cliente ha pagado por el curso 1¶
if [ cliente_ha_pagado_por_curso_1 ]; then # Copiar el curso 1 a la carpeta del cliente en Syncthing cp \(ruta_cursos/curso_1 \(ruta_cliente/curso_1 # Agregar la carpeta del curso 1 a la compartición selectiva del cliente en Syncthing curl -X POST -H "X-API-Key: API_KEY_de_Syncthing" "http://localhost:8384/rest/db/completion?folder=\)ruta_cliente/curso_1&device=\)id_cliente" fi
Sí, es cierto que el script que te propuse anteriormente no incluye una salida de progreso que permita saber cuándo finaliza la transferencia de Syncthing. Para solucionar esto, puedes agregar un bucle que verifique el estado de la transferencia cada cierto tiempo y muestre una salida de progreso numérica.
Aquí te dejo una versión modificada del script que incluye esta funcionalidad:
!/bin/bash¶
Ruta de la carpeta CURSOS en tu computadora¶
fuente="/home/tu_usuario/CURSOS/curso_1"
ID del cliente¶
id_cliente="1234"
Ruta de la carpeta CURSOS en la computadora del cliente¶
ruta_cliente="/home/nombre_cliente/tron/CURSOS/curso_1"
Inicio de la transferencia¶
echo "Iniciando transferencia de $fuente a $ruta_cliente en el dispositivo $id_cliente"
Comando de transferencia¶
comando="curl -X POST -H \"X-API-Key: API_KEY_de_Syncthing\" \"http://localhost:8384/rest/db/completion?folder=\(ruta_cliente&device=\)id_cliente\" --data-binary @-"
Transferencia de archivos¶
rsync -r --progress --exclude='.DS_Store' "\(fuente/" -e "\)comando" "nombre_de_tu_dispositivo:/tmp/" > /dev/null
Verificación de estado de la transferencia¶
while true; do estado=\((curl -s -X GET -H "X-API-Key: API_KEY_de_Syncthing" "http://localhost:8384/rest/system/status" | jq -r '.connections[].state' | grep -o 'syncing\|idle') if [ "\)estado" == "idle" ]; then echo "Transferencia finalizada" break else progreso=\((curl -s -X GET -H "X-API-Key: API_KEY_de_Syncthing" "http://localhost:8384/rest/system/status" | jq -r '.connections[].progress' | awk '{s+=\)1} END {print int(s/NR)}') echo "Progreso: $progreso%" fi sleep 5 done
!/bin/bash¶
Definir las variables necesarias¶
HOME_SYNC_ID="id_sync_de_home" CLIENT_1_SYNC_ID="id_sync_cliente_1" COURSE_NAME="curso 1"
Sincronizar la carpeta del curso 1 de home con la carpeta CURSOS del cliente 1¶
syncthing-cli -apikey="tu_api_key" -endpoint="http://localhost:8384" \ --folder "\(COURSE_NAME" \ --device "\)CLIENT_1_SYNC_ID" \ --send-only \ --ignore-permissions \ --path "/home/elias/CURSOS/\(COURSE_NAME" \ --remote-path "/home/cliente1/CURSOS/\)COURSE_NAME"
Asegurarse de que la sincronización se haya completado correctamente¶
if [ $? -eq 0 ]; then echo "La sincronización del curso $COURSE_NAME con el cliente 1 se ha completado correctamente." else echo "Se ha producido un error al sincronizar el curso $COURSE_NAME con el cliente 1." fi
Sí, para enviar tanto los cursos como la actualización de la aplicación, Elías debería configurar la carpeta "tron" en lugar de la carpeta "CURSOS" en los clientes.
Para enviar un curso a un cliente determinado, Elías podría utilizar el siguiente script en bash:
!/bin/bash¶
Configuración¶
API_KEY="tu_api_key" ENDPOINT="http://localhost:8384" CLIENT_SYNC_ID="id_del_cliente" COURSE_NAME="nombre_del_curso"
Enviar curso¶
syncthing-cli -apikey="\(API_KEY" -endpoint="\)ENDPOINT" -folder="nombre_de_la_carpeta_en_tron" -device-id="\(CLIENT_SYNC_ID" -send-only "\)COURSE_NAME" En este script, se utiliza la herramienta syncthing-cli para enviar el curso a un cliente determinado. El script requiere que se configuren la API_KEY y el ENDPOINT de Syncthing, así como el CLIENT_SYNC_ID y el COURSE_NAME correspondientes al cliente y al curso que se desea enviar.
Para sincronizar la aplicación, Elías podría utilizar el siguiente script en bash:
!/bin/bash¶
Configuración¶
API_KEY="tu_api_key" ENDPOINT="http://localhost:8384" CLIENT_SYNC_ID="id_del_cliente"
Sincronizar carpeta tron¶
syncthing-cli -apikey="\(API_KEY" -endpoint="\)ENDPOINT" -folder="nombre_de_la_carpeta_en_tron" -device-id="$CLIENT_SYNC_ID" -force-rescan En este script, se utiliza la herramienta syncthing-cli para sincronizar la carpeta "tron" en el cliente. El script requiere que se configuren la API_KEY y el ENDPOINT de Syncthing, así como el CLIENT_SYNC_ID correspondiente al cliente al que se desea sincronizar la carpeta "tron". El parámetro -force-rescan fuerza a Syncthing a escanear y sincronizar la carpeta "tron" en el cliente.
En cuanto al script para borrar una carpeta enviada por error, aquí te proporciono un ejemplo:
!/bin/bash¶
Configuración¶
API_KEY="tu_api_key" ENDPOINT="http://localhost:8384" CLIENT_1_SYNC_ID="id_del_cliente_1" COURSE_NAME="nombre_del_curso"
Eliminar carpeta del cliente¶
curl -X DELETE -H "X-API-Key: \(API_KEY" "\)ENDPOINT/rest/db/\(CLIENT_1_SYNC_ID/\)COURSE_NAME"