@@ -11,6 +11,27 @@ import (
11
11
"github.com/go-ignite/ignite/ss"
12
12
)
13
13
14
+ var (
15
+ servers = []string {"SS" , "SSR" }
16
+ ssMethods = []string {"aes-256-cfb" , "aes-128-gcm" , "aes-192-gcm" , "aes-256-gcm" , "chacha20-ietf-poly1305" }
17
+ ssrMethods = []string {"aes-256-cfb" , "aes-256-ctr" , "chacha20" , "chacha20-ietf" }
18
+ serverMethodsMap = map [string ]map [string ]bool {}
19
+ )
20
+
21
+ func init () {
22
+ ssMethodMap := map [string ]bool {}
23
+ for _ , method := range ssMethods {
24
+ ssMethodMap [method ] = true
25
+ }
26
+ ssrMethodMap := map [string ]bool {}
27
+ for _ , method := range ssrMethods {
28
+ ssrMethodMap [method ] = true
29
+ }
30
+
31
+ serverMethodsMap ["SS" ] = ssMethodMap
32
+ serverMethodsMap ["SSR" ] = ssrMethodMap
33
+ }
34
+
14
35
func (router * MainRouter ) PanelIndexHandler (c * gin.Context ) {
15
36
userID , exists := c .Get ("userId" )
16
37
@@ -32,16 +53,24 @@ func (router *MainRouter) PanelIndexHandler(c *gin.Context) {
32
53
}
33
54
34
55
uInfo := & models.UserInfo {
35
- Id : user .Id ,
36
- Host : ss .Host ,
37
- Username : user .Username ,
38
- Status : user .Status ,
39
- PackageUsed : fmt .Sprintf ("%.2f" , user .PackageUsed ),
40
- PackageLimit : user .PackageLimit ,
41
- PackageLeft : fmt .Sprintf ("%.2f" , float32 (user .PackageLimit )- user .PackageUsed ),
42
- ServicePort : user .ServicePort ,
43
- ServicePwd : user .ServicePwd ,
44
- Expired : user .Expired .Format ("2006-01-02" ),
56
+ Id : user .Id ,
57
+ Host : ss .Host ,
58
+ Username : user .Username ,
59
+ Status : user .Status ,
60
+ PackageUsed : fmt .Sprintf ("%.2f" , user .PackageUsed ),
61
+ PackageLimit : user .PackageLimit ,
62
+ PackageLeft : fmt .Sprintf ("%.2f" , float32 (user .PackageLimit )- user .PackageUsed ),
63
+ ServicePort : user .ServicePort ,
64
+ ServicePwd : user .ServicePwd ,
65
+ ServiceMethod : user .ServiceMethod ,
66
+ ServiceType : user .ServiceType ,
67
+ Expired : user .Expired .Format ("2006-01-02" ),
68
+ }
69
+ if uInfo .ServiceMethod == "" {
70
+ uInfo .ServiceMethod = "aes-256-cfb"
71
+ }
72
+ if uInfo .ServiceType == "" {
73
+ uInfo .ServiceType = "SS"
45
74
}
46
75
47
76
if user .PackageLimit == 0 {
@@ -51,7 +80,10 @@ func (router *MainRouter) PanelIndexHandler(c *gin.Context) {
51
80
}
52
81
53
82
c .HTML (http .StatusOK , "panel.html" , gin.H {
54
- "uInfo" : uInfo ,
83
+ "uInfo" : uInfo ,
84
+ "ss_methods" : ssMethods ,
85
+ "ssr_methods" : ssrMethods ,
86
+ "servers" : servers ,
55
87
})
56
88
}
57
89
@@ -65,26 +97,43 @@ func (router *MainRouter) LogoutHandler(c *gin.Context) {
65
97
66
98
func (router * MainRouter ) CreateServiceHandler (c * gin.Context ) {
67
99
userID , _ := c .Get ("userId" )
100
+ method := c .PostForm ("method" )
101
+ serverType := c .PostForm ("server-type" )
68
102
69
- user := new (models.User )
70
- router .db .Id (userID ).Get (user )
103
+ fmt .Println ("UserID" , userID )
104
+ fmt .Println ("ServerType:" , serverType )
105
+ fmt .Println ("Method:" , method )
71
106
72
- //Get all used ports.
73
- var usedPorts []int
74
- router .db .Table ("user" ).Cols ("service_port" ).Find (& usedPorts )
107
+ methodMap , ok := serverMethodsMap [serverType ]
108
+ if ! ok {
109
+ resp := models.Response {Success : false , Message : "服务类型配置错误!" }
110
+ c .JSON (http .StatusOK , resp )
111
+ return
112
+ }
75
113
114
+ if ! methodMap [method ] {
115
+ resp := models.Response {Success : false , Message : "加密方法配置错误!" }
116
+ c .JSON (http .StatusOK , resp )
117
+ return
118
+ }
119
+
120
+ user := new (models.User )
121
+ router .db .Id (userID ).Get (user )
76
122
if user .ServiceId != "" {
77
- resp := models.Response {Success : false , Message : "Service already created !" }
123
+ resp := models.Response {Success : false , Message : "服务已创建 !" }
78
124
c .JSON (http .StatusOK , resp )
79
125
return
80
126
}
81
127
82
- // 1. Create ss service
83
- result , err := ss .CreateAndStartContainer (user .Username , & usedPorts )
128
+ //Get all used ports.
129
+ var usedPorts []int
130
+ router .db .Table ("user" ).Cols ("service_port" ).Find (& usedPorts )
84
131
132
+ // 1. Create ss service
133
+ result , err := ss .CreateAndStartContainer (serverType , user .Username , method , & usedPorts )
85
134
if err != nil {
86
135
log .Println ("Create ss service error:" , err .Error ())
87
- resp := models.Response {Success : false , Message : "Create service error !" }
136
+ resp := models.Response {Success : false , Message : "创建服务失败 !" }
88
137
c .JSON (http .StatusOK , resp )
89
138
return
90
139
}
@@ -94,8 +143,9 @@ func (router *MainRouter) CreateServiceHandler(c *gin.Context) {
94
143
user .ServiceId = result .ID
95
144
user .ServicePort = result .Port
96
145
user .ServicePwd = result .Password
97
- affected , err := router .db .Id (userID ).Cols ("status" , "service_port" , "service_pwd" , "service_id" ).Update (user )
98
-
146
+ user .ServiceMethod = method
147
+ user .ServiceType = serverType
148
+ affected , err := router .db .Id (userID ).Cols ("status" , "service_port" , "service_pwd" , "service_id" , "service_method" , "service_type" ).Update (user )
99
149
if affected == 0 || err != nil {
100
150
if err != nil {
101
151
log .Println ("Update user info error:" , err .Error ())
@@ -104,14 +154,14 @@ func (router *MainRouter) CreateServiceHandler(c *gin.Context) {
104
154
//Force remove created container
105
155
ss .RemoveContainer (result .ID )
106
156
107
- resp := models.Response {Success : false , Message : "Create service error !" }
157
+ resp := models.Response {Success : false , Message : "更新用户信息失败 !" }
108
158
c .JSON (http .StatusOK , resp )
109
159
return
110
160
}
111
161
112
162
result .PackageLimit = user .PackageLimit
113
163
result .Host = ss .Host
114
- resp := models.Response {Success : true , Message : "OK !" , Data : result }
164
+ resp := models.Response {Success : true , Message : "服务创建成功 !" , Data : result }
115
165
116
166
c .JSON (http .StatusOK , resp )
117
167
}
0 commit comments