Files
moon-gaming/idk/script.js
T
2025-10-30 09:35:58 -05:00

207 lines
7.1 KiB
JavaScript

// IMPORTANT: Replace 'YOUR_APP_ID' with your actual Userbase App ID.
// You can find this in your Userbase dashboard.
const APP_ID = '7cd8e25b-723d-4af7-8bdf-ef558bd0dfcc';
// Initialize Userbase SDK
try {
userbase.init({ appId: APP_ID });
console.log('Userbase SDK initialized successfully on index page.');
} catch (e) {
console.error('Failed to initialize Userbase SDK on index page:', e);
alert('Failed to initialize Userbase SDK. Check your App ID and console for errors.');
}
// --- DOM Elements ---
const authSection = document.getElementById('auth-section');
const forgotPasswordSection = document.getElementById('forgot-password-section');
const loggedInActions = document.getElementById('logged-in-actions');
// Signup form
const signupForm = document.getElementById('signup-form');
const signupUsernameInput = document.getElementById('signup-username');
const signupEmailInput = document.getElementById('signup-email');
const signupPasswordInput = document.getElementById('signup-password');
const signupMessage = document.getElementById('signup-message');
// Login form
const loginForm = document.getElementById('login-form');
const loginUsernameInput = document.getElementById('login-username');
const loginPasswordInput = document.getElementById('login-password');
const loginMessage = document.getElementById('login-message');
const goToProfileButton = document.getElementById('go-to-profile-button');
const logoutButtonMainPage = document.getElementById('logout-button-main-page');
// Forgot password
const forgotPasswordLink = document.getElementById('forgot-password-link');
const forgotPasswordForm = document.getElementById('forgot-password-form');
const forgotUsernameInput = document.getElementById('forgot-username');
const forgotPasswordMessage = document.getElementById('forgot-password-message');
const backToLoginLink = document.getElementById('back-to-login-link');
// --- Helper Functions ---
function displayMessage(element, message, type) {
element.textContent = message;
element.className = `message ${type}`;
}
function clearMessages() {
[signupMessage, loginMessage, forgotPasswordMessage].forEach(el => {
el.textContent = '';
el.className = 'message';
});
}
function showAuthSection() {
authSection.style.display = 'block';
forgotPasswordSection.style.display = 'none';
loggedInActions.style.display = 'none'; // Hide logged-in actions
clearMessages();
// Clear form fields
signupForm.reset();
loginForm.reset();
forgotPasswordForm.reset();
}
function showLoggedInActions() {
authSection.style.display = 'block'; // Keep login/signup forms visible for now, but hide them in practice
loggedInActions.style.display = 'block'; // Show "Go to Profile" and "Logout"
signupForm.style.display = 'none';
loginForm.style.display = 'none';
clearMessages();
}
function showForgotPasswordSection() {
authSection.style.display = 'none';
forgotPasswordSection.style.display = 'block';
clearMessages();
forgotPasswordForm.reset();
}
// --- Event Handlers ---
// Check if user is already logged in on page load
userbase.getSession()
.then(session => {
if (session.user) {
console.log('User already logged in. Redirecting to profile page.');
window.location.href = 'profile.html'; // Redirect to profile page
} else {
console.log('No active session.');
showAuthSection();
}
})
.catch(e => {
console.error('Error getting session:', e);
showAuthSection(); // Default to auth section on error
});
// Signup
signupForm.addEventListener('submit', async (e) => {
e.preventDefault();
clearMessages();
const username = signupUsernameInput.value;
const password = signupPasswordInput.value;
const email = signupEmailInput.value || undefined; // Pass undefined if empty for optional email
try {
const user = await userbase.signUp({
username,
password,
email,
profile: {
// You can add other initial profile data here if needed during signup
}
});
displayMessage(signupMessage, `Signup successful! Welcome, ${user.username}. Redirecting to profile...`, 'success');
setTimeout(() => {
window.location.href = 'profile.html'; // Redirect after a short delay
}, 1500);
} catch (e) {
console.error('Signup failed:', e);
displayMessage(signupMessage, `Signup failed: ${e.message}`, 'error');
}
});
// Login
loginForm.addEventListener('submit', async (e) => {
e.preventDefault();
clearMessages();
const username = loginUsernameInput.value;
const password = loginPasswordInput.value;
try {
const user = await userbase.signIn({ username, password });
displayMessage(loginMessage, `Login successful! Welcome, ${user.username}. Redirecting to profile...`, 'success');
setTimeout(() => {
window.location.href = 'profile.html'; // Redirect after a short delay
}, 1500);
} catch (e) {
console.error('Login failed:', e);
displayMessage(loginMessage, `Login failed: ${e.message}`, 'error');
}
});
// Logout from main page button (if user logs in and then logs out without going to profile)
logoutButtonMainPage.addEventListener('click', async () => {
clearMessages();
try {
await userbase.signOut();
console.log('Logged out successfully from main page.');
displayMessage(loginMessage, 'You have been logged out.', 'success');
showAuthSection();
} catch (e) {
console.error('Logout failed:', e);
displayMessage(loginMessage, `Logout failed: ${e.message}`, 'error');
}
});
// Go to Profile button
goToProfileButton.addEventListener('click', () => {
window.location.href = 'profile.html';
});
// Forgot Password link
forgotPasswordLink.addEventListener('click', (e) => {
e.preventDefault();
showForgotPasswordSection();
});
// Back to Login link
backToLoginLink.addEventListener('click', (e) => {
e.preventDefault();
showAuthSection();
});
// Forgot Password form submission
forgotPasswordForm.addEventListener('submit', async (e) => {
e.preventDefault();
clearMessages();
const username = forgotUsernameInput.value;
try {
await userbase.forgotPassword({ username });
displayMessage(forgotPasswordMessage, 'A temporary password has been sent to your email address.', 'success');
forgotPasswordForm.reset();
} catch (e) {
console.error('Forgot password failed:', e);
displayMessage(forgotPasswordMessage, `Forgot password failed: ${e.message}`, 'error');
}
});
// Listener for session changes (e.g., if a session expires or user logs in/out in another tab)
userbase.onUpdate((session) => {
if (session.user) {
console.log('User session updated on index page:', session.user);
window.location.href = 'profile.html'; // Redirect if session starts in another tab
} else {
console.log('User session ended on index page.');
showAuthSection(); // Show auth forms if session ends
}
});