Skip to main content

bucketwarden_server/
lib.rs

1#![allow(clippy::format_collect)]
2
3use bucketwarden_audit::{AuditEvent, AuditLog, AuditOutcome, AuditSummary};
4use bucketwarden_auth::{
5    AccessKey, AssumeRoleWithCustomIdentityRequest, AssumeRoleWithWebIdentityRequest, AuthError,
6    AuthStore, CredentialRecord, CredentialRotation, CredentialScope, IdentityProvider,
7    LeakedKeyResponse, SessionCredential, DEFAULT_TENANT_ID,
8};
9use bucketwarden_kms::{
10    Ciphertext, EnvelopeMetadata, KeyRecord, KeyStatus, KmsError, KmsProvider, LocalXorKms,
11};
12use bucketwarden_lock::{LockError, ObjectLock, RetentionMode};
13use bucketwarden_policy::{
14    Effect, Policy, PolicyExplanation, PolicyFinding, PolicySimulationRequest,
15    PolicySimulationResult, RequestContext, Statement,
16};
17use bucketwarden_repl::{ReplicationAction, ReplicationLog, ReplicationRecord, ReplicationSummary};
18use bucketwarden_s3::{
19    api_operation_report, bucket_control_report, client_compatibility_report, object_data_report,
20    object_resource, protocol_surface_report,
21    sigv4::{sha256_hex, verify_authorization_header, verify_presigned_url, SigV4Request},
22    validate_bucket_name, validate_object_key, AbortIncompleteMultipartUpload,
23    AbortMultipartUploadRequest, AccessControlOwner, AccessControlPolicy, AclGrant, AclResult,
24    AnalyticsAndOperator, AnalyticsConfiguration, AnalyticsExportDestination, AnalyticsFilter,
25    AnalyticsS3BucketDestination, AnalyticsTag, ApiOperationReport, Bucket, BucketAbacStatus,
26    BucketAccelerateConfiguration, BucketControlReport, BucketCorsResult,
27    BucketEncryptionConfiguration, BucketInfo, BucketInventoryEntry, BucketInventoryReport,
28    BucketInventoryRequest, BucketLifecycleConfiguration, BucketLocationResult,
29    BucketLoggingEnabled, BucketLoggingStatus, BucketMetadataConfiguration,
30    BucketMetadataTableConfiguration, BucketNotificationConfiguration,
31    BucketObjectLockConfiguration, BucketOwnershipControls, BucketPolicyRequest,
32    BucketPolicyResult, BucketPolicyStatus, BucketQuotaConfiguration,
33    BucketReplicationConfiguration, BucketRequestPaymentConfiguration, BucketTaggingRequest,
34    BucketTaggingResult, BucketVersioningResult, BucketVersioningStatus,
35    BucketWebsiteConfiguration, Checksum, ClientCompatibilityReport, CloudFunctionConfiguration,
36    CommonPrefix, CompleteMultipartUploadRequest, CompleteMultipartUploadResult,
37    CompletedMultipartUpload, CompletedPart, Condition, ConsoleBucketRow, ConsoleMetricSummary,
38    ConsoleObjectRow, ConsolePolicyRow, ConsoleRuntimeReport, ConsoleSupportFeature,
39    ConsoleUserRow, ContinuationEvent, CopyObjectRequest, CopyObjectResult, CopyPartResult,
40    CorsRule, CreateBucketConfiguration, CreateMultipartUploadRequest, CreateMultipartUploadResult,
41    CreateSessionRequest, CreateSessionResult, CsvInput, CsvOutput, Delete,
42    DeleteMarkerReplication, DeleteObjectEntry, DeleteObjectResult, DeleteObjectVersionResult,
43    DeletedObject, Destination, DestinationResult, EndEvent, ErrorDetails, ErrorDocument,
44    EventBridgeConfiguration, EventCategoryReport, EventComplianceReport,
45    ExistingObjectReplication, FilterRule, GetBucketMetadataTableConfigurationResult,
46    GetObjectAttributesParts, GetObjectAttributesResult, GetObjectResult, HeadObjectResult,
47    InputSerialization, IntelligentTieringAndOperator, IntelligentTieringConfiguration,
48    IntelligentTieringFilter, IntelligentTieringTag, InventoryConfiguration, InventoryDestination,
49    InventoryEncryption, InventoryFilter, InventoryS3BucketDestination, InventorySchedule,
50    InventoryTableConfiguration, InventoryTableConfigurationResult, JournalTableConfiguration,
51    JournalTableConfigurationResult, JsonInput, LifecycleRule, LifecycleRunResult,
52    LifecycleVersionTarget, ListAnalyticsConfigurationsResult, ListDirectoryBucketsResult,
53    ListIntelligentTieringConfigurationsResult, ListInventoryConfigurationsResult,
54    ListMetricsConfigurationsResult, ListMultipartUploadsResult, ListObjectVersionsRequest,
55    ListObjectVersionsResult, ListObjectsRequest, ListObjectsResult, ListPartsResult,
56    ListedDeleteMarker, ListedMultipartUpload, ListedObject, ListedObjectVersion, ListedPart,
57    MetadataConfigurationErrorDetails, MetadataConfigurationResult, MetadataDirective,
58    MetadataTableConfigurationResult, MetadataTableEncryptionConfiguration, MetricsAndOperator,
59    MetricsConfiguration, MetricsFilter, MetricsTag, NotificationEvent, NotificationEventSummary,
60    NotificationRule, ObjectDataReport, ObjectLegalHoldRequest, ObjectLegalHoldResult,
61    ObjectLockDefaultRetention, ObjectMetadata, ObjectRetentionRequest, ObjectRetentionResult,
62    ObjectTaggingRequest, ObjectTaggingResult, OpsAdminSurfaceReport, OpsEvidenceExportReport,
63    OpsHealthReport, OpsIncidentReport, ProtocolSurfaceReport, PublicAccessBlockConfiguration,
64    PutObjectRequest, PutObjectResult, QuotaUsageReport, RecordExpiration, RenameObjectRequest,
65    RenameObjectResult, ReplicationRule, ReplicationRunResult, ReplicationStatusEntry,
66    ReplicationStatusReport, RuntimeConfigReport, RuntimeInventoryEntry, RuntimeInventoryReport,
67    RuntimeInventoryRequest, RuntimeInventorySummaryReport, RuntimeInventorySummaryRequest,
68    S3Action, S3HttpRequest, S3HttpResponse, S3TablesDestination, S3TablesDestinationResult,
69    ServerSideEncryption, StorageClassAnalysis, StorageClassAnalysisDataExport,
70    TenantInventoryEntry, TenantInventoryReport, TenantInventoryRequest, TenantQuotaConfiguration,
71    Tiering, UpdateObjectEncryptionRequest, UpdateObjectEncryptionResult, UploadPartRequest,
72    UploadPartResult, WebsiteObjectResult, WebsiteRoutingRule, WriteGetObjectResponseRequest,
73};
74use serde::{Deserialize, Serialize};
75use std::collections::BTreeMap;
76use thiserror::Error;
77pub const CRATE_PURPOSE: &str = "storage server runtime";
78pub const DEFAULT_BUCKET_REGION: &str = "us-east-1";
79const INTERNAL_SIGV4_REGION_HEADER: &str = "x-bucketwarden-sigv4-region";
80mod aws_query_compat;
81mod browser_ui;
82mod bucket_analytics;
83mod bucket_basics;
84mod bucket_intelligent_tiering;
85mod bucket_inventory;
86mod bucket_metadata;
87mod bucket_metrics;
88mod bucket_policy_acl;
89mod consistency_model_support;
90mod console_api;
91mod encryption_audit;
92mod encryption_policy;
93mod erasure_coding_support;
94mod error_encoding;
95mod event_audit_observability;
96mod filesystem_store;
97mod http_helpers;
98mod integrity_verification;
99mod large_object_optimization_support;
100mod lifecycle;
101mod lifecycle_inventory;
102mod lifecycle_quotas;
103mod metadata_architecture_support;
104mod object_delete_tag_lock;
105mod object_layout_support;
106mod object_lock_admin;
107mod object_multipart;
108mod object_read_list;
109mod object_write;
110mod observability_internal;
111mod ops_admin_surfaces;
112mod ops_config_reports;
113mod ops_console;
114mod ops_evidence_exports;
115mod ops_health_diagnostics;
116mod ops_incident_reports;
117mod parsing_bucket;
118mod parsing_config;
119mod placement_domain_support;
120mod replication_cors;
121mod replication_observability;
122mod replication_strategy_support;
123mod runtime_core;
124mod s3_bucket_dispatch;
125mod s3_http;
126mod s3_object_dispatch;
127mod s3_select_runtime;
128mod s3_select_validation;
129mod s3_service_specific_errors;
130mod s3_targets;
131mod small_object_optimization_support;
132mod state;
133mod storage_backend_support;
134mod storage_commit;
135mod validators;
136mod xml_bucket;
137mod xml_object_multipart;
138pub use browser_ui::*;
139pub use bucketwarden_auth::{
140    CredentialSupportReport, IdentityProviderSupportReport, OperatorAction, OperatorRole,
141    RoleAssignment, TemporaryCredentialSupportReport,
142};
143pub(crate) use bucketwarden_crypto::md5_digest;
144pub(crate) use bucketwarden_errors::s3_service_specific_error_by_family_code;
145pub use bucketwarden_errors::{s3_service_specific_error_catalog, S3ServiceSpecificError};
146pub use consistency_model_support::*;
147pub use console_api::*;
148pub use erasure_coding_support::*;
149pub(crate) use error_encoding::*;
150pub use filesystem_store::*;
151pub(crate) use http_helpers::*;
152pub use integrity_verification::*;
153pub use large_object_optimization_support::*;
154pub use metadata_architecture_support::*;
155pub use object_layout_support::*;
156pub(crate) use parsing_bucket::*;
157pub(crate) use parsing_config::*;
158pub use placement_domain_support::*;
159pub use replication_strategy_support::*;
160pub(crate) use s3_select_validation::*;
161pub use s3_service_specific_errors::*;
162pub(crate) use s3_targets::*;
163pub use small_object_optimization_support::*;
164pub use state::*;
165pub use storage_backend_support::*;
166pub use storage_commit::*;
167pub(crate) use validators::*;
168pub(crate) use xml_bucket::*;
169pub(crate) use xml_object_multipart::*;
170#[derive(Clone, Debug, Eq, PartialEq)]
171struct S3RequestTarget {
172    bucket: Option<String>,
173    key: Option<String>,
174}