mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-18 13:40:55 -04:00
feat(appservice)!: Allow specifying device id for registration
This commit is contained in:
committed by
Damir Jelić
parent
41de3e0af8
commit
09c56ea057
@@ -27,7 +27,7 @@ pub async fn handle_room_member(
|
||||
trace!("not an appservice user: {}", event.state_key);
|
||||
} else if let MembershipState::Invite = event.content.membership {
|
||||
let user_id = UserId::parse(event.state_key.as_str())?;
|
||||
if let Err(error) = appservice.register_virtual_user(user_id.localpart()).await {
|
||||
if let Err(error) = appservice.register_virtual_user(user_id.localpart(), None).await {
|
||||
error_if_user_not_in_use(error)?;
|
||||
}
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ use ruma::{
|
||||
},
|
||||
assign,
|
||||
events::{room::member::MembershipState, AnyRoomEvent, AnyStateEvent},
|
||||
IdParseError, OwnedRoomId, OwnedServerName,
|
||||
DeviceId, IdParseError, OwnedRoomId, OwnedServerName,
|
||||
};
|
||||
use serde::Deserialize;
|
||||
use tokio::task::JoinHandle;
|
||||
@@ -305,18 +305,23 @@ impl AppService {
|
||||
/// # Returns
|
||||
/// This function may return a UIAA response, which should be checked for
|
||||
/// with [`Error::uiaa_response()`].
|
||||
pub async fn register_virtual_user(&self, localpart: impl AsRef<str>) -> Result<()> {
|
||||
if self.is_user_registered(localpart.as_ref()).await? {
|
||||
pub async fn register_virtual_user<'a>(
|
||||
&self,
|
||||
localpart: &'a str,
|
||||
device_id: Option<&'a DeviceId>,
|
||||
) -> Result<()> {
|
||||
if self.is_user_registered(localpart).await? {
|
||||
return Ok(());
|
||||
}
|
||||
let request = assign!(register::v3::Request::new(), {
|
||||
username: Some(localpart.as_ref()),
|
||||
username: Some(localpart),
|
||||
login_type: Some(®ister::LoginType::ApplicationService),
|
||||
device_id,
|
||||
});
|
||||
|
||||
let client = self.virtual_user(None).await?;
|
||||
client.register(request).await?;
|
||||
self.set_user_registered(localpart.as_ref()).await?;
|
||||
self.set_user_registered(localpart).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ async fn test_register_virtual_user() -> Result<()> {
|
||||
.mount(&server)
|
||||
.await;
|
||||
|
||||
appservice.register_virtual_user(localpart).await?;
|
||||
appservice.register_virtual_user(localpart, None).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user