57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Beego (http://beego.me/)
 | |
| // @description beego is an open-source, high-performance web framework for the Go programming language.
 | |
| // @link        http://github.com/astaxie/beego for the canonical source repository
 | |
| // @license     http://github.com/astaxie/beego/blob/master/LICENSE
 | |
| // @authors     astaxie
 | |
| 
 | |
| package beego
 | |
| 
 | |
| import "regexp"
 | |
| 
 | |
| // FilterRouter defines filter operation before controller handler execution.
 | |
| // it can match patterned url and do filter function when action arrives.
 | |
| type FilterRouter struct {
 | |
| 	pattern     string
 | |
| 	regex       *regexp.Regexp
 | |
| 	filterFunc  FilterFunc
 | |
| 	hasregex    bool
 | |
| 	params      map[int]string
 | |
| 	parseParams map[string]string
 | |
| }
 | |
| 
 | |
| // ValidRouter check current request is valid for this filter.
 | |
| // if matched, returns parsed params in this request by defined filter router pattern.
 | |
| func (mr *FilterRouter) ValidRouter(router string) (bool, map[string]string) {
 | |
| 	if mr.pattern == "" {
 | |
| 		return true, nil
 | |
| 	}
 | |
| 	if mr.pattern == "*" {
 | |
| 		return true, nil
 | |
| 	}
 | |
| 	if router == mr.pattern {
 | |
| 		return true, nil
 | |
| 	}
 | |
| 	//pattern /admin  router /admin/  match
 | |
| 	//pattern /admin/ router /admin don't match, because url will 301 in router
 | |
| 	if n := len(router); n > 1 && router[n-1] == '/' && router[:n-2] == mr.pattern {
 | |
| 		return true, nil
 | |
| 	}
 | |
| 
 | |
| 	if mr.hasregex {
 | |
| 		if !mr.regex.MatchString(router) {
 | |
| 			return false, nil
 | |
| 		}
 | |
| 		matches := mr.regex.FindStringSubmatch(router)
 | |
| 		if len(matches) > 0 {
 | |
| 			if len(matches[0]) == len(router) {
 | |
| 				params := make(map[string]string)
 | |
| 				for i, match := range matches[1:] {
 | |
| 					params[mr.params[i]] = match
 | |
| 				}
 | |
| 				return true, params
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	return false, nil
 | |
| }
 |