cache.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package clashapi
  2. import (
  3. "context"
  4. "net/http"
  5. "github.com/sagernet/sing-box/adapter"
  6. "github.com/sagernet/sing/service"
  7. "github.com/go-chi/chi/v5"
  8. "github.com/go-chi/render"
  9. )
  10. func cacheRouter(ctx context.Context) http.Handler {
  11. r := chi.NewRouter()
  12. r.Post("/fakeip/flush", flushFakeip(ctx))
  13. r.Post("/dns/flush", flushDNS(ctx))
  14. return r
  15. }
  16. func flushFakeip(ctx context.Context) func(w http.ResponseWriter, r *http.Request) {
  17. return func(w http.ResponseWriter, r *http.Request) {
  18. cacheFile := service.FromContext[adapter.CacheFile](ctx)
  19. if cacheFile != nil {
  20. err := cacheFile.FakeIPReset()
  21. if err != nil {
  22. render.Status(r, http.StatusInternalServerError)
  23. render.JSON(w, r, newError(err.Error()))
  24. return
  25. }
  26. }
  27. render.NoContent(w, r)
  28. }
  29. }
  30. func flushDNS(ctx context.Context) func(w http.ResponseWriter, r *http.Request) {
  31. return func(w http.ResponseWriter, r *http.Request) {
  32. dnsRouter := service.FromContext[adapter.DNSRouter](ctx)
  33. if dnsRouter != nil {
  34. dnsRouter.ClearCache()
  35. }
  36. render.NoContent(w, r)
  37. }
  38. }