]> Untitled Git - lemmy.git/commitdiff
Adding web::blocks to routes.
authorDessalines <tyhou13@gmx.com>
Tue, 21 Apr 2020 20:40:03 +0000 (16:40 -0400)
committerDessalines <tyhou13@gmx.com>
Tue, 21 Apr 2020 20:40:03 +0000 (16:40 -0400)
server/src/api/mod.rs
server/src/routes/api.rs
server/src/routes/feeds.rs
server/src/routes/index.rs
server/src/routes/mod.rs
server/src/routes/nodeinfo.rs
server/src/routes/webfinger.rs
server/src/routes/websocket.rs

index aab00c0475d2487668fe482da52f1c4688f32965..3488a8c42def23ed1c568c36a5e210ae0e3e4cbe 100644 (file)
@@ -69,7 +69,7 @@ impl<T> Oper<T> {
 }
 
 pub trait Perform {
-  type Response: serde::ser::Serialize;
+  type Response: serde::ser::Serialize + Send;
 
   fn perform(
     &self,
index 74ad7239b8ac0421374fa5a4a3f0e379c76bac74..5ff53e2707fdc9643aeb6df55487558a9a6517bc 100644 (file)
@@ -5,7 +5,6 @@ use crate::api::post::*;
 use crate::api::site::*;
 use crate::api::user::*;
 use crate::rate_limit::RateLimit;
-use actix_web::guard;
 
 pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimit) {
   cfg.service(
@@ -140,13 +139,14 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimit) {
   );
 }
 
-fn perform<Request>(
+async fn perform<Request>(
   data: Request,
   db: DbPoolParam,
   chat_server: ChatServerParam,
 ) -> Result<HttpResponse, Error>
 where
   Oper<Request>: Perform,
+  Request: Send + 'static,
 {
   let ws_info = WebsocketInfo {
     chatserver: chat_server.get_ref().to_owned(),
@@ -155,9 +155,11 @@ where
 
   let oper: Oper<Request> = Oper::new(data);
 
-  let res = oper.perform(db.get_ref().to_owned(), Some(ws_info));
-
-  Ok(HttpResponse::Ok().json(res?))
+  let res = web::block(move || oper.perform(db.get_ref().to_owned(), Some(ws_info)))
+    .await
+    .map(|json| HttpResponse::Ok().json(json))
+    .map_err(|e| ErrorBadRequest(e))?;
+  Ok(res)
 }
 
 async fn route_get<Data>(
@@ -166,10 +168,10 @@ async fn route_get<Data>(
   chat_server: ChatServerParam,
 ) -> Result<HttpResponse, Error>
 where
-  Data: Serialize,
+  Data: Serialize + Send + 'static,
   Oper<Data>: Perform,
 {
-  perform::<Data>(data.0, db, chat_server)
+  perform::<Data>(data.0, db, chat_server).await
 }
 
 async fn route_post<Data>(
@@ -178,8 +180,8 @@ async fn route_post<Data>(
   chat_server: ChatServerParam,
 ) -> Result<HttpResponse, Error>
 where
-  Data: Serialize,
+  Data: Serialize + Send + 'static,
   Oper<Data>: Perform,
 {
-  perform::<Data>(data.0, db, chat_server)
+  perform::<Data>(data.0, db, chat_server).await
 }
index 8eefe02a07d510c26eb7dff807f7efc2f2809974..b367553588572adb1b2c274889faf5b2c2c4067a 100644 (file)
@@ -28,7 +28,7 @@ pub fn config(cfg: &mut web::ServiceConfig) {
 async fn get_all_feed(
   info: web::Query<Params>,
   db: web::Data<Pool<ConnectionManager<PgConnection>>>,
-) -> Result<HttpResponse, actix_web::Error> {
+) -> Result<HttpResponse, Error> {
   let res = web::block(move || {
     let conn = db.get()?;
     get_feed_all_data(&conn, &get_sort_type(info)?)
@@ -39,7 +39,7 @@ async fn get_all_feed(
       .content_type("application/rss+xml")
       .body(rss)
   })
-  .map_err(|_| HttpResponse::InternalServerError())?;
+  .map_err(|e| ErrorBadRequest(e))?;
   Ok(res)
 }
 
@@ -70,7 +70,7 @@ async fn get_feed(
   path: web::Path<(String, String)>,
   info: web::Query<Params>,
   db: web::Data<Pool<ConnectionManager<PgConnection>>>,
-) -> Result<HttpResponse, actix_web::Error> {
+) -> Result<HttpResponse, Error> {
   let res = web::block(move || {
     let conn = db.get()?;
 
@@ -100,7 +100,7 @@ async fn get_feed(
       .content_type("application/rss+xml")
       .body(rss)
   })
-  .map_err(|_| HttpResponse::InternalServerError())?;
+  .map_err(|e| ErrorBadRequest(e))?;
   Ok(res)
 }
 
@@ -116,7 +116,7 @@ fn get_feed_user(
   conn: &PgConnection,
   sort_type: &SortType,
   user_name: String,
-) -> Result<ChannelBuilder, Error> {
+) -> Result<ChannelBuilder, failure::Error> {
   let site_view = SiteView::read(&conn)?;
   let user = User_::find_by_username(&conn, &user_name)?;
   let user_url = user.get_profile_url();
@@ -142,7 +142,7 @@ fn get_feed_community(
   conn: &PgConnection,
   sort_type: &SortType,
   community_name: String,
-) -> Result<ChannelBuilder, Error> {
+) -> Result<ChannelBuilder, failure::Error> {
   let site_view = SiteView::read(&conn)?;
   let community = Community::read_from_name(&conn, community_name)?;
   let community_url = community.get_url();
@@ -172,7 +172,7 @@ fn get_feed_front(
   conn: &PgConnection,
   sort_type: &SortType,
   jwt: String,
-) -> Result<ChannelBuilder, Error> {
+) -> Result<ChannelBuilder, failure::Error> {
   let site_view = SiteView::read(&conn)?;
   let user_id = Claims::decode(&jwt)?.claims.id;
 
@@ -197,7 +197,7 @@ fn get_feed_front(
   Ok(channel_builder)
 }
 
-fn get_feed_inbox(conn: &PgConnection, jwt: String) -> Result<ChannelBuilder, Error> {
+fn get_feed_inbox(conn: &PgConnection, jwt: String) -> Result<ChannelBuilder, failure::Error> {
   let site_view = SiteView::read(&conn)?;
   let user_id = Claims::decode(&jwt)?.claims.id;
 
index 9f18b64d81c10ec698aef65de25b532d5ee7212f..895af435005e7ebf3cbe3a0aeb3ae7726f14ecd0 100644 (file)
@@ -41,7 +41,7 @@ pub fn config(cfg: &mut web::ServiceConfig) {
     .route("/password_change/{token}", web::get().to(index));
 }
 
-async fn index() -> Result<NamedFile, actix_web::error::Error> {
+async fn index() -> Result<NamedFile, Error> {
   Ok(NamedFile::open(
     Settings::get().front_end_dir + "/index.html",
   )?)
index b1ea41679b4422b214db9e1faec7f38ed48bc146..37c56eba07a241656aba4398f2128a134f6fdc68 100644 (file)
@@ -5,14 +5,13 @@ use crate::websocket::{server::ChatServer, WebsocketInfo};
 use crate::{get_ip, markdown_to_html, version, Settings};
 use actix::prelude::*;
 use actix_files::NamedFile;
-use actix_web::{body::Body, web::Query, *};
+use actix_web::{body::Body, error::ErrorBadRequest, web::Query, *};
 use actix_web_actors::ws;
 use chrono::{DateTime, NaiveDateTime, Utc};
 use diesel::{
   r2d2::{ConnectionManager, Pool},
   PgConnection,
 };
-use failure::Error;
 use log::{error, info};
 use regex::Regex;
 use rss::{CategoryBuilder, ChannelBuilder, GuidBuilder, Item, ItemBuilder};
index 829d56b1f9c54fb863b9a8f6069ae84efbef37cb..97863271b3db06b8e37ee4f1362b3eea57d88087 100644 (file)
@@ -18,7 +18,7 @@ async fn node_info_well_known() -> HttpResponse<Body> {
 
 async fn node_info(
   db: web::Data<Pool<ConnectionManager<PgConnection>>>,
-) -> Result<HttpResponse, actix_web::Error> {
+) -> Result<HttpResponse, Error> {
   let res = web::block(move || {
     let conn = db.get()?;
     let site_view = match SiteView::read(&conn) {
@@ -49,7 +49,7 @@ async fn node_info(
   })
   .await
   .map(|json| HttpResponse::Ok().json(json))
-  .map_err(|_| HttpResponse::InternalServerError())?;
+  .map_err(|e| ErrorBadRequest(e))?;
   Ok(res)
 }
 
index b35ddbf79145cc96c62b413999b05108d511a8e1..f39c6b67bea16672ee6d684bce53cea6e190c514 100644 (file)
@@ -32,7 +32,7 @@ lazy_static! {
 async fn get_webfinger_response(
   info: Query<Params>,
   db: web::Data<Pool<ConnectionManager<PgConnection>>>,
-) -> Result<HttpResponse, actix_web::Error> {
+) -> Result<HttpResponse, Error> {
   let res = web::block(move || {
     let conn = db.get()?;
 
@@ -84,6 +84,6 @@ async fn get_webfinger_response(
   })
   .await
   .map(|json| HttpResponse::Ok().json(json))
-  .map_err(|_| HttpResponse::InternalServerError())?;
+  .map_err(|e| ErrorBadRequest(e))?;
   Ok(res)
 }
index 8088594519ef326168d72f21d64a12e51b0c789e..48b7d08fb0336cf587346771710e9d43510ecc54 100644 (file)
@@ -1,6 +1,5 @@
 use super::*;
 use crate::websocket::server::*;
-use actix_web::{Error, Result};
 
 /// How often heartbeat pings are sent
 const HEARTBEAT_INTERVAL: Duration = Duration::from_secs(5);
@@ -120,7 +119,7 @@ impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for WSSession {
           .then(|res, _, ctx| {
             match res {
               Ok(Ok(res)) => ctx.text(res),
-              Ok(Err(e)) => match e {},
+              Ok(Err(_)) => {}
               Err(e) => error!("{}", &e),
             }
             actix::fut::ready(())