summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/api/client_server/session.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/api/client_server/session.rs b/src/api/client_server/session.rs
index 64c0072..b3328e4 100644
--- a/src/api/client_server/session.rs
+++ b/src/api/client_server/session.rs
@@ -26,6 +26,7 @@ pub async fn get_login_types_route(
) -> Result<get_login_types::v3::Response> {
Ok(get_login_types::v3::Response::new(vec![
get_login_types::v3::LoginType::Password(Default::default()),
+ get_login_types::v3::LoginType::ApplicationService(Default::default()),
]))
}
@@ -103,6 +104,25 @@ pub async fn login_route(body: Ruma<login::v3::Request>) -> Result<login::v3::Re
));
}
}
+ login::v3::LoginInfo::ApplicationService(login::v3::ApplicationService { identifier }) => {
+ if !body.from_appservice {
+ return Err(Error::BadRequest(
+ ErrorKind::Forbidden,
+ "Forbidden login type."
+ ));
+ };
+ let username = if let UserIdentifier::UserIdOrLocalpart(user_id) = identifier {
+ user_id.to_lowercase()
+ } else {
+ return Err(Error::BadRequest(ErrorKind::Forbidden, "Bad login type."));
+ };
+ let user_id =
+ UserId::parse_with_server_name(username, services().globals.server_name())
+ .map_err(|_| {
+ Error::BadRequest(ErrorKind::InvalidUsername, "Username is invalid.")
+ })?;
+ user_id
+ }
_ => {
return Err(Error::BadRequest(
ErrorKind::Unknown,