Skip to content

Commit 90a6ad9

Browse files
committed
Fixed #51, Closes #52
Signed-off-by: Vishal Rana <[email protected]>
1 parent fa17c18 commit 90a6ad9

File tree

18 files changed

+83
-102
lines changed

18 files changed

+83
-102
lines changed

armor.go

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,20 @@ const (
100100
Website = "https://armor.labstack.com"
101101
)
102102

103+
var (
104+
prePlugins = map[string]bool{
105+
plugin.PluginLogger: true,
106+
plugin.PluginRedirect: true,
107+
plugin.PluginHTTPSRedirect: true,
108+
plugin.PluginHTTPSWWWRedirect: true,
109+
plugin.PluginHTTPSNonWWWRedirect: true,
110+
plugin.PluginWWWRedirect: true,
111+
plugin.PluginAddTrailingSlash: true,
112+
plugin.PluginRemoveTrailingSlash: true,
113+
plugin.PluginNonWWWRedirect: true,
114+
}
115+
)
116+
103117
func (a *Armor) FindHost(name string, add bool) (h *Host) {
104118
a.mutex.Lock()
105119
defer a.mutex.Unlock()
@@ -130,7 +144,7 @@ func (a *Armor) FindHost(name string, add bool) (h *Host) {
130144
func (a *Armor) AddPlugin(p plugin.Plugin) {
131145
a.mutex.Lock()
132146
defer a.mutex.Unlock()
133-
if p.Priority() < 0 {
147+
if p.Order() < 0 {
134148
a.Echo.Pre(p.Process)
135149
} else {
136150
a.Echo.Use(p.Process)
@@ -222,14 +236,20 @@ func (a *Armor) SavePlugins() {
222236
}
223237

224238
// Save
239+
i, j := -50, 0
225240
for _, p := range plugins {
226241
p.Source = store.File
227242
p.ID = util.ID()
228243
now := time.Now()
229244
p.CreatedAt = now
230245
p.UpdatedAt = now
231-
232-
// Insert
246+
if _, ok := prePlugins[p.Name]; ok {
247+
i++
248+
p.Order = i
249+
} else {
250+
j++
251+
p.Order = j
252+
}
233253
if err := a.Store.AddPlugin(p); err != nil {
234254
panic(err)
235255
}

cmd/root.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cmd
22

33
import (
44
"fmt"
5+
"github.com/labstack/armor/admin"
56
"io/ioutil"
67
stdLog "log"
78
"net"
@@ -10,7 +11,6 @@ import (
1011

1112
"github.com/ghodss/yaml"
1213
"github.com/labstack/armor"
13-
"github.com/labstack/armor/admin"
1414
"github.com/labstack/armor/store"
1515
"github.com/labstack/gommon/color"
1616
"github.com/labstack/gommon/log"

plugin/body_limit.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ func (b *BodyLimit) Update(p Plugin) {
2323
b.Initialize()
2424
}
2525

26-
func (*BodyLimit) Priority() int {
27-
return 1
28-
}
29-
3026
func (b *BodyLimit) Process(next echo.HandlerFunc) echo.HandlerFunc {
3127
b.mutex.RLock()
3228
defer b.mutex.RUnlock()

plugin/cors.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ func (c *CORS) Initialize() {
1616
c.Middleware = middleware.CORSWithConfig(c.CORSConfig)
1717
}
1818

19-
func (*CORS) Priority() int {
20-
return 1
21-
}
22-
2319
func (c *CORS) Update(p Plugin) {
2420
c.mutex.Lock()
2521
defer c.mutex.Unlock()

plugin/file.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ func (f *File) Update(p Plugin) {
2323
f.Initialize()
2424
}
2525

26-
func (*File) Priority() int {
27-
return 1
28-
}
29-
3026
func (f *File) Process(next echo.HandlerFunc) echo.HandlerFunc {
3127
return func(c echo.Context) error {
3228
f.mutex.RLock()

plugin/gzip.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ func (g *Gzip) Update(p Plugin) {
2323
g.Initialize()
2424
}
2525

26-
func (*Gzip) Priority() int {
27-
return 1
28-
}
29-
3026
func (g *Gzip) Process(next echo.HandlerFunc) echo.HandlerFunc {
3127
g.mutex.RLock()
3228
defer g.mutex.RUnlock()

plugin/header.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@ func (h *Header) Update(p Plugin) {
2727
h.Initialize()
2828
}
2929

30-
func (*Header) Priority() int {
31-
return 1
32-
}
33-
3430
func (h *Header) Process(next echo.HandlerFunc) echo.HandlerFunc {
3531
h.mutex.RLock()
3632
defer h.mutex.RUnlock()

plugin/logger.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ func (l *Logger) Update(p Plugin) {
2323
l.Initialize()
2424
}
2525

26-
func (*Logger) Priority() int {
27-
return -1
28-
}
29-
3026
func (l *Logger) Process(next echo.HandlerFunc) echo.HandlerFunc {
3127
l.mutex.RLock()
3228
defer l.mutex.RUnlock()

plugin/plugin.go

Lines changed: 53 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,16 @@ type (
2121
Initialize()
2222
Update(Plugin)
2323
Process(echo.HandlerFunc) echo.HandlerFunc
24-
Priority() int
24+
Order() int
2525
}
2626

2727
RawPlugin map[string]interface{}
2828

2929
// Base defines the base struct for plugins.
3030
Base struct {
31-
name string
3231
mutex *sync.RWMutex
32+
name string
33+
order int
3334
// TODO: to disable
3435
Skip string `yaml:"skip"`
3536
Middleware echo.MiddlewareFunc `yaml:"-"`
@@ -46,47 +47,69 @@ type (
4647
}
4748
)
4849

50+
const (
51+
// Plugin types
52+
PluginBodyLimit = "body-limit"
53+
PluginLogger = "logger"
54+
PluginRedirect = "redirect"
55+
PluginHTTPSRedirect = "https-redirect"
56+
PluginHTTPSWWWRedirect = "https-www-redirect"
57+
PluginHTTPSNonWWWRedirect = "https-non-www-redirect"
58+
PluginWWWRedirect = "www-redirect"
59+
PluginNonWWWRedirect = "non-www-redirect"
60+
PluginAddTrailingSlash = "add-trailing-slash"
61+
PluginRemoveTrailingSlash = "remove-trailing-slash"
62+
PluginRewrite = "rewrite"
63+
PluginSecure = "secure"
64+
PluginCORS = "cors"
65+
PluginGzip = "gzip"
66+
PluginHeader = "header"
67+
PluginProxy = "proxy"
68+
PluginStatic = "static"
69+
PluginFile = "file"
70+
)
71+
4972
var (
5073
bufferPool sync.Pool
5174

5275
// DefaultLookup function
5376
DefaultLookup = func(base Base) (p Plugin) {
5477
switch base.Name() {
55-
case "body-limit":
78+
case PluginBodyLimit:
5679
p = &BodyLimit{Base: base}
57-
case "logger":
80+
case PluginLogger:
5881
p = &Logger{Base: base}
59-
case "redirect":
82+
case PluginRedirect:
6083
p = &Redirect{Base: base}
61-
case "https-redirect":
84+
case PluginHTTPSRedirect:
6285
p = &HTTPSRedirect{Base: base}
63-
case "https-www-redirect":
86+
case PluginHTTPSWWWRedirect:
6487
p = &HTTPSWWWRedirect{Base: base}
65-
case "https-non-www-redirect":
88+
case PluginHTTPSNonWWWRedirect:
6689
p = &HTTPSNonWWWRedirect{Base: base}
67-
case "www-redirect":
90+
case PluginWWWRedirect:
6891
p = &WWWRedirect{Base: base}
69-
case "non-www-redirect":
92+
case PluginNonWWWRedirect:
7093
p = &NonWWWRedirect{Base: base}
71-
case "add-trailing-slash":
94+
case PluginAddTrailingSlash:
7295
p = &AddTrailingSlash{Base: base}
73-
case "remove-trailing-slash":
96+
case PluginRemoveTrailingSlash:
7497
p = &RemoveTrailingSlash{Base: base}
75-
case "rewrite":
98+
case PluginRewrite:
7699
p = &Rewrite{Base: base}
77-
case "secure":
100+
case PluginSecure:
78101
p = &Secure{Base: base}
79-
case "cors":
102+
case PluginCORS:
80103
p = &CORS{Base: base}
81-
case "gzip":
104+
case PluginGzip:
82105
p = &Gzip{Base: base}
83-
case "header":
106+
case PluginHeader:
84107
p = &Header{Base: base}
85-
case "proxy":
108+
case PluginProxy:
86109
p = &Proxy{Base: base}
87-
case "static":
110+
case PluginStatic:
88111
p = &Static{Base: base}
89-
case "file":
112+
case PluginFile:
90113
p = &File{Base: base}
91114
}
92115
return
@@ -106,9 +129,11 @@ func init() {
106129
}
107130

108131
func (rp RawPlugin) Name() string {
109-
name := rp["name"].(string)
110-
delete(rp, "name")
111-
return name
132+
return rp["name"].(string)
133+
}
134+
135+
func (rp RawPlugin) Order() int {
136+
return rp["order"].(int)
112137
}
113138

114139
func (rp RawPlugin) JSON() []byte {
@@ -124,6 +149,7 @@ func Decode(r RawPlugin, e *echo.Echo, l *log.Logger) (p Plugin) {
124149
name := r.Name()
125150
base := Base{
126151
name: name,
152+
order: r.Order(),
127153
mutex: new(sync.RWMutex),
128154
Skip: "false",
129155
Echo: e,
@@ -147,6 +173,10 @@ func (b *Base) Name() string {
147173
return b.name
148174
}
149175

176+
func (b *Base) Order() int {
177+
return b.order
178+
}
179+
150180
func NewTemplate(t string) *Template {
151181
return &Template{Template: fasttemplate.New(t, "${", "}")}
152182
}

plugin/proxy.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,6 @@ func (p *Proxy) Update(plugin Plugin) {
6464
p.Initialize()
6565
}
6666

67-
func (*Proxy) Priority() int {
68-
return 1
69-
}
70-
7167
func (p *Proxy) Process(next echo.HandlerFunc) echo.HandlerFunc {
7268
p.mutex.RLock()
7369
defer p.mutex.RUnlock()

plugin/redirect.go

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,6 @@ func (r *Redirect) Update(p Plugin) {
6767
r.Initialize()
6868
}
6969

70-
func (*Redirect) Priority() int {
71-
return -1
72-
}
73-
7470
func (r *Redirect) Process(next echo.HandlerFunc) echo.HandlerFunc {
7571
r.mutex.RLock()
7672
defer r.mutex.RUnlock()
@@ -90,10 +86,6 @@ func (r *HTTPSRedirect) Update(p Plugin) {
9086
r.Initialize()
9187
}
9288

93-
func (*HTTPSRedirect) Priority() int {
94-
return -1
95-
}
96-
9789
func (r *HTTPSRedirect) Process(next echo.HandlerFunc) echo.HandlerFunc {
9890
r.mutex.RLock()
9991
defer r.mutex.RUnlock()
@@ -111,10 +103,6 @@ func (r *HTTPSWWWRedirect) Update(p Plugin) {
111103
r.Initialize()
112104
}
113105

114-
func (*HTTPSWWWRedirect) Priority() int {
115-
return -1
116-
}
117-
118106
func (r *HTTPSWWWRedirect) Process(next echo.HandlerFunc) echo.HandlerFunc {
119107
r.mutex.RLock()
120108
defer r.mutex.RUnlock()
@@ -140,10 +128,6 @@ func (r *HTTPSNonWWWRedirect) Update(p Plugin) {
140128
r.Initialize()
141129
}
142130

143-
func (*HTTPSNonWWWRedirect) Priority() int {
144-
return -1
145-
}
146-
147131
func (r *HTTPSNonWWWRedirect) Process(next echo.HandlerFunc) echo.HandlerFunc {
148132
r.mutex.RLock()
149133
defer r.mutex.RUnlock()
@@ -161,10 +145,6 @@ func (r *WWWRedirect) Update(p Plugin) {
161145
r.Initialize()
162146
}
163147

164-
func (*WWWRedirect) Priority() int {
165-
return -1
166-
}
167-
168148
func (r *WWWRedirect) Process(next echo.HandlerFunc) echo.HandlerFunc {
169149
r.mutex.RLock()
170150
defer r.mutex.RUnlock()
@@ -182,10 +162,6 @@ func (r *NonWWWRedirect) Update(p Plugin) {
182162
r.Initialize()
183163
}
184164

185-
func (*NonWWWRedirect) Priority() int {
186-
return -1
187-
}
188-
189165
func (r *NonWWWRedirect) Process(next echo.HandlerFunc) echo.HandlerFunc {
190166
r.mutex.RLock()
191167
defer r.mutex.RUnlock()

plugin/rewrite.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ func (r *Rewrite) Update(p Plugin) {
2323
r.Initialize()
2424
}
2525

26-
func (*Rewrite) Priority() int {
27-
return 1
28-
}
29-
3026
func (r *Rewrite) Process(next echo.HandlerFunc) echo.HandlerFunc {
3127
r.mutex.RLock()
3228
defer r.mutex.RUnlock()

plugin/secure.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ func (s *Secure) Update(p Plugin) {
2323
s.Initialize()
2424
}
2525

26-
func (*Secure) Priority() int {
27-
return 1
28-
}
29-
3026
func (s *Secure) Process(next echo.HandlerFunc) echo.HandlerFunc {
3127
s.mutex.RLock()
3228
defer s.mutex.RUnlock()

plugin/slash.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,6 @@ func (s *AddTrailingSlash) Update(p Plugin) {
2828
s.Initialize()
2929
}
3030

31-
func (*AddTrailingSlash) Priority() int {
32-
return -1
33-
}
34-
3531
func (s *AddTrailingSlash) Process(next echo.HandlerFunc) echo.HandlerFunc {
3632
s.mutex.RLock()
3733
defer s.mutex.RUnlock()
@@ -49,10 +45,6 @@ func (s *RemoveTrailingSlash) Update(p Plugin) {
4945
s.Initialize()
5046
}
5147

52-
func (*RemoveTrailingSlash) Priority() int {
53-
return -1
54-
}
55-
5648
func (s *RemoveTrailingSlash) Process(next echo.HandlerFunc) echo.HandlerFunc {
5749
s.mutex.RLock()
5850
defer s.mutex.RUnlock()

0 commit comments

Comments
 (0)