mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-11-04 12:03:28 +00:00 
			
		
		
		
	config user login
This commit is contained in:
		
							parent
							
								
									bda12233a1
								
							
						
					
					
						commit
						e709e6bbbc
					
				@ -1,15 +1,15 @@
 | 
				
			|||||||
use crate::config::MAX_PAYLOAD_SIZE;
 | 
					use crate::config::MAX_PAYLOAD_SIZE;
 | 
				
			||||||
use actix_web::web;
 | 
					use actix_web::web;
 | 
				
			||||||
use flowy_net::{errors::ServerError, response::*};
 | 
					use flowy_net::{errors::NetworkError, response::*};
 | 
				
			||||||
use futures::StreamExt;
 | 
					use futures::StreamExt;
 | 
				
			||||||
use protobuf::{Message, ProtobufResult};
 | 
					use protobuf::{Message, ProtobufResult};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub async fn parse_from_payload<T: Message>(payload: web::Payload) -> Result<T, ServerError> {
 | 
					pub async fn parse_from_payload<T: Message>(payload: web::Payload) -> Result<T, NetworkError> {
 | 
				
			||||||
    let bytes = poll_payload(payload).await?;
 | 
					    let bytes = poll_payload(payload).await?;
 | 
				
			||||||
    parse_from_bytes(&bytes)
 | 
					    parse_from_bytes(&bytes)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn parse_from_bytes<T: Message>(bytes: &[u8]) -> Result<T, ServerError> {
 | 
					pub fn parse_from_bytes<T: Message>(bytes: &[u8]) -> Result<T, NetworkError> {
 | 
				
			||||||
    let result: ProtobufResult<T> = Message::parse_from_bytes(&bytes);
 | 
					    let result: ProtobufResult<T> = Message::parse_from_bytes(&bytes);
 | 
				
			||||||
    match result {
 | 
					    match result {
 | 
				
			||||||
        Ok(data) => Ok(data),
 | 
					        Ok(data) => Ok(data),
 | 
				
			||||||
@ -17,13 +17,13 @@ pub fn parse_from_bytes<T: Message>(bytes: &[u8]) -> Result<T, ServerError> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub async fn poll_payload(mut payload: web::Payload) -> Result<web::BytesMut, ServerError> {
 | 
					pub async fn poll_payload(mut payload: web::Payload) -> Result<web::BytesMut, NetworkError> {
 | 
				
			||||||
    let mut body = web::BytesMut::new();
 | 
					    let mut body = web::BytesMut::new();
 | 
				
			||||||
    while let Some(chunk) = payload.next().await {
 | 
					    while let Some(chunk) = payload.next().await {
 | 
				
			||||||
        let chunk = chunk.map_err(|e| ServerError::InternalError(format!("{:?}", e)))?;
 | 
					        let chunk = chunk.map_err(|e| NetworkError::InternalError(format!("{:?}", e)))?;
 | 
				
			||||||
        if (body.len() + chunk.len()) > MAX_PAYLOAD_SIZE {
 | 
					        if (body.len() + chunk.len()) > MAX_PAYLOAD_SIZE {
 | 
				
			||||||
            let resp = ServerResponse::from_msg("Payload overflow", ServerCode::PayloadOverflow);
 | 
					            let resp = FlowyResponse::from_msg("Payload overflow", ServerCode::PayloadOverflow);
 | 
				
			||||||
            return Err(ServerError::BadRequest(resp));
 | 
					            return Err(NetworkError::BadRequest(resp));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        body.extend_from_slice(&chunk);
 | 
					        body.extend_from_slice(&chunk);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
mod helper;
 | 
					mod helper;
 | 
				
			||||||
mod user;
 | 
					pub(crate) mod user;
 | 
				
			||||||
pub(crate) mod ws;
 | 
					pub(crate) mod ws;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub use user::*;
 | 
					pub use user::*;
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@ use flowy_user::protobuf::SignUpParams;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use std::sync::Arc;
 | 
					use std::sync::Arc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub async fn user_register(
 | 
					pub async fn register(
 | 
				
			||||||
    _request: HttpRequest,
 | 
					    _request: HttpRequest,
 | 
				
			||||||
    payload: Payload,
 | 
					    payload: Payload,
 | 
				
			||||||
    auth: Data<Arc<Auth>>,
 | 
					    auth: Data<Arc<Auth>>,
 | 
				
			||||||
@ -18,7 +18,7 @@ pub async fn user_register(
 | 
				
			|||||||
    let params: SignUpParams = parse_from_payload(payload).await?;
 | 
					    let params: SignUpParams = parse_from_payload(payload).await?;
 | 
				
			||||||
    let _ = auth.sign_up(params)?;
 | 
					    let _ = auth.sign_up(params)?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let resp = ServerResponse::success();
 | 
					    let resp = FlowyResponse::success();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok(resp.into())
 | 
					    Ok(resp.into())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,7 @@ pub fn run(app_ctx: Arc<AppContext>, listener: TcpListener) -> Result<Server, st
 | 
				
			|||||||
            .wrap(middleware::Logger::default())
 | 
					            .wrap(middleware::Logger::default())
 | 
				
			||||||
            .data(web::JsonConfig::default().limit(4096))
 | 
					            .data(web::JsonConfig::default().limit(4096))
 | 
				
			||||||
            .service(ws_scope())
 | 
					            .service(ws_scope())
 | 
				
			||||||
 | 
					            .service(user_scope())
 | 
				
			||||||
            .data(app_ctx.ws_server.clone())
 | 
					            .data(app_ctx.ws_server.clone())
 | 
				
			||||||
            .data(app_ctx.db_pool.clone())
 | 
					            .data(app_ctx.db_pool.clone())
 | 
				
			||||||
            .data(app_ctx.auth.clone())
 | 
					            .data(app_ctx.auth.clone())
 | 
				
			||||||
@ -27,6 +28,10 @@ pub fn run(app_ctx: Arc<AppContext>, listener: TcpListener) -> Result<Server, st
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
fn ws_scope() -> Scope { web::scope("/ws").service(ws::start_connection) }
 | 
					fn ws_scope() -> Scope { web::scope("/ws").service(ws::start_connection) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn user_scope() -> Scope {
 | 
				
			||||||
 | 
					    web::scope("/user").service(web::resource("/register").route(web::post().to(user::register)))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub async fn init_app_context() -> Arc<AppContext> {
 | 
					pub async fn init_app_context() -> Arc<AppContext> {
 | 
				
			||||||
    let _ = flowy_log::Builder::new("flowy").env_filter("Debug").build();
 | 
					    let _ = flowy_log::Builder::new("flowy").env_filter("Debug").build();
 | 
				
			||||||
    let config = Arc::new(Config::new());
 | 
					    let config = Arc::new(Config::new());
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
use flowy_net::errors::ServerError;
 | 
					use flowy_net::errors::NetworkError;
 | 
				
			||||||
use flowy_user::protobuf::SignUpParams;
 | 
					use flowy_user::protobuf::SignUpParams;
 | 
				
			||||||
use sqlx::PgPool;
 | 
					use sqlx::PgPool;
 | 
				
			||||||
use std::sync::Arc;
 | 
					use std::sync::Arc;
 | 
				
			||||||
@ -10,5 +10,5 @@ pub struct Auth {
 | 
				
			|||||||
impl Auth {
 | 
					impl Auth {
 | 
				
			||||||
    pub fn new(db_pool: Arc<PgPool>) -> Self { Self { db_pool } }
 | 
					    pub fn new(db_pool: Arc<PgPool>) -> Self { Self { db_pool } }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn sign_up(&self, params: SignUpParams) -> Result<(), ServerError> { Ok(()) }
 | 
					    pub fn sign_up(&self, params: SignUpParams) -> Result<(), NetworkError> { Ok(()) }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
use crate::ws_service::ClientMessage;
 | 
					use crate::ws_service::ClientMessage;
 | 
				
			||||||
use actix::{Message, Recipient};
 | 
					use actix::{Message, Recipient};
 | 
				
			||||||
use flowy_net::errors::ServerError;
 | 
					use flowy_net::errors::NetworkError;
 | 
				
			||||||
use serde::{Deserialize, Serialize};
 | 
					use serde::{Deserialize, Serialize};
 | 
				
			||||||
use std::fmt::Formatter;
 | 
					use std::fmt::Formatter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -37,14 +37,14 @@ impl std::fmt::Display for SessionId {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Debug, Message, Clone)]
 | 
					#[derive(Debug, Message, Clone)]
 | 
				
			||||||
#[rtype(result = "Result<(), ServerError>")]
 | 
					#[rtype(result = "Result<(), NetworkError>")]
 | 
				
			||||||
pub struct Connect {
 | 
					pub struct Connect {
 | 
				
			||||||
    pub socket: Socket,
 | 
					    pub socket: Socket,
 | 
				
			||||||
    pub sid: SessionId,
 | 
					    pub sid: SessionId,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Debug, Message, Clone)]
 | 
					#[derive(Debug, Message, Clone)]
 | 
				
			||||||
#[rtype(result = "Result<(), ServerError>")]
 | 
					#[rtype(result = "Result<(), NetworkError>")]
 | 
				
			||||||
pub struct Disconnect {
 | 
					pub struct Disconnect {
 | 
				
			||||||
    pub sid: SessionId,
 | 
					    pub sid: SessionId,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ use crate::ws_service::{
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
use actix::{Actor, Context, Handler};
 | 
					use actix::{Actor, Context, Handler};
 | 
				
			||||||
use dashmap::DashMap;
 | 
					use dashmap::DashMap;
 | 
				
			||||||
use flowy_net::errors::ServerError;
 | 
					use flowy_net::errors::NetworkError;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct WSServer {
 | 
					pub struct WSServer {
 | 
				
			||||||
    sessions: DashMap<SessionId, Session>,
 | 
					    sessions: DashMap<SessionId, Session>,
 | 
				
			||||||
@ -26,7 +26,7 @@ impl Actor for WSServer {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Handler<Connect> for WSServer {
 | 
					impl Handler<Connect> for WSServer {
 | 
				
			||||||
    type Result = Result<(), ServerError>;
 | 
					    type Result = Result<(), NetworkError>;
 | 
				
			||||||
    fn handle(&mut self, msg: Connect, _ctx: &mut Context<Self>) -> Self::Result {
 | 
					    fn handle(&mut self, msg: Connect, _ctx: &mut Context<Self>) -> Self::Result {
 | 
				
			||||||
        let session: Session = msg.into();
 | 
					        let session: Session = msg.into();
 | 
				
			||||||
        self.sessions.insert(session.id.clone(), session);
 | 
					        self.sessions.insert(session.id.clone(), session);
 | 
				
			||||||
@ -36,7 +36,7 @@ impl Handler<Connect> for WSServer {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Handler<Disconnect> for WSServer {
 | 
					impl Handler<Disconnect> for WSServer {
 | 
				
			||||||
    type Result = Result<(), ServerError>;
 | 
					    type Result = Result<(), NetworkError>;
 | 
				
			||||||
    fn handle(&mut self, msg: Disconnect, _: &mut Context<Self>) -> Self::Result {
 | 
					    fn handle(&mut self, msg: Disconnect, _: &mut Context<Self>) -> Self::Result {
 | 
				
			||||||
        self.sessions.remove(&msg.sid);
 | 
					        self.sessions.remove(&msg.sid);
 | 
				
			||||||
        Ok(())
 | 
					        Ok(())
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,9 @@ serde_repr = "0.1"
 | 
				
			|||||||
actix-web = {version = "3", optional = true}
 | 
					actix-web = {version = "3", optional = true}
 | 
				
			||||||
pin-project = "1.0.0"
 | 
					pin-project = "1.0.0"
 | 
				
			||||||
futures-core = { version = "0.3", default-features = false }
 | 
					futures-core = { version = "0.3", default-features = false }
 | 
				
			||||||
 | 
					log = "0.4"
 | 
				
			||||||
 | 
					bytes = "1.0"
 | 
				
			||||||
 | 
					lazy_static = "1.4.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[features]
 | 
					[features]
 | 
				
			||||||
http = ["actix-web"]
 | 
					http = ["actix-web"]
 | 
				
			||||||
							
								
								
									
										7
									
								
								rust-lib/flowy-net/src/config.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								rust-lib/flowy-net/src/config.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					use lazy_static::lazy_static;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub const HOST: &'static str = "0.0.0.0:3030";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					lazy_static! {
 | 
				
			||||||
 | 
					    pub static ref SIGN_UP_URL: String = format!("{}/user/register", HOST);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,30 +1,38 @@
 | 
				
			|||||||
use crate::response::ServerResponse;
 | 
					use crate::response::FlowyResponse;
 | 
				
			||||||
use protobuf::ProtobufError;
 | 
					use protobuf::ProtobufError;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use std::fmt::{Formatter, Write};
 | 
					use std::fmt::{Formatter, Write};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Debug)]
 | 
					#[derive(Debug)]
 | 
				
			||||||
pub enum ServerError {
 | 
					pub enum NetworkError {
 | 
				
			||||||
    InternalError(String),
 | 
					    InternalError(String),
 | 
				
			||||||
    BadRequest(ServerResponse<String>),
 | 
					    BadRequest(FlowyResponse<String>),
 | 
				
			||||||
    Unauthorized,
 | 
					    Unauthorized,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl std::fmt::Display for ServerError {
 | 
					impl std::fmt::Display for NetworkError {
 | 
				
			||||||
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
 | 
					    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
 | 
				
			||||||
        match self {
 | 
					        match self {
 | 
				
			||||||
            ServerError::InternalError(_) => f.write_str("Internal Server Error"),
 | 
					            NetworkError::InternalError(_) => f.write_str("Internal Server Error"),
 | 
				
			||||||
            ServerError::BadRequest(request) => {
 | 
					            NetworkError::BadRequest(request) => {
 | 
				
			||||||
                let msg = format!("Bad Request: {:?}", request);
 | 
					                let msg = format!("Bad Request: {:?}", request);
 | 
				
			||||||
                f.write_str(&msg)
 | 
					                f.write_str(&msg)
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            ServerError::Unauthorized => f.write_str("Unauthorized"),
 | 
					            NetworkError::Unauthorized => f.write_str("Unauthorized"),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl std::convert::From<ProtobufError> for ServerError {
 | 
					impl std::convert::From<ProtobufError> for NetworkError {
 | 
				
			||||||
    fn from(err: ProtobufError) -> Self {
 | 
					    fn from(err: ProtobufError) -> Self {
 | 
				
			||||||
        let msg = format!("{:?}", err);
 | 
					        let msg = format!("{:?}", err);
 | 
				
			||||||
        ServerError::InternalError(msg)
 | 
					        NetworkError::InternalError(msg)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl std::convert::From<reqwest::Error> for NetworkError {
 | 
				
			||||||
 | 
					    fn from(error: reqwest::Error) -> Self {
 | 
				
			||||||
 | 
					        let msg = format!("{:?}", error);
 | 
				
			||||||
 | 
					        NetworkError::InternalError(msg)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,6 @@
 | 
				
			|||||||
pub mod errors;
 | 
					pub mod errors;
 | 
				
			||||||
pub mod future;
 | 
					pub mod future;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub mod config;
 | 
				
			||||||
 | 
					pub mod request;
 | 
				
			||||||
pub mod response;
 | 
					pub mod response;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										3
									
								
								rust-lib/flowy-net/src/request/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								rust-lib/flowy-net/src/request/mod.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					mod request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub use request::*;
 | 
				
			||||||
							
								
								
									
										86
									
								
								rust-lib/flowy-net/src/request/request.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								rust-lib/flowy-net/src/request/request.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,86 @@
 | 
				
			|||||||
 | 
					use crate::errors::NetworkError;
 | 
				
			||||||
 | 
					use bytes::Bytes;
 | 
				
			||||||
 | 
					use protobuf::Message;
 | 
				
			||||||
 | 
					use reqwest::{Client, Response};
 | 
				
			||||||
 | 
					use std::{convert::TryFrom, time::Duration};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub struct FlowyRequest {
 | 
				
			||||||
 | 
					    client: Client,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl FlowyRequest {
 | 
				
			||||||
 | 
					    pub fn new() -> Self {
 | 
				
			||||||
 | 
					        let client = default_client();
 | 
				
			||||||
 | 
					        Self { client }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub async fn get<T>(&self, url: &str) -> Result<T, NetworkError>
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					        T: Message,
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        let url = url.to_owned();
 | 
				
			||||||
 | 
					        let response = self.client.get(&url).send().await?;
 | 
				
			||||||
 | 
					        parse_response(response).await
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub async fn post<T>(&self, url: &str, data: T) -> Result<T, NetworkError>
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					        T: Message,
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        let url = url.to_owned();
 | 
				
			||||||
 | 
					        let body = data.write_to_bytes()?;
 | 
				
			||||||
 | 
					        let response = self.client.post(&url).body(body).send().await?;
 | 
				
			||||||
 | 
					        parse_response(response).await
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub async fn post_data<T>(&self, url: &str, bytes: Vec<u8>) -> Result<T, NetworkError>
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					        T: for<'a> TryFrom<&'a Vec<u8>>,
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        let url = url.to_owned();
 | 
				
			||||||
 | 
					        let response = self.client.post(&url).body(bytes).send().await?;
 | 
				
			||||||
 | 
					        let bytes = response.bytes().await?.to_vec();
 | 
				
			||||||
 | 
					        let data = T::try_from(&bytes).map_err(|_e| panic!("")).unwrap();
 | 
				
			||||||
 | 
					        Ok(data)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async fn parse_response<T>(response: Response) -> Result<T, NetworkError>
 | 
				
			||||||
 | 
					where
 | 
				
			||||||
 | 
					    T: Message,
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    let bytes = response.bytes().await?;
 | 
				
			||||||
 | 
					    parse_bytes(bytes)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn parse_bytes<T>(bytes: Bytes) -> Result<T, NetworkError>
 | 
				
			||||||
 | 
					where
 | 
				
			||||||
 | 
					    T: Message,
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    match Message::parse_from_bytes(&bytes) {
 | 
				
			||||||
 | 
					        Ok(data) => Ok(data),
 | 
				
			||||||
 | 
					        Err(e) => {
 | 
				
			||||||
 | 
					            log::error!(
 | 
				
			||||||
 | 
					                "Parse bytes for {:?} failed: {}",
 | 
				
			||||||
 | 
					                std::any::type_name::<T>(),
 | 
				
			||||||
 | 
					                e
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					            Err(e.into())
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn default_client() -> Client {
 | 
				
			||||||
 | 
					    let result = reqwest::Client::builder()
 | 
				
			||||||
 | 
					        .connect_timeout(Duration::from_millis(500))
 | 
				
			||||||
 | 
					        .timeout(Duration::from_secs(5))
 | 
				
			||||||
 | 
					        .build();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    match result {
 | 
				
			||||||
 | 
					        Ok(client) => client,
 | 
				
			||||||
 | 
					        Err(e) => {
 | 
				
			||||||
 | 
					            log::error!("Create reqwest client failed: {}", e);
 | 
				
			||||||
 | 
					            reqwest::Client::new()
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -14,15 +14,15 @@ pub enum ServerCode {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Debug, Serialize)]
 | 
					#[derive(Debug, Serialize)]
 | 
				
			||||||
pub struct ServerResponse<T> {
 | 
					pub struct FlowyResponse<T> {
 | 
				
			||||||
    pub msg: String,
 | 
					    pub msg: String,
 | 
				
			||||||
    pub data: Option<T>,
 | 
					    pub data: Option<T>,
 | 
				
			||||||
    pub code: ServerCode,
 | 
					    pub code: ServerCode,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<T: Serialize> ServerResponse<T> {
 | 
					impl<T: Serialize> FlowyResponse<T> {
 | 
				
			||||||
    pub fn new(data: Option<T>, msg: &str, code: ServerCode) -> Self {
 | 
					    pub fn new(data: Option<T>, msg: &str, code: ServerCode) -> Self {
 | 
				
			||||||
        ServerResponse {
 | 
					        FlowyResponse {
 | 
				
			||||||
            msg: msg.to_owned(),
 | 
					            msg: msg.to_owned(),
 | 
				
			||||||
            data,
 | 
					            data,
 | 
				
			||||||
            code,
 | 
					            code,
 | 
				
			||||||
@ -34,7 +34,7 @@ impl<T: Serialize> ServerResponse<T> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl ServerResponse<String> {
 | 
					impl FlowyResponse<String> {
 | 
				
			||||||
    pub fn success() -> Self { Self::from_msg("", ServerCode::Success) }
 | 
					    pub fn success() -> Self { Self::from_msg("", ServerCode::Success) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn from_msg(msg: &str, code: ServerCode) -> Self {
 | 
					    pub fn from_msg(msg: &str, code: ServerCode) -> Self {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,30 +1,30 @@
 | 
				
			|||||||
use crate::{errors::ServerError, response::*};
 | 
					use crate::{errors::NetworkError, response::*};
 | 
				
			||||||
use actix_web::{body::Body, error::ResponseError, HttpResponse};
 | 
					use actix_web::{body::Body, error::ResponseError, HttpResponse};
 | 
				
			||||||
use serde::Serialize;
 | 
					use serde::Serialize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl ResponseError for ServerError {
 | 
					impl ResponseError for NetworkError {
 | 
				
			||||||
    fn error_response(&self) -> HttpResponse {
 | 
					    fn error_response(&self) -> HttpResponse {
 | 
				
			||||||
        match self {
 | 
					        match self {
 | 
				
			||||||
            ServerError::InternalError(msg) => {
 | 
					            NetworkError::InternalError(msg) => {
 | 
				
			||||||
                let resp = ServerResponse::from_msg(&msg, ServerCode::InternalError);
 | 
					                let resp = FlowyResponse::from_msg(&msg, ServerCode::InternalError);
 | 
				
			||||||
                HttpResponse::InternalServerError().json(resp)
 | 
					                HttpResponse::InternalServerError().json(resp)
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            ServerError::BadRequest(ref resp) => HttpResponse::BadRequest().json(resp),
 | 
					            NetworkError::BadRequest(ref resp) => HttpResponse::BadRequest().json(resp),
 | 
				
			||||||
            ServerError::Unauthorized => {
 | 
					            NetworkError::Unauthorized => {
 | 
				
			||||||
                let resp = ServerResponse::from_msg("Unauthorized", ServerCode::Unauthorized);
 | 
					                let resp = FlowyResponse::from_msg("Unauthorized", ServerCode::Unauthorized);
 | 
				
			||||||
                HttpResponse::Unauthorized().json(resp)
 | 
					                HttpResponse::Unauthorized().json(resp)
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<T: Serialize> std::convert::Into<HttpResponse> for ServerResponse<T> {
 | 
					impl<T: Serialize> std::convert::Into<HttpResponse> for FlowyResponse<T> {
 | 
				
			||||||
    fn into(self) -> HttpResponse {
 | 
					    fn into(self) -> HttpResponse {
 | 
				
			||||||
        match serde_json::to_string(&self) {
 | 
					        match serde_json::to_string(&self) {
 | 
				
			||||||
            Ok(body) => HttpResponse::Ok().body(Body::from(body)),
 | 
					            Ok(body) => HttpResponse::Ok().body(Body::from(body)),
 | 
				
			||||||
            Err(e) => {
 | 
					            Err(e) => {
 | 
				
			||||||
                let msg = format!("Serial error: {:?}", e);
 | 
					                let msg = format!("Serial error: {:?}", e);
 | 
				
			||||||
                ServerError::InternalError(msg).error_response()
 | 
					                NetworkError::InternalError(msg).error_response()
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
use crate::response::{ServerCode, ServerResponse};
 | 
					use crate::response::{FlowyResponse, ServerCode};
 | 
				
			||||||
use serde::{
 | 
					use serde::{
 | 
				
			||||||
    de::{self, MapAccess, Visitor},
 | 
					    de::{self, MapAccess, Visitor},
 | 
				
			||||||
    Deserialize,
 | 
					    Deserialize,
 | 
				
			||||||
@ -8,7 +8,7 @@ use serde::{
 | 
				
			|||||||
use std::{fmt, marker::PhantomData, str::FromStr};
 | 
					use std::{fmt, marker::PhantomData, str::FromStr};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub trait ServerData<'a>: Serialize + Deserialize<'a> + FromStr<Err = ()> {}
 | 
					pub trait ServerData<'a>: Serialize + Deserialize<'a> + FromStr<Err = ()> {}
 | 
				
			||||||
impl<'de, T: ServerData<'de>> Deserialize<'de> for ServerResponse<T> {
 | 
					impl<'de, T: ServerData<'de>> Deserialize<'de> for FlowyResponse<T> {
 | 
				
			||||||
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
 | 
					    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
 | 
				
			||||||
    where
 | 
					    where
 | 
				
			||||||
        D: Deserializer<'de>,
 | 
					        D: Deserializer<'de>,
 | 
				
			||||||
@ -18,7 +18,7 @@ impl<'de, T: ServerData<'de>> Deserialize<'de> for ServerResponse<T> {
 | 
				
			|||||||
        where
 | 
					        where
 | 
				
			||||||
            T: ServerData<'de>,
 | 
					            T: ServerData<'de>,
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            type Value = ServerResponse<T>;
 | 
					            type Value = FlowyResponse<T>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
 | 
					            fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
 | 
				
			||||||
                formatter.write_str("struct Duration")
 | 
					                formatter.write_str("struct Duration")
 | 
				
			||||||
 | 
				
			|||||||
@ -3,8 +3,7 @@ use crate::{
 | 
				
			|||||||
    errors::{ErrorBuilder, UserErrCode, UserError},
 | 
					    errors::{ErrorBuilder, UserErrCode, UserError},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use flowy_infra::uuid;
 | 
					use flowy_net::{future::ResultFuture, request::FlowyRequest};
 | 
				
			||||||
use flowy_net::future::ResultFuture;
 | 
					 | 
				
			||||||
use std::sync::Arc;
 | 
					use std::sync::Arc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub(crate) trait UserServer {
 | 
					pub(crate) trait UserServer {
 | 
				
			||||||
@ -27,13 +26,23 @@ impl UserServerImpl {}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
impl UserServer for UserServerImpl {
 | 
					impl UserServer for UserServerImpl {
 | 
				
			||||||
    fn sign_up(&self, _params: SignUpParams) -> ResultFuture<SignUpResponse, UserError> {
 | 
					    fn sign_up(&self, _params: SignUpParams) -> ResultFuture<SignUpResponse, UserError> {
 | 
				
			||||||
        ResultFuture::new(async {
 | 
					        // let bytes: Vec<u8> = params.try_into().unwrap();
 | 
				
			||||||
            Ok(SignUpResponse {
 | 
					        // ResultFuture::new(async move {
 | 
				
			||||||
                uid: "".to_string(),
 | 
					        //     match FlowyRequest::new()
 | 
				
			||||||
                name: "".to_string(),
 | 
					        //         .post_data::<SignUpResponse>("SIGN_UP_URL.as_ref()", bytes)
 | 
				
			||||||
                email: "".to_string(),
 | 
					        //         .await
 | 
				
			||||||
            })
 | 
					        //     {
 | 
				
			||||||
        })
 | 
					        //         Ok(a) => {},
 | 
				
			||||||
 | 
					        //         Err(err) => {},
 | 
				
			||||||
 | 
					        //     }
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        //     Ok(SignUpResponse {
 | 
				
			||||||
 | 
					        //         uid: "".to_string(),
 | 
				
			||||||
 | 
					        //         name: "".to_string(),
 | 
				
			||||||
 | 
					        //         email: "".to_string(),
 | 
				
			||||||
 | 
					        //     })
 | 
				
			||||||
 | 
					        // })
 | 
				
			||||||
 | 
					        unimplemented!()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn sign_in(&self, _params: SignInParams) -> ResultFuture<SignInResponse, UserError> {
 | 
					    fn sign_in(&self, _params: SignInParams) -> ResultFuture<SignInResponse, UserError> {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user