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.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							45 lines
						
					
					
						
							1.3 KiB
						
					
					
				| package iamapi | |
| 
 | |
| import ( | |
| 	"net/http" | |
| 
 | |
| 	"github.com/aws/aws-sdk-go/service/iam" | |
| 	"github.com/seaweedfs/seaweedfs/weed/glog" | |
| 	"github.com/seaweedfs/seaweedfs/weed/s3api/s3err" | |
| ) | |
| 
 | |
| func newErrorResponse(errCode string, errMsg string) ErrorResponse { | |
| 	errorResp := ErrorResponse{} | |
| 	errorResp.Error.Type = "Sender" | |
| 	errorResp.Error.Code = &errCode | |
| 	errorResp.Error.Message = &errMsg | |
| 	return errorResp | |
| } | |
| 
 | |
| func writeIamErrorResponse(w http.ResponseWriter, r *http.Request, iamError *IamError) { | |
| 
 | |
| 	if iamError == nil { | |
| 		// Do nothing if there is no error | |
| 		glog.Errorf("No error found") | |
| 		return | |
| 	} | |
| 
 | |
| 	errCode := iamError.Code | |
| 	errMsg := iamError.Error.Error() | |
| 	glog.Errorf("Response %+v", errMsg) | |
| 
 | |
| 	errorResp := newErrorResponse(errCode, errMsg) | |
| 	internalErrorResponse := newErrorResponse(iam.ErrCodeServiceFailureException, "Internal server error") | |
| 
 | |
| 	switch errCode { | |
| 	case iam.ErrCodeNoSuchEntityException: | |
| 		s3err.WriteXMLResponse(w, r, http.StatusNotFound, errorResp) | |
| 	case iam.ErrCodeMalformedPolicyDocumentException: | |
| 		s3err.WriteXMLResponse(w, r, http.StatusBadRequest, errorResp) | |
| 	case iam.ErrCodeServiceFailureException: | |
| 		// We do not want to expose internal server error to the client | |
| 		s3err.WriteXMLResponse(w, r, http.StatusInternalServerError, internalErrorResponse) | |
| 	default: | |
| 		s3err.WriteXMLResponse(w, r, http.StatusInternalServerError, internalErrorResponse) | |
| 	} | |
| }
 |