12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package dynamicproxy
- import (
- "errors"
- "net/http"
- )
- type RoutingRule struct {
- ID string
- MatchRule func(r *http.Request) bool
- RoutingHandler http.Handler
- Enabled bool
- }
- func (router *Router) GetRoutingRuleById(rrid string) (*RoutingRule, error) {
- for _, rr := range router.routingRules {
- if rr.ID == rrid {
- return rr, nil
- }
- }
- return nil, errors.New("routing rule with given id not found")
- }
- func (router *Router) AddRoutingRules(rr *RoutingRule) error {
- _, err := router.GetRoutingRuleById(rr.ID)
- if err != nil {
-
- return err
- }
- router.routingRules = append(router.routingRules, rr)
- return nil
- }
- func (router *Router) RemoveRoutingRule(rrid string) {
- newRoutingRules := []*RoutingRule{}
- for _, rr := range router.routingRules {
- if rr.ID != rrid {
- newRoutingRules = append(newRoutingRules, rr)
- }
- }
- router.routingRules = newRoutingRules
- }
- func (router *Router) GetAllRoutingRules() []*RoutingRule {
- return router.routingRules
- }
- func (router *Router) GetMatchingRoutingRule(r *http.Request) *RoutingRule {
- for _, thisRr := range router.routingRules {
- if thisRr.IsMatch(r) {
- return thisRr
- }
- }
- return nil
- }
- func (e *RoutingRule) IsMatch(r *http.Request) bool {
- if !e.Enabled {
- return false
- }
- return e.MatchRule(r)
- }
- func (e *RoutingRule) Route(w http.ResponseWriter, r *http.Request) {
- e.RoutingHandler.ServeHTTP(w, r)
- }
|