did thing

This commit is contained in:
2025-02-26 02:10:14 +00:00
committed by GitHub
parent 767ce42c83
commit 5d1cc853c0
6 changed files with 210 additions and 79 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -1,6 +1,9 @@
// Initialize Userbase // Initialize Userbase
userbase.init({ appId: '7cd8e25b-723d-4af7-8bdf-ef558bd0dfcc' }); // Replace with your Userbase app ID userbase.init({ appId: '7cd8e25b-723d-4af7-8bdf-ef558bd0dfcc' }); // Replace with your Userbase app ID
let currentUser; // Variable to hold the current user object
let isDatabaseOpen = false; // Flag to check if the database is open
document.getElementById('signup-form').addEventListener('submit', async (e) => { document.getElementById('signup-form').addEventListener('submit', async (e) => {
e.preventDefault(); e.preventDefault();
const username = document.getElementById('signup-username').value; // Email as username const username = document.getElementById('signup-username').value; // Email as username
@@ -8,7 +11,6 @@ document.getElementById('signup-form').addEventListener('submit', async (e) => {
try { try {
const user = await userbase.signUp({ username: username, password }); const user = await userbase.signUp({ username: username, password });
document.cookie = `user=${user.username}; path=/;`;
alert('Signup successful!'); alert('Signup successful!');
} catch (error) { } catch (error) {
console.error('Signup error:', error); console.error('Signup error:', error);
@@ -22,117 +24,225 @@ document.getElementById('login-form').addEventListener('submit', async (e) => {
const password = document.getElementById('login-password').value; const password = document.getElementById('login-password').value;
try { try {
const user = await userbase.signIn({ username: username, password }); currentUser = await userbase.signIn({
document.cookie = `user=${user.username}; path=/;`; username: username,
password: password,
rememberMe: 'none' // Do not remember the session
});
alert('Login successful!'); alert('Login successful!');
document.getElementById('form-container').style.display = 'none'; document.getElementById('form-container').style.display = 'none';
document.getElementById('note-management').style.display = 'block'; document.getElementById('note-management').style.display = 'block';
// Open the Userbase database
await openUserbaseDatabase();
} catch (error) { } catch (error) {
console.error('Login error:', error); console.error('Login error:', error);
alert('Login failed: ' + error.message); alert('Login failed: ' + error.message);
} }
}); });
// Function to check if user is logged in
async function checkUserLoggedIn() {
try {
currentUser = await userbase.getUser();
if (currentUser) {
document.getElementById('form-container').style.display = 'none';
document.getElementById('note-management').style.display = 'block';
// Open the Userbase database
await openUserbaseDatabase();
}
} catch (error) {
console.error('Error checking user login status:', error);
}
}
// Function to open Userbase database
async function openUserbaseDatabase() {
try {
await userbase.openDatabase({
databaseName: 'notes-database',
changeHandler: function (items) {
const notesList = document.getElementById('notes-list');
notesList.innerHTML = ''; // Clear existing notes
items.forEach(item => {
const noteItem = document.createElement('li');
noteItem.className = 'note-item';
noteItem.textContent = item.item.text;
// Create delete button
const deleteButton = document.createElement('button');
deleteButton.textContent = 'Delete';
deleteButton.style.marginLeft = '10px';
deleteButton.onclick = () => deleteNote(item.itemId); // Bind delete function
noteItem.appendChild(deleteButton);
notesList.appendChild(noteItem);
});
}
});
isDatabaseOpen = true;
console.log('Database opened successfully.');
} catch (error) {
isDatabaseOpen = false;
console.error('Error opening database:', error);
}
}
// Function to save note to Userbase // Function to save note to Userbase
async function saveNote() { async function saveNote() {
const note = document.getElementById('note-input').value; if (!isDatabaseOpen) {
if (!note) { alert('Database is not open. Please try again later.');
return;
}
const noteText = document.getElementById('note-input').value;
if (!noteText) {
alert('Please enter a note to save.'); alert('Please enter a note to save.');
return; return;
} }
try { try {
const user = await userbase.getCurrentUser(); // Get the current user await userbase.insertItem({
await userbase.insert({ databaseName: 'notes-database',
database: 'user_notes', item: { text: noteText }
item: { userId: user.userId, text: note }
}); });
alert('Note saved successfully!'); alert('Note saved successfully!');
document.getElementById('note-input').value = ''; // Clear input document.getElementById('note-input').value = ''; // Clear input
loadNotes(); // Reload notes after saving
} catch (error) { } catch (error) {
console.error('Error saving note:', error); console.error('Error saving note:', error);
alert('Failed to save note: ' + error.message); alert('Failed to save note: ' + error.message);
} }
} }
// Function to load notes from Userbase
async function loadNotes() {
try {
const user = await userbase.getCurrentUser(); // Get the current user
const result = await userbase.query({
database: 'user_notes',
filter: { userId: user.userId }
});
const notesList = document.getElementById('notes-list');
notesList.innerHTML = ''; // Clear existing notes
if (result.length > 0) {
result.forEach(note => {
const noteItem = document.createElement('li');
noteItem.className = 'note-item';
noteItem.textContent = note.text;
// Create delete button
const deleteButton = document.createElement('button');
deleteButton.textContent = 'Delete';
deleteButton.style.marginLeft = '10px';
deleteButton.onclick = () => deleteNote(note.id); // Bind delete function
noteItem.appendChild(deleteButton);
notesList.appendChild(noteItem);
});
} else {
alert('No notes found for this user.');
}
} catch (error) {
console.error('Error loading notes:', error);
alert('Failed to load notes: ' + error.message);
}
}
// Function to delete a note from Userbase // Function to delete a note from Userbase
async function deleteNote(noteId) { async function deleteNote(itemId) {
if (!isDatabaseOpen) {
alert('Database is not open. Please try again later.');
return;
}
try { try {
await userbase.delete(noteId); await userbase.deleteItem({
databaseName: 'notes-database',
itemId: itemId
});
alert('Note deleted successfully!'); alert('Note deleted successfully!');
loadNotes(); // Reload notes after deletion
} catch (error) { } catch (error) {
console.error('Error deleting note:', error); console.error('Error deleting note:', error);
alert('Failed to delete note: ' + error.message); alert('Failed to delete note: ' + error.message);
} }
} }
// Function to get user metadata // Function to log out the user
async function getUserMetadata(userId, accessToken) { async function logout() {
try { try {
const response = await fetch(`https://v1.userbase.com/v1/admin/users/${userId}`, { await userbase.signOut(); // Sign out from Userbase
method: 'GET', currentUser = null; // Clear current user
headers: { isDatabaseOpen = false; // Reset database open flag
'Authorization': `Bearer ${accessToken}` document.getElementById('form-container').style.display = 'block'; // Show login/signup forms
} document.getElementById('note-management').style.display = 'none'; // Hide note management
}); alert('Logged out successfully!');
if (!response.ok) {
throw new Error('Failed to fetch user metadata');
}
const userData = await response.json();
console.log('User Metadata:', userData);
alert(`User Metadata Retrieved: ${JSON.stringify(userData)}`);
} catch (error) { } catch (error) {
console.error('Error fetching user metadata:', error); console.error('Logout error:', error);
alert('Error fetching user metadata: ' + error.message); alert('Logout failed: ' + error.message);
} }
} }
// Example usage of getUserMetadata // Function to save cookies to the cloud
document.getElementById('get-user-metadata').addEventListener('click', async () => { document.getElementById('save-cookies-cloud').addEventListener('click', async () => {
const userId = 'USER_ID'; // Replace with the actual user ID if (!isDatabaseOpen) {
const accessToken = 'ACCESS_TOKEN'; // Replace with the actual access token alert('Database is not open. Please try again later.');
await getUserMetadata(userId, accessToken); return;
}
try {
// Clear existing items in the database
await userbase.openDatabase({
databaseName: 'notes-database',
changeHandler: async function (items) {
for (const item of items) {
await userbase.deleteItem({
databaseName: 'notes-database',
itemId: item.itemId
});
}
// Save cookies to the cloud
const cookies = document.cookie.split('; ').map(cookie => decodeURIComponent(cookie)).join('\n');
const chunkSize = 9000; // Set chunk size to be less than 10 KB
for (let i = 0; i < cookies.length; i += chunkSize) {
const chunk = cookies.substring(i, i + chunkSize);
await userbase.insertItem({
databaseName: 'notes-database',
item: { text: chunk }
});
}
}
}
);
} catch (error) {
console.error('Error saving cookies to cloud:', error);
alert('Failed to save cookies to cloud: ' + error.message);
}
});
// Function to load cookies from the cloud
async function loadCookiesFromCloud() {
try {
// Ensure the database is open
if (!isDatabaseOpen) {
await openUserbaseDatabase();
}
// Clear existing cookies
document.cookie.split(";").forEach((cookie) => {
document.cookie = cookie.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/");
});
// Fetch cookies from the cloud
const items = await userbase.getDatabaseItems({ databaseName: 'notes-database' });
let cookiesFromCloud = '';
items.forEach(item => {
cookiesFromCloud += item.item.text;
});
// Save cookies to the page
document.cookie = `userCookies=${cookiesFromCloud}; path=/`;
// Display the cookies on the page
document.getElementById('cookies-display').innerText = cookiesFromCloud;
// Alert the user that the cookies have been loaded
alert('Cookies loaded from cloud!');
} catch (error) {
console.error('Error loading cookies from cloud:', error);
alert('Failed to load cookies from cloud: ' + error.message);
}
}
// Add event listener to the "Load Cookies from Cloud" button
document.getElementById('load-cookies-cloud').addEventListener('click', loadCookiesFromCloud);
// Function to display cookies
function displayCookies() {
const cookies = document.cookie.split('; ').map(cookie => decodeURIComponent(cookie)).join('\n');
document.getElementById('cookies-display').textContent = cookies;
document.getElementById('cookies-input').value = cookies;
}
// Function to save cookies from the textarea
document.getElementById('save-cookies').addEventListener('click', () => {
const cookies = document.getElementById('cookies-input').value.split('\n');
cookies.forEach(cookie => {
document.cookie = encodeURIComponent(cookie.trim());
});
alert('Cookies updated!');
displayCookies();
}); });
// Event listeners for buttons // Event listeners for buttons
document.getElementById('save-note').addEventListener('click', saveNote); document.getElementById('save-note').addEventListener('click', saveNote);
document.getElementById('load-notes').addEventListener('click', loadNotes); document.getElementById('logout-button').addEventListener('click', logout);
// Check if user is logged in when the page loads
window.onload = checkUserLoggedIn;
@@ -3,13 +3,13 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>acawnts</title> <title>Notes Management</title>
<link rel="stylesheet" href="styles.css"> <link rel="stylesheet" href="styles.css">
<script type="text/javascript" src="https://sdk.userbase.com/2/userbase.js"></script> <script type="text/javascript" src="https://sdk.userbase.com/2/userbase.js"></script>
</head> </head>
<body> <body onload="checkUserLoggedIn()">
<div class="container"> <div class="container">
<h1>Userbase Note Management</h1> <h1>Notes Management</h1>
<div id="form-container"> <div id="form-container">
<form id="signup-form"> <form id="signup-form">
<h2>Sign Up</h2> <h2>Sign Up</h2>
@@ -24,7 +24,15 @@
<button type="submit">Login</button> <button type="submit">Login</button>
</form> </form>
</div> </div>
<div id="note-management" style="display: none;">
<h2>cookies-save</h2>
<div id="cookies-container">
<p id="cookies-display"></p>
<button id="save-cookies-cloud">Save Cookies to Cloud</button>
<button id="load-cookies-cloud">Load Cookies from Cloud</button>
</div>
</div>
</div> </div>
<script src="app.js"></script> <script src="app.js"></script>
</body> </body>
</html> </html>
@@ -57,4 +57,16 @@ button:hover {
padding: 10px; padding: 10px;
margin: 5px 0; margin: 5px 0;
border-radius: 4px; border-radius: 4px;
} }
.note-item button {
background-color: #d9534f;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
.note-item button:hover {
background-color: #c9302c;
}
+1
View File
@@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<script type="text/javascript" src="https://sdk.userbase.com/2/userbase.js"></script>
<meta charset="UTF-8"> <meta charset="UTF-8">
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6951907799659255" cross-origin='anonymous'></script> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6951907799659255" cross-origin='anonymous'></script>
<script defer src="https://chirpy.dev/bootstrapper.js" data-chirpy-domain="fun-miles-4jub.onrender.com"></script> <script defer src="https://chirpy.dev/bootstrapper.js" data-chirpy-domain="fun-miles-4jub.onrender.com"></script>
+2 -2
View File
@@ -80,8 +80,8 @@ const mainContentData = [
link: "/Contact.html", link: "/Contact.html",
}, },
{ {
name: "login", name: "save to cloud",
image: "/images.png", image: "/WebGames-master/WebGames-master/assets/save-to-cloud-2.png",
link: "/WebGames-master/WebGames-master/userlogins-for-fun-miles-main/index.html", link: "/WebGames-master/WebGames-master/userlogins-for-fun-miles-main/index.html",
}, },
]; ];