Files
ojrc/rc_auth/src/robocraft/username.rs
T

25 lines
1.2 KiB
Rust
Raw Normal View History

use oj_rc_core::UserAuthenticator;
use actix_web::{post, web::{Data, Json}};
#[post("/authenticate/robocraft/game")]
pub async fn user_password_auth(body: Json<libfj::robocraft::EmailUserAuthenticationPayload>, config: Data<super::RcConfig>) -> Result<Json<libfj::robocraft::AuthenticationResponseInfo>, super::ErrorTy> {
2025-04-01 19:38:03 -04:00
log::info!("Authenticating {} user {}", body.target, body.display_name);
let payload = libfj::robocraft::TokenPayload {
2025-04-01 19:38:03 -04:00
public_id: body.display_name.clone(),
display_name: body.display_name.clone(),
robocraft_name: body.display_name.clone(),
email_address: body.email_address.clone(),
email_verified: true,
flags: Vec::new(),
};
let user_info = oj_rc_core::persist::user::UserInfo {
2025-04-01 19:38:03 -04:00
payload,
extra: oj_rc_core::persist::user::ExtraUserInfo::Username { password: body.password.clone() },
2025-04-01 19:38:03 -04:00
};
let response = config.account_provider.login(user_info).await
2025-04-01 19:38:03 -04:00
.map_err(|e| {
log::error!("Failed to authenticate {} user {}: {}", body.target, body.display_name, e.message);
super::ErrorTy::from_err(e)
2025-04-01 19:38:03 -04:00
})?;
Ok(Json(response.response))
}