mirror of
https://github.com/caddyserver/caddy.git
synced 2024-11-25 17:56:34 +08:00
66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
|
package onevent
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
|
||
|
"github.com/google/uuid"
|
||
|
"github.com/mholt/caddy"
|
||
|
"github.com/mholt/caddy/onevent/hook"
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
// Register Directive.
|
||
|
caddy.RegisterPlugin("on", caddy.Plugin{Action: setup})
|
||
|
}
|
||
|
|
||
|
func setup(c *caddy.Controller) error {
|
||
|
config, err := onParse(c)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Register Event Hooks.
|
||
|
for _, cfg := range config {
|
||
|
caddy.RegisterEventHook("on-"+cfg.ID, cfg.Hook)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func onParse(c *caddy.Controller) ([]*hook.Config, error) {
|
||
|
var config []*hook.Config
|
||
|
|
||
|
for c.Next() {
|
||
|
cfg := new(hook.Config)
|
||
|
|
||
|
if !c.NextArg() {
|
||
|
return config, c.ArgErr()
|
||
|
}
|
||
|
|
||
|
// Configure Event.
|
||
|
event, ok := hook.SupportedEvents[strings.ToLower(c.Val())]
|
||
|
if !ok {
|
||
|
return config, c.Errf("Wrong event name or event not supported: '%s'", c.Val())
|
||
|
}
|
||
|
cfg.Event = event
|
||
|
|
||
|
// Assign an unique ID.
|
||
|
cfg.ID = uuid.New().String()
|
||
|
|
||
|
args := c.RemainingArgs()
|
||
|
|
||
|
// Extract command and arguments.
|
||
|
command, args, err := caddy.SplitCommandAndArgs(strings.Join(args, " "))
|
||
|
if err != nil {
|
||
|
return config, c.Err(err.Error())
|
||
|
}
|
||
|
|
||
|
cfg.Command = command
|
||
|
cfg.Args = args
|
||
|
|
||
|
config = append(config, cfg)
|
||
|
}
|
||
|
|
||
|
return config, nil
|
||
|
}
|