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

Method SetRemoteTargetHandler

cmd/admin-bucket-handlers.go:152–287  ·  view source on GitHub ↗

SetRemoteTargetHandler - sets a remote target for bucket

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

Source from the content-addressed store, hash-verified

150
151// SetRemoteTargetHandler - sets a remote target for bucket
152func (a adminAPIHandlers) SetRemoteTargetHandler(w http.ResponseWriter, r *http.Request) {
153 ctx := newContext(r, w, "SetBucketTarget")
154
155 defer logger.AuditLog(ctx, w, r, mustGetClaimsFromToken(r))
156 vars := mux.Vars(r)
157 bucket := pathClean(vars["bucket"])
158 update := r.Form.Get("update") == "true"
159
160 // Get current object layer instance.
161 objectAPI, _ := validateAdminReq(ctx, w, r, iampolicy.SetBucketTargetAction)
162 if objectAPI == nil {
163 return
164 }
165
166 // Check if bucket exists.
167 if _, err := objectAPI.GetBucketInfo(ctx, bucket, BucketOptions{}); err != nil {
168 writeErrorResponseJSON(ctx, w, toAPIError(ctx, err), r.URL)
169 return
170 }
171
172 cred, _, s3Err := validateAdminSignature(ctx, r, "")
173 if s3Err != ErrNone {
174 writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(s3Err), r.URL)
175 return
176 }
177 password := cred.SecretKey
178
179 reqBytes, err := madmin.DecryptData(password, io.LimitReader(r.Body, r.ContentLength))
180 if err != nil {
181 writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErrWithErr(ErrAdminConfigBadJSON, err), r.URL)
182 return
183 }
184 var target madmin.BucketTarget
185 json := jsoniter.ConfigCompatibleWithStandardLibrary
186 if err = json.Unmarshal(reqBytes, &target); err != nil {
187 writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErrWithErr(ErrAdminConfigBadJSON, err), r.URL)
188 return
189 }
190 sameTarget, _ := isLocalHost(target.URL().Hostname(), target.URL().Port(), globalMinioPort)
191 if sameTarget && bucket == target.TargetBucket {
192 writeErrorResponseJSON(ctx, w, errorCodes.ToAPIErr(ErrBucketRemoteIdenticalToSource), r.URL)
193 return
194 }
195
196 target.SourceBucket = bucket
197 var ops []madmin.TargetUpdateType
198 if update {
199 ops = madmin.GetTargetUpdateOps(r.Form)
200 } else {
201 var exists bool // true if arn exists
202 target.Arn, exists = globalBucketTargetSys.getRemoteARN(bucket, &target, "")
203 if exists && target.Arn != "" { // return pre-existing ARN
204 data, err := json.Marshal(target.Arn)
205 if err != nil {
206 writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL)
207 return
208 }
209 // Write success response.

Callers

nothing calls this directly

Calls 15

AuditLogFunction · 0.92
newContextFunction · 0.85
mustGetClaimsFromTokenFunction · 0.85
pathCleanFunction · 0.85
validateAdminReqFunction · 0.85
writeErrorResponseJSONFunction · 0.85
toAPIErrorFunction · 0.85
validateAdminSignatureFunction · 0.85
isLocalHostFunction · 0.85
toAdminAPIErrFunction · 0.85
writeSuccessResponseJSONFunction · 0.85
ToAPIErrMethod · 0.80

Tested by

no test coverage detected