setup.go 946 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package geoip
  2. import (
  3. "github.com/mholt/caddy"
  4. "github.com/mholt/caddy/caddyhttp/httpserver"
  5. maxminddb "github.com/oschwald/maxminddb-golang"
  6. )
  7. // GeoIP Comments me
  8. type GeoIP struct {
  9. Next httpserver.Handler
  10. DBHandler *maxminddb.Reader
  11. Config Config
  12. }
  13. // Init initializes the plugin
  14. func init() {
  15. caddy.RegisterPlugin("geoip", caddy.Plugin{
  16. ServerType: "http",
  17. Action: setup,
  18. })
  19. }
  20. func setup(c *caddy.Controller) error {
  21. config, err := parseConfig(c)
  22. if err != nil {
  23. return err
  24. }
  25. dbhandler, err := maxminddb.Open(config.DatabasePath)
  26. if err != nil {
  27. return c.Err("geoip: Can't open database: " + config.DatabasePath)
  28. }
  29. // Create new middleware
  30. newMiddleWare := func(next httpserver.Handler) httpserver.Handler {
  31. return &GeoIP{
  32. Next: next,
  33. DBHandler: dbhandler,
  34. Config: config,
  35. }
  36. }
  37. // Add middleware
  38. cfg := httpserver.GetConfig(c)
  39. cfg.AddMiddleware(newMiddleWare)
  40. return nil
  41. }