RestoreObjectHandler - POST restore object handler. ----------
(w http.ResponseWriter, r *http.Request)
| 2979 | // RestoreObjectHandler - POST restore object handler. |
| 2980 | // ---------- |
| 2981 | func (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 |
nothing calls this directly
no test coverage detected