auth
Deploy / Deploy (push) Successful in 44s Details

This commit is contained in:
JotaChina 2026-03-26 20:24:34 -03:00
parent 42a902afc6
commit 7250ff1459
1 changed files with 24 additions and 29 deletions

View File

@ -292,46 +292,42 @@ permalink: /samples/
<script> <script>
document.addEventListener('DOMContentLoaded', async () => { document.addEventListener('DOMContentLoaded', async () => {
// === VERIFICAÇÃO DE LOGIN (CORRIGIDA) === // === VERIFICAÇÃO DE LOGIN ===
const btnUpload = document.getElementById('btn-open-upload'); const btnUpload = document.getElementById('btn-open-upload');
const btnLogin = document.getElementById('btn-login-trigger'); const btnLogin = document.getElementById('btn-login-trigger');
// Verifica se os elementos realmente existem na página antes de tentar mexer neles
if (btnUpload && btnLogin) { if (btnUpload && btnLogin) {
try { try {
console.log("Verificando autenticação..."); console.log("Verificando autenticação...");
// Verifica auth via Proxy Apache
const res = await fetch('/api/check_auth'); const res = await fetch('/api/check_auth');
const authData = await res.json();
// 🔥 CORREÇÃO 1: Se o servidor der erro 503/404, paramos aqui antes do JSON quebrar
if (!res.ok) {
throw new Error(`Servidor de auth indisponível (Status: ${res.status})`);
}
const authData = await res.json();
console.log("Status do usuário:", authData); console.log("Status do usuário:", authData);
if (authData.logged_in) { if (authData.logged_in) {
// USUÁRIO LOGADO:
// 1. Remove is-hidden do Upload (para aparecer)
btnUpload.classList.remove('is-hidden'); btnUpload.classList.remove('is-hidden');
// 2. Adiciona is-hidden no Login (para sumir)
btnLogin.classList.add('is-hidden'); btnLogin.classList.add('is-hidden');
} else { } else {
// VISITANTE:
// 1. Garante que Upload está escondido
btnUpload.classList.add('is-hidden'); btnUpload.classList.add('is-hidden');
// 2. Garante que Login aparece
btnLogin.classList.remove('is-hidden'); btnLogin.classList.remove('is-hidden');
} }
} catch (e) { } catch (e) {
console.error("Erro ao verificar auth:", e); console.warn("Autenticação falhou ou visitante assumido:", e.message);
// Em caso de erro, assume visitante por segurança // Em caso de erro (como o 503), assume visitante por segurança
btnUpload.classList.add('is-hidden'); btnUpload.classList.add('is-hidden');
btnLogin.classList.remove('is-hidden'); btnLogin.classList.remove('is-hidden');
} }
} else {
console.error("Erro: Não encontrei os botões de Upload ou Login no HTML.");
} }
// ===================================
// === DADOS E CONFIGURAÇÃO === // === DADOS E CONFIGURAÇÃO ===
const manifestData = {{ site.data['samples-manifest'] | jsonify }}; // 🔥 CORREÇÃO 2: Fallback para um objeto vazio "{}" caso o Jekyll não encontre o ficheiro json
const rawManifest = {{ site.data['samples-manifest'] | jsonify }};
const manifestData = rawManifest || {};
const BASE_ASSETS_URL = "{{ '/src_mmpSearch/samples/' | relative_url }}"; const BASE_ASSETS_URL = "{{ '/src_mmpSearch/samples/' | relative_url }}";
// === ELEMENTOS DO DOM === // === ELEMENTOS DO DOM ===
@ -354,13 +350,12 @@ document.addEventListener('DOMContentLoaded', async () => {
return filename.replace(/\.[^/.]+$/, ""); return filename.replace(/\.[^/.]+$/, "");
} }
// === LÓGICA DO NAVEGADOR DE ARQUIVOS ===
function getFolderByPath(pathArray) { function getFolderByPath(pathArray) {
let folder = manifestData; let folder = manifestData;
for (const dir of pathArray) { for (const dir of pathArray) {
if (folder[dir]) folder = folder[dir]; if (folder && folder[dir]) folder = folder[dir];
} }
return folder; return folder || {};
} }
function isAudioFile(filename) { function isAudioFile(filename) {
@ -397,10 +392,16 @@ document.addEventListener('DOMContentLoaded', async () => {
const folders = []; const folders = [];
const files = []; const files = [];
// 🔥 CORREÇÃO 3: Proteção contra objetos inválidos no render
if (!currentFolderObj || typeof currentFolderObj !== 'object') {
browserView.innerHTML = `<div class="has-text-centered has-text-danger p-5"><strong>Erro:</strong> Manifesto de samples não encontrado ou vazio. Verifique o _data/samples-manifest.json</div>`;
return;
}
Object.keys(currentFolderObj).forEach(key => { Object.keys(currentFolderObj).forEach(key => {
if (key === '_isFile') return; if (key === '_isFile') return;
const item = currentFolderObj[key]; const item = currentFolderObj[key];
if (item._isFile) files.push(key); if (item && item._isFile) files.push(key);
else folders.push(key); else folders.push(key);
}); });
@ -455,6 +456,8 @@ document.addEventListener('DOMContentLoaded', async () => {
audioPlayer.play().catch(e => console.log('Erro ao tocar:', e)); audioPlayer.play().catch(e => console.log('Erro ao tocar:', e));
} }
// === O restante do seu código JavaScript original pode continuar a partir daqui sem alterações (Filtros, Modais, Lógica de Gravação) ===
// === LÓGICA DE FILTRAGEM (ROBUSTA) === // === LÓGICA DE FILTRAGEM (ROBUSTA) ===
function filterBySample(sampleName) { function filterBySample(sampleName) {
if (!sampleName) { if (!sampleName) {
@ -556,7 +559,7 @@ document.addEventListener('DOMContentLoaded', async () => {
// === LÓGICA DE UPLOAD & GRAVAÇÃO === // === LÓGICA DE UPLOAD & GRAVAÇÃO ===
// ========================================================== // ==========================================================
const uploadModal = document.getElementById('upload-sample-modal'); const uploadModal = document.getElementById('upload-sample-modal');
const btnOpenUpload = document.getElementById('btn-open-upload'); // Botão agora pode estar hidden const btnOpenUpload = document.getElementById('btn-open-upload');
const btnCloseUpload = document.getElementById('close-upload-modal'); const btnCloseUpload = document.getElementById('close-upload-modal');
const btnCancelUpload = document.getElementById('cancel-upload'); const btnCancelUpload = document.getElementById('cancel-upload');
const fileInput = document.getElementById('file-input-real'); const fileInput = document.getElementById('file-input-real');
@ -584,7 +587,6 @@ document.addEventListener('DOMContentLoaded', async () => {
let audioBlob = null; let audioBlob = null;
let activeTab = 'file'; let activeTab = 'file';
// Alternância de Abas
function switchTab(mode) { function switchTab(mode) {
activeTab = mode; activeTab = mode;
if(mode === 'file') { if(mode === 'file') {
@ -608,7 +610,6 @@ document.addEventListener('DOMContentLoaded', async () => {
// Lógica do Microfone // Lógica do Microfone
recordBtn.onclick = async () => { recordBtn.onclick = async () => {
if (!isRecording) { if (!isRecording) {
// INICIAR GRAVAÇÃO
try { try {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
mediaRecorder = new MediaRecorder(stream); mediaRecorder = new MediaRecorder(stream);
@ -617,7 +618,6 @@ document.addEventListener('DOMContentLoaded', async () => {
mediaRecorder.start(); mediaRecorder.start();
isRecording = true; isRecording = true;
// UI Updates
recordBtn.classList.add('is-recording'); recordBtn.classList.add('is-recording');
recordIndicator.classList.remove('is-hidden'); recordIndicator.classList.remove('is-hidden');
recordPreview.classList.add('is-hidden'); recordPreview.classList.add('is-hidden');
@ -644,7 +644,6 @@ document.addEventListener('DOMContentLoaded', async () => {
console.error(err); console.error(err);
} }
} else { } else {
// PARAR GRAVAÇÃO
stopRecordingLogic(); stopRecordingLogic();
} }
}; };
@ -660,7 +659,6 @@ document.addEventListener('DOMContentLoaded', async () => {
uploadStatus.className = "help has-text-success"; uploadStatus.className = "help has-text-success";
} }
// Modal Open/Close
function toggleUploadModal(show) { function toggleUploadModal(show) {
if(show) { if(show) {
uploadModal.classList.add('is-active'); uploadModal.classList.add('is-active');
@ -700,7 +698,6 @@ document.addEventListener('DOMContentLoaded', async () => {
} }
formData.append('sample_file', fileInput.files[0]); formData.append('sample_file', fileInput.files[0]);
} else { } else {
// ABA MICROFONE
if (!audioBlob) { if (!audioBlob) {
alert("Grave algo antes de enviar."); alert("Grave algo antes de enviar.");
return; return;
@ -713,10 +710,8 @@ document.addEventListener('DOMContentLoaded', async () => {
formData.append('sample_file', audioBlob, filename); formData.append('sample_file', audioBlob, filename);
} }
// URL CORRIGIDA: Usando Proxy reverso (sem porta 33002)
const API_URL = '/api/upload/sample'; const API_URL = '/api/upload/sample';
// UI Loading
confirmUploadBtn.classList.add('is-loading'); confirmUploadBtn.classList.add('is-loading');
uploadProgress.classList.remove('is-hidden'); uploadProgress.classList.remove('is-hidden');
uploadStatus.classList.remove('is-hidden'); uploadStatus.classList.remove('is-hidden');