coven_storage/providers/
mod.rs1mod access;
3mod error_text;
4mod http;
5mod http_body;
6mod http_client;
7mod oauth;
8mod oauth_folders;
9pub use oauth_folders::StorageFolder;
10mod object_metadata;
11mod onedrive_item;
12mod pagination;
13pub use http::{OAuthSession, ProviderResponse};
14pub use oauth::{
15 DropboxClients, OAuthClients, OAuthError, OAuthExchange, OAuthFlow, OAuthPresenter,
16 OAuthRedirectError, OAuthTokenRefresh,
17};
18#[cfg(not(any(target_os = "ios", target_os = "android")))]
19mod desktop_oauth;
20#[cfg(not(any(target_os = "ios", target_os = "android")))]
21pub use desktop_oauth::DesktopOAuthPresenter;
22mod s3;
23pub fn s3_member_policy(config: &crate::StorageConfig) -> Result<String, crate::StorageError> {
25 s3::member_policy(config)
26}
27pub(crate) const DROPBOX_API: &str = "https://api.dropboxapi.com/2";
29pub(crate) const DROPBOX_CONTENT: &str = "https://content.dropboxapi.com/2";
31pub(crate) const GRAPH_API: &str = "https://graph.microsoft.com/v1.0";
33
34pub(crate) fn oauth_api(provider: crate::CloudProvider) -> Option<&'static str> {
37 match provider {
38 crate::CloudProvider::Dropbox => Some(DROPBOX_API),
39 crate::CloudProvider::OneDrive => Some(GRAPH_API),
40 _ => None,
41 }
42}
43
44pub(crate) fn response_arrived(source: &(dyn std::error::Error + 'static)) -> bool {
47 #[cfg(target_vendor = "apple")]
48 if let Some(native) = source.downcast_ref::<cloudkit::NativeError>() {
49 return native.answered();
50 }
51 source.is::<ProviderResponse>()
52 || source.is::<OAuthRedirectError>()
53 || s3::response_status(source).is_some()
54}
55pub(crate) fn retry_after(
59 provider: crate::CloudProvider,
60 source: &(dyn std::error::Error + 'static),
61) -> Option<crate::RetryAfter> {
62 #[cfg(target_vendor = "apple")]
63 if let Some(native) = source.downcast_ref::<cloudkit::NativeError>() {
64 return native.retry_after();
65 }
66 if let Some(response) = source.downcast_ref::<ProviderResponse>() {
67 return response.retry_after(provider);
68 }
69 s3::response_retry_after(source)
70}
71#[cfg(feature = "dev-tools")]
72pub(crate) use s3::empty_bucket as empty_s3_bucket;
73#[cfg(any(test, feature = "dev-tools"))]
74pub use s3::EmptiedS3Bucket;
75#[cfg(feature = "dev-tools")]
76pub use s3::EmptyS3BucketError;
77pub(crate) use s3::{
78 check_new_store as check_new_s3_store, check_s3_profile, check_s3_versioning,
79 detect as detect_s3, s3_settings, S3Storage,
80};
81mod dropbox;
82mod dropbox_access;
83mod dropbox_job;
84pub(crate) use dropbox::DropboxStorage;
85mod onedrive;
86mod onedrive_access;
87pub(crate) use onedrive::OneDriveStorage;
88#[cfg(target_vendor = "apple")]
89mod cloudkit;
90#[cfg(target_vendor = "apple")]
91pub(crate) use cloudkit::CloudKitStorage;
92
93#[cfg(test)]
94#[path = "mod_tests.rs"]
95mod tests;
96
97mod connector;
98pub use connector::{ProviderConnector, StorageConnector};