Skip to content

Commit abbfa35

Browse files
committed
correction with cache interception to use native caddy
1 parent 9fca408 commit abbfa35

File tree

5 files changed

+45
-69
lines changed

5 files changed

+45
-69
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,5 @@ test:
2525
clean:
2626
rm -rf $(OUT_DIR)
2727
run:
28-
$(XCADDY) run --with $(MODULE_PATH)=./
28+
$(XCADDY) run
2929
./$(OUT_DIR)/$(BINARY_NAME)

README.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,14 @@ Follow these steps to utilize the image processing capabilities:
5151

5252
## Example Caddyfile
5353
```plaintext
54-
example.com {
55-
route /images* {
56-
reverse_proxy localhost:8080
54+
{
55+
order image_processor before respond
56+
}
57+
58+
localhost {
59+
root * /your-images-directory
60+
file_server
5761
image_processor
58-
}
5962
}
6063
```
6164

caddyfile.go

Lines changed: 0 additions & 21 deletions
This file was deleted.

caddyfileproxy.go renamed to module.go

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,42 @@
11
package CADDY_FILE_SERVER
22

33
import (
4+
"bytes"
45
"github.com/caddyserver/caddy/v2"
6+
"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
7+
"github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile"
58
"github.com/caddyserver/caddy/v2/modules/caddyhttp"
69
"github.com/h2non/bimg"
710
"net/http"
811
"strconv"
912
)
1013

1114
func init() {
12-
caddy.RegisterModule(ProxyMiddleware{})
15+
caddy.RegisterModule(Middleware{})
16+
httpcaddyfile.RegisterHandlerDirective("image_processor", parseCaddyfile)
1317
}
1418

15-
type ProxyMiddleware struct{}
19+
type Middleware struct{}
1620

17-
func (ProxyMiddleware) CaddyModule() caddy.ModuleInfo {
21+
func (Middleware) CaddyModule() caddy.ModuleInfo {
1822
return caddy.ModuleInfo{
1923
ID: "http.handlers.image_processor",
20-
New: func() caddy.Module { return new(ProxyMiddleware) },
24+
New: func() caddy.Module { return new(Middleware) },
2125
}
2226
}
2327

24-
func (m ProxyMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyhttp.Handler) error {
28+
func (m Middleware) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyhttp.Handler) error {
2529

2630
//Automatic return if not options set
2731
if r.URL.RawQuery == "" {
2832
return next.ServeHTTP(w, r)
2933
}
3034

31-
rw := &ResponseWrapper{w: w}
32-
err := next.ServeHTTP(rw, r)
33-
if err != nil {
35+
responseRecorder := caddyhttp.NewResponseRecorder(w, &bytes.Buffer{}, func(status int, header http.Header) bool {
36+
return true
37+
})
38+
39+
if err := next.ServeHTTP(responseRecorder, r); err != nil {
3440
return err
3541
}
3642

@@ -39,20 +45,32 @@ func (m ProxyMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request, next
3945
return err
4046
}
4147

42-
newImage, err := bimg.NewImage(rw.buf.Bytes()).Process(options)
48+
recordedResponse := responseRecorder.Buffer()
49+
if recordedResponse.Len() == 0 {
50+
return next.ServeHTTP(w, r)
51+
}
52+
53+
newImage, err := bimg.NewImage(recordedResponse.Bytes()).Process(options)
4354
if err != nil {
55+
// @TODO return base response on error if parameter set in caddy file
4456
return err
4557
}
4658

4759
w.Header().Set("Content-Length", strconv.Itoa(len(newImage)))
4860
w.Header().Set("Content-Type", "image/"+bimg.NewImage(newImage).Type())
49-
_, err = w.Write(newImage)
50-
if err != nil {
61+
62+
if _, err = w.Write(newImage); err != nil {
5163
return err
5264
}
65+
5366
return nil
5467
}
5568

69+
func (m *Middleware) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
70+
return nil
71+
72+
}
73+
5674
func getOptions(r *http.Request) (bimg.Options, error) {
5775
options := bimg.Options{
5876
Enlarge: true,
@@ -128,7 +146,14 @@ func getOptions(r *http.Request) (bimg.Options, error) {
128146
return options, nil
129147
}
130148

149+
func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) {
150+
var m Middleware
151+
err := m.UnmarshalCaddyfile(h.Dispenser)
152+
return m, err
153+
}
154+
131155
// Interface guards
132156
var (
133-
_ caddyhttp.MiddlewareHandler = (*ProxyMiddleware)(nil)
157+
_ caddyhttp.MiddlewareHandler = (*Middleware)(nil)
158+
_ caddyfile.Unmarshaler = (*Middleware)(nil)
134159
)

wrapper.go

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)