util.rs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. use std::collections::HashMap;
  2. use std::sync::Arc;
  3. use collab::core::collab::MutexCollab;
  4. use collab::core::origin::CollabOrigin;
  5. use collab_plugins::cloud_storage::RemoteCollabStorage;
  6. use uuid::Uuid;
  7. use flowy_database_deps::cloud::DatabaseCloudService;
  8. use flowy_folder_deps::cloud::{Folder, FolderCloudService};
  9. use flowy_server::supabase::api::{
  10. RESTfulPostgresServer, SupabaseCollabStorageImpl, SupabaseDatabaseServiceImpl,
  11. SupabaseFolderServiceImpl, SupabaseServerServiceImpl, SupabaseUserServiceImpl,
  12. };
  13. use flowy_server::supabase::define::{USER_DEVICE_ID, USER_EMAIL, USER_UUID};
  14. use flowy_server::supabase::file_storage::core::SupabaseFileStorage;
  15. use flowy_server::{AppFlowyEncryption, EncryptionImpl};
  16. use flowy_server_config::supabase_config::SupabaseConfiguration;
  17. use flowy_storage::core::FileStorageService;
  18. use flowy_user_deps::cloud::UserCloudService;
  19. use crate::setup_log;
  20. pub fn get_supabase_ci_config() -> Option<SupabaseConfiguration> {
  21. dotenv::from_filename("./.env.ci").ok()?;
  22. setup_log();
  23. SupabaseConfiguration::from_env().ok()
  24. }
  25. #[allow(dead_code)]
  26. pub fn get_supabase_dev_config() -> Option<SupabaseConfiguration> {
  27. dotenv::from_filename("./.env.dev").ok()?;
  28. setup_log();
  29. SupabaseConfiguration::from_env().ok()
  30. }
  31. pub fn collab_service() -> Arc<dyn RemoteCollabStorage> {
  32. let (server, encryption_impl) = appflowy_server(None);
  33. Arc::new(SupabaseCollabStorageImpl::new(
  34. server,
  35. None,
  36. Arc::downgrade(&encryption_impl),
  37. ))
  38. }
  39. pub fn database_service() -> Arc<dyn DatabaseCloudService> {
  40. let (server, _encryption_impl) = appflowy_server(None);
  41. Arc::new(SupabaseDatabaseServiceImpl::new(server))
  42. }
  43. pub fn user_auth_service() -> Arc<dyn UserCloudService> {
  44. let (server, _encryption_impl) = appflowy_server(None);
  45. Arc::new(SupabaseUserServiceImpl::new(server, vec![], None))
  46. }
  47. pub fn folder_service() -> Arc<dyn FolderCloudService> {
  48. let (server, _encryption_impl) = appflowy_server(None);
  49. Arc::new(SupabaseFolderServiceImpl::new(server))
  50. }
  51. pub fn file_storage_service() -> Arc<dyn FileStorageService> {
  52. let config = SupabaseConfiguration::from_env().unwrap();
  53. Arc::new(SupabaseFileStorage::new(&config).unwrap())
  54. }
  55. #[allow(dead_code)]
  56. pub fn encryption_folder_service(
  57. secret: Option<String>,
  58. ) -> (Arc<dyn FolderCloudService>, Arc<dyn AppFlowyEncryption>) {
  59. let (server, encryption_impl) = appflowy_server(secret);
  60. let service = Arc::new(SupabaseFolderServiceImpl::new(server));
  61. (service, encryption_impl)
  62. }
  63. #[allow(dead_code)]
  64. pub fn encryption_collab_service(
  65. secret: Option<String>,
  66. ) -> (Arc<dyn RemoteCollabStorage>, Arc<dyn AppFlowyEncryption>) {
  67. let (server, encryption_impl) = appflowy_server(secret);
  68. let service = Arc::new(SupabaseCollabStorageImpl::new(
  69. server,
  70. None,
  71. Arc::downgrade(&encryption_impl),
  72. ));
  73. (service, encryption_impl)
  74. }
  75. #[allow(dead_code)]
  76. pub async fn print_encryption_folder(folder_id: &str, encryption_secret: Option<String>) {
  77. let (cloud_service, _encryption) = encryption_folder_service(encryption_secret);
  78. let folder_data = cloud_service.get_folder_data(folder_id).await.unwrap();
  79. let json = serde_json::to_value(folder_data).unwrap();
  80. println!("{}", serde_json::to_string_pretty(&json).unwrap());
  81. }
  82. #[allow(dead_code)]
  83. pub async fn print_encryption_folder_snapshot(folder_id: &str, encryption_secret: Option<String>) {
  84. let (cloud_service, _encryption) = encryption_collab_service(encryption_secret);
  85. let snapshot = cloud_service
  86. .get_snapshots(folder_id, 1)
  87. .await
  88. .pop()
  89. .unwrap();
  90. let collab = Arc::new(
  91. MutexCollab::new_with_raw_data(CollabOrigin::Empty, folder_id, vec![snapshot.blob], vec![])
  92. .unwrap(),
  93. );
  94. let folder_data = Folder::open(collab, None).get_folder_data().unwrap();
  95. let json = serde_json::to_value(folder_data).unwrap();
  96. println!("{}", serde_json::to_string_pretty(&json).unwrap());
  97. }
  98. pub fn appflowy_server(
  99. encryption_secret: Option<String>,
  100. ) -> (SupabaseServerServiceImpl, Arc<dyn AppFlowyEncryption>) {
  101. let config = SupabaseConfiguration::from_env().unwrap();
  102. let encryption_impl: Arc<dyn AppFlowyEncryption> =
  103. Arc::new(EncryptionImpl::new(encryption_secret));
  104. let encryption = Arc::downgrade(&encryption_impl);
  105. let server = Arc::new(RESTfulPostgresServer::new(config, encryption));
  106. (SupabaseServerServiceImpl::new(server), encryption_impl)
  107. }
  108. pub fn third_party_sign_up_param(uuid: String) -> HashMap<String, String> {
  109. let mut params = HashMap::new();
  110. params.insert(USER_UUID.to_string(), uuid);
  111. params.insert(
  112. USER_EMAIL.to_string(),
  113. format!("{}@test.com", Uuid::new_v4()),
  114. );
  115. params.insert(USER_DEVICE_ID.to_string(), Uuid::new_v4().to_string());
  116. params
  117. }