Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions core/baseline/baseline.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ func (bl *Baseline) Collect() {
}
}

bl.Extracteds.Merge(pkg.HTTPLanguageExtract(pkg.ExtractHTTPLanguage(bl.Header, bl.Body)))
bl.Hashes = parsers.NewHashes(bl.Raw)
bl.Extracteds.Merge(pkg.ProtonExtract(bl.Raw))
bl.Unique = UniqueHash(bl)
Expand Down
66 changes: 66 additions & 0 deletions core/baseline/http_language_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package baseline

import (
"testing"

"github.com/chainreactors/spray/core/ihttp"
"github.com/chainreactors/spray/pkg"
"github.com/valyala/fasthttp"
)

func TestCollectAddsHTTPLanguageExtract(t *testing.T) {
var fastResp fasthttp.Response
fastResp.SetStatusCode(200)
fastResp.Header.Set("Content-Type", "text/html; charset=utf-8")
fastResp.Header.Set("Content-Language", "en-US")
fastResp.SetBodyString(`<html lang="en"><body>これは日本語のページです。サービス状態を表示します。</body></html>`)

resp := &ihttp.Response{FastResponse: &fastResp}
bl := NewBaseline("https://example.test/", "example.test", resp)
bl.Collect()

var found bool
for _, e := range bl.Extracteds {
if e.Name == "language" {
found = true
if len(e.ExtractResult) != 1 || e.ExtractResult[0] != "ja" {
t.Fatalf("language extract_result = %v, want [ja]", e.ExtractResult)
}
break
}
}
if !found {
t.Fatal("language extract not found in Extracteds")
}
}

func TestCollectAddsHTTPLanguageExtractWithoutFingerEngine(t *testing.T) {
oldEnableAllFingerEngine := pkg.EnableAllFingerEngine
pkg.EnableAllFingerEngine = false
t.Cleanup(func() {
pkg.EnableAllFingerEngine = oldEnableAllFingerEngine
})

var fastResp fasthttp.Response
fastResp.SetStatusCode(200)
fastResp.Header.Set("Content-Type", "text/html; charset=utf-8")
fastResp.SetBodyString(`<html lang="en"><body>This is an English product page and the service is available for you from the web console with your account.</body></html>`)

resp := &ihttp.Response{FastResponse: &fastResp}
bl := NewBaseline("https://example.test/", "example.test", resp)
bl.Collect()

var found bool
for _, e := range bl.Extracteds {
if e.Name == "language" {
found = true
if len(e.ExtractResult) != 1 || e.ExtractResult[0] != "en" {
t.Fatalf("language extract_result = %v, want [en]", e.ExtractResult)
}
break
}
}
if !found {
t.Fatal("language extract not found, want language detection even when finger engine is disabled")
}
}
Loading
Loading