#!/usr/bin/env bash # ============================================================================== # Script Utilitário: Upload de Arquivos e Mídias da Wiki para o MinIO Paiol # Envia arquivos (PDFs, imagens, vídeos, anexos) para o MinIO Paiol e gera # links formatados para inclusão em documentos Markdown da Wiki. # # Padrão: # curl -X PUT --upload-file ./manual.pdf https://paiol.idz.one/wiki/{modulo}/{slug}-{aleatorio}.pdf # ============================================================================== set -e VERDE="\033[0;32m" AMARELO="\033[1;33m" VERMELHO="\033[0;31m" AZUL="\033[0;34m" NEGRITO="\033[1m" RESET="\033[0m" exibir_ajuda() { echo -e "${AZUL}${NEGRITO}Uso:${RESET} $0 [modulo-override]" echo "" echo -e "${NEGRITO}Exemplos:${RESET}" echo " $0 ./manual.pdf licenciamento/dispensa-licenca" echo " $0 ./fluxograma.png denuncias/fluxo-fiscalizacao" echo " $0 ./relatorio.pdf auditoria/relatorio-anual quipo" echo "" echo -e "${NEGRITO}Parâmetros:${RESET}" echo " Caminho do arquivo local a ser enviado" echo " Identificador semântico da funcionalidade ou página da Wiki" echo " [modulo-override] (Opcional) Sobrescreve o modulo-id de memorias-ia/modulo.yml" exit 1 } if [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ -z "$1" ] || [ -z "$2" ]; then exibir_ajuda fi ARQUIVO="$1" SLUG_ORIGINAL="$2" MODULO_OVERRIDE="$3" if [ ! -f "$ARQUIVO" ]; then echo -e "${VERMELHO}Erro:${RESET} Arquivo '$ARQUIVO' não encontrado ou não é um arquivo regular." >&2 exit 1 fi # Identificar a raiz do projeto pai para ler memorias-ia/modulo.yml if [ -f "memorias-ia/modulo.yml" ]; then ROOT_DIR="." elif [ -f "../memorias-ia/modulo.yml" ]; then ROOT_DIR=".." elif [ -f "../../memorias-ia/modulo.yml" ]; then ROOT_DIR="../.." else ROOT_DIR="." fi # Resolver modulo-id if [ -n "$MODULO_OVERRIDE" ]; then MODULO_ID="$MODULO_OVERRIDE" elif [ -f "$ROOT_DIR/memorias-ia/modulo.yml" ]; then MODULO_ID=$(grep -E "^modulo-id:" "$ROOT_DIR/memorias-ia/modulo.yml" | awk '{print $2}' || true) fi if [ -z "$MODULO_ID" ]; then echo -e "${AMARELO}Aviso:${RESET} 'modulo-id' não encontrado em memorias-ia/modulo.yml. Usando 'geral'." >&2 MODULO_ID="geral" fi # Obter extensão e nome base NOME_COMPLETO=$(basename "$ARQUIVO") EXT="${NOME_COMPLETO##*.}" EXT=$(echo "$EXT" | tr '[:upper:]' '[:lower:]') # Sanitizar slug (remover barras no início/fim e espaços) SLUG=$(echo "$SLUG_ORIGINAL" | sed 's|^/||;s|/$||;s| \+|-|g') # Gerar sufixo aleatório alfanumérico de 8 caracteres if command -v openssl >/dev/null 2>&1; then ALEATORIO=$(openssl rand -hex 4) elif command -v md5sum >/dev/null 2>&1; then ALEATORIO=$(head -c 16 /dev/urandom | md5sum | head -c 8) else ALEATORIO=$(head -c 8 /dev/urandom | tr -dc 'a-z0-9' | head -c 8) fi URL_DESTINO="https://paiol.idz.one/wiki/${MODULO_ID}/${SLUG}-${ALEATORIO}.${EXT}" echo -e "${AZUL}${NEGRITO}Enviando arquivo para o MinIO Paiol...${RESET}" echo -e " Arquivo: ${NEGRITO}$ARQUIVO${RESET}" echo -e " Módulo: ${NEGRITO}$MODULO_ID${RESET}" echo -e " Slug: ${NEGRITO}$SLUG${RESET}" echo -e " Destino: ${NEGRITO}$URL_DESTINO${RESET}" TEMP_RESPOSTA=$(mktemp) HTTP_STATUS=$(curl -s -o "$TEMP_RESPOSTA" -w "%{http_code}" -X PUT --upload-file "$ARQUIVO" "$URL_DESTINO") if [ "$HTTP_STATUS" -ge 200 ] && [ "$HTTP_STATUS" -lt 300 ]; then rm -f "$TEMP_RESPOSTA" echo -e "\n${VERDE}${NEGRITO}✓ Upload realizado com sucesso no MinIO Paiol!${RESET}" echo -e " ${NEGRITO}URL:${RESET} $URL_DESTINO\n" echo -e "${NEGRITO}--- Snippets prontos para a Wiki Markdown ---${RESET}" NOME_FORMATADO=$(echo "$SLUG" | awk -F'/' '{print $NF}' | tr '-' ' ' | awk '{for(i=1;i<=NF;i++)sub(/./,toupper(substr($i,1,1)),$i)}1') case "$EXT" in png|jpg|jpeg|svg|gif|webp) echo -e "${AZUL}Imagem:${RESET}" echo "![$NOME_FORMATADO]($URL_DESTINO)" ;; pdf) echo -e "${AZUL}Documento / Manual PDF:${RESET}" echo "[Baixar $NOME_FORMATADO (PDF)]($URL_DESTINO)" ;; mp4|webm) echo -e "${AZUL}Vídeo:${RESET}" echo "" ;; *) echo -e "${AZUL}Arquivo / Download:${RESET}" echo "[Baixar $NOME_FORMATADO]($URL_DESTINO)" ;; esac echo "" exit 0 else CONTEUDO_ERRO=$(cat "$TEMP_RESPOSTA" 2>/dev/null || true) rm -f "$TEMP_RESPOSTA" echo -e "\n${VERMELHO}${NEGRITO}✗ Falha no upload para o Paiol (HTTP $HTTP_STATUS)${RESET}" >&2 if [ -n "$CONTEUDO_ERRO" ]; then echo -e "Resposta do servidor: $CONTEUDO_ERRO" >&2 fi exit 1 fi