Admin room improvements
This commit is contained in:
parent
16b22bb432
commit
9f8cffcd22
18 changed files with 152 additions and 29 deletions
|
@ -241,6 +241,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -264,6 +265,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -300,6 +302,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -319,6 +322,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -340,6 +344,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -359,6 +364,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -380,6 +386,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -398,6 +405,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -422,6 +430,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -447,6 +456,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
db.rooms.build_and_append_pdu(
|
db.rooms.build_and_append_pdu(
|
||||||
|
@ -468,6 +478,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -494,6 +505,7 @@ pub async fn register_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
@ -666,6 +678,7 @@ pub async fn deactivate_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,6 +124,7 @@ pub async fn leave_room_route(
|
||||||
&body.room_id,
|
&body.room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -162,6 +163,7 @@ pub async fn invite_user_route(
|
||||||
&body.room_id,
|
&body.room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -216,6 +218,7 @@ pub async fn kick_user_route(
|
||||||
&body.room_id,
|
&body.room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -274,6 +277,7 @@ pub async fn ban_user_route(
|
||||||
&body.room_id,
|
&body.room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -324,6 +328,7 @@ pub async fn unban_user_route(
|
||||||
&body.room_id,
|
&body.room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -673,7 +678,7 @@ async fn join_room_by_id_helper(
|
||||||
pdu_id.clone().into(),
|
pdu_id.clone().into(),
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
&db.sending,
|
&db.admin,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
if state_events.contains(ev_id) {
|
if state_events.contains(ev_id) {
|
||||||
|
@ -703,6 +708,7 @@ async fn join_room_by_id_helper(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,7 @@ pub async fn send_message_event_route(
|
||||||
&body.room_id,
|
&body.room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,7 @@ pub async fn set_displayname_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -160,6 +161,7 @@ pub async fn set_avatar_url_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ pub async fn redact_event_route(
|
||||||
&body.room_id,
|
&body.room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,7 @@ pub async fn create_room_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -88,6 +89,7 @@ pub async fn create_room_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -131,6 +133,7 @@ pub async fn create_room_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -165,6 +168,7 @@ pub async fn create_room_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -184,6 +188,7 @@ pub async fn create_room_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -211,6 +216,7 @@ pub async fn create_room_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -232,6 +238,7 @@ pub async fn create_room_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
@ -255,6 +262,7 @@ pub async fn create_room_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
@ -275,6 +283,7 @@ pub async fn create_room_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
@ -300,6 +309,7 @@ pub async fn create_room_route(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
@ -387,6 +397,7 @@ pub async fn upgrade_room_route(
|
||||||
&body.room_id,
|
&body.room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -429,6 +440,7 @@ pub async fn upgrade_room_route(
|
||||||
&replacement_room,
|
&replacement_room,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -452,6 +464,7 @@ pub async fn upgrade_room_route(
|
||||||
&replacement_room,
|
&replacement_room,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -487,6 +500,7 @@ pub async fn upgrade_room_route(
|
||||||
&replacement_room,
|
&replacement_room,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
@ -532,6 +546,7 @@ pub async fn upgrade_room_route(
|
||||||
&body.room_id,
|
&body.room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
|
|
@ -284,6 +284,7 @@ pub async fn send_state_event_for_key_helper(
|
||||||
&room_id,
|
&room_id,
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.sending,
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
pub mod account_data;
|
pub mod account_data;
|
||||||
|
pub mod admin;
|
||||||
pub mod globals;
|
pub mod globals;
|
||||||
pub mod key_backups;
|
pub mod key_backups;
|
||||||
pub mod media;
|
pub mod media;
|
||||||
|
@ -12,10 +13,14 @@ use crate::{Error, Result};
|
||||||
use directories::ProjectDirs;
|
use directories::ProjectDirs;
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use log::info;
|
use log::info;
|
||||||
use rocket::{futures, Config};
|
use rocket::{
|
||||||
|
futures::{self, channel::mpsc},
|
||||||
|
Config,
|
||||||
|
};
|
||||||
use ruma::{DeviceId, UserId};
|
use ruma::{DeviceId, UserId};
|
||||||
use std::{convert::TryFrom, fs::remove_dir_all};
|
use std::{convert::TryFrom, fs::remove_dir_all};
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct Database {
|
pub struct Database {
|
||||||
pub globals: globals::Globals,
|
pub globals: globals::Globals,
|
||||||
pub users: users::Users,
|
pub users: users::Users,
|
||||||
|
@ -26,6 +31,7 @@ pub struct Database {
|
||||||
pub key_backups: key_backups::KeyBackups,
|
pub key_backups: key_backups::KeyBackups,
|
||||||
pub transaction_ids: transaction_ids::TransactionIds,
|
pub transaction_ids: transaction_ids::TransactionIds,
|
||||||
pub sending: sending::Sending,
|
pub sending: sending::Sending,
|
||||||
|
pub admin: admin::Admin,
|
||||||
pub _db: sled::Db,
|
pub _db: sled::Db,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +86,9 @@ impl Database {
|
||||||
|
|
||||||
info!("Opened sled database at {}", path);
|
info!("Opened sled database at {}", path);
|
||||||
|
|
||||||
Ok(Self {
|
let (admin_sender, admin_receiver) = mpsc::unbounded();
|
||||||
|
|
||||||
|
let db = Self {
|
||||||
globals: globals::Globals::load(db.open_tree("global")?, config)?,
|
globals: globals::Globals::load(db.open_tree("global")?, config)?,
|
||||||
users: users::Users {
|
users: users::Users {
|
||||||
userid_password: db.open_tree("userid_password")?,
|
userid_password: db.open_tree("userid_password")?,
|
||||||
|
@ -152,8 +160,15 @@ impl Database {
|
||||||
servernamepduids: db.open_tree("servernamepduids")?,
|
servernamepduids: db.open_tree("servernamepduids")?,
|
||||||
servercurrentpdus: db.open_tree("servercurrentpdus")?,
|
servercurrentpdus: db.open_tree("servercurrentpdus")?,
|
||||||
},
|
},
|
||||||
|
admin: admin::Admin {
|
||||||
|
sender: admin_sender,
|
||||||
|
},
|
||||||
_db: db,
|
_db: db,
|
||||||
})
|
};
|
||||||
|
|
||||||
|
db.admin.start_handler(db.clone(), admin_receiver);
|
||||||
|
|
||||||
|
Ok(db)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn watch(&self, user_id: &UserId, device_id: &DeviceId) {
|
pub async fn watch(&self, user_id: &UserId, device_id: &DeviceId) {
|
||||||
|
|
|
@ -8,6 +8,7 @@ use serde::{de::DeserializeOwned, Serialize};
|
||||||
use sled::IVec;
|
use sled::IVec;
|
||||||
use std::{collections::HashMap, convert::TryFrom};
|
use std::{collections::HashMap, convert::TryFrom};
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct AccountData {
|
pub struct AccountData {
|
||||||
pub(super) roomuserdataid_accountdata: sled::Tree, // RoomUserDataId = Room + User + Count + Type
|
pub(super) roomuserdataid_accountdata: sled::Tree, // RoomUserDataId = Room + User + Count + Type
|
||||||
}
|
}
|
||||||
|
|
74
src/database/admin.rs
Normal file
74
src/database/admin.rs
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
use std::convert::{TryFrom, TryInto};
|
||||||
|
|
||||||
|
use crate::{pdu::PduBuilder, Error};
|
||||||
|
use rocket::futures::{channel::mpsc, stream::StreamExt};
|
||||||
|
use ruma::{events::room::message, events::EventType, UserId};
|
||||||
|
use tokio::select;
|
||||||
|
|
||||||
|
pub enum AdminCommand {
|
||||||
|
SendTextMessage(message::TextMessageEventContent),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct Admin {
|
||||||
|
pub sender: mpsc::UnboundedSender<AdminCommand>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Admin {
|
||||||
|
pub fn start_handler(
|
||||||
|
&self,
|
||||||
|
db: super::Database,
|
||||||
|
mut receiver: mpsc::UnboundedReceiver<AdminCommand>,
|
||||||
|
) {
|
||||||
|
tokio::spawn(async move {
|
||||||
|
// TODO: Use futures when we have long admin commands
|
||||||
|
//let mut futures = FuturesUnordered::new();
|
||||||
|
|
||||||
|
let conduit_user = UserId::try_from(format!("@conduit:{}", db.globals.server_name()))
|
||||||
|
.expect("@conduit:server_name is valid");
|
||||||
|
|
||||||
|
let conduit_room = db
|
||||||
|
.rooms
|
||||||
|
.id_from_alias(
|
||||||
|
&format!("#admins:{}", db.globals.server_name())
|
||||||
|
.try_into()
|
||||||
|
.expect("#admins:server_name is a valid room alias"),
|
||||||
|
)
|
||||||
|
.unwrap()
|
||||||
|
.ok_or_else(|| Error::BadConfig("Conduit instance does not have an #admins room."))
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
loop {
|
||||||
|
select! {
|
||||||
|
Some(event) = receiver.next() => {
|
||||||
|
match event {
|
||||||
|
AdminCommand::SendTextMessage(message) => {
|
||||||
|
println!("{:?}", message);
|
||||||
|
|
||||||
|
db.rooms.build_and_append_pdu(
|
||||||
|
PduBuilder {
|
||||||
|
event_type: EventType::RoomMessage,
|
||||||
|
content: serde_json::to_value(message).expect("event is valid, we just created it"),
|
||||||
|
unsigned: None,
|
||||||
|
state_key: None,
|
||||||
|
redacts: None,
|
||||||
|
},
|
||||||
|
&conduit_user,
|
||||||
|
&conduit_room,
|
||||||
|
&db.globals,
|
||||||
|
&db.sending,
|
||||||
|
&db.admin,
|
||||||
|
&db.account_data,
|
||||||
|
).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn send(&self, command: AdminCommand) {
|
||||||
|
self.sender.unbounded_send(command).unwrap()
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,6 +8,7 @@ use ruma::{
|
||||||
};
|
};
|
||||||
use std::{collections::BTreeMap, convert::TryFrom};
|
use std::{collections::BTreeMap, convert::TryFrom};
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct KeyBackups {
|
pub struct KeyBackups {
|
||||||
pub(super) backupid_algorithm: sled::Tree, // BackupId = UserId + Version(Count)
|
pub(super) backupid_algorithm: sled::Tree, // BackupId = UserId + Version(Count)
|
||||||
pub(super) backupid_etag: sled::Tree, // BackupId = UserId + Version(Count)
|
pub(super) backupid_etag: sled::Tree, // BackupId = UserId + Version(Count)
|
||||||
|
|
|
@ -9,6 +9,7 @@ pub struct FileMeta {
|
||||||
pub file: Vec<u8>,
|
pub file: Vec<u8>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct Media {
|
pub struct Media {
|
||||||
pub(super) mediaid_file: sled::Tree, // MediaId = MXC + WidthHeight + Filename + ContentType
|
pub(super) mediaid_file: sled::Tree, // MediaId = MXC + WidthHeight + Filename + ContentType
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,8 @@ use std::{
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use super::admin::AdminCommand;
|
||||||
|
|
||||||
/// The unique identifier of each state group.
|
/// The unique identifier of each state group.
|
||||||
///
|
///
|
||||||
/// This is created when a state group is added to the database by
|
/// This is created when a state group is added to the database by
|
||||||
|
@ -443,7 +445,7 @@ impl Rooms {
|
||||||
pdu_id: IVec,
|
pdu_id: IVec,
|
||||||
globals: &super::globals::Globals,
|
globals: &super::globals::Globals,
|
||||||
account_data: &super::account_data::AccountData,
|
account_data: &super::account_data::AccountData,
|
||||||
sending: &super::sending::Sending,
|
admin: &super::admin::Admin,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
self.replace_pdu_leaves(&pdu.room_id, &pdu.event_id)?;
|
self.replace_pdu_leaves(&pdu.room_id, &pdu.event_id)?;
|
||||||
|
|
||||||
|
@ -514,28 +516,13 @@ impl Rooms {
|
||||||
if let Some(command) = parts.next() {
|
if let Some(command) = parts.next() {
|
||||||
let args = parts.collect::<Vec<_>>();
|
let args = parts.collect::<Vec<_>>();
|
||||||
|
|
||||||
self.build_and_append_pdu(
|
admin.send(AdminCommand::SendTextMessage(
|
||||||
PduBuilder {
|
|
||||||
event_type: EventType::RoomMessage,
|
|
||||||
content: serde_json::to_value(
|
|
||||||
message::TextMessageEventContent {
|
message::TextMessageEventContent {
|
||||||
body: format!("Command: {}, Args: {:?}", command, args),
|
body: format!("Command: {}, Args: {:?}", command, args),
|
||||||
formatted: None,
|
formatted: None,
|
||||||
relates_to: None,
|
relates_to: None,
|
||||||
},
|
},
|
||||||
)
|
));
|
||||||
.expect("event is valid, we just created it"),
|
|
||||||
unsigned: None,
|
|
||||||
state_key: None,
|
|
||||||
redacts: None,
|
|
||||||
},
|
|
||||||
&UserId::try_from(format!("@conduit:{}", globals.server_name()))
|
|
||||||
.expect("@conduit:server_name is valid"),
|
|
||||||
&pdu.room_id,
|
|
||||||
&globals,
|
|
||||||
&sending,
|
|
||||||
&account_data,
|
|
||||||
)?;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -612,6 +599,7 @@ impl Rooms {
|
||||||
room_id: &RoomId,
|
room_id: &RoomId,
|
||||||
globals: &super::globals::Globals,
|
globals: &super::globals::Globals,
|
||||||
sending: &super::sending::Sending,
|
sending: &super::sending::Sending,
|
||||||
|
admin: &super::admin::Admin,
|
||||||
account_data: &super::account_data::AccountData,
|
account_data: &super::account_data::AccountData,
|
||||||
) -> Result<EventId> {
|
) -> Result<EventId> {
|
||||||
let PduBuilder {
|
let PduBuilder {
|
||||||
|
@ -849,7 +837,7 @@ impl Rooms {
|
||||||
pdu_id.clone().into(),
|
pdu_id.clone().into(),
|
||||||
globals,
|
globals,
|
||||||
account_data,
|
account_data,
|
||||||
sending,
|
admin,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
for server in self
|
for server in self
|
||||||
|
|
|
@ -8,6 +8,7 @@ use ruma::{api::federation, ServerName};
|
||||||
use sled::IVec;
|
use sled::IVec;
|
||||||
use tokio::select;
|
use tokio::select;
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct Sending {
|
pub struct Sending {
|
||||||
/// The state for a given state hash.
|
/// The state for a given state hash.
|
||||||
pub(super) servernamepduids: sled::Tree, // ServernamePduId = ServerName + PduId
|
pub(super) servernamepduids: sled::Tree, // ServernamePduId = ServerName + PduId
|
||||||
|
@ -54,7 +55,7 @@ impl Sending {
|
||||||
))
|
))
|
||||||
})
|
})
|
||||||
.filter_map(|r| r.ok())
|
.filter_map(|r| r.ok())
|
||||||
.filter(|pdu| !pdu.is_empty()) // Skip reservation key
|
.filter(|(_, pdu)| !pdu.is_empty()) // Skip reservation key
|
||||||
.take(50)
|
.take(50)
|
||||||
// This should not contain more than 50 anyway
|
// This should not contain more than 50 anyway
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,6 +2,7 @@ use crate::Result;
|
||||||
use ruma::{DeviceId, UserId};
|
use ruma::{DeviceId, UserId};
|
||||||
use sled::IVec;
|
use sled::IVec;
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct TransactionIds {
|
pub struct TransactionIds {
|
||||||
pub(super) userdevicetxnid_response: sled::Tree, // Response can be empty (/sendToDevice) or the event id (/send)
|
pub(super) userdevicetxnid_response: sled::Tree, // Response can be empty (/sendToDevice) or the event id (/send)
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ use ruma::{
|
||||||
DeviceId, UserId,
|
DeviceId, UserId,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct Uiaa {
|
pub struct Uiaa {
|
||||||
pub(super) userdeviceid_uiaainfo: sled::Tree, // User-interactive authentication
|
pub(super) userdeviceid_uiaainfo: sled::Tree, // User-interactive authentication
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ use ruma::{
|
||||||
};
|
};
|
||||||
use std::{collections::BTreeMap, convert::TryFrom, mem, time::SystemTime};
|
use std::{collections::BTreeMap, convert::TryFrom, mem, time::SystemTime};
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct Users {
|
pub struct Users {
|
||||||
pub(super) userid_password: sled::Tree,
|
pub(super) userid_password: sled::Tree,
|
||||||
pub(super) userid_displayname: sled::Tree,
|
pub(super) userid_displayname: sled::Tree,
|
||||||
|
|
|
@ -404,7 +404,7 @@ pub fn send_transaction_message_route<'a>(
|
||||||
pdu_id.clone().into(),
|
pdu_id.clone().into(),
|
||||||
&db.globals,
|
&db.globals,
|
||||||
&db.account_data,
|
&db.account_data,
|
||||||
&db.sending,
|
&db.admin,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue