mirror of
https://github.com/ditkrg/traefik-users-blocker-plugin.git
synced 2026-01-22 20:16:53 +00:00
update logic
This commit is contained in:
parent
7a03599d16
commit
e9cbcb04c4
32
main.go
32
main.go
@ -8,8 +8,13 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Rule struct {
|
||||||
|
AllowedSubPaths []string `json:"allowedSubPaths,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
type Path struct {
|
type Path struct {
|
||||||
Base string `json:"base,omitempty"`
|
Path string `json:"base,omitempty"`
|
||||||
|
Rule Rule `json:"rule,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
@ -37,8 +42,8 @@ func New(ctx context.Context, next http.Handler, config *Config, name string) (h
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, path := range config.Paths {
|
for _, path := range config.Paths {
|
||||||
if path.Base == "" {
|
if path.Path == "" {
|
||||||
return nil, fmt.Errorf("Paths.Base cannot be empty")
|
return nil, fmt.Errorf("Paths.Path cannot be empty")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,14 +75,29 @@ func (a *UsersBlocker) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, path := range a.paths {
|
for _, path := range a.paths {
|
||||||
isPathMatched := strings.HasPrefix(req.URL.Path, path.Base)
|
isPathMatched := strings.HasPrefix(req.URL.Path, path.Path)
|
||||||
|
|
||||||
if isPathMatched {
|
if !isPathMatched {
|
||||||
message := fmt.Sprintf("blocked path %s (matched with %s) for user %s", req.URL.Path, path.Base, userId)
|
a.next.ServeHTTP(rw, req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(path.Rule.AllowedSubPaths) == 0 {
|
||||||
|
message := fmt.Sprintf("blocked path %s (matched with %s) for user %s", req.URL.Path, path.Path, userId)
|
||||||
os.Stdout.WriteString(message)
|
os.Stdout.WriteString(message)
|
||||||
http.Error(rw, message, http.StatusForbidden)
|
http.Error(rw, message, http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, allowedSubPath := range path.Rule.AllowedSubPaths {
|
||||||
|
isAllowedSubPathMatched := strings.HasPrefix(req.URL.Path, path.Path+allowedSubPath)
|
||||||
|
if !isAllowedSubPathMatched {
|
||||||
|
message := fmt.Sprintf("blocked path %s (matched with %s) for user %s", req.URL.Path, path.Path+path.Path+allowedSubPath, userId)
|
||||||
|
os.Stdout.WriteString(message)
|
||||||
|
http.Error(rw, message, http.StatusForbidden)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a.next.ServeHTTP(rw, req)
|
a.next.ServeHTTP(rw, req)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user