Skip to main content

tuwunel_api_client/session/
jwt.rs

1use ruma::{
2	OwnedUserId,
3	api::client::session::login::v3::{Request, Token},
4};
5use tuwunel_core::{Err, Result};
6use tuwunel_service::Services;
7
8use crate::{Ruma, router::validate_user};
9
10pub(super) async fn handle_login(
11	services: &Services,
12	_body: &Ruma<Request>,
13	info: &Token,
14) -> Result<OwnedUserId> {
15	let user_id = validate_user(services, &info.token)?;
16
17	if !services.users.exists(&user_id).await {
18		let config = &services.config.jwt;
19
20		if !config.register_user {
21			return Err!(Request(NotFound("User {user_id} is not registered on this server.")));
22		}
23
24		services
25			.users
26			.create(&user_id, Some("*"), Some("jwt"))
27			.await?;
28	}
29
30	Ok(user_id)
31}