You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							104 lines
						
					
					
						
							3.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							104 lines
						
					
					
						
							3.1 KiB
						
					
					
				
								/*
							 | 
						|
								 * MinIO Cloud Storage, (C) 2019 MinIO, Inc.
							 | 
						|
								 *
							 | 
						|
								 * Licensed under the Apache License, Version 2.0 (the "License");
							 | 
						|
								 * you may not use this file except in compliance with the License.
							 | 
						|
								 * You may obtain a copy of the License at
							 | 
						|
								 *
							 | 
						|
								 *     http://www.apache.org/licenses/LICENSE-2.0
							 | 
						|
								 *
							 | 
						|
								 * Unless required by applicable law or agreed to in writing, software
							 | 
						|
								 * distributed under the License is distributed on an "AS IS" BASIS,
							 | 
						|
								 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
							 | 
						|
								 * See the License for the specific language governing permissions and
							 | 
						|
								 * limitations under the License.
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								package s3_constants
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"net/http"
							 | 
						|
									"strings"
							 | 
						|
								
							 | 
						|
									"github.com/gorilla/mux"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// Standard S3 HTTP request constants
							 | 
						|
								const (
							 | 
						|
									// S3 storage class
							 | 
						|
									AmzStorageClass = "x-amz-storage-class"
							 | 
						|
								
							 | 
						|
									// S3 user-defined metadata
							 | 
						|
									AmzUserMetaPrefix    = "X-Amz-Meta-"
							 | 
						|
									AmzUserMetaDirective = "X-Amz-Metadata-Directive"
							 | 
						|
									AmzUserMetaMtime     = "X-Amz-Meta-Mtime"
							 | 
						|
								
							 | 
						|
									// S3 object tagging
							 | 
						|
									AmzObjectTagging          = "X-Amz-Tagging"
							 | 
						|
									AmzObjectTaggingPrefix    = "X-Amz-Tagging-"
							 | 
						|
									AmzObjectTaggingDirective = "X-Amz-Tagging-Directive"
							 | 
						|
									AmzTagCount               = "x-amz-tagging-count"
							 | 
						|
								
							 | 
						|
									SeaweedFSIsDirectoryKey = "X-Seaweedfs-Is-Directory-Key"
							 | 
						|
									SeaweedFSPartNumber     = "X-Seaweedfs-Part-Number"
							 | 
						|
									SeaweedFSUploadId       = "X-Seaweedfs-Upload-Id"
							 | 
						|
								
							 | 
						|
									// S3 ACL headers
							 | 
						|
									AmzCannedAcl      = "X-Amz-Acl"
							 | 
						|
									AmzAclFullControl = "X-Amz-Grant-Full-Control"
							 | 
						|
									AmzAclRead        = "X-Amz-Grant-Read"
							 | 
						|
									AmzAclWrite       = "X-Amz-Grant-Write"
							 | 
						|
									AmzAclReadAcp     = "X-Amz-Grant-Read-Acp"
							 | 
						|
									AmzAclWriteAcp    = "X-Amz-Grant-Write-Acp"
							 | 
						|
								
							 | 
						|
									// S3 Object Lock headers
							 | 
						|
									AmzBucketObjectLockEnabled   = "X-Amz-Bucket-Object-Lock-Enabled"
							 | 
						|
									AmzObjectLockMode            = "X-Amz-Object-Lock-Mode"
							 | 
						|
									AmzObjectLockRetainUntilDate = "X-Amz-Object-Lock-Retain-Until-Date"
							 | 
						|
									AmzObjectLockLegalHold       = "X-Amz-Object-Lock-Legal-Hold"
							 | 
						|
								
							 | 
						|
									// S3 conditional copy headers
							 | 
						|
									AmzCopySourceIfMatch           = "X-Amz-Copy-Source-If-Match"
							 | 
						|
									AmzCopySourceIfNoneMatch       = "X-Amz-Copy-Source-If-None-Match"
							 | 
						|
									AmzCopySourceIfModifiedSince   = "X-Amz-Copy-Source-If-Modified-Since"
							 | 
						|
									AmzCopySourceIfUnmodifiedSince = "X-Amz-Copy-Source-If-Unmodified-Since"
							 | 
						|
								
							 | 
						|
									AmzMpPartsCount = "X-Amz-Mp-Parts-Count"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// Non-Standard S3 HTTP request constants
							 | 
						|
								const (
							 | 
						|
									AmzIdentityId = "s3-identity-id"
							 | 
						|
									AmzAccountId  = "s3-account-id"
							 | 
						|
									AmzAuthType   = "s3-auth-type"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								func GetBucketAndObject(r *http.Request) (bucket, object string) {
							 | 
						|
									vars := mux.Vars(r)
							 | 
						|
									bucket = vars["bucket"]
							 | 
						|
									object = vars["object"]
							 | 
						|
									if !strings.HasPrefix(object, "/") {
							 | 
						|
										object = "/" + object
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func GetPrefix(r *http.Request) string {
							 | 
						|
									query := r.URL.Query()
							 | 
						|
									prefix := query.Get("prefix")
							 | 
						|
									if !strings.HasPrefix(prefix, "/") {
							 | 
						|
										prefix = "/" + prefix
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return prefix
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								var PassThroughHeaders = map[string]string{
							 | 
						|
									"response-cache-control":       "Cache-Control",
							 | 
						|
									"response-content-disposition": "Content-Disposition",
							 | 
						|
									"response-content-encoding":    "Content-Encoding",
							 | 
						|
									"response-content-language":    "Content-Language",
							 | 
						|
									"response-content-type":        "Content-Type",
							 | 
						|
									"response-expires":             "Expires",
							 | 
						|
								}
							 |