let apiKey = localStorage.getItem('apiKey'); function updateUI() { const hasKey = !!apiKey; document.getElementById('noKeySection').classList.toggle('hidden', hasKey); document.getElementById('hasKeySection').classList.toggle('hidden', !hasKey); document.getElementById('uploadSection').classList.toggle('hidden', !hasKey); document.getElementById('filesSection').classList.toggle('hidden', !hasKey); if (hasKey) { document.getElementById('apiKeyDisplay').textContent = apiKey; loadFiles(); } } async function generateKey() { const messageDiv = document.getElementById('authMessage'); try { const response = await fetch('/add-user', { method: 'POST' }); const result = await response.json(); if (response.ok) { apiKey = result.api_key; localStorage.setItem('apiKey', apiKey); messageDiv.innerHTML = '
API key generated successfully!
'; updateUI(); } else { messageDiv.innerHTML = `
${result.detail}
`; } } catch (error) { messageDiv.innerHTML = '
Failed to generate key
'; } } function useExistingKey() { const key = document.getElementById('existingKey').value.trim(); const messageDiv = document.getElementById('authMessage'); if (!key) { messageDiv.innerHTML = '
Please enter an API key
'; return; } apiKey = key; localStorage.setItem('apiKey', apiKey); messageDiv.innerHTML = '
API key set!
'; document.getElementById('existingKey').value = ''; updateUI(); } function clearKey() { apiKey = null; localStorage.removeItem('apiKey'); document.getElementById('authMessage').innerHTML = ''; updateUI(); } async function uploadFiles() { const input = document.getElementById('fileInput'); const files = input.files; const messageDiv = document.getElementById('uploadMessage'); if (files.length === 0) { messageDiv.innerHTML = '
Please select files
'; return; } const formData = new FormData(); for (let file of files) { formData.append('files', file); } try { const response = await fetch('/upload', { method: 'POST', headers: { 'X-API-Key': apiKey }, body: formData }); const result = await response.json(); if (response.ok) { messageDiv.innerHTML = '
Files uploaded successfully!
'; input.value = ''; loadFiles(); } else { messageDiv.innerHTML = `
${result.detail}
`; } } catch (error) { messageDiv.innerHTML = '
Upload failed
'; } } async function loadFiles() { if (!apiKey) return; try { const response = await fetch('/files', { headers: { 'X-API-Key': apiKey } }); const files = await response.json(); const fileList = document.getElementById('fileList'); if (response.status === 401) { document.getElementById('authMessage').innerHTML = '
Invalid API key
'; clearKey(); return; } if (files.length === 0) { fileList.innerHTML = '
  • No files available
  • '; return; } fileList.innerHTML = files.map(file => `
  • ${file.original_name} (${formatBytes(file.size)}) Direct link to file
    Uploaded: ${new Date(file.uploaded_at).toLocaleString()}
  • `).join(''); } catch (error) { console.error('Failed to load files:', error); } } async function downloadFile(fileId, filename) { window.location.href = `/download/${fileId}?api_key=${apiKey}`; } async function deleteFile(fileId) { if (!confirm('Are you sure you want to delete this file?')) return; try { const response = await fetch(`/files/${fileId}`, { method: 'DELETE', headers: { 'X-API-Key': apiKey } }); if (response.ok) { loadFiles(); } else { alert('Failed to delete file'); } } catch (error) { alert('Failed to delete file'); } } function formatBytes(bytes) { if (bytes === 0) return '0 Bytes'; const k = 1024; const sizes = ['Bytes', 'KB', 'MB', 'GB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i]; } // Initialize UI updateUI();