|
|
|
@ -1,56 +1,47 @@
@@ -1,56 +1,47 @@
|
|
|
|
|
use domain_types::{LayerPeerEvent, DOMAIN_ID}; |
|
|
|
|
use esse_primitives::id_to_str; |
|
|
|
|
use std::sync::Arc; |
|
|
|
|
use tdn::types::{ |
|
|
|
|
group::GroupId, |
|
|
|
|
primitive::{HandleResult, PeerId}, |
|
|
|
|
message::SendType, |
|
|
|
|
primitives::{HandleResult, PeerId}, |
|
|
|
|
rpc::{json, rpc_response, RpcError, RpcHandler, RpcParam}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
use domain_types::PeerEvent; |
|
|
|
|
use crate::global::Global; |
|
|
|
|
use crate::storage::domain_db; |
|
|
|
|
|
|
|
|
|
use super::{ |
|
|
|
|
add_layer, |
|
|
|
|
models::{Name, Provider}, |
|
|
|
|
}; |
|
|
|
|
use crate::rpc::RpcState; |
|
|
|
|
use super::models::{Name, Provider}; |
|
|
|
|
|
|
|
|
|
#[inline] |
|
|
|
|
pub(crate) fn add_provider(mgid: GroupId, provider: &Provider) -> RpcParam { |
|
|
|
|
rpc_response(0, "domain-provider-add", json!(provider.to_rpc()), mgid) |
|
|
|
|
pub(crate) fn add_provider(provider: &Provider) -> RpcParam { |
|
|
|
|
rpc_response(0, "domain-provider-add", json!(provider.to_rpc())) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[inline] |
|
|
|
|
pub(crate) fn register_success(mgid: GroupId, name: &Name) -> RpcParam { |
|
|
|
|
rpc_response(0, "domain-register-success", json!(name.to_rpc()), mgid) |
|
|
|
|
pub(crate) fn register_success(name: &Name) -> RpcParam { |
|
|
|
|
rpc_response(0, "domain-register-success", json!(name.to_rpc())) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[inline] |
|
|
|
|
pub(crate) fn register_failure(mgid: GroupId, name: &str) -> RpcParam { |
|
|
|
|
rpc_response(0, "domain-register-failure", json!([name]), mgid) |
|
|
|
|
pub(crate) fn register_failure(name: &str) -> RpcParam { |
|
|
|
|
rpc_response(0, "domain-register-failure", json!([name])) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[inline] |
|
|
|
|
pub(crate) fn domain_list(mgid: GroupId, providers: &[Provider], names: &[Name]) -> RpcParam { |
|
|
|
|
pub(crate) fn domain_list(providers: &[Provider], names: &[Name]) -> RpcParam { |
|
|
|
|
let providers: Vec<RpcParam> = providers.iter().map(|p| p.to_rpc()).collect(); |
|
|
|
|
let names: Vec<RpcParam> = names.iter().map(|p| p.to_rpc()).collect(); |
|
|
|
|
rpc_response(0, "domain-list", json!([providers, names]), mgid) |
|
|
|
|
rpc_response(0, "domain-list", json!([providers, names])) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[inline] |
|
|
|
|
pub(crate) fn search_result( |
|
|
|
|
mgid: GroupId, |
|
|
|
|
name: &str, |
|
|
|
|
gid: &GroupId, |
|
|
|
|
addr: &PeerId, |
|
|
|
|
bio: &str, |
|
|
|
|
avatar: &Vec<u8>, |
|
|
|
|
) -> RpcParam { |
|
|
|
|
pub(crate) fn search_result(pid: &PeerId, name: &str, bio: &str, avatar: &Vec<u8>) -> RpcParam { |
|
|
|
|
rpc_response( |
|
|
|
|
0, |
|
|
|
|
"domain-search", |
|
|
|
|
json!([ |
|
|
|
|
name, |
|
|
|
|
gid.to_hex(), |
|
|
|
|
addr.to_hex(), |
|
|
|
|
id_to_str(pid), |
|
|
|
|
bio, |
|
|
|
|
if avatar.len() > 0 { |
|
|
|
|
base64::encode(avatar) |
|
|
|
@ -58,20 +49,21 @@ pub(crate) fn search_result(
@@ -58,20 +49,21 @@ pub(crate) fn search_result(
|
|
|
|
|
"".to_owned() |
|
|
|
|
} |
|
|
|
|
]), |
|
|
|
|
mgid, |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[inline] |
|
|
|
|
pub(crate) fn search_none(mgid: GroupId, name: &str) -> RpcParam { |
|
|
|
|
rpc_response(0, "domain-search", json!([name]), mgid) |
|
|
|
|
pub(crate) fn search_none(name: &str) -> RpcParam { |
|
|
|
|
rpc_response(0, "domain-search", json!([name])) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) { |
|
|
|
|
pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<Global>) { |
|
|
|
|
handler.add_method( |
|
|
|
|
"domain-list", |
|
|
|
|
|gid: GroupId, _params: Vec<RpcParam>, state: Arc<RpcState>| async move { |
|
|
|
|
let db = state.group.read().await.domain_db(&gid)?; |
|
|
|
|
|_params: Vec<RpcParam>, state: Arc<Global>| async move { |
|
|
|
|
let pid = state.pid().await; |
|
|
|
|
let db_key = state.group.read().await.db_key(&pid)?; |
|
|
|
|
let db = domain_db(&state.base, &pid, &db_key)?; |
|
|
|
|
|
|
|
|
|
// list providers.
|
|
|
|
|
let providers: Vec<RpcParam> = |
|
|
|
@ -86,25 +78,33 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
@@ -86,25 +78,33 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
|
|
|
|
|
|
|
|
|
|
handler.add_method( |
|
|
|
|
"domain-provider-add", |
|
|
|
|
|gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| async move { |
|
|
|
|
|params: Vec<RpcParam>, state: Arc<Global>| async move { |
|
|
|
|
let provider = PeerId::from_hex(params[0].as_str().ok_or(RpcError::ParseError)?)?; |
|
|
|
|
|
|
|
|
|
let mut results = HandleResult::new(); |
|
|
|
|
let db = state.group.read().await.domain_db(&gid)?; |
|
|
|
|
let pid = state.pid().await; |
|
|
|
|
let db_key = state.group.read().await.db_key(&pid)?; |
|
|
|
|
let db = domain_db(&state.base, &pid, &db_key)?; |
|
|
|
|
|
|
|
|
|
let mut p = Provider::prepare(provider); |
|
|
|
|
p.insert(&db)?; |
|
|
|
|
|
|
|
|
|
add_layer(&mut results, provider, PeerEvent::Check, gid)?; |
|
|
|
|
let data = bincode::serialize(&LayerPeerEvent::Check)?; |
|
|
|
|
let msg = SendType::Event(0, provider, data); |
|
|
|
|
results.layers.push((DOMAIN_ID, msg)); |
|
|
|
|
Ok(results) |
|
|
|
|
}, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
handler.add_method( |
|
|
|
|
"domain-provider-default", |
|
|
|
|
|gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| async move { |
|
|
|
|
|params: Vec<RpcParam>, state: Arc<Global>| async move { |
|
|
|
|
let id = params[0].as_i64().ok_or(RpcError::ParseError)?; |
|
|
|
|
|
|
|
|
|
let db = state.group.read().await.domain_db(&gid)?; |
|
|
|
|
let pid = state.pid().await; |
|
|
|
|
let db_key = state.group.read().await.db_key(&pid)?; |
|
|
|
|
let db = domain_db(&state.base, &pid, &db_key)?; |
|
|
|
|
|
|
|
|
|
let provider = Provider::get(&db, &id)?; |
|
|
|
|
if let Ok(default) = Provider::get_default(&db) { |
|
|
|
|
if default.id == provider.id { |
|
|
|
@ -120,10 +120,13 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
@@ -120,10 +120,13 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
|
|
|
|
|
|
|
|
|
|
handler.add_method( |
|
|
|
|
"domain-provider-remove", |
|
|
|
|
|gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| async move { |
|
|
|
|
|params: Vec<RpcParam>, state: Arc<Global>| async move { |
|
|
|
|
let id = params[0].as_i64().ok_or(RpcError::ParseError)?; |
|
|
|
|
|
|
|
|
|
let db = state.group.read().await.domain_db(&gid)?; |
|
|
|
|
let pid = state.pid().await; |
|
|
|
|
let db_key = state.group.read().await.db_key(&pid)?; |
|
|
|
|
let db = domain_db(&state.base, &pid, &db_key)?; |
|
|
|
|
|
|
|
|
|
let names = Name::get_by_provider(&db, &id)?; |
|
|
|
|
if names.len() == 0 { |
|
|
|
|
Provider::delete(&db, &id)?; |
|
|
|
@ -135,71 +138,80 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
@@ -135,71 +138,80 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
|
|
|
|
|
|
|
|
|
|
handler.add_method( |
|
|
|
|
"domain-register", |
|
|
|
|
|gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| async move { |
|
|
|
|
|params: Vec<RpcParam>, state: Arc<Global>| async move { |
|
|
|
|
let provider = params[0].as_i64().ok_or(RpcError::ParseError)?; |
|
|
|
|
let addr = PeerId::from_hex(params[1].as_str().ok_or(RpcError::ParseError)?)?; |
|
|
|
|
let name = params[2].as_str().ok_or(RpcError::ParseError)?.to_string(); |
|
|
|
|
let bio = params[3].as_str().ok_or(RpcError::ParseError)?.to_string(); |
|
|
|
|
|
|
|
|
|
let me = state.group.read().await.clone_user(&gid)?; |
|
|
|
|
|
|
|
|
|
// save to db.
|
|
|
|
|
let mut results = HandleResult::new(); |
|
|
|
|
let db = state.group.read().await.domain_db(&gid)?; |
|
|
|
|
let pid = state.pid().await; |
|
|
|
|
let db_key = state.group.read().await.db_key(&pid)?; |
|
|
|
|
let db = domain_db(&state.base, &pid, &db_key)?; |
|
|
|
|
|
|
|
|
|
let me = state.group.read().await.clone_user(&pid)?; |
|
|
|
|
|
|
|
|
|
let mut u = Name::prepare(name, bio, provider); |
|
|
|
|
u.insert(&db)?; |
|
|
|
|
|
|
|
|
|
// send to server.
|
|
|
|
|
let event = PeerEvent::Register(u.name, u.bio, me.avatar); |
|
|
|
|
add_layer(&mut results, addr, event, gid)?; |
|
|
|
|
let data = bincode::serialize(&LayerPeerEvent::Register(u.name, u.bio, me.avatar))?; |
|
|
|
|
let msg = SendType::Event(0, addr, data); |
|
|
|
|
results.layers.push((DOMAIN_ID, msg)); |
|
|
|
|
Ok(results) |
|
|
|
|
}, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
handler.add_method( |
|
|
|
|
"domain-active", |
|
|
|
|
|gid: GroupId, params: Vec<RpcParam>, _state: Arc<RpcState>| async move { |
|
|
|
|
|params: Vec<RpcParam>, _state: Arc<Global>| async move { |
|
|
|
|
let name = params[0].as_str().ok_or(RpcError::ParseError)?.to_owned(); |
|
|
|
|
let provider = PeerId::from_hex(params[1].as_str().ok_or(RpcError::ParseError)?)?; |
|
|
|
|
let active = params[2].as_bool().ok_or(RpcError::ParseError)?; |
|
|
|
|
|
|
|
|
|
let mut results = HandleResult::new(); |
|
|
|
|
let event = if active { |
|
|
|
|
PeerEvent::Active(name) |
|
|
|
|
LayerPeerEvent::Active(name) |
|
|
|
|
} else { |
|
|
|
|
PeerEvent::Suspend(name) |
|
|
|
|
LayerPeerEvent::Suspend(name) |
|
|
|
|
}; |
|
|
|
|
add_layer(&mut results, provider, event, gid)?; |
|
|
|
|
|
|
|
|
|
let data = bincode::serialize(&event)?; |
|
|
|
|
let msg = SendType::Event(0, provider, data); |
|
|
|
|
results.layers.push((DOMAIN_ID, msg)); |
|
|
|
|
Ok(results) |
|
|
|
|
}, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
handler.add_method( |
|
|
|
|
"domain-remove", |
|
|
|
|
|gid: GroupId, params: Vec<RpcParam>, _state: Arc<RpcState>| async move { |
|
|
|
|
|params: Vec<RpcParam>, _state: Arc<Global>| async move { |
|
|
|
|
let name = params[0].as_str().ok_or(RpcError::ParseError)?.to_owned(); |
|
|
|
|
let provider = PeerId::from_hex(params[1].as_str().ok_or(RpcError::ParseError)?)?; |
|
|
|
|
|
|
|
|
|
let mut results = HandleResult::new(); |
|
|
|
|
let event = PeerEvent::Delete(name); |
|
|
|
|
add_layer(&mut results, provider, event, gid)?; |
|
|
|
|
|
|
|
|
|
let event = LayerPeerEvent::Delete(name); |
|
|
|
|
let data = bincode::serialize(&event)?; |
|
|
|
|
let msg = SendType::Event(0, provider, data); |
|
|
|
|
results.layers.push((DOMAIN_ID, msg)); |
|
|
|
|
Ok(results) |
|
|
|
|
}, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
handler.add_method( |
|
|
|
|
"domain-search", |
|
|
|
|
|gid: GroupId, params: Vec<RpcParam>, _state: Arc<RpcState>| async move { |
|
|
|
|
|params: Vec<RpcParam>, _state: Arc<Global>| async move { |
|
|
|
|
let addr = PeerId::from_hex(params[0].as_str().ok_or(RpcError::ParseError)?)?; |
|
|
|
|
let name = params[1].as_str().ok_or(RpcError::ParseError)?.to_owned(); |
|
|
|
|
|
|
|
|
|
let mut results = HandleResult::new(); |
|
|
|
|
|
|
|
|
|
// send to server.
|
|
|
|
|
let event = PeerEvent::Search(name); |
|
|
|
|
add_layer(&mut results, addr, event, gid)?; |
|
|
|
|
let event = LayerPeerEvent::Search(name); |
|
|
|
|
let data = bincode::serialize(&event)?; |
|
|
|
|
let msg = SendType::Event(0, addr, data); |
|
|
|
|
results.layers.push((DOMAIN_ID, msg)); |
|
|
|
|
Ok(results) |
|
|
|
|
}, |
|
|
|
|
); |
|
|
|
|