-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeed_operations.rs
More file actions
73 lines (59 loc) · 3.09 KB
/
feed_operations.rs
File metadata and controls
73 lines (59 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//! Manage MISP feeds: create, enable, cache, and clean up.
//!
//! # Usage
//!
//! ```bash
//! MISP_URL=https://misp.example.com MISP_KEY=your-api-key cargo run --example feed_operations
//! ```
use rustmisp::{MispClient, MispFeed, MispResult};
#[tokio::main]
async fn main() -> MispResult<()> {
// Read connection details from environment variables.
let url = std::env::var("MISP_URL").expect("Set MISP_URL environment variable");
let key = std::env::var("MISP_KEY").expect("Set MISP_KEY environment variable");
let ssl_verify = std::env::var("MISP_SSL_VERIFY")
.map(|v| v != "0" && v.to_lowercase() != "false")
.unwrap_or(true);
// Build the client.
let client = MispClient::new(&url, &key, ssl_verify)?;
// Verify connectivity.
let version = client.misp_instance_version().await?;
println!("Connected to MISP {version}");
// ── List existing feeds ────────────────────────────────────────────
let feeds = client.feeds().await?;
println!("Server has {} feed(s) configured", feeds.len());
// ── Create a new freetext feed ─────────────────────────────────────
let mut feed = MispFeed::new(
"RustMISP example feed",
"https://example.com/indicators.txt",
);
feed.source_format = Some("freetext".into());
feed.provider = Some("Example Provider".into());
feed.enabled = false; // start disabled so we can enable explicitly
let created = client.add_feed(&feed).await?;
let feed_id = created.id.expect("server should assign an id");
println!("Created feed #{feed_id}: {}", created.name);
// ── Retrieve the feed ──────────────────────────────────────────────
let fetched = client.get_feed(feed_id).await?;
println!(
"Feed #{}: provider={}, format={}, enabled={}",
feed_id,
fetched.provider.as_deref().unwrap_or("(none)"),
fetched.source_format.as_deref().unwrap_or("misp"),
fetched.enabled,
);
// ── Enable and disable the feed ────────────────────────────────────
client.enable_feed(feed_id).await?;
println!("Enabled feed #{feed_id}");
client.disable_feed(feed_id).await?;
println!("Disabled feed #{feed_id}");
// ── Toggle caching ─────────────────────────────────────────────────
client.enable_feed_cache(feed_id).await?;
println!("Enabled caching for feed #{feed_id}");
client.disable_feed_cache(feed_id).await?;
println!("Disabled caching for feed #{feed_id}");
// ── Clean up: delete the example feed ──────────────────────────────
client.delete_feed(feed_id).await?;
println!("Deleted feed #{feed_id}");
Ok(())
}