11package api
22
33import (
4- "net/http"
5-
64 "github.com/OpenFactorioServerManager/factorio-server-manager/api/websocket"
5+ "github.com/OpenFactorioServerManager/factorio-server-manager/factorio"
6+ "net/http"
77
88 "github.com/gorilla/mux"
99)
@@ -13,10 +13,24 @@ type Route struct {
1313 Method string
1414 Pattern string
1515 HandlerFunc http.HandlerFunc
16+ ServerOff bool // Set to `true' if factorio server has to be turned off to call this
1617}
1718
1819type Routes []Route
1920
21+ func ServerOffMiddleware (next http.Handler ) http.Handler {
22+ return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
23+ // only run if server is turned off
24+ server := factorio .GetFactorioServer ()
25+ if server .GetRunning () {
26+ http .Error (w , "factorio server still running" , http .StatusLocked )
27+ } else {
28+ next .ServeHTTP (w , r )
29+ }
30+ return
31+ })
32+ }
33+
2034func NewRouter () * mux.Router {
2135 r := mux .NewRouter ().StrictSlash (true )
2236
@@ -28,8 +42,20 @@ func NewRouter() *mux.Router {
2842 // Serves all JSON REST handlers prefixed with /api
2943 s := r .PathPrefix ("/api" ).Subrouter ()
3044 s .Use (AuthMiddleware )
45+
46+ // use subrouter for calls, that run only, when server is turned off
47+ so := s .NewRoute ().Subrouter ()
48+ so .Use (ServerOffMiddleware )
49+
50+ s .NewRoute ().Subrouter ()
3151 for _ , route := range apiRoutes {
32- s .Methods (route .Method ).
52+ var router * mux.Router
53+ if route .ServerOff {
54+ router = so
55+ } else {
56+ router = s
57+ }
58+ router .Methods (route .Method ).
3359 Path (route .Pattern ).
3460 Name (route .Name ).
3561 Handler (route .HandlerFunc )
@@ -39,7 +65,6 @@ func NewRouter() *mux.Router {
3965 r .Path ("/api/login" ).
4066 Methods ("POST" ).
4167 Name ("LoginUser" ).
42- //HandlerFunc(LoginUser)
4368 HandlerFunc (LoginUser )
4469
4570 // Route for initializing websocket connection
@@ -115,248 +140,296 @@ var apiRoutes = Routes{
115140 "GET" ,
116141 "/saves/list" ,
117142 ListSaves ,
143+ false ,
118144 }, {
119145 "DlSave" ,
120146 "GET" ,
121147 "/saves/dl/{save}" ,
122148 DLSave ,
149+ false ,
123150 }, {
124151 "UploadSave" ,
125152 "POST" ,
126153 "/saves/upload" ,
127154 UploadSave ,
155+ false ,
128156 }, {
129157 "RemoveSave" ,
130158 "GET" ,
131159 "/saves/rm/{save}" ,
132160 RemoveSave ,
161+ false ,
133162 }, {
134163 "CreateSave" ,
135164 "GET" ,
136165 "/saves/create/{save}" ,
137166 CreateSaveHandler ,
167+ true ,
138168 }, {
139169 "LoadModsFromSave" ,
140170 "POST" ,
141171 "/saves/mods" ,
142172 LoadModsFromSaveHandler ,
173+ true ,
143174 }, {
144175 "LogTail" ,
145176 "GET" ,
146177 "/log/tail" ,
147178 LogTail ,
179+ false ,
148180 }, {
149181 "LoadConfig" ,
150182 "GET" ,
151183 "/config" ,
152184 LoadConfig ,
185+ false ,
153186 }, {
154187 "StartServer" ,
155188 "POST" ,
156189 "/server/start" ,
157190 StartServer ,
191+ true ,
158192 }, {
159193 "StopServer" ,
160194 "GET" ,
161195 "/server/stop" ,
162196 StopServer ,
197+ false ,
163198 }, {
164199 "KillServer" ,
165200 "GET" ,
166201 "/server/kill" ,
167202 KillServer ,
203+ false ,
168204 }, {
169205 "RunningServer" ,
170206 "GET" ,
171207 "/server/status" ,
172208 CheckServer ,
209+ false ,
173210 }, {
174211 "FactorioVersion" ,
175212 "GET" ,
176213 "/server/facVersion" ,
177214 FactorioVersion ,
215+ false ,
178216 }, {
179217 "LogoutUser" ,
180218 "GET" ,
181219 "/logout" ,
182220 LogoutUser ,
221+ false ,
183222 }, {
184223 "StatusUser" ,
185224 "GET" ,
186225 "/user/status" ,
187226 GetCurrentLogin ,
227+ false ,
188228 }, {
189229 "ListUsers" ,
190230 "GET" ,
191231 "/user/list" ,
192232 ListUsers ,
233+ false ,
193234 }, {
194235 "AddUser" ,
195236 "POST" ,
196237 "/user/add" ,
197238 AddUser ,
239+ false ,
198240 }, {
199241 "RemoveUser" ,
200242 "POST" ,
201243 "/user/remove" ,
202244 RemoveUser ,
245+ false ,
203246 }, {
204247 "ChangePassword" ,
205248 "POST" ,
206249 "/user/password" ,
207250 ChangePassword ,
251+ false ,
208252 }, {
209253 "GetServerSettings" ,
210254 "GET" ,
211255 "/settings" ,
212256 GetServerSettings ,
257+ false ,
213258 }, {
214259 "UpdateServerSettings" ,
215260 "POST" ,
216261 "/settings/update" ,
217262 UpdateServerSettings ,
263+ false ,
218264 },
219265 // Mod Portal Stuff
220266 {
221267 "ModPortalListAllMods" ,
222268 "GET" ,
223269 "/mods/portal/list" ,
224270 ModPortalListModsHandler ,
271+ false ,
225272 }, {
226273 "ModPortalGetModInfo" ,
227274 "GET" ,
228275 "/mods/portal/info/{mod}" ,
229276 ModPortalModInfoHandler ,
277+ false ,
230278 }, {
231279 "ModPortalInstallMod" ,
232280 "POST" ,
233281 "/mods/portal/install" ,
234282 ModPortalInstallHandler ,
283+ true ,
235284 }, {
236285 "ModPortalLogin" ,
237286 "POST" ,
238287 "/mods/portal/login" ,
239288 ModPortalLoginHandler ,
289+ false ,
240290 }, {
241291 "ModPortalLoginStatus" ,
242292 "GET" ,
243293 "/mods/portal/loginstatus" ,
244294 ModPortalLoginStatusHandler ,
295+ false ,
245296 }, {
246297 "ModPortalLogout" ,
247298 "GET" ,
248299 "/mods/portal/logout" ,
249300 ModPortalLogoutHandler ,
301+ false ,
250302 }, {
251303 "ModPortalInstallMultiple" ,
252304 "POST" ,
253305 "/mods/portal/install/multiple" ,
254306 ModPortalInstallMultipleHandler ,
307+ true ,
255308 },
256309 // Mods Stuff
257310 {
258311 "ListInstalledMods" ,
259312 "GET" ,
260313 "/mods/list" ,
261314 ListInstalledModsHandler ,
315+ false ,
262316 }, {
263317 "ToggleMod" ,
264318 "POST" ,
265319 "/mods/toggle" ,
266320 ModToggleHandler ,
321+ true ,
267322 }, {
268323 "DeleteMod" ,
269324 "POST" ,
270325 "/mods/delete" ,
271326 ModDeleteHandler ,
327+ true ,
272328 }, {
273329 "DeleteAllMods" ,
274330 "POST" ,
275331 "/mods/delete/all" ,
276332 ModDeleteAllHandler ,
333+ true ,
277334 }, {
278335 "UpdateMod" ,
279336 "POST" ,
280337 "/mods/update" ,
281338 ModUpdateHandler ,
339+ true ,
282340 }, {
283341 "UploadMod" ,
284342 "POST" ,
285343 "/mods/upload" ,
286344 ModUploadHandler ,
345+ true ,
287346 }, {
288347 "DownloadMods" ,
289348 "GET" ,
290349 "/mods/download" ,
291350 ModDownloadHandler ,
351+ false ,
292352 },
293353 // Mod Packs
294354 {
295355 "ModPacksList" ,
296356 "GET" ,
297357 "/mods/packs/list" ,
298358 ModPackListHandler ,
359+ false ,
299360 }, {
300361 "ModPackCreate" ,
301362 "POST" ,
302363 "/mods/packs/create" ,
303364 ModPackCreateHandler ,
365+ false ,
304366 }, {
305367 "ModPackDelete" ,
306368 "POST" ,
307369 "/mods/packs/{modpack}/delete" ,
308370 ModPackDeleteHandler ,
371+ false ,
309372 }, {
310373 "ModPackDownload" ,
311374 "GET" ,
312375 "/mods/packs/{modpack}/download" ,
313376 ModPackDownloadHandler ,
377+ false ,
314378 }, {
315379 "LoadModPack" ,
316380 "POST" ,
317381 "/mods/packs/{modpack}/load" ,
318382 ModPackLoadHandler ,
383+ true ,
319384 },
320385 // Mods inside Mod Packs
321386 {
322387 "ModPackListMods" ,
323388 "GET" ,
324389 "/mods/packs/{modpack}/list" ,
325390 ModPackModListHandler ,
391+ false ,
326392 }, {
327393 "ModPackToggleMod" ,
328394 "POST" ,
329395 "/mods/packs/{modpack}/mod/toggle" ,
330396 ModPackModToggleHandler ,
397+ false ,
331398 }, {
332399 "ModPackDeleteMod" ,
333400 "POST" ,
334401 "/mods/packs/{modpack}/mod/delete" ,
335402 ModPackModDeleteHandler ,
403+ false ,
336404 }, {
337405 "ModPackDeleteAllMod" ,
338406 "POST" ,
339407 "/mods/packs/{modpack}/mod/delete/all" ,
340408 ModPackModDeleteAllHandler ,
409+ false ,
341410 }, {
342411 "ModPackUpdateMod" ,
343412 "POST" ,
344413 "/mods/packs/{modpack}/mod/update" ,
345414 ModPackModUpdateHandler ,
415+ false ,
346416 }, {
347417 "ModPackUploadMod" ,
348418 "POST" ,
349419 "/mods/packs/{modpack}/mod/upload" ,
350420 ModPackModUploadHandler ,
421+ false ,
351422 }, {
352423 "ModPackModPortalInstallMod" ,
353424 "POST" ,
354425 "/mods/packs/{modpack}/portal/install" ,
355426 ModPackModPortalInstallHandler ,
427+ false ,
356428 }, {
357429 "ModPackModPortalInstallMultiple" ,
358430 "POST" ,
359431 "/mods/packs/{modpack}/portal/install/multiple" ,
360432 ModPackModPortalInstallMultipleHandler ,
433+ false ,
361434 },
362435}
0 commit comments