Skip to content

Commit 606f701

Browse files
committed
More legacy tests and functions
1 parent 14488c9 commit 606f701

2 files changed

Lines changed: 89 additions & 9 deletions

File tree

legacyServer.go

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ func ServeLegacy(w http.ResponseWriter, r *http.Request) {
9494
// If it's a PHP file, let CGI handle instead
9595
for _, ext := range serverSettings.ExtScriptTypes {
9696
if filepath.Ext(filePath) == "."+ext {
97+
fmt.Printf("[Legacy] Executing script file: %s\n", filepath.ToSlash(filePath))
9798
zipfs.Cgi(w, r, serverSettings.PhpCgiPath, filePath)
9899
return
99100
}
@@ -121,6 +122,10 @@ func ServeLegacy(w http.ResponseWriter, r *http.Request) {
121122
if serverSettings.UseInfinityServer {
122123
serverUrl := strings.TrimRight(serverSettings.InfinityServerURL, "/")
123124
for _, filePath := range append(exactFilePaths, indexFilePaths...) {
125+
// Do not attempt to run server side scripts
126+
if isScriptFile(filePath) {
127+
continue
128+
}
124129
// Create a new request to the online server
125130
relPath, err := filepath.Rel(serverSettings.LegacyHTDOCSPath, filePath)
126131
if err != nil {
@@ -148,15 +153,18 @@ func ServeLegacy(w http.ResponseWriter, r *http.Request) {
148153

149154
// 3. Special Behaviour (MAD4FP)
150155
if serverSettings.UseMad4FP {
151-
// Clone the entire request, to keep headers intact for better scraping
152-
liveReq := r.Clone(r.Context())
153-
liveReq.Header.Set("User-Agent", "Flashpoint Game Server MAD4FP")
154-
// Perform request
155-
resp, err := DoWebRequest(liveReq, client, 0)
156-
// If 200, serve and save
157-
if err == nil {
158-
serveLiveResponse(w, resp, exactContentPath, successCloser, "MAD4FP")
159-
return
156+
// Do not attempt to run server side scripts
157+
if !isScriptUrl(r.URL) {
158+
// Clone the entire request, to keep headers intact for better scraping
159+
liveReq := r.Clone(r.Context())
160+
liveReq.Header.Set("User-Agent", "Flashpoint Game Server MAD4FP")
161+
// Perform request
162+
resp, err := DoWebRequest(liveReq, client, 0)
163+
// If 200, serve and save
164+
if err == nil {
165+
serveLiveResponse(w, resp, exactContentPath, successCloser, "MAD4FP")
166+
return
167+
}
160168
}
161169
}
162170

@@ -239,3 +247,21 @@ func DoWebRequest(r *http.Request, client *http.Client, depth int) (*http.Respon
239247
}
240248
return resp, fmt.Errorf(resp.Status)
241249
}
250+
251+
func isScriptFile(filePath string) bool {
252+
for _, ext := range serverSettings.ExtScriptTypes {
253+
if filepath.Ext(filePath) == "."+ext {
254+
return true
255+
}
256+
}
257+
return false
258+
}
259+
260+
func isScriptUrl(u *url.URL) bool {
261+
for _, ext := range serverSettings.ExtScriptTypes {
262+
if filepath.Ext(u.Path) == "."+ext {
263+
return true
264+
}
265+
}
266+
return false
267+
}

legacyServer_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ var testServerSettings = ServerSettings{
3838
ExtIndexTypes: []string{
3939
"htm", "html", "php",
4040
},
41+
PhpCgiPath: `J:\Data\Flashpoint\Legacy\php-cgi.exe`,
4142
}
4243

4344
func setup(settings *ServerSettings) {
@@ -248,6 +249,39 @@ func TestServeLegacy200Index(t *testing.T) {
248249
}
249250
}
250251

252+
func TestServeLegacy200Script(t *testing.T) {
253+
setup(&testServerSettings)
254+
255+
// Write a test file
256+
testStr := "success"
257+
testData := []byte(fmt.Sprintf("<?php echo \"%s\"; ?>", testStr))
258+
testFile := path.Join(testServerSettings.LegacyHTDOCSPath, "example.com", "index.php")
259+
// Make directory path
260+
err := os.MkdirAll(path.Dir(testFile), os.ModePerm)
261+
if err != nil {
262+
t.Error(err)
263+
}
264+
err = os.WriteFile(testFile, testData, os.ModePerm)
265+
if err != nil {
266+
t.Error(err)
267+
}
268+
269+
headers := &http.Header{}
270+
headers.Set("Content-Length", strconv.Itoa(len(testStr)))
271+
test := &legacyServerTest{
272+
request: makeNewRequest("GET", "http://example.com/index.php"),
273+
response: &legacyServerTestResponse{
274+
statusCode: http.StatusOK,
275+
headers: headers,
276+
},
277+
}
278+
279+
err = test.run()
280+
if err != nil {
281+
t.Error(err)
282+
}
283+
}
284+
251285
func TestServeLegacyDisabledOnline(t *testing.T) {
252286
setup(&testServerSettings)
253287

@@ -287,6 +321,26 @@ func TestServeLegacyOnline200(t *testing.T) {
287321
}
288322
}
289323

324+
func TestServeLegacyOnline200Index(t *testing.T) {
325+
settings := testServerSettings
326+
settings.UseInfinityServer = true
327+
setup(&settings)
328+
329+
savedFile := path.Join(settings.LegacyHTDOCSPath, "kongregate.com", "ChuckTheSheep", "index.htm")
330+
test := &legacyServerTest{
331+
request: makeNewRequest("GET", "http://kongregate.com/ChuckTheSheep/"),
332+
response: &legacyServerTestResponse{
333+
statusCode: http.StatusOK,
334+
savedFile: &savedFile,
335+
},
336+
}
337+
338+
err := test.run()
339+
if err != nil {
340+
t.Error(err)
341+
}
342+
}
343+
290344
func TestServeLegacyDisabledMad4fp(t *testing.T) {
291345
setup(&testServerSettings)
292346

0 commit comments

Comments
 (0)