provider.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package clashapi
  2. import (
  3. "context"
  4. "net/http"
  5. "github.com/go-chi/chi/v5"
  6. "github.com/go-chi/render"
  7. )
  8. func proxyProviderRouter() http.Handler {
  9. r := chi.NewRouter()
  10. r.Get("/", getProviders)
  11. r.Route("/{name}", func(r chi.Router) {
  12. r.Use(parseProviderName, findProviderByName)
  13. r.Get("/", getProvider)
  14. r.Put("/", updateProvider)
  15. r.Get("/healthcheck", healthCheckProvider)
  16. })
  17. return r
  18. }
  19. func getProviders(w http.ResponseWriter, r *http.Request) {
  20. render.JSON(w, r, render.M{
  21. "providers": render.M{},
  22. })
  23. }
  24. func getProvider(w http.ResponseWriter, r *http.Request) {
  25. /*provider := r.Context().Value(CtxKeyProvider).(provider.ProxyProvider)
  26. render.JSON(w, r, provider)*/
  27. render.NoContent(w, r)
  28. }
  29. func updateProvider(w http.ResponseWriter, r *http.Request) {
  30. /*provider := r.Context().Value(CtxKeyProvider).(provider.ProxyProvider)
  31. if err := provider.Update(); err != nil {
  32. render.Status(r, http.StatusServiceUnavailable)
  33. render.JSON(w, r, newError(err.Error()))
  34. return
  35. }*/
  36. render.NoContent(w, r)
  37. }
  38. func healthCheckProvider(w http.ResponseWriter, r *http.Request) {
  39. /*provider := r.Context().Value(CtxKeyProvider).(provider.ProxyProvider)
  40. provider.HealthCheck()*/
  41. render.NoContent(w, r)
  42. }
  43. func parseProviderName(next http.Handler) http.Handler {
  44. return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  45. name := getEscapeParam(r, "name")
  46. ctx := context.WithValue(r.Context(), CtxKeyProviderName, name)
  47. next.ServeHTTP(w, r.WithContext(ctx))
  48. })
  49. }
  50. func findProviderByName(next http.Handler) http.Handler {
  51. return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  52. /*name := r.Context().Value(CtxKeyProviderName).(string)
  53. providers := tunnel.ProxyProviders()
  54. provider, exist := providers[name]
  55. if !exist {*/
  56. render.Status(r, http.StatusNotFound)
  57. render.JSON(w, r, ErrNotFound)
  58. //return
  59. //}
  60. // ctx := context.WithValue(r.Context(), CtxKeyProvider, provider)
  61. // next.ServeHTTP(w, r.WithContext(ctx))
  62. })
  63. }