Skip to content

Commit e5bcd0d

Browse files
committed
Return correct status from verify handler.
1 parent 406127b commit e5bcd0d

File tree

1 file changed

+31
-33
lines changed

1 file changed

+31
-33
lines changed

services/lfs/server.go

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,7 @@ func BatchHandler(ctx *context.Context) {
269269
return
270270
}
271271

272-
reqCtx := &requestContext{
273-
User: ctx.Params("username"),
274-
Repo: strings.TrimSuffix(ctx.Params("reponame"), ".git"),
275-
Authorization: ctx.Req.Header.Get("Authorization"),
276-
}
272+
reqCtx := getRequestContext(ctx)
277273

278274
repository, err := models.GetRepositoryByOwnerAndName(reqCtx.User, reqCtx.Repo)
279275
if err != nil {
@@ -291,55 +287,55 @@ func BatchHandler(ctx *context.Context) {
291287

292288
var responseObjects []*lfs_module.ObjectResponse
293289

294-
for _, object := range bv.Objects {
290+
for _, p := range bv.Objects {
295291
if !object.IsValid() {
296-
responseObjects = append(responseObjects, buildDownloadObjectResponse(reqCtx, object, http.StatusUnprocessableEntity))
292+
responseObjects = append(responseObjects, buildObjectResponse(reqCtx, p, false, false, http.StatusUnprocessableEntity))
297293
continue
298294
}
299295

300-
exist, err := contentStore.Exists(object)
296+
exists, err := contentStore.Exists(p)
301297
if err != nil {
302-
log.Error("Unable to check if LFS OID[%s] exist on %s/%s. Error: %v", object.Oid, reqCtx.User, reqCtx.Repo, err)
298+
log.Error("Unable to check if LFS OID[%s] exist on %s/%s. Error: %v", p.Oid, reqCtx.User, reqCtx.Repo, err)
303299
writeStatus(ctx, http.StatusInternalServerError)
304300
return
305301
}
306302

307-
meta, metaErr := repository.GetLFSMetaObjectByOid(object.Oid)
303+
meta, metaErr := repository.GetLFSMetaObjectByOid(p.Oid)
308304
if metaErr != nil && metaErr != models.ErrLFSObjectNotExist {
309-
log.Error("Unable to get LFS MetaObject [%s] for %s/%s. Error: %v", object.Oid, reqCtx.User, reqCtx.Repo, metaErr)
305+
log.Error("Unable to get LFS MetaObject [%s] for %s/%s. Error: %v", p.Oid, reqCtx.User, reqCtx.Repo, metaErr)
310306
writeStatus(ctx, http.StatusInternalServerError)
311307
return
312308
}
313309

314310
var responseObject *lfs_module.ObjectResponse
315311
if isUpload {
316312
if !exists && setting.LFS.MaxFileSize > 0 && object.Size > setting.LFS.MaxFileSize {
317-
log.Info("Denied LFS OID[%s] upload of size %d to %s/%s because of LFS_MAX_FILE_SIZE=%d", object.Oid, object.Size, reqCtx.User, reqCtx.Repo, setting.LFS.MaxFileSize)
313+
log.Info("Denied LFS OID[%s] upload of size %d to %s/%s because of LFS_MAX_FILE_SIZE=%d", p.Oid, p.Size, reqCtx.User, reqCtx.Repo, setting.LFS.MaxFileSize)
318314
writeStatus(ctx, http.StatusRequestEntityTooLarge)
319315
return
320316
}
321317

322318
if exists {
323319
if meta == nil {
324-
_, err := models.NewLFSMetaObject(&models.LFSMetaObject{Pointer: object, RepositoryID: repository.ID})
320+
_, err := models.NewLFSMetaObject(&models.LFSMetaObject{Pointer: p, RepositoryID: repository.ID})
325321
if err != nil {
326-
log.Error("Unable to create LFS MetaObject [%s] for %s/%s. Error: %v", object.Oid, reqCtx.User, reqCtx.Repo, metaErr)
322+
log.Error("Unable to create LFS MetaObject [%s] for %s/%s. Error: %v", p.Oid, reqCtx.User, reqCtx.Repo, metaErr)
327323
writeStatus(ctx, http.StatusInternalServerError)
328324
return
329325
}
330326
}
331327
}
332328

333-
responseObject = buildObjectResponse(reqCtx, object, false, !exists, 0)
329+
responseObject = buildObjectResponse(reqCtx, p, false, !exists, 0)
334330
} else {
335331
errorCode := 0
336-
if !exist || meta == nil {
332+
if !exists || meta == nil {
337333
errorCode = http.StatusNotFound
338-
} else if meta.Size != object.Size {
334+
} else if meta.Size != p.Size {
339335
errorCode = http.StatusUnprocessableEntity
340336
}
341337

342-
responseObject = buildObjectResponse(reqCtx, object, true, false, errorCode)
338+
responseObject = buildObjectResponse(reqCtx, p, true, false, errorCode)
343339
}
344340
responseObjects = append(responseObjects, responseObject)
345341
}
@@ -397,7 +393,6 @@ func VerifyHandler(ctx *context.Context) {
397393

398394
meta, _ := getAuthenticatedRepoAndMeta(ctx, rc, p, true)
399395
if meta == nil {
400-
// Status already written in getAuthenticatedRepoAndMeta
401396
return
402397
}
403398

@@ -409,27 +404,35 @@ func VerifyHandler(ctx *context.Context) {
409404
fmt.Fprintf(ctx.Resp, `{"message":"Internal Server Error"}`)
410405
return
411406
}
407+
408+
status := http.StatusOK
412409
if !ok {
413-
writeStatus(ctx, http.StatusUnprocessableEntity)
414-
return
410+
status = http.StatusUnprocessableEntity
415411
}
412+
writeStatus(ctx, status)
413+
}
416414

417-
logRequest(ctx.Req, http.StatusOK)
415+
func getRequestContext(ctx *context.Context) *requestContext {
416+
return &requestContext{
417+
User: ctx.Params("username"),
418+
Repo: strings.TrimSuffix(ctx.Params("reponame"), ".git"),
419+
Authorization: ctx.Req.Header.Get("Authorization"),
420+
}
418421
}
419422

420423
func buildObjectResponse(rc *requestContext, pointer lfs_module.Pointer, download, upload bool, errorCode int) *lfs_module.ObjectResponse {
421424
rep := &lfs_module.ObjectResponse{Pointer: pointer}
422425
if errorCode > 0 {
423-
rep.Error = &ObjectError{
424-
Code: errorCode,
426+
rep.Error = &lfs_module.ObjectError{
427+
Code: errorCode,
425428
Message: http.StatusText(errorCode),
426429
}
427430
} else {
428431
rep.Actions = make(map[string]*lfs_module.Link)
429432

430433
header := make(map[string]string)
431434
verifyHeader := make(map[string]string)
432-
435+
433436
if len(rc.Authorization) > 0 {
434437
header["Authorization"] = rc.Authorization
435438
verifyHeader["Authorization"] = rc.Authorization
@@ -455,17 +458,12 @@ func isValidAccept(r *http.Request) bool {
455458
}
456459

457460
func unpack(ctx *context.Context) (*requestContext, lfs_module.Pointer) {
458-
r := ctx.Req
459-
rc := &requestContext{
460-
User: ctx.Params("username"),
461-
Repo: strings.TrimSuffix(ctx.Params("reponame"), ".git"),
462-
Authorization: r.Header.Get("Authorization"),
463-
}
461+
rc := getRequestContext(ctx)
464462
p := lfs_module.Pointer{Oid: ctx.Params("oid")}
465463

466-
if r.Method == "POST" { // Maybe also check if +json
464+
if ctx.Req.Method == "POST" { // Maybe also check if +json
467465
var p2 lfs_module.Pointer
468-
bodyReader := r.Body
466+
bodyReader := ctx.Req.Body
469467
defer bodyReader.Close()
470468
json := jsoniter.ConfigCompatibleWithStandardLibrary
471469
dec := json.NewDecoder(bodyReader)

0 commit comments

Comments
 (0)