forked from hidu/pproxy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
wsClient.go
92 lines (85 loc) · 1.92 KB
/
wsClient.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package serve
import (
"github.com/googollee/go-socket.io"
"net/http"
"path/filepath"
"strings"
)
type wsClient struct {
ns socketio.Socket
user string
filter_user []string
filter_ip []string
filter_hide_ext []string
filter_url []string
filter_url_hide []string
LoginUser *User
}
var extTypes map[string][]string = map[string][]string{
"js": {"js"},
"css": {"css"},
"image": {"jpg", "jpeg", "png", "gif", "bmp", "tiff", "jpe", "tif", "webp", "ico", "webp"},
}
func (client *wsClient) checkFilter(req *http.Request, reqCtx *requestCtx) bool {
if len(client.filter_user) > 0 {
user_in_list := false
for _, name := range client.filter_user {
if name == "any" && client.LoginUser != nil && client.LoginUser.IsAdmin {
user_in_list = true
break
}
if name != "" && name == reqCtx.User.Name {
user_in_list = true
break
}
}
if !user_in_list {
return false
}
}
if len(client.filter_ip) > 0 {
addr_info := strings.Split(reqCtx.RemoteAddr, ":")
ip_in_list := false
for _, ip := range client.filter_ip {
if ip != "" && addr_info[0] == ip {
ip_in_list = true
break
}
}
if !ip_in_list {
return false
}
}
if len(client.filter_url) > 0 {
url := req.URL.String()
has_kw := false
for _, subUrl := range client.filter_url {
if strings.Contains(url, subUrl) {
has_kw = true
break
}
}
if !has_kw {
return false
}
}
if len(client.filter_hide_ext) > 0 {
ext := strings.ToLower(strings.Trim(filepath.Ext(req.URL.Path), "."))
for _, hide_type := range client.filter_hide_ext {
for _, hide_ext := range extTypes[hide_type] {
if ext == hide_ext {
return false
}
}
}
}
if len(client.filter_url_hide) > 0 {
_url := req.URL.String()
for _, hide_kw := range client.filter_url_hide {
if hide_kw != "" && strings.Contains(_url, hide_kw) {
return false
}
}
}
return true
}