1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package dynamicproxy
- import (
- "errors"
- "net/http"
- )
- type RoutingRule struct {
- ID string
- Enabled bool
- UseSystemAccessControl bool
- MatchRule func(r *http.Request) bool
- RoutingHandler func(http.ResponseWriter, *http.Request)
- }
- 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 errors.New("routing rule with same id already exists")
- }
- 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(w, r)
- }
|