MCPcopy Create free account
hub / github.com/AbelChe/evil_minio / PostRestoreObjectHandler

Method PostRestoreObjectHandler

cmd/object-handlers.go:2981–3171  ·  view source on GitHub ↗

RestoreObjectHandler - POST restore object handler. ----------

(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

2979// RestoreObjectHandler - POST restore object handler.
2980// ----------
2981func (api objectAPIHandlers) PostRestoreObjectHandler(w http.ResponseWriter, r *http.Request) {
2982 ctx := newContext(r, w, "PostRestoreObject")
2983 defer logger.AuditLog(ctx, w, r, mustGetClaimsFromToken(r))
2984 vars := mux.Vars(r)
2985 bucket := vars["bucket"]
2986 object, err := unescapePath(vars["object"])
2987 if err != nil {
2988 writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL)
2989 return
2990 }
2991
2992 // Fetch object stat info.
2993 objectAPI := api.ObjectAPI()
2994 if objectAPI == nil {
2995 writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrServerNotInitialized), r.URL)
2996 return
2997 }
2998
2999 getObjectInfo := objectAPI.GetObjectInfo
3000 if api.CacheAPI() != nil {
3001 getObjectInfo = api.CacheAPI().GetObjectInfo
3002 }
3003
3004 // Check for auth type to return S3 compatible error.
3005 if s3Error := checkRequestAuthType(ctx, r, policy.RestoreObjectAction, bucket, object); s3Error != ErrNone {
3006 writeErrorResponse(ctx, w, errorCodes.ToAPIErr(s3Error), r.URL)
3007 return
3008 }
3009
3010 if r.ContentLength <= 0 {
3011 writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrEmptyRequestBody), r.URL)
3012 return
3013 }
3014 opts, err := postRestoreOpts(ctx, r, bucket, object)
3015 if err != nil {
3016 writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL)
3017 return
3018 }
3019
3020 objInfo, err := getObjectInfo(ctx, bucket, object, opts)
3021 if err != nil {
3022 writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL)
3023 return
3024 }
3025
3026 if objInfo.TransitionedObject.Status != lifecycle.TransitionComplete {
3027 writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrInvalidObjectState), r.URL)
3028 return
3029 }
3030
3031 rreq, err := parseRestoreRequest(io.LimitReader(r.Body, r.ContentLength))
3032 if err != nil {
3033 apiErr := errorCodes.ToAPIErr(ErrMalformedXML)
3034 apiErr.Description = err.Error()
3035 writeErrorResponse(ctx, w, apiErr, r.URL)
3036 return
3037 }
3038 // validate the request

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
AuditLogFunction · 0.92
ExpectedExpiryTimeFunction · 0.92
LogIfFunction · 0.92
GetSourceIPFunction · 0.92
NewObjectReadSeekCloserFunction · 0.92
newContextFunction · 0.85
mustGetClaimsFromTokenFunction · 0.85
unescapePathFunction · 0.85
toAPIErrorFunction · 0.85
checkRequestAuthTypeFunction · 0.85
postRestoreOptsFunction · 0.85

Tested by

no test coverage detected