Files
marstemedia/src-tauri/src/home.rs
Bytemalte f18285b853
All checks were successful
Android Build Final Fixed / build-android (push) Successful in 7m27s
security: remove hardcoded secret key and improve key handling
2026-01-30 22:39:13 +01:00

52 lines
1.5 KiB
Rust

use easy_nostr::EasyNostr;
use nostr_sdk::prelude::{Keys, ToBech32};
use serde::Serialize; // Import für die Schlüssel-Generierung
// Diese Struktur ist für den Transport zum Frontend (JSON)
#[derive(Serialize)]
pub struct LocalPost {
pub content: String,
pub author: String,
pub created_at: u64,
}
#[tauri::command]
pub async fn fetch_nostr_posts() -> Result<Vec<LocalPost>, String> {
// 1. Temporären Einweg-Schlüssel generieren
// Das erzeugt ein Schlüsselpaar im RAM, das nach dem Funktionsaufruf verschwindet.
let random_keys = Keys::generate();
let temp_nsec = random_keys
.secret_key()
.to_bech32()
.map_err(|e| format!("Fehler beim Generieren des Keys: {}", e))?;
// 2. Verbindung mit dem temporären Key aufbauen
let easy = EasyNostr::new(&temp_nsec)
.await
.map_err(|e| e.to_string())?;
// 3. Relays hinzufügen
easy.add_relays(vec![
"wss://relay.damus.io",
"wss://nos.lol",
"wss://relay.snort.social",
])
.await
.map_err(|e| e.to_string())?;
// 4. Posts von der Library holen
let raw_posts = easy.get_random_posts().await.map_err(|e| e.to_string())?;
// 5. Mappen: Library-Typ -> Unser serialisierbarer Typ
let mapped_posts = raw_posts
.into_iter()
.map(|p| LocalPost {
content: p.content,
author: p.author.to_string(),
created_at: p.created_at.as_secs(),
})
.collect();
Ok(mapped_posts)
}