aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Crute <mike@crute.us>2023-11-28 19:05:54 -0800
committerMike Crute <mike@crute.us>2023-11-28 19:05:54 -0800
commit12dc40e069ef8358fb88057adcd93191a313dbb0 (patch)
treeebb5fb18e9d8f6ad014c510555d09059d7b99b35
parent30ae390089feb1be634f921deda3fd5e945f2dac (diff)
downloadgolib-12dc40e069ef8358fb88057adcd93191a313dbb0.tar.bz2
golib-12dc40e069ef8358fb88057adcd93191a313dbb0.tar.xz
golib-12dc40e069ef8358fb88057adcd93191a313dbb0.zip
echo: add css preprocessor controller
-rw-r--r--echo/controller/css_preprocessor.go41
-rw-r--r--echo/go.mod5
-rw-r--r--echo/go.sum9
3 files changed, 54 insertions, 1 deletions
diff --git a/echo/controller/css_preprocessor.go b/echo/controller/css_preprocessor.go
new file mode 100644
index 0000000..a00beb8
--- /dev/null
+++ b/echo/controller/css_preprocessor.go
@@ -0,0 +1,41 @@
1package controller
2
3import (
4 "bytes"
5 "io/fs"
6 "net/http"
7
8 "github.com/labstack/echo/v4"
9
10 "code.crute.us/mcrute/golib/web/css"
11)
12
13type CSSMinifierController struct {
14 Debug bool
15 Name string
16 Files fs.FS
17 cache []byte
18}
19
20func (m *CSSMinifierController) Load() error {
21 if !m.Debug {
22 c := &bytes.Buffer{}
23 err := css.ParseWriteSheet(m.Files, m.Name, c)
24 m.cache = c.Bytes()
25 return err
26 }
27 return nil
28}
29
30func (m *CSSMinifierController) Handle(c echo.Context) error {
31 r := c.Response()
32 r.Header().Set("Content-Type", "text/css")
33 r.WriteHeader(http.StatusOK)
34
35 if m.Debug {
36 return css.ParseWriteSheet(m.Files, m.Name, r)
37 } else {
38 _, err := r.Write(m.cache)
39 return err
40 }
41}
diff --git a/echo/go.mod b/echo/go.mod
index c19104a..23a62be 100644
--- a/echo/go.mod
+++ b/echo/go.mod
@@ -1,12 +1,13 @@
1module code.crute.us/mcrute/golib/echo 1module code.crute.us/mcrute/golib/echo
2 2
3go 1.18 3go 1.21.3
4 4
5require ( 5require (
6 code.crute.us/mcrute/golib v0.8.1 6 code.crute.us/mcrute/golib v0.8.1
7 code.crute.us/mcrute/golib/clients/netbox/v4 v4.1.0 7 code.crute.us/mcrute/golib/clients/netbox/v4 v4.1.0
8 code.crute.us/mcrute/golib/secrets v0.4.0 8 code.crute.us/mcrute/golib/secrets v0.4.0
9 code.crute.us/mcrute/golib/vault v0.2.6 9 code.crute.us/mcrute/golib/vault v0.2.6
10 code.crute.us/mcrute/golib/web/css v0.1.0
10 github.com/elnormous/contenttype v1.0.3 11 github.com/elnormous/contenttype v1.0.3
11 github.com/labstack/echo/v4 v4.6.1 12 github.com/labstack/echo/v4 v4.6.1
12 github.com/labstack/gommon v0.3.1 13 github.com/labstack/gommon v0.3.1
@@ -19,6 +20,7 @@ require (
19require ( 20require (
20 github.com/armon/go-metrics v0.3.9 // indirect 21 github.com/armon/go-metrics v0.3.9 // indirect
21 github.com/armon/go-radix v1.0.0 // indirect 22 github.com/armon/go-radix v1.0.0 // indirect
23 github.com/aymerick/douceur v0.2.0 // indirect
22 github.com/beorn7/perks v1.0.1 // indirect 24 github.com/beorn7/perks v1.0.1 // indirect
23 github.com/cenkalti/backoff/v3 v3.0.0 // indirect 25 github.com/cenkalti/backoff/v3 v3.0.0 // indirect
24 github.com/cespare/xxhash/v2 v2.1.1 // indirect 26 github.com/cespare/xxhash/v2 v2.1.1 // indirect
@@ -29,6 +31,7 @@ require (
29 github.com/golang/protobuf v1.5.3 // indirect 31 github.com/golang/protobuf v1.5.3 // indirect
30 github.com/golang/snappy v0.0.4 // indirect 32 github.com/golang/snappy v0.0.4 // indirect
31 github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect 33 github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect
34 github.com/gorilla/css v1.0.1 // indirect
32 github.com/hashicorp/errwrap v1.1.0 // indirect 35 github.com/hashicorp/errwrap v1.1.0 // indirect
33 github.com/hashicorp/go-cleanhttp v0.5.2 // indirect 36 github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
34 github.com/hashicorp/go-hclog v0.16.2 // indirect 37 github.com/hashicorp/go-hclog v0.16.2 // indirect
diff --git a/echo/go.sum b/echo/go.sum
index 48cbde5..462635f 100644
--- a/echo/go.sum
+++ b/echo/go.sum
@@ -38,6 +38,8 @@ code.crute.us/mcrute/golib/secrets v0.4.0 h1:tZzQEOnJshDGuzvvr0n0BMWZbu3ZMB5QRqI
38code.crute.us/mcrute/golib/secrets v0.4.0/go.mod h1:c40ezKg/NXe5NE3PaCRIUJC6D6XCoPSu9+duZSdKsNY= 38code.crute.us/mcrute/golib/secrets v0.4.0/go.mod h1:c40ezKg/NXe5NE3PaCRIUJC6D6XCoPSu9+duZSdKsNY=
39code.crute.us/mcrute/golib/vault v0.2.6 h1:X+TlEGFPj6pj3OqmrJprv+wJYdo8QTR2IpP3EfVniHU= 39code.crute.us/mcrute/golib/vault v0.2.6 h1:X+TlEGFPj6pj3OqmrJprv+wJYdo8QTR2IpP3EfVniHU=
40code.crute.us/mcrute/golib/vault v0.2.6/go.mod h1:QBgcKiG94tPHAcxeRyNHrfiLGSKtojlRDLGRX5I6LgE= 40code.crute.us/mcrute/golib/vault v0.2.6/go.mod h1:QBgcKiG94tPHAcxeRyNHrfiLGSKtojlRDLGRX5I6LgE=
41code.crute.us/mcrute/golib/web/css v0.1.0 h1:VdP0i2Q+JC+TxiyWTAdqksDcKU4GKwL2Ly02ZRkyDFw=
42code.crute.us/mcrute/golib/web/css v0.1.0/go.mod h1:USqoGbYKNDhEVZITLxSxd/vFXBihL8/N3Gg/v01hNWo=
41dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= 43dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
42github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 44github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
43github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= 45github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
@@ -53,6 +55,8 @@ github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4
53github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= 55github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
54github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= 56github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
55github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= 57github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
58github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
59github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
56github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= 60github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
57github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= 61github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
58github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= 62github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@@ -105,6 +109,7 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
105github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= 109github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
106github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= 110github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
107github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= 111github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
112github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
108github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= 113github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
109github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= 114github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
110github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= 115github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
@@ -156,6 +161,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
156github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 161github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
157github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 162github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
158github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= 163github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
164github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
159github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 165github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
160github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= 166github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
161github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= 167github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
@@ -172,6 +178,8 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4
172github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 178github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
173github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= 179github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
174github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= 180github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
181github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
182github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
175github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= 183github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
176github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= 184github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
177github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= 185github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
@@ -302,6 +310,7 @@ github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ
302github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= 310github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q=
303github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k= 311github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k=
304github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= 312github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
313github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg=
305github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= 314github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
306github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= 315github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
307github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= 316github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI=