MCPcopy Create free account
hub / github.com/imgproxy/imgproxy / execute

Method execute

handlers/processing/request.go:36–144  ·  view source on GitHub ↗

execute handles the actual processing logic

()

Source from the content-addressed store, hash-verified

34
35// execute handles the actual processing logic
36func (r *request) execute() *server.Error {
37 outFormat := options.Get(r.opts, keys.Format, imagetype.Unknown)
38
39 // Check if we can save the resulting image
40 canSave := vips.SupportsSave(outFormat) ||
41 outFormat == imagetype.Unknown ||
42 outFormat == imagetype.SVG
43
44 if !canSave {
45 return server.NewError(handlers.NewCantSaveError(outFormat), handlers.ErrCategoryPathParsing)
46 }
47
48 ctx := r.req.Context()
49
50 // Acquire worker
51 releaseWorker, err := r.acquireWorker()
52 if err != nil {
53 return server.NewError(err, handlers.ErrCategoryQueue)
54 }
55 defer releaseWorker()
56
57 // Deal with processing image counter
58 r.Monitoring().Stats().IncImagesInProgress()
59 defer r.Monitoring().Stats().DecImagesInProgress()
60
61 // Response status code is OK by default
62 statusCode := http.StatusOK
63
64 // Request headers
65 imgRequestHeaders := r.makeImageRequestHeaders()
66
67 // create download options
68 do, err := r.makeDownloadOptions(imgRequestHeaders)
69 if err != nil {
70 return server.NewError(err, handlers.ErrCategoryDownload)
71 }
72
73 // Fetch image actual
74 originData, originHeaders, err := r.fetchImage(do)
75 if originData != nil {
76 defer originData.Close() // if any originData has been opened, we need to close it
77 }
78
79 // Check that image detection didn't take too long
80 if terr := server.CheckTimeout(ctx); terr != nil {
81 return server.NewError(terr, handlers.ErrCategoryTimeout)
82 }
83
84 // Respond with NotModified if image was not modified
85 var nmErr fetcher.NotModifiedError
86
87 if errors.As(err, &nmErr) {
88 r.rw.SetOriginHeaders(nmErr.Headers())
89 r.ch.SetOriginHeaders(nmErr.Headers())
90
91 r.respondWithNotModified()
92
93 return nil

Callers 1

ExecuteMethod · 0.45

Calls 15

acquireWorkerMethod · 0.95
makeDownloadOptionsMethod · 0.95
fetchImageMethod · 0.95
HeadersMethod · 0.95
handleDownloadErrorMethod · 0.95
processImageMethod · 0.95
wrapDownloadingErrMethod · 0.95
writeDebugHeadersMethod · 0.95
respondWithImageMethod · 0.95
GetFunction · 0.92

Tested by

no test coverage detected