mirror of
https://github.com/ssep1ol/overleaf-registration-fe.git
synced 2026-07-21 20:40:21 +00:00
security: sanitize hardcoded values with placeholders for public repo
This commit is contained in:
100
frontend/script.js
Normal file
100
frontend/script.js
Normal file
@@ -0,0 +1,100 @@
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
console.log('Turnstile script loaded.');
|
||||
|
||||
const form = document.getElementById('registration-form');
|
||||
const tosModal = document.getElementById('tos-modal');
|
||||
const openTosModal = document.getElementById('open-tos-modal');
|
||||
const closeTosModal = document.getElementById('close-tos-modal');
|
||||
const tosCheckbox = document.querySelector('input[name="agree-tos"]');
|
||||
const allowedDomains = ['example.edu', 'university.edu']; // CONFIGURE: Replace with your allowed email domains
|
||||
|
||||
// Automatically show the Terms of Service modal on page load
|
||||
if (tosModal) {
|
||||
tosModal.style.display = 'block';
|
||||
}
|
||||
|
||||
// Handle Terms of Service modal
|
||||
if (openTosModal && tosModal) {
|
||||
openTosModal.addEventListener('click', (event) => {
|
||||
event.preventDefault();
|
||||
tosModal.style.display = 'block';
|
||||
});
|
||||
}
|
||||
|
||||
if (closeTosModal && tosModal) {
|
||||
closeTosModal.addEventListener('click', () => {
|
||||
tosModal.style.display = 'none';
|
||||
//if (tosCheckbox) tosCheckbox.checked = true; // Auto-check ToS checkbox
|
||||
});
|
||||
}
|
||||
|
||||
window.addEventListener('click', (event) => {
|
||||
if (event.target === tosModal) {
|
||||
tosModal.style.display = 'none';
|
||||
//if (tosCheckbox) tosCheckbox.checked = true; // Auto-check ToS checkbox
|
||||
}
|
||||
});
|
||||
|
||||
// Ensure the form exists
|
||||
if (!form) {
|
||||
console.error('Form not found!');
|
||||
return;
|
||||
}
|
||||
|
||||
form.addEventListener('submit', async (event) => {
|
||||
event.preventDefault();
|
||||
|
||||
const emailInput = document.querySelector('input[name="email"]');
|
||||
const email = emailInput ? emailInput.value.trim() : '';
|
||||
|
||||
if (!email) {
|
||||
alert('Email is required.');
|
||||
return;
|
||||
}
|
||||
// Validate email
|
||||
const emailDomain = email.split('@')[1];
|
||||
if (!allowedDomains.includes(emailDomain)) {
|
||||
alert(`You must use a valid email from the following domains: ${allowedDomains.join(', ')}.`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Ensure the Terms of Service checkbox is checked
|
||||
if (!tosCheckbox || !tosCheckbox.checked) {
|
||||
alert('You must agree to the Terms of Service and the Privacy Policy to continue.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Retrieve Turnstile token
|
||||
const turnstileResponseElement = document.querySelector('input[name="cf-turnstile-response"]');
|
||||
const captchaToken = turnstileResponseElement ? turnstileResponseElement.value : '';
|
||||
|
||||
if (!captchaToken) {
|
||||
console.error('CAPTCHA token is missing.');
|
||||
alert('Please complete the CAPTCHA.');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('Submitting with Turnstile token:', captchaToken);
|
||||
|
||||
try {
|
||||
const response = await fetch('https://YOUR_BACKEND_API_URL/signup', { // CONFIGURE: Replace with your backend API endpoint
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ email, captcha: captchaToken }),
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
const result = await response.json();
|
||||
alert(result.message || 'Registration successful! Check your email to set your password.');
|
||||
emailInput.value = ''; // Clear the form
|
||||
} else {
|
||||
const error = await response.text();
|
||||
console.error('Backend error:', error);
|
||||
alert(`Registration failed: ${error}`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error during registration:', error);
|
||||
alert('An error occurred. Please try again.');
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user