auth system consolidation
This commit is contained in:
parent
209f173d7a
commit
1f33ad1b16
@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
// src/components/ContributionButton.astro
|
// src/components/ContributionButton.astro - CLEANED: Removed duplicate auth script
|
||||||
export interface Props {
|
export interface Props {
|
||||||
type: 'edit' | 'new' | 'write';
|
type: 'edit' | 'new' | 'write';
|
||||||
toolName?: string;
|
toolName?: string;
|
||||||
@ -70,32 +70,3 @@ const iconSize = variant === 'small' ? '14' : '16';
|
|||||||
</svg>
|
</svg>
|
||||||
{displayText}
|
{displayText}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<script>
|
|
||||||
// Check authentication status and redirect if needed
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
const contributeButtons = document.querySelectorAll('[data-contribute-button]');
|
|
||||||
|
|
||||||
contributeButtons.forEach(button => {
|
|
||||||
button.addEventListener('click', async (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
try {
|
|
||||||
const response = await fetch('/api/auth/status');
|
|
||||||
const data = await response.json();
|
|
||||||
|
|
||||||
if (data.authRequired && !data.authenticated) {
|
|
||||||
const returnUrl = (button as HTMLAnchorElement).href;
|
|
||||||
window.location.href = `/api/auth/login?returnTo=${encodeURIComponent(returnUrl)}`;
|
|
||||||
} else {
|
|
||||||
window.location.href = (button as HTMLAnchorElement).href;
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Auth check failed:', error);
|
|
||||||
// Fallback - proceed anyway
|
|
||||||
window.location.href = (button as HTMLAnchorElement).href;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
@ -852,32 +852,5 @@ domains.forEach((domain: any) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
// Auth check for contribution buttons (similar to existing auth checking pattern)
|
|
||||||
function setupContributionButtonAuth() {
|
|
||||||
document.addEventListener('click', async (e) => {
|
|
||||||
const contributeButton = e.target.closest('[data-contribute-button]');
|
|
||||||
if (!contributeButton) return;
|
|
||||||
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
try {
|
|
||||||
const response = await fetch('/api/auth/status');
|
|
||||||
const data = await response.json();
|
|
||||||
|
|
||||||
if (data.authRequired && !data.authenticated) {
|
|
||||||
const returnUrl = contributeButton.href;
|
|
||||||
window.location.href = `/api/auth/login?returnTo=${encodeURIComponent(returnUrl)}`;
|
|
||||||
} else {
|
|
||||||
window.location.href = contributeButton.href;
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Auth check failed:', error);
|
|
||||||
window.location.href = contributeButton.href;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
setupContributionButtonAuth();
|
setupContributionButtonAuth();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
@ -53,7 +53,7 @@ const tools = data.tools;
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<!-- Contribution Button - FIXED: Use data-contribute-button -->
|
<!-- Contribution Button - FIXED: Use data-contribute-button -->
|
||||||
<a href="/contribute" class="btn" style="padding: 0.75rem 1.5rem; background-color: var(--color-warning); color: white; border-color: var(--color-warning);" data-contribute-button>
|
<a href="/contribute" class="btn" style="padding: 0.75rem 1.5rem; background-color: var(--color-warning); color: white; border-color: var(--color-warning);" data-contribute-button="new">
|
||||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="margin-right: 0.5rem;">
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="margin-right: 0.5rem;">
|
||||||
<path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/>
|
<path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/>
|
||||||
<circle cx="8.5" cy="7" r="4"/>
|
<circle cx="8.5" cy="7" r="4"/>
|
||||||
@ -143,16 +143,15 @@ const tools = data.tools;
|
|||||||
return sorted;
|
return sorted;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// OPTIMIZED: AI Query Button Handler using consolidated auth system
|
||||||
// FIXED: AI Query Button Handler using global client-side auth function
|
|
||||||
if (aiQueryBtn) {
|
if (aiQueryBtn) {
|
||||||
aiQueryBtn.addEventListener('click', async () => {
|
aiQueryBtn.addEventListener('click', async () => {
|
||||||
// Wait for client-side auth functions to be available
|
// Use the global auth system consistently
|
||||||
if (typeof window.requireClientAuth === 'function') {
|
if (typeof window.requireClientAuth === 'function') {
|
||||||
await window.requireClientAuth(() => switchToView('ai'), `${window.location.pathname}?view=ai`);
|
await window.requireClientAuth(() => switchToView('ai'), `${window.location.pathname}?view=ai`);
|
||||||
} else {
|
} else {
|
||||||
console.error('requireClientAuth not available - client-auth.js may not be loaded');
|
// Better fallback logging
|
||||||
// Fallback - try switching anyway
|
console.warn('[AUTH] requireClientAuth not available - client-auth.js may not be loaded properly');
|
||||||
switchToView('ai');
|
switchToView('ai');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -53,23 +53,25 @@ async function showIfAuthenticated(selector) {
|
|||||||
: 'none';
|
: 'none';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle contribute button clicks with auth check
|
|
||||||
*/
|
|
||||||
function setupAuthButtons(selector = '[data-contribute-button]') {
|
function setupAuthButtons(selector = '[data-contribute-button]') {
|
||||||
|
// Use event delegation on document for dynamic content support
|
||||||
document.addEventListener('click', async (e) => {
|
document.addEventListener('click', async (e) => {
|
||||||
const button = e.target.closest(selector);
|
const button = e.target.closest(selector);
|
||||||
if (!button) return;
|
if (!button) return;
|
||||||
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
|
// Enhanced error handling and debugging
|
||||||
|
console.log('[AUTH] Contribute button clicked:', button.getAttribute('data-contribute-button'));
|
||||||
|
|
||||||
await requireClientAuth(() => {
|
await requireClientAuth(() => {
|
||||||
|
console.log('[AUTH] Navigation approved, redirecting to:', button.href);
|
||||||
window.location.href = button.href;
|
window.location.href = button.href;
|
||||||
}, button.href);
|
}, button.href);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make functions available globally
|
// Make functions available globally for dynamic content
|
||||||
window.checkClientAuth = checkClientAuth;
|
window.checkClientAuth = checkClientAuth;
|
||||||
window.requireClientAuth = requireClientAuth;
|
window.requireClientAuth = requireClientAuth;
|
||||||
window.showIfAuthenticated = showIfAuthenticated;
|
window.showIfAuthenticated = showIfAuthenticated;
|
||||||
@ -77,6 +79,7 @@ window.setupAuthButtons = setupAuthButtons;
|
|||||||
|
|
||||||
// Auto-setup contribute buttons when DOM is ready
|
// Auto-setup contribute buttons when DOM is ready
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
console.log('[AUTH] Setting up global auth handlers for contribute buttons');
|
||||||
setupAuthButtons('[data-contribute-button]');
|
setupAuthButtons('[data-contribute-button]');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user