1use std::sync::Arc;
2use radius_server::{
3 dictionary::Dictionary,
4 packet::RadiusAttribute,
5 serve_async,
6};
7
8#[tokio::main]
9async fn main() -> Result<(), Box<dyn std::error::Error>> {
10 let dict = Arc::new(Dictionary::load_embedded()?);
12 let secret = "test123";
13
14 serve_async("0.0.0.0:1812", dict, secret, move |packet| async move {
16 println!("🔍 Incoming ID {} from {:?}", packet.identifier, packet.username());
17
18 if let Some(username) = packet.username() {
19 if username.trim() == "ec:30:b3:6d:24:6a" {
20 Ok(packet.reply_accept(vec![
21 RadiusAttribute::session_timeout(3600),
22 RadiusAttribute::reply_message("Welcome, admin."),
23 ]))
24 } else {
25 Ok(packet.reply_reject("User not allowed"))
26 }
27 } else {
28 Ok(packet.reply_reject("Missing username"))
29 }
30 })
31 .await
32}