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.
		
		
		
		
		
			
		
			
				
					
					
						
							40 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							40 lines
						
					
					
						
							1.3 KiB
						
					
					
				
								package s3api
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"io"
							 | 
						|
									"net/http"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/s3api/s3err"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// getRequestDataReader returns the appropriate reader for the request body.
							 | 
						|
								// When IAM is disabled, it still processes chunked transfer encoding for
							 | 
						|
								// authTypeStreamingUnsigned to strip checksum headers and extract the actual data.
							 | 
						|
								// This fixes issues where chunked data with checksums would be stored incorrectly
							 | 
						|
								// when IAM is not enabled.
							 | 
						|
								func getRequestDataReader(s3a *S3ApiServer, r *http.Request) (io.ReadCloser, s3err.ErrorCode) {
							 | 
						|
									var s3ErrCode s3err.ErrorCode
							 | 
						|
									dataReader := r.Body
							 | 
						|
									rAuthType := getRequestAuthType(r)
							 | 
						|
									if s3a.iam.isEnabled() {
							 | 
						|
										switch rAuthType {
							 | 
						|
										case authTypeStreamingSigned, authTypeStreamingUnsigned:
							 | 
						|
											dataReader, s3ErrCode = s3a.iam.newChunkedReader(r)
							 | 
						|
										case authTypeSignedV2, authTypePresignedV2:
							 | 
						|
											_, s3ErrCode = s3a.iam.isReqAuthenticatedV2(r)
							 | 
						|
										case authTypePresigned, authTypeSigned:
							 | 
						|
											_, s3ErrCode = s3a.iam.reqSignatureV4Verify(r)
							 | 
						|
										}
							 | 
						|
									} else {
							 | 
						|
										switch rAuthType {
							 | 
						|
										case authTypeStreamingSigned:
							 | 
						|
											s3ErrCode = s3err.ErrAuthNotSetup
							 | 
						|
										case authTypeStreamingUnsigned:
							 | 
						|
											// Even when IAM is disabled, we still need to handle chunked transfer encoding
							 | 
						|
											// to strip checksum headers and process the data correctly
							 | 
						|
											dataReader, s3ErrCode = s3a.iam.newChunkedReader(r)
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return dataReader, s3ErrCode
							 | 
						|
								}
							 |