cloud_config.rs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. use std::sync::Arc;
  2. use flowy_encrypt::generate_encryption_secret;
  3. use flowy_error::FlowyResult;
  4. use flowy_sqlite::kv::StorePreferences;
  5. use flowy_user_deps::cloud::UserCloudConfig;
  6. const CLOUD_CONFIG_KEY: &str = "af_user_cloud_config";
  7. fn generate_cloud_config(uid: i64, store_preference: &Arc<StorePreferences>) -> UserCloudConfig {
  8. let config = UserCloudConfig::new(generate_encryption_secret());
  9. let key = cache_key_for_cloud_config(uid);
  10. store_preference.set_object(&key, config.clone()).unwrap();
  11. config
  12. }
  13. pub fn save_cloud_config(
  14. uid: i64,
  15. store_preference: &Arc<StorePreferences>,
  16. config: UserCloudConfig,
  17. ) -> FlowyResult<()> {
  18. tracing::info!("save user:{} cloud config: {}", uid, config);
  19. let key = cache_key_for_cloud_config(uid);
  20. store_preference.set_object(&key, config)?;
  21. Ok(())
  22. }
  23. fn cache_key_for_cloud_config(uid: i64) -> String {
  24. format!("{}:{}", CLOUD_CONFIG_KEY, uid)
  25. }
  26. pub fn get_cloud_config(
  27. uid: i64,
  28. store_preference: &Arc<StorePreferences>,
  29. ) -> Option<UserCloudConfig> {
  30. let key = cache_key_for_cloud_config(uid);
  31. store_preference.get_object::<UserCloudConfig>(&key)
  32. }
  33. pub fn get_or_create_cloud_config(
  34. uid: i64,
  35. store_preferences: &Arc<StorePreferences>,
  36. ) -> UserCloudConfig {
  37. let key = cache_key_for_cloud_config(uid);
  38. store_preferences
  39. .get_object::<UserCloudConfig>(&key)
  40. .unwrap_or_else(|| generate_cloud_config(uid, store_preferences))
  41. }
  42. pub fn get_encrypt_secret(uid: i64, store_preference: &Arc<StorePreferences>) -> Option<String> {
  43. let key = cache_key_for_cloud_config(uid);
  44. store_preference
  45. .get_object::<UserCloudConfig>(&key)
  46. .map(|config| config.encrypt_secret)
  47. }