MCPcopy Create free account
hub / github.com/GoEdgeLab/EdgeNode / doPageLookup

Method doPageLookup

internal/nodes/http_request_page.go:47–169  ·  view source on GitHub ↗
(pages []*serverconfigs.HTTPPageConfig, status int)

Source from the content-addressed store, hash-verified

45}
46
47func (this *HTTPRequest) doPageLookup(pages []*serverconfigs.HTTPPageConfig, status int) (shouldStop bool) {
48 var url = this.URL()
49 for _, page := range pages {
50 if !page.MatchURL(url) {
51 continue
52 }
53 if page.Match(status) {
54 if len(page.BodyType) == 0 || page.BodyType == serverconfigs.HTTPPageBodyTypeURL {
55 if urlSchemeRegexp.MatchString(page.URL) {
56 var newStatus = page.NewStatus
57 if newStatus <= 0 {
58 newStatus = status
59 }
60 this.doURL(http.MethodGet, page.URL, "", newStatus, true)
61 return true
62 } else {
63 var realpath = path.Clean(page.URL)
64 if !strings.HasPrefix(realpath, "/pages/") && !strings.HasPrefix(realpath, "pages/") { // only files under "/pages/" can be used
65 var msg = "404 page not found: '" + page.URL + "'"
66 this.writer.Header().Set("Content-Type", defaultPageContentType)
67 this.writer.WriteHeader(http.StatusNotFound)
68 _, _ = this.writer.Write([]byte(msg))
69 return true
70 }
71 var file = Tea.Root + Tea.DS + realpath
72 fp, err := os.Open(file)
73 if err != nil {
74 var msg = "404 page not found: '" + page.URL + "'"
75 this.writer.Header().Set("Content-Type", defaultPageContentType)
76 this.writer.WriteHeader(http.StatusNotFound)
77 _, _ = this.writer.Write([]byte(msg))
78 return true
79 }
80 defer func() {
81 _ = fp.Close()
82 }()
83
84 stat, err := fp.Stat()
85 if err != nil {
86 var msg = "404 could not read page content: '" + page.URL + "'"
87 this.writer.Header().Set("Content-Type", defaultPageContentType)
88 this.writer.WriteHeader(http.StatusNotFound)
89 _, _ = this.writer.Write([]byte(msg))
90 return true
91 }
92
93 // 修改状态码
94 if page.NewStatus > 0 {
95 // 自定义响应Headers
96 this.writer.Header().Set("Content-Type", defaultPageContentType)
97 this.ProcessResponseHeaders(this.writer.Header(), page.NewStatus)
98 this.writer.Prepare(nil, stat.Size(), page.NewStatus, true)
99 this.writer.WriteHeader(page.NewStatus)
100 } else {
101 this.writer.Header().Set("Content-Type", defaultPageContentType)
102 this.ProcessResponseHeaders(this.writer.Header(), status)
103 this.writer.Prepare(nil, stat.Size(), status, true)
104 this.writer.WriteHeader(status)

Callers 1

doPageMethod · 0.95

Calls 15

URLMethod · 0.95
doURLMethod · 0.95
FormatMethod · 0.95
canIgnoreMethod · 0.95
CopyWithFilterFunction · 0.92
WarnFunction · 0.92
httpStatusIsRedirectFunction · 0.85
httpRedirectFunction · 0.85
MatchStringMethod · 0.80
SetOkMethod · 0.80
WriteStringMethod · 0.80

Tested by

no test coverage detected