| 218 | } |
| 219 | |
| 220 | async fn update_password( |
| 221 | &self, |
| 222 | request: Request<api::UpdateUserPasswordRequest>, |
| 223 | ) -> Result<Response<()>, Status> { |
| 224 | let req = request.get_ref(); |
| 225 | let user_id = Uuid::from_str(&req.user_id).map_err(|e| e.status())?; |
| 226 | self.validator |
| 227 | .validate( |
| 228 | request.extensions(), |
| 229 | validator::ValidateUserAccess::new(validator::Flag::UpdateProfile, user_id), |
| 230 | ) |
| 231 | .await?; |
| 232 | |
| 233 | // get |
| 234 | let mut u = user::get(&user_id).await.map_err(|e| e.status())?; |
| 235 | |
| 236 | // set password |
| 237 | u.updated_at = Utc::now(); |
| 238 | u.set_password_hash(&req.password).map_err(|e| e.status())?; |
| 239 | |
| 240 | // update |
| 241 | let _ = user::set_password_hash(&u.id, &u.password_hash) |
| 242 | .await |
| 243 | .map_err(|e| e.status())?; |
| 244 | |
| 245 | let mut resp = Response::new(()); |
| 246 | resp.metadata_mut() |
| 247 | .insert("x-log-user_id", req.user_id.parse().unwrap()); |
| 248 | |
| 249 | Ok(resp) |
| 250 | } |
| 251 | } |
| 252 | |
| 253 | #[cfg(test)] |