user.rs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. use std::sync::Arc;
  2. use anyhow::Error;
  3. use collab_entity::CollabObject;
  4. use lazy_static::lazy_static;
  5. use parking_lot::Mutex;
  6. use flowy_error::FlowyError;
  7. use flowy_user_deps::cloud::UserCloudService;
  8. use flowy_user_deps::entities::*;
  9. use flowy_user_deps::DEFAULT_USER_NAME;
  10. use lib_infra::box_any::BoxAny;
  11. use lib_infra::future::FutureResult;
  12. use crate::local_server::uid::UserIDGenerator;
  13. use crate::local_server::LocalServerDB;
  14. lazy_static! {
  15. static ref ID_GEN: Mutex<UserIDGenerator> = Mutex::new(UserIDGenerator::new(1));
  16. }
  17. pub(crate) struct LocalServerUserAuthServiceImpl {
  18. #[allow(dead_code)]
  19. pub db: Arc<dyn LocalServerDB>,
  20. }
  21. impl UserCloudService for LocalServerUserAuthServiceImpl {
  22. fn sign_up(&self, params: BoxAny) -> FutureResult<AuthResponse, Error> {
  23. FutureResult::new(async move {
  24. let params = params.unbox_or_error::<SignUpParams>()?;
  25. let uid = ID_GEN.lock().next_id();
  26. let workspace_id = uuid::Uuid::new_v4().to_string();
  27. let user_workspace = UserWorkspace::new(&workspace_id, uid);
  28. let user_name = if params.name.is_empty() {
  29. DEFAULT_USER_NAME()
  30. } else {
  31. params.name.clone()
  32. };
  33. Ok(AuthResponse {
  34. user_id: uid,
  35. name: user_name,
  36. latest_workspace: user_workspace.clone(),
  37. user_workspaces: vec![user_workspace],
  38. is_new_user: true,
  39. email: Some(params.email),
  40. token: None,
  41. device_id: params.device_id,
  42. encryption_type: EncryptionType::NoEncryption,
  43. })
  44. })
  45. }
  46. fn sign_in(&self, params: BoxAny) -> FutureResult<AuthResponse, Error> {
  47. let db = self.db.clone();
  48. FutureResult::new(async move {
  49. let params: SignInParams = params.unbox_or_error::<SignInParams>()?;
  50. let uid = ID_GEN.lock().next_id();
  51. let user_workspace = db
  52. .get_user_workspace(uid)?
  53. .unwrap_or_else(make_user_workspace);
  54. Ok(AuthResponse {
  55. user_id: uid,
  56. name: params.name,
  57. latest_workspace: user_workspace.clone(),
  58. user_workspaces: vec![user_workspace],
  59. is_new_user: false,
  60. email: Some(params.email),
  61. token: None,
  62. device_id: params.device_id,
  63. encryption_type: EncryptionType::NoEncryption,
  64. })
  65. })
  66. }
  67. fn sign_out(&self, _token: Option<String>) -> FutureResult<(), Error> {
  68. FutureResult::new(async { Ok(()) })
  69. }
  70. fn generate_sign_in_url_with_email(&self, _email: &str) -> FutureResult<String, Error> {
  71. FutureResult::new(async {
  72. Err(anyhow::anyhow!(
  73. "Can't generate callback url when using offline mode"
  74. ))
  75. })
  76. }
  77. fn generate_oauth_url_with_provider(&self, _provider: &str) -> FutureResult<String, Error> {
  78. FutureResult::new(async { Err(anyhow::anyhow!("Can't oauth url when using offline mode")) })
  79. }
  80. fn update_user(
  81. &self,
  82. _credential: UserCredentials,
  83. _params: UpdateUserProfileParams,
  84. ) -> FutureResult<(), Error> {
  85. FutureResult::new(async { Ok(()) })
  86. }
  87. fn get_user_profile(
  88. &self,
  89. _credential: UserCredentials,
  90. ) -> FutureResult<Option<UserProfile>, FlowyError> {
  91. FutureResult::new(async { Ok(None) })
  92. }
  93. fn get_user_workspaces(&self, _uid: i64) -> FutureResult<Vec<UserWorkspace>, Error> {
  94. FutureResult::new(async { Ok(vec![]) })
  95. }
  96. fn check_user(&self, _credential: UserCredentials) -> FutureResult<(), Error> {
  97. FutureResult::new(async { Ok(()) })
  98. }
  99. fn add_workspace_member(
  100. &self,
  101. _user_email: String,
  102. _workspace_id: String,
  103. ) -> FutureResult<(), Error> {
  104. FutureResult::new(async { Ok(()) })
  105. }
  106. fn remove_workspace_member(
  107. &self,
  108. _user_email: String,
  109. _workspace_id: String,
  110. ) -> FutureResult<(), Error> {
  111. FutureResult::new(async { Ok(()) })
  112. }
  113. fn get_user_awareness_updates(&self, _uid: i64) -> FutureResult<Vec<Vec<u8>>, Error> {
  114. FutureResult::new(async { Ok(vec![]) })
  115. }
  116. fn reset_workspace(&self, _collab_object: CollabObject) -> FutureResult<(), Error> {
  117. FutureResult::new(async { Ok(()) })
  118. }
  119. fn create_collab_object(
  120. &self,
  121. _collab_object: &CollabObject,
  122. _data: Vec<u8>,
  123. ) -> FutureResult<(), Error> {
  124. FutureResult::new(async { Ok(()) })
  125. }
  126. }
  127. fn make_user_workspace() -> UserWorkspace {
  128. UserWorkspace {
  129. id: uuid::Uuid::new_v4().to_string(),
  130. name: "My Workspace".to_string(),
  131. created_at: Default::default(),
  132. database_views_aggregate_id: uuid::Uuid::new_v4().to_string(),
  133. }
  134. }