123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- use std::collections::HashMap;
- use std::sync::Arc;
- use collab::core::collab::MutexCollab;
- use collab::core::origin::CollabOrigin;
- use collab_plugins::cloud_storage::RemoteCollabStorage;
- use uuid::Uuid;
- use flowy_database_deps::cloud::DatabaseCloudService;
- use flowy_error::FlowyError;
- use flowy_folder_deps::cloud::{Folder, FolderCloudService};
- use flowy_server::supabase::api::{
- RESTfulPostgresServer, SupabaseCollabStorageImpl, SupabaseDatabaseServiceImpl,
- SupabaseFolderServiceImpl, SupabaseServerServiceImpl, SupabaseUserServiceImpl,
- };
- use flowy_server::supabase::define::{USER_DEVICE_ID, USER_EMAIL, USER_UUID};
- use flowy_server::supabase::file_storage::core::SupabaseFileStorage;
- use flowy_server::{AppFlowyEncryption, EncryptionImpl};
- use flowy_server_config::supabase_config::SupabaseConfiguration;
- use flowy_storage::{FileStoragePlan, FileStorageService, StorageObject};
- use flowy_user_deps::cloud::UserCloudService;
- use lib_infra::future::FutureResult;
- use crate::setup_log;
- pub fn get_supabase_ci_config() -> Option<SupabaseConfiguration> {
- dotenv::from_filename("./.env.ci").ok()?;
- setup_log();
- SupabaseConfiguration::from_env().ok()
- }
- #[allow(dead_code)]
- pub fn get_supabase_dev_config() -> Option<SupabaseConfiguration> {
- dotenv::from_filename("./.env.dev").ok()?;
- setup_log();
- SupabaseConfiguration::from_env().ok()
- }
- pub fn collab_service() -> Arc<dyn RemoteCollabStorage> {
- let (server, encryption_impl) = appflowy_server(None);
- Arc::new(SupabaseCollabStorageImpl::new(
- server,
- None,
- Arc::downgrade(&encryption_impl),
- ))
- }
- pub fn database_service() -> Arc<dyn DatabaseCloudService> {
- let (server, _encryption_impl) = appflowy_server(None);
- Arc::new(SupabaseDatabaseServiceImpl::new(server))
- }
- pub fn user_auth_service() -> Arc<dyn UserCloudService> {
- let (server, _encryption_impl) = appflowy_server(None);
- Arc::new(SupabaseUserServiceImpl::new(server, vec![], None))
- }
- pub fn folder_service() -> Arc<dyn FolderCloudService> {
- let (server, _encryption_impl) = appflowy_server(None);
- Arc::new(SupabaseFolderServiceImpl::new(server))
- }
- pub fn file_storage_service() -> Arc<dyn FileStorageService> {
- let encryption_impl: Arc<dyn AppFlowyEncryption> = Arc::new(EncryptionImpl::new(None));
- let config = SupabaseConfiguration::from_env().unwrap();
- Arc::new(
- SupabaseFileStorage::new(
- &config,
- Arc::downgrade(&encryption_impl),
- Arc::new(TestFileStoragePlan),
- )
- .unwrap(),
- )
- }
- #[allow(dead_code)]
- pub fn encryption_folder_service(
- secret: Option<String>,
- ) -> (Arc<dyn FolderCloudService>, Arc<dyn AppFlowyEncryption>) {
- let (server, encryption_impl) = appflowy_server(secret);
- let service = Arc::new(SupabaseFolderServiceImpl::new(server));
- (service, encryption_impl)
- }
- #[allow(dead_code)]
- pub fn encryption_collab_service(
- secret: Option<String>,
- ) -> (Arc<dyn RemoteCollabStorage>, Arc<dyn AppFlowyEncryption>) {
- let (server, encryption_impl) = appflowy_server(secret);
- let service = Arc::new(SupabaseCollabStorageImpl::new(
- server,
- None,
- Arc::downgrade(&encryption_impl),
- ));
- (service, encryption_impl)
- }
- #[allow(dead_code)]
- pub async fn print_encryption_folder(folder_id: &str, encryption_secret: Option<String>) {
- let (cloud_service, _encryption) = encryption_folder_service(encryption_secret);
- let folder_data = cloud_service.get_folder_data(folder_id).await.unwrap();
- let json = serde_json::to_value(folder_data).unwrap();
- println!("{}", serde_json::to_string_pretty(&json).unwrap());
- }
- #[allow(dead_code)]
- pub async fn print_encryption_folder_snapshot(folder_id: &str, encryption_secret: Option<String>) {
- let (cloud_service, _encryption) = encryption_collab_service(encryption_secret);
- let snapshot = cloud_service
- .get_snapshots(folder_id, 1)
- .await
- .pop()
- .unwrap();
- let collab = Arc::new(
- MutexCollab::new_with_raw_data(CollabOrigin::Empty, folder_id, vec![snapshot.blob], vec![])
- .unwrap(),
- );
- let folder_data = Folder::open(collab, None).get_folder_data().unwrap();
- let json = serde_json::to_value(folder_data).unwrap();
- println!("{}", serde_json::to_string_pretty(&json).unwrap());
- }
- pub fn appflowy_server(
- encryption_secret: Option<String>,
- ) -> (SupabaseServerServiceImpl, Arc<dyn AppFlowyEncryption>) {
- let config = SupabaseConfiguration::from_env().unwrap();
- let encryption_impl: Arc<dyn AppFlowyEncryption> =
- Arc::new(EncryptionImpl::new(encryption_secret));
- let encryption = Arc::downgrade(&encryption_impl);
- let server = Arc::new(RESTfulPostgresServer::new(config, encryption));
- (SupabaseServerServiceImpl::new(server), encryption_impl)
- }
- pub fn third_party_sign_up_param(uuid: String) -> HashMap<String, String> {
- let mut params = HashMap::new();
- params.insert(USER_UUID.to_string(), uuid);
- params.insert(
- USER_EMAIL.to_string(),
- format!("{}@test.com", Uuid::new_v4()),
- );
- params.insert(USER_DEVICE_ID.to_string(), Uuid::new_v4().to_string());
- params
- }
- pub struct TestFileStoragePlan;
- impl FileStoragePlan for TestFileStoragePlan {
- fn storage_size(&self) -> FutureResult<u64, FlowyError> {
- // 1 GB
- FutureResult::new(async { Ok(1024 * 1024 * 1024) })
- }
- fn maximum_file_size(&self) -> FutureResult<u64, FlowyError> {
- // 5 MB
- FutureResult::new(async { Ok(5 * 1024 * 1024) })
- }
- fn check_upload_object(&self, _object: &StorageObject) -> FutureResult<(), FlowyError> {
- FutureResult::new(async { Ok(()) })
- }
- }
|