use entities::{prelude::User, user}; use poem_ext::db::DbTxn; use sea_orm::{ColumnTrait, EntityTrait, QueryFilter}; use serde::Serializer; use tracing::error; use crate::{ authentication::Authentication, subsonic::{Error, SubsonicResponse}, }; pub async fn verify_user( conn: DbTxn, auth: Authentication, ) -> Result { let user = User::find() .filter(user::Column::Name.eq(&auth.username)) .one(&*conn) .await; match user { Ok(Some(u)) => { let ours = md5::compute(format!("{}{}", u.password, auth.salt)); let ours = format!("{ours:x}"); if ours == auth.token { Ok(u) } else { Err(SubsonicResponse::new_error(Error::WrongUsernameOrPassword( None, ))) } } Ok(None) => Err(SubsonicResponse::new_error(Error::WrongUsernameOrPassword( None, ))), Err(e) => { error!("Error getting user: {e}"); Err(SubsonicResponse::new_error(Error::WrongUsernameOrPassword( None, ))) } } } #[allow(clippy::trivially_copy_pass_by_ref)] pub fn album_id(id: &i64, s: S) -> Result { let str = format!("al-{id}"); s.serialize_str(&str) }