diff --git a/docker-compose-ci.yml b/docker-compose-ci.yml index 141f69dd..91510438 100644 --- a/docker-compose-ci.yml +++ b/docker-compose-ci.yml @@ -195,7 +195,9 @@ services: - APPFLOWY_S3_BUCKET=${APPFLOWY_S3_BUCKET} - APPFLOWY_S3_REGION=${APPFLOWY_S3_REGION} - APPFLOWY_MAILER_SMTP_HOST=${APPFLOWY_MAILER_SMTP_HOST} + - APPFLOWY_MAILER_SMTP_PORT=${APPFLOWY_MAILER_SMTP_PORT} - APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME} + - APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL} - APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD} volumes: diff --git a/docker-compose.yml b/docker-compose.yml index 23bf7182..e6a66d77 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -128,6 +128,7 @@ services: - APPFLOWY_MAILER_SMTP_HOST=${APPFLOWY_MAILER_SMTP_HOST} - APPFLOWY_MAILER_SMTP_PORT=${APPFLOWY_MAILER_SMTP_PORT} - APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME} + - APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL} - APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD} - APPFLOWY_ACCESS_CONTROL=${APPFLOWY_ACCESS_CONTROL} - APPFLOWY_DATABASE_MAX_CONNECTIONS=${APPFLOWY_DATABASE_MAX_CONNECTIONS} @@ -180,8 +181,10 @@ services: - APPFLOWY_S3_SECRET_KEY=${APPFLOWY_S3_SECRET_KEY} - APPFLOWY_S3_BUCKET=${APPFLOWY_S3_BUCKET} - APPFLOWY_S3_REGION=${APPFLOWY_S3_REGION} + - APPFLOWY_MAILER_SMTP_HOST=${APPFLOWY_MAILER_SMTP_HOST} - APPFLOWY_MAILER_SMTP_PORT=${APPFLOWY_MAILER_SMTP_PORT} - APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME} + - APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL} - APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD} volumes: postgres_data: diff --git a/services/appflowy-collaborate/src/group/broadcast.rs b/services/appflowy-collaborate/src/group/broadcast.rs index 92b647fd..12f5ddcb 100644 --- a/services/appflowy-collaborate/src/group/broadcast.rs +++ b/services/appflowy-collaborate/src/group/broadcast.rs @@ -431,13 +431,8 @@ async fn handle_message( // send one ack back to the client. if ack_response.is_none() { ack_response = Some( - CollabAck::new( - message_origin.clone(), - object_id.to_string(), - msg_id, - seq_num, - ) - .with_payload(payload.unwrap_or_default()), + CollabAck::new(CollabOrigin::Server, object_id.to_string(), msg_id, seq_num) + .with_payload(payload.unwrap_or_default()), ); } }, @@ -453,14 +448,9 @@ async fn handle_message( }; ack_response = Some( - CollabAck::new( - message_origin.clone(), - object_id.to_string(), - msg_id, - seq_num, - ) - .with_code(code) - .with_payload(payload), + CollabAck::new(CollabOrigin::Server, object_id.to_string(), msg_id, seq_num) + .with_code(code) + .with_payload(payload), ); break; diff --git a/services/appflowy-worker/src/import_worker/worker.rs b/services/appflowy-worker/src/import_worker/worker.rs index 865058e2..269ce1db 100644 --- a/services/appflowy-worker/src/import_worker/worker.rs +++ b/services/appflowy-worker/src/import_worker/worker.rs @@ -44,7 +44,6 @@ use redis::{AsyncCommands, RedisResult, Value}; use database::pg_row::AFImportTask; use serde::{Deserialize, Serialize}; use serde_json::from_str; -use sqlx::types::chrono; use sqlx::types::chrono::{DateTime, TimeZone, Utc}; use sqlx::PgPool; use std::collections::{HashMap, HashSet}; @@ -912,7 +911,6 @@ async fn process_unzip_file( let mut collab_params_list = vec![]; let mut database_view_ids_by_database_id: HashMap> = HashMap::new(); let mut orphan_view_ids = HashSet::new(); - let timestamp = chrono::Utc::now().timestamp(); // 3. Collect all collabs and resources let mut stream = imported.into_collab_stream().await; diff --git a/src/api/workspace.rs b/src/api/workspace.rs index 669938ef..7c966bea 100644 --- a/src/api/workspace.rs +++ b/src/api/workspace.rs @@ -1985,6 +1985,21 @@ async fn list_database_row_details_handler( let list_db_row_query = param.into_inner(); let row_ids = list_db_row_query.into_ids(); + if let Err(e) = Uuid::parse_str(&workspace_id) { + return Err( + AppError::InvalidRequest(format!("invalid workspace id `{}`: {}", db_id, e)).into(), + ); + } + if let Err(e) = Uuid::parse_str(&db_id) { + return Err(AppError::InvalidRequest(format!("invalid database id `{}`: {}", db_id, e)).into()); + } + + for id in row_ids.iter() { + if let Err(e) = Uuid::parse_str(id) { + return Err(AppError::InvalidRequest(format!("invalid row id `{}`: {}", id, e)).into()); + } + } + state .workspace_access_control .enforce_action(&uid, &workspace_id, Action::Read)