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.
		
		
		
		
		
			
		
			
				
					
					
						
							56 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							56 lines
						
					
					
						
							1.5 KiB
						
					
					
				
								package s3api
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"encoding/base64"
							 | 
						|
									"fmt"
							 | 
						|
									"net/http"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/s3api/s3err"
							 | 
						|
									"google.golang.org/grpc"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/pb"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								var _ = filer_pb.FilerClient(&S3ApiServer{})
							 | 
						|
								
							 | 
						|
								func (s3a *S3ApiServer) WithFilerClient(streamingMode bool, fn func(filer_pb.SeaweedFilerClient) error) error {
							 | 
						|
								
							 | 
						|
									return pb.WithGrpcClient(streamingMode, s3a.randomClientId, func(grpcConnection *grpc.ClientConn) error {
							 | 
						|
										client := filer_pb.NewSeaweedFilerClient(grpcConnection)
							 | 
						|
										return fn(client)
							 | 
						|
									}, s3a.option.Filer.ToGrpcAddress(), false, s3a.option.GrpcDialOption)
							 | 
						|
								
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func (s3a *S3ApiServer) AdjustedUrl(location *filer_pb.Location) string {
							 | 
						|
									return location.Url
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func (s3a *S3ApiServer) GetDataCenter() string {
							 | 
						|
									return s3a.option.DataCenter
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func writeSuccessResponseXML(w http.ResponseWriter, r *http.Request, response interface{}) {
							 | 
						|
									s3err.WriteXMLResponse(w, r, http.StatusOK, response)
							 | 
						|
									s3err.PostLog(r, http.StatusOK, s3err.ErrNone)
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func writeSuccessResponseEmpty(w http.ResponseWriter, r *http.Request) {
							 | 
						|
									s3err.WriteEmptyResponse(w, r, http.StatusOK)
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func writeFailureResponse(w http.ResponseWriter, r *http.Request, errCode s3err.ErrorCode) {
							 | 
						|
									s3err.WriteErrorResponse(w, r, errCode)
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func validateContentMd5(h http.Header) ([]byte, error) {
							 | 
						|
									md5B64, ok := h["Content-Md5"]
							 | 
						|
									if ok {
							 | 
						|
										if md5B64[0] == "" {
							 | 
						|
											return nil, fmt.Errorf("Content-Md5 header set to empty value")
							 | 
						|
										}
							 | 
						|
										return base64.StdEncoding.DecodeString(md5B64[0])
							 | 
						|
									}
							 | 
						|
									return []byte{}, nil
							 | 
						|
								}
							 |