diff --git a/frontend/static/js/common.js b/frontend/static/js/common.js index 42524d30..2244ee8e 100644 --- a/frontend/static/js/common.js +++ b/frontend/static/js/common.js @@ -16,56 +16,106 @@ // Get the display name (prefer name, fall back to preferred_username, then email) const displayName = data.name || data.preferred_username || data.email; - // User is logged in - let authHTML = ` -
- Avatar - ${displayName} - - - -
- `; - + // User is logged in - use DOM API to prevent XSS if (authSection) { - authSection.innerHTML = authHTML; + authSection.textContent = ''; // Clear existing content + const container = document.createElement('div'); + container.className = 'flex items-center'; + + const img = document.createElement('img'); + img.src = data.picture; + img.alt = 'Avatar'; + img.className = 'w-8 h-8 rounded-full mr-2'; + + const span = document.createElement('span'); + span.textContent = displayName; + + const logoutLink = document.createElement('a'); + logoutLink.href = '/logout'; + logoutLink.className = 'ml-3 text-red-600 hover:text-red-800'; + const icon = document.createElement('i'); + icon.className = 'fas fa-sign-out-alt'; + logoutLink.appendChild(icon); + + container.appendChild(img); + container.appendChild(span); + container.appendChild(logoutLink); + authSection.appendChild(container); } if (mobileAuthSection) { - mobileAuthSection.innerHTML = ` -
-
- Avatar - ${displayName} -
- - Logout - -
- `; + mobileAuthSection.textContent = ''; // Clear existing content + const outerContainer = document.createElement('div'); + outerContainer.className = 'flex items-center justify-between'; + + const innerContainer = document.createElement('div'); + innerContainer.className = 'flex items-center'; + + const img = document.createElement('img'); + img.src = data.picture; + img.alt = 'Avatar'; + img.className = 'w-6 h-6 rounded-full mr-2'; + + const span = document.createElement('span'); + span.textContent = displayName; + + innerContainer.appendChild(img); + innerContainer.appendChild(span); + + const logoutLink = document.createElement('a'); + logoutLink.href = '/logout'; + logoutLink.className = 'text-red-600 hover:text-red-800'; + const icon = document.createElement('i'); + icon.className = 'fas fa-sign-out-alt'; + logoutLink.appendChild(icon); + logoutLink.appendChild(document.createTextNode(' Logout')); + + outerContainer.appendChild(innerContainer); + outerContainer.appendChild(logoutLink); + mobileAuthSection.appendChild(outerContainer); } } else { - // User is not logged in (this shouldn't happen with current setup, but keeping as fallback) + // User is not logged in - use DOM API if (authSection) { - authSection.innerHTML = `Login`; + authSection.textContent = ''; + const loginLink = document.createElement('a'); + loginLink.href = '/login'; + loginLink.className = 'text-blue-600'; + loginLink.textContent = 'Login'; + authSection.appendChild(loginLink); } if (mobileAuthSection) { - mobileAuthSection.innerHTML = `Login`; + mobileAuthSection.textContent = ''; + const loginLink = document.createElement('a'); + loginLink.href = '/login'; + loginLink.className = 'text-blue-600'; + loginLink.textContent = 'Login'; + mobileAuthSection.appendChild(loginLink); } } } catch (error) { console.error('Authentication check failed:', error); - // Fallback if whoami endpoint fails + // Fallback if whoami endpoint fails - use DOM API const authSection = document.getElementById("authSection"); const mobileAuthSection = document.getElementById("mobileAuthSection"); if (authSection) { - authSection.innerHTML = `Login`; + authSection.textContent = ''; + const loginLink = document.createElement('a'); + loginLink.href = '/login'; + loginLink.className = 'text-blue-600'; + loginLink.textContent = 'Login'; + authSection.appendChild(loginLink); } if (mobileAuthSection) { - mobileAuthSection.innerHTML = `Login`; + mobileAuthSection.textContent = ''; + const loginLink = document.createElement('a'); + loginLink.href = '/login'; + loginLink.className = 'text-blue-600'; + loginLink.textContent = 'Login'; + mobileAuthSection.appendChild(loginLink); } } })(); diff --git a/frontend/templates/files copy.html b/frontend/templates/files copy.html deleted file mode 100644 index 38c86f0d..00000000 --- a/frontend/templates/files copy.html +++ /dev/null @@ -1,185 +0,0 @@ -{% extends "base.html" %} -{% block title %}File Records{% endblock %} - -{% block head_extra %} - - - - - - -{% endblock %} - -{% block content %} -
-

File Records

- -
- - - -
-{% endblock %} - -{% block scripts %} - - - -{% endblock %}