Implement server notice to all users
This commit is contained in:
parent
63b7c95e5f
commit
00f9fa6621
|
@ -0,0 +1,97 @@
|
|||
use reqwest::Error;
|
||||
use serde_json::json;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Error> {
|
||||
// Ask for the admin token
|
||||
println!("Please enter the admin token:");
|
||||
let mut token = String::new();
|
||||
std::io::stdin().read_line(&mut token).expect("Failed to read line");
|
||||
let token = token.trim();
|
||||
|
||||
// Ask for the server notice message
|
||||
println!("Please enter the server notice message:");
|
||||
let mut server_notice = String::new();
|
||||
std::io::stdin().read_line(&mut server_notice).expect("Failed to read line");
|
||||
let server_notice = server_notice.trim();
|
||||
|
||||
// Ask for the server's basis url
|
||||
println!("Please enter the server's basis url (Example: https://matrix.org):");
|
||||
let mut server_url = String::new();
|
||||
std::io::stdin().read_line(&mut server_url).expect("Failed to read line");
|
||||
let server_url = server_url.trim();
|
||||
|
||||
|
||||
get_users(token, server_notice, server_url).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn get_users(token: &str, server_notice: &str, server_url: &str) -> Result<(), Error> {
|
||||
let token_formatted = format!("Bearer {}", token);
|
||||
let url_formatted = format!("{}/_synapse/admin/v2/users", server_url);
|
||||
let client = reqwest::Client::new();
|
||||
let res = client.get(&url_formatted)
|
||||
.header("Authorization", token_formatted)
|
||||
.send()
|
||||
.await?;
|
||||
|
||||
|
||||
println!("Status: {}", res.status());
|
||||
|
||||
let body = res.text().await?;
|
||||
|
||||
|
||||
// Get all name values from the json response and print them out
|
||||
let json: serde_json::Value = serde_json::from_str(&body).unwrap();
|
||||
let users = json["users"].as_array().unwrap();
|
||||
|
||||
// Get all name values from the json response write them to a list and print them out
|
||||
let mut user_list = Vec::new();
|
||||
for user in users {
|
||||
user_list.push(user["name"].to_string());
|
||||
}
|
||||
|
||||
println!("{:?}", user_list[0]);
|
||||
|
||||
// let user_id = user_list[0].clone();
|
||||
// let user_id_trimmed = &user_id[1..user_id.len() - 1];
|
||||
|
||||
for user in user_list {
|
||||
println!("{}", user);
|
||||
send_server_notice(token, user, server_notice, server_url).await?;
|
||||
}
|
||||
|
||||
// get_user_by_id(token, user_id).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// Send a server notification to a user as defined in the homeserver.yaml
|
||||
async fn send_server_notice(token: &str, user: String, server_notice: &str, server_url: &str) -> Result<(), Error> {
|
||||
let token_formatted = format!("Bearer {}", token);
|
||||
let url_formatted = format!("{}/_synapse/admin/v1/send_server_notice", server_url);
|
||||
|
||||
// Trim the user id to remove the quotation marks
|
||||
let user_trimmed = &user[1..user.len() - 1];
|
||||
|
||||
let client = reqwest::Client::new();
|
||||
let res = client.post(url_formatted)
|
||||
.header("Authorization", token_formatted)
|
||||
.json(&json!({
|
||||
"user_id": user_trimmed,
|
||||
"content": {
|
||||
"msgtype": "m.text",
|
||||
"body": server_notice
|
||||
}
|
||||
}))
|
||||
.send()
|
||||
.await?;
|
||||
|
||||
println!("Status: {}", res.status());
|
||||
|
||||
let body = res.text().await?;
|
||||
|
||||
println!("{}", body);
|
||||
|
||||
Ok(())
|
||||
}
|
Loading…
Reference in New Issue