util.rs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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::UserCloudService;
  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 UserCloudService> {
  42. let (server, _encryption_impl) = appflowy_server(None);
  43. Arc::new(SupabaseUserServiceImpl::new(server, vec![], None))
  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. #[allow(dead_code)]
  58. pub fn encryption_collab_service(
  59. secret: Option<String>,
  60. ) -> (Arc<dyn RemoteCollabStorage>, Arc<dyn AppFlowyEncryption>) {
  61. let (server, encryption_impl) = appflowy_server(secret);
  62. let service = Arc::new(SupabaseCollabStorageImpl::new(
  63. server,
  64. None,
  65. Arc::downgrade(&encryption_impl),
  66. ));
  67. (service, encryption_impl)
  68. }
  69. #[allow(dead_code)]
  70. pub async fn print_encryption_folder(folder_id: &str, encryption_secret: Option<String>) {
  71. let (cloud_service, _encryption) = encryption_folder_service(encryption_secret);
  72. let folder_data = cloud_service.get_folder_data(folder_id).await.unwrap();
  73. let json = serde_json::to_value(folder_data).unwrap();
  74. println!("{}", serde_json::to_string_pretty(&json).unwrap());
  75. }
  76. #[allow(dead_code)]
  77. pub async fn print_encryption_folder_snapshot(folder_id: &str, encryption_secret: Option<String>) {
  78. let (cloud_service, _encryption) = encryption_collab_service(encryption_secret);
  79. let snapshot = cloud_service
  80. .get_snapshots(folder_id, 1)
  81. .await
  82. .pop()
  83. .unwrap();
  84. let collab = Arc::new(
  85. MutexCollab::new_with_raw_data(CollabOrigin::Empty, folder_id, vec![snapshot.blob], vec![])
  86. .unwrap(),
  87. );
  88. let folder_data = Folder::open(collab, None).get_folder_data().unwrap();
  89. let json = serde_json::to_value(folder_data).unwrap();
  90. println!("{}", serde_json::to_string_pretty(&json).unwrap());
  91. }
  92. pub fn appflowy_server(
  93. encryption_secret: Option<String>,
  94. ) -> (SupabaseServerServiceImpl, Arc<dyn AppFlowyEncryption>) {
  95. let config = SupabaseConfiguration::from_env().unwrap();
  96. let encryption_impl: Arc<dyn AppFlowyEncryption> =
  97. Arc::new(EncryptionImpl::new(encryption_secret));
  98. let encryption = Arc::downgrade(&encryption_impl);
  99. let server = Arc::new(RESTfulPostgresServer::new(config, encryption));
  100. (SupabaseServerServiceImpl::new(server), encryption_impl)
  101. }
  102. pub fn third_party_sign_up_param(uuid: String) -> HashMap<String, String> {
  103. let mut params = HashMap::new();
  104. params.insert(USER_UUID.to_string(), uuid);
  105. params.insert(
  106. USER_EMAIL.to_string(),
  107. format!("{}@test.com", Uuid::new_v4()),
  108. );
  109. params.insert(USER_DEVICE_ID.to_string(), Uuid::new_v4().to_string());
  110. params
  111. }