Fix authentication check and credential validation

- Add authentication check before allowing peer discovery
- Validate stored credentials have required fields (peerId, secret)
- Remove invalid/corrupted credentials from localStorage
- Show clear error message when trying to discover without auth

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-14 19:05:44 +01:00
parent e1c8c25ea8
commit 65f4aaffe0

View File

@@ -46,10 +46,26 @@ export default function App() {
useEffect(() => { useEffect(() => {
const saved = localStorage.getItem('rondevu-credentials'); const saved = localStorage.getItem('rondevu-credentials');
if (saved) { if (saved) {
const creds = JSON.parse(saved); try {
setCredentials(creds); const creds = JSON.parse(saved);
setClient(new Rondevu({baseUrl: API_URL, credentials: creds})); // Validate credentials have required fields
setStatus('Registered (from storage)'); if (creds && creds.peerId && creds.secret) {
setCredentials(creds);
setClient(new Rondevu({baseUrl: API_URL, credentials: creds}));
setStatus('Registered (from storage)');
} else {
// Invalid credentials, remove them
localStorage.removeItem('rondevu-credentials');
setClient(new Rondevu({baseUrl: API_URL}));
setStatus('Not registered');
}
} catch (err) {
// Corrupted credentials, remove them
console.error('Failed to load credentials:', err);
localStorage.removeItem('rondevu-credentials');
setClient(new Rondevu({baseUrl: API_URL}));
setStatus('Not registered');
}
} else { } else {
setClient(new Rondevu({baseUrl: API_URL})); setClient(new Rondevu({baseUrl: API_URL}));
} }
@@ -138,6 +154,11 @@ export default function App() {
const handleDiscoverPeers = async () => { const handleDiscoverPeers = async () => {
if (!client) return; if (!client) return;
if (!client.isAuthenticated()) {
toast.error('Please register first!');
return;
}
try { try {
const offers = await client.offers.findByTopic(searchTopic.trim(), {limit: 50}); const offers = await client.offers.findByTopic(searchTopic.trim(), {limit: 50});
setDiscoveredOffers(offers); setDiscoveredOffers(offers);