@@ -34,16 +34,26 @@ type Server struct {
3434}
3535
3636type httpHandlers struct {
37- cfg Config
38- logger * Logger
37+ c * cacheHandler
3938}
4039
4140func NewServer (cfg Config , logger * Logger ) (* Server , error ) {
4241 // TODO(bep) validate config
4342
4443 h := http .NewServeMux ()
45- mw := & httpHandlers {cfg : cfg , logger : logger }
44+ c := newCacheHandler (cfg , logger )
45+ mw := & httpHandlers {c : c }
46+
47+ var purger http.HandlerFunc = func (w http.ResponseWriter , r * http.Request ) {
48+ prefix := r .FormValue ("prefix" )
49+ if prefix != "" {
50+ if err := c .purgePrefix (prefix ); err != nil {
51+ c .logger .Error ("area" , "cache" , "tag" , "purge" , "prefix" , prefix , "error" , err )
52+ }
53+ }
54+ }
4655
56+ h .Handle ("/purge" , mw .secure (purger ))
4757 h .Handle ("/" , mw .secure (mw .serveFile ()))
4858
4959 tlsEnabled , err := cfg .isTLSConfigured ()
@@ -87,12 +97,12 @@ func (s *Server) Shutdown(ctx context.Context) error {
8797}
8898
8999func (m * httpHandlers ) serveFile () http.HandlerFunc {
90- c := newCacheHandler ( m . cfg , m . logger )
100+
91101 return func (w http.ResponseWriter , r * http.Request ) {
92102 // TODO containsDotDot https://github.com/golang/go/blob/f9cf8e5ab11c7ea3f1b9fde302c0a325df020b1a/src/net/http/fs.go#L665
93- err := c .handleRequest (w , r )
103+ err := m . c .handleRequest (w , r )
94104 if err != nil {
95- m .logger .Error ("handleRequest" , err )
105+ m .c . logger .Error ("handleRequest" , err )
96106 // TODO(bep) status code/err handling
97107 }
98108 }
0 commit comments