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}