134 lines
3.4 KiB
HTML
134 lines
3.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Embedded NOSTR_LOGIN_LITE</title>
|
|
<style>
|
|
body {
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
margin: 0;
|
|
padding: 40px;
|
|
background: white;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
min-height: 90vh;
|
|
}
|
|
|
|
.container {
|
|
max-width: 400px;
|
|
width: 100%;
|
|
}
|
|
|
|
#login-button {
|
|
background: #0066cc;
|
|
color: white;
|
|
padding: 12px 24px;
|
|
border: none;
|
|
border-radius: 6px;
|
|
cursor: pointer;
|
|
font-size: 16px;
|
|
text-align: center;
|
|
transition: background 0.2s;
|
|
}
|
|
|
|
#login-button:hover {
|
|
opacity: 0.8;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div class="container">
|
|
<div id="login-button">Login</div>
|
|
</div>
|
|
|
|
<script src="../lite/nostr.bundle.js"></script>
|
|
<script src="../lite/nostr-lite.js"></script>
|
|
|
|
<script>
|
|
let isAuthenticated = false;
|
|
let currentUser = null;
|
|
|
|
document.addEventListener('DOMContentLoaded', async () => {
|
|
await window.NOSTR_LOGIN_LITE.init({
|
|
|
|
methods: {
|
|
extension: true,
|
|
local: true,
|
|
readonly: true,
|
|
connect: true,
|
|
remote: true,
|
|
otp: true
|
|
},
|
|
floatingTab: {
|
|
enabled: false
|
|
}
|
|
});
|
|
|
|
// Listen for authentication events
|
|
window.addEventListener('nlMethodSelected', handleAuthEvent);
|
|
window.addEventListener('nlLogout', handleLogoutEvent);
|
|
|
|
// Check for existing authentication state
|
|
checkAuthState();
|
|
|
|
// Initialize button
|
|
updateButtonState();
|
|
});
|
|
|
|
function handleAuthEvent(event) {
|
|
const { pubkey, method } = event.detail;
|
|
console.log(`Authenticated with ${method}, pubkey: ${pubkey}`);
|
|
|
|
isAuthenticated = true;
|
|
currentUser = event.detail;
|
|
updateButtonState();
|
|
}
|
|
|
|
function handleLogoutEvent() {
|
|
console.log('Logout event received');
|
|
|
|
isAuthenticated = false;
|
|
currentUser = null;
|
|
updateButtonState();
|
|
}
|
|
|
|
function checkAuthState() {
|
|
// Check if user is already authenticated (from persistent storage)
|
|
try {
|
|
// Try to get public key - this will work if already authenticated
|
|
window.nostr.getPublicKey().then(pubkey => {
|
|
console.log('Found existing authentication, pubkey:', pubkey);
|
|
isAuthenticated = true;
|
|
currentUser = { pubkey, method: 'persistent' };
|
|
updateButtonState();
|
|
}).catch(error => {
|
|
console.log('No existing authentication found:', error.message);
|
|
// User is not authenticated, button stays in login state
|
|
});
|
|
} catch (error) {
|
|
console.log('No existing authentication found');
|
|
// User is not authenticated, button stays in login state
|
|
}
|
|
}
|
|
|
|
function updateButtonState() {
|
|
const button = document.getElementById('login-button');
|
|
|
|
if (isAuthenticated) {
|
|
button.textContent = 'Logout';
|
|
button.onclick = () => window.NOSTR_LOGIN_LITE.logout();
|
|
button.style.background = '#dc3545'; // Red for logout
|
|
} else {
|
|
button.textContent = 'Login';
|
|
button.onclick = () => window.NOSTR_LOGIN_LITE.launch('login');
|
|
button.style.background = '#0066cc'; // Blue for login
|
|
}
|
|
}
|
|
</script>
|
|
</body>
|
|
|
|
</html> |