diff --git a/src/api/client_server/session.rs b/src/api/client_server/session.rs index 64c00720..b3328e48 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 { 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) -> Result { + 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,