diff --git a/backend/src/database.js b/backend/src/database.js index aa662b2c..1668776d 100644 --- a/backend/src/database.js +++ b/backend/src/database.js @@ -1,9 +1,17 @@ const sqlite3 = require('sqlite3').verbose(); const path = require('path'); +const fs = require('fs'); // Database file path const DB_PATH = path.join(__dirname, '../data/bible.db'); +// Ensure data directory exists +const dataDir = path.dirname(DB_PATH); +if (!fs.existsSync(dataDir)) { + fs.mkdirSync(dataDir, { recursive: true }); + console.log('Created data directory:', dataDir); +} + // Initialize database const db = new sqlite3.Database(DB_PATH, (err) => { if (err) { diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index dd51b982..d0654b4a 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -79,6 +79,8 @@ function ChapterPage({ formatBookName, getBookFromUrl }: { formatBookName: (name function App() { const [books, setBooks] = useState([]); const [loading, setLoading] = useState(true); + const [user, setUser] = useState(null); + const [authAvailable, setAuthAvailable] = useState(false); const [darkMode, setDarkMode] = useState(() => { // Load dark mode preference from localStorage const saved = localStorage.getItem('darkMode'); @@ -94,8 +96,50 @@ function App() { useEffect(() => { console.log('App useEffect triggered'); loadBooks(); + checkAuthStatus(); }, []); + const checkAuthStatus = async () => { + try { + const response = await fetch('/auth/user', { + credentials: 'include' + }); + + if (response.ok) { + const userData = await response.json(); + setUser(userData.user); + setAuthAvailable(true); + } else if (response.status === 501) { + // Authentication not configured + setAuthAvailable(false); + } else { + // Authentication configured but user not logged in + setAuthAvailable(true); + } + } catch (error) { + console.log('Auth check failed:', error); + setAuthAvailable(false); + } + }; + + const handleLogin = () => { + window.location.href = '/auth/login'; + }; + + const handleLogout = async () => { + try { + await fetch('/auth/logout', { + method: 'POST', + credentials: 'include' + }); + setUser(null); + // Optionally reload the page to reset any user-specific state + window.location.reload(); + } catch (error) { + console.error('Logout failed:', error); + } + }; + useEffect(() => { // Apply dark mode and save preference if (darkMode) { @@ -244,17 +288,46 @@ function App() { )} - {/* Dark Mode Toggle */} - + + ) : ( + + )} + )} - + + {/* Dark Mode Toggle */} + +