@@ -35,36 +35,74 @@ class HTTPUserProxy{
3535 return GCDWebServerDataResponse ( jsonObject: [ " enable " : isOn] , contentType: " json " )
3636 } )
3737
38- apiserver. addHandler ( forMethod: " POST " , path: " /toggle " , request: GCDWebServerRequest . self, processBlock: { request in
38+ apiserver. addHandler ( forMethod: " POST " , path: " /status " , request: GCDWebServerURLEncodedFormRequest . self, processBlock: { request in
3939 self . appdeleget. doToggleRunning ( showToast: false )
4040 return GCDWebServerDataResponse ( jsonObject: [ " status " : 1 ] , contentType: " json " )
4141 } )
4242
43- apiserver. addHandler ( forMethod: " GET " , path: " /servers " , request: GCDWebServerRequest . self, processBlock: { request in
43+ apiserver. addHandler ( forMethod: " GET " , path: " /server/list " , request: GCDWebServerRequest . self, processBlock: { request in
4444
4545 var data = [ [ String: Any] ] ( )
4646
4747 for each in self . SerMgr. profiles{
48- data. append ( [ " id " : each . uuid, " remark " : each . remark,
49- " active " : self . SerMgr. activeProfileId == each . uuid ? 1 : 0 ] )
48+ data. append ( each . toDictionary( ) )
5049 }
5150
5251 return GCDWebServerDataResponse ( jsonObject: data, contentType: " json " )
5352 } )
5453
55- apiserver. addHandler ( forMethod: " POST " , path: " /servers " , request: GCDWebServerURLEncodedFormRequest . self, processBlock: { request in
54+ apiserver. addHandler ( forMethod: " GET " , path: " /server/current " , request: GCDWebServerRequest . self, processBlock: { request in
5655
57- let uuid = ( ( request as! GCDWebServerURLEncodedFormRequest ) . arguments [ " id " ] ) as? String
56+ return GCDWebServerDataResponse ( jsonObject: [ " Id " : self . SerMgr. activeProfileId] , contentType: " json " )
57+ } )
58+
59+ apiserver. addHandler ( forMethod: " POST " , path: " /server/current " , request: GCDWebServerURLEncodedFormRequest . self, processBlock: { request in
60+
61+ let uuid = ( ( request as! GCDWebServerURLEncodedFormRequest ) . arguments [ " Id " ] ) as? String
5862 for each in self . SerMgr. profiles{
5963 if ( each . uuid == uuid) {
6064 self . appdeleget. changeServer ( uuid: uuid!)
6165 return GCDWebServerDataResponse ( jsonObject: [ " status " : 1 ] , contentType: " json " )
62-
66+
6367 }
6468 }
6569 return GCDWebServerDataResponse ( jsonObject: [ " status " : 0 ] , contentType: " json " )
6670 } )
6771
72+ apiserver. addHandler ( forMethod: " POST " , path: " /server " , request: GCDWebServerURLEncodedFormRequest . self, processBlock: { request in
73+
74+ var form = ( ( request as! GCDWebServerURLEncodedFormRequest ) . arguments) as! [ String : Any ]
75+ form [ " ServerPort " ] = Double ( form [ " ServerPort " ] as! String )
76+
77+ self . SerMgr. profiles. append ( ServerProfile . fromDictionary ( form) )
78+ self . SerMgr. save ( )
79+ self . appdeleget. updateServersMenu ( )
80+
81+ return GCDWebServerDataResponse ( jsonObject: [ " status " : 1 ] , contentType: " json " )
82+ } )
83+
84+ apiserver. addHandler ( forMethod: " DELETE " , path: " /server " , request: GCDWebServerRequest . self
85+ , processBlock: { request in
86+
87+ let uuid = ( request. query ? [ " Id " ] ) as! String
88+
89+ if ( uuid == self . SerMgr. activeProfileId) {
90+ return GCDWebServerDataResponse ( jsonObject: [ " status " : 0 ] , contentType: " json " )
91+ }
92+
93+ for i in 0 ..< self . SerMgr. profiles. count{
94+ if ( self . SerMgr. profiles [ i] . uuid == uuid) {
95+ self . SerMgr. profiles. remove ( at: i)
96+
97+ self . SerMgr. save ( )
98+ self . appdeleget. updateServersMenu ( )
99+
100+ return GCDWebServerDataResponse ( jsonObject: [ " status " : 1 ] , contentType: " json " )
101+ }
102+ }
103+
104+ return GCDWebServerDataResponse ( jsonObject: [ " status " : 0 ] , contentType: " json " )
105+ } )
68106
69107 apiserver. addHandler ( forMethod: " GET " , path: " /mode " , request: GCDWebServerRequest . self, processBlock: { request in
70108 if let current = self . defaults. string ( forKey: " ShadowsocksRunningMode " ) {
@@ -79,7 +117,7 @@ class HTTPUserProxy{
79117 if ( arg != " auto " && arg != " global " && arg != " manual " ) {
80118 return GCDWebServerDataResponse ( jsonObject: [ " status " : 0 ] , contentType: " json " )
81119 }
82-
120+
83121 self . appdeleget. changeMode ( mode: arg!)
84122
85123 return GCDWebServerDataResponse ( jsonObject: [ " status " : 1 ] , contentType: " json " )
0 commit comments