You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
2.3 KiB

4 years ago
  1. use actix_web::{get, post, web, Error, HttpResponse};
  2. use crate::actions;
  3. use crate::models;
  4. use crate::types::DbPool;
  5. /// Finds user by UID.
  6. #[get("/api/authzd/users/get/{user_id}")]
  7. pub async fn get_user(
  8. pool: web::Data<DbPool>,
  9. user_uid: web::Path<i32>,
  10. ) -> Result<HttpResponse, Error> {
  11. let user_uid = user_uid.into_inner();
  12. // use web::block to offload blocking Diesel code without blocking server thread
  13. let maybe_user = web::block(move || {
  14. let conn = pool.get().map_err(|e| e.to_string())?;
  15. actions::find_user_by_uid(user_uid.into(), &conn).map_err(|e| e.to_string())
  16. })
  17. .await
  18. .map_err(|e| {
  19. error!("{}", e);
  20. HttpResponse::InternalServerError().finish()
  21. })?;
  22. if let Some(user) = maybe_user {
  23. Ok(HttpResponse::Ok().json(user))
  24. } else {
  25. let res = HttpResponse::NotFound().body(format!("No user found with uid: {}", user_uid));
  26. Ok(res)
  27. }
  28. }
  29. #[get("/api/authzd/users/get")]
  30. pub async fn get_all_users(pool: web::Data<DbPool>) -> Result<HttpResponse, Error> {
  31. // use web::block to offload blocking Diesel code without blocking server thread
  32. let maybe_users = web::block(move || {
  33. let conn = pool.get().map_err(|e| e.to_string())?;
  34. actions::get_all(&conn).map_err(|e| e.to_string())
  35. })
  36. .await
  37. .map_err(|e| {
  38. eprintln!("{}", e);
  39. HttpResponse::InternalServerError().finish()
  40. })?;
  41. if let Some(users) = maybe_users {
  42. Ok(HttpResponse::Ok().json(users))
  43. } else {
  44. let res = HttpResponse::NotFound().body(format!("No users available"));
  45. Ok(res)
  46. }
  47. // Ok(HttpResponse::Ok().json(users))
  48. }
  49. /// Inserts new user with name defined in form.
  50. #[post("/api/authzd/users/post")]
  51. pub async fn add_user(
  52. pool: web::Data<DbPool>,
  53. form: web::Json<models::NewUser>,
  54. ) -> Result<HttpResponse, Error> {
  55. // use web::block to offload blocking Diesel code without blocking server thread
  56. let user = web::block(move || {
  57. let conn = pool.get().map_err(|e| e.to_string())?;
  58. actions::insert_new_user(&form, &conn).map_err(|e| e.to_string())
  59. })
  60. .await
  61. .map(|user| {
  62. debug!("{:?}", user);
  63. Ok(HttpResponse::Ok().json(user))
  64. })
  65. .map_err(|e| {
  66. eprintln!("{}", e);
  67. HttpResponse::InternalServerError().finish()
  68. })?;
  69. user
  70. }