[Add] Call admins are now in call metadata and not user metadata
This commit is contained in:
parent
44c24e1e2d
commit
ed8f482e5a
5 changed files with 109 additions and 15 deletions
54
src/calls/call_group.rs
Normal file → Executable file
54
src/calls/call_group.rs
Normal file → Executable file
|
|
@ -1,3 +1,4 @@
|
|||
use serde_json::Map;
|
||||
use ttp_core::{CommunicationType, CommunicationValue, DataTypes, DataValue};
|
||||
|
||||
use std::{collections::BTreeMap, env, sync::Arc, time::Duration};
|
||||
|
|
@ -43,12 +44,59 @@ impl CallGroup {
|
|||
*self.anonymous_joining.read().await
|
||||
}
|
||||
|
||||
pub async fn set_anonymous_joining(&self, enable: bool) {
|
||||
*self.anonymous_joining.write().await = enable;
|
||||
pub async fn update_admins(&self) {
|
||||
let call_metadata = match call_util::get_room_metadata(self.call_id).await {
|
||||
Ok(metadata) => metadata,
|
||||
Err(_) => "{}".to_string(),
|
||||
};
|
||||
let call_metadata: serde_json::Value = match serde_json::from_str(&call_metadata) {
|
||||
Ok(json) => json,
|
||||
Err(_) => serde_json::Value::Object(Map::new()),
|
||||
};
|
||||
let mut call_metadata = match call_metadata.as_object() {
|
||||
Some(metadata) => metadata.clone(),
|
||||
None => Map::new(),
|
||||
};
|
||||
|
||||
let admin_ids = self
|
||||
.members
|
||||
.read()
|
||||
.await
|
||||
.iter()
|
||||
.filter(|member| member.has_admin)
|
||||
.map(|admin| admin.user_id)
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
call_metadata.insert("admins".to_string(), serde_json::json!(admin_ids));
|
||||
|
||||
let _ = call_util::set_room_metadata(
|
||||
self.call_id,
|
||||
format!("{{\"anonymous_joining\": \"{}\"}}", enable),
|
||||
serde_json::Value::Object(call_metadata).to_string(),
|
||||
)
|
||||
.await;
|
||||
}
|
||||
|
||||
pub async fn set_anonymous_joining(&self, enable: bool) {
|
||||
*self.anonymous_joining.write().await = enable;
|
||||
|
||||
let call_metadata = match call_util::get_room_metadata(self.call_id).await {
|
||||
Ok(metadata) => metadata,
|
||||
Err(_) => "{}".to_string(),
|
||||
};
|
||||
let call_metadata: serde_json::Value = match serde_json::from_str(&call_metadata) {
|
||||
Ok(json) => json,
|
||||
Err(_) => serde_json::Value::Object(Map::new()),
|
||||
};
|
||||
let mut call_metadata = match call_metadata.as_object() {
|
||||
Some(metadata) => metadata.clone(),
|
||||
None => Map::new(),
|
||||
};
|
||||
|
||||
call_metadata.insert("anonymous_joining".to_string(), serde_json::json!(enable));
|
||||
|
||||
let _ = call_util::set_room_metadata(
|
||||
self.call_id,
|
||||
serde_json::Value::Object(call_metadata).to_string(),
|
||||
)
|
||||
.await;
|
||||
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ pub async fn get_call_token(user_id: u64, call_id: Uuid) -> Option<String> {
|
|||
|
||||
let caller = Arc::new(Caller::new(user_id, call_id, true));
|
||||
let call_group = CallGroup::new(call_id, caller.clone());
|
||||
call_group.update_admins().await;
|
||||
|
||||
CALL_GROUPS.insert(call_id, Arc::new(call_group));
|
||||
|
||||
|
|
|
|||
|
|
@ -42,11 +42,11 @@ pub fn create_token(user_id: u64, call_id: Uuid, has_admin: bool) -> Result<Stri
|
|||
.with_identity(&user_id.to_string())
|
||||
.with_grants(access_token::VideoGrants {
|
||||
room_join: true,
|
||||
can_update_own_metadata: true,
|
||||
room_admin: has_admin,
|
||||
room: call_id.to_string(),
|
||||
..Default::default()
|
||||
})
|
||||
.with_metadata(&format!("{{\"isAdmin\":{}}}", has_admin))
|
||||
.to_jwt();
|
||||
if let Ok(token) = token {
|
||||
Ok(token)
|
||||
|
|
|
|||
Loading…
Reference in a new issue