did thing
This commit is contained in:
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,6 +24,14 @@
|
|||||||
<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>
|
||||||
|
|||||||
@@ -58,3 +58,15 @@ button:hover {
|
|||||||
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,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
@@ -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",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user