util.rs 4.2 KB

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