| 
									
										
										
										
											2015-01-08 16:00:00 +08:00
										 |  |  | package util | 
					
						
							| 
									
										
										
										
											2014-10-03 15:03:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"net/url" | 
					
						
							| 
									
										
										
										
											2014-12-29 20:35:51 +08:00
										 |  |  | 	"strings" | 
					
						
							| 
									
										
										
										
											2014-10-03 15:03:16 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type UrlQueryReader struct { | 
					
						
							|  |  |  | 	values url.Values | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-28 22:20:22 +08:00
										 |  |  | func NewUrlQueryReader(urlInfo *url.URL) (*UrlQueryReader, error) { | 
					
						
							|  |  |  | 	u, err := url.ParseQuery(urlInfo.String()) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, err | 
					
						
							| 
									
										
										
										
											2014-10-03 15:03:16 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-11-28 22:20:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return &UrlQueryReader{ | 
					
						
							|  |  |  | 		values: u, | 
					
						
							|  |  |  | 	}, nil | 
					
						
							| 
									
										
										
										
											2014-10-03 15:03:16 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (r *UrlQueryReader) Get(name string, def string) string { | 
					
						
							|  |  |  | 	val := r.values[name] | 
					
						
							|  |  |  | 	if len(val) == 0 { | 
					
						
							|  |  |  | 		return def | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return val[0] | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-12-29 20:35:51 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func JoinUrlFragments(a, b string) string { | 
					
						
							|  |  |  | 	aslash := strings.HasSuffix(a, "/") | 
					
						
							|  |  |  | 	bslash := strings.HasPrefix(b, "/") | 
					
						
							| 
									
										
										
										
											2016-01-30 01:31:00 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if len(b) == 0 { | 
					
						
							|  |  |  | 		return a | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-29 20:35:51 +08:00
										 |  |  | 	switch { | 
					
						
							|  |  |  | 	case aslash && bslash: | 
					
						
							|  |  |  | 		return a + b[1:] | 
					
						
							|  |  |  | 	case !aslash && !bslash: | 
					
						
							|  |  |  | 		return a + "/" + b | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return a + b | 
					
						
							|  |  |  | } |