frp/pkg/util/vhost/resource.go
OoyonghongoO 84d34c8298 UPLOAD
2024-10-05 10:25:11 +08:00

118 lines
18 KiB
Go

// Copyright 2017 fatedier, fatedier@gmail.com
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package vhost
import (
"bytes"
"io"
"net/http"
"os"
"github.com/fatedier/frp/pkg/util/log"
"github.com/fatedier/frp/pkg/util/version"
)
var NotFoundPagePath = ""
const (
NotFound = `<!DOCTYPE html>
<html>
<head>
<title>503 Service Unavailable - 服务不可用</title>
<link rel="shortcut icon" href="data:image/x-icon;base64,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">
<style>
body {
background-image: url("https://api.rcov.top/api/v1/acg?source=fj&json=false");
background-attachment: fixed;
background-size: cover;
}
.box {
color: white;
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
padding: 8px 32px;
box-shadow: 0px 0px 16px rgba(0,0,0,0.1);
margin-top: 80px;
font-weight: 300;
border-radius: 10px;
background-color: rgba(0,0,0,0.5);
}
.box h1 {
font-weight: 300;
}
</style>
</head>
<body>
<div class="box">
<h1>HayFrp Server ERROR<br>503 Service Unavailable - 服务不可用</h1>
<p>您访问的网站或服务暂时不可用</p>
<p>如果您是隧道所有者,造成无法访问的原因可能有:</p>
<ul>
<li>您访问的网站使用了内网穿透,但是对应的客户端没有运行。</li>
<li>该网站或隧道已被管理员临时或永久禁止连接。</li>
<li>域名解析更改还未生效或解析错误,请检查设置是否正确。</li>
<li>仍无法解决请尝试参考<a style="color: white;" href="https://learn.hayfrp.org">官方帮助文档</a>或访问知识库</li>
</ul>
<p>如果您是普通访问者,您可以:</p>
<ul>
<li>稍等一段时间后再次尝试访问此站点。</li>
<li>尝试与该网站的所有者取得联系。</li>
<li>刷新您的 DNS 缓存或在其他网络环境访问。</li>
<li>如果成功与网站所有者取得联系您可以尝试更改hosts以访问</li>
</ul>
<p align="right"><em>Powered by <a style="color: white;" href="https://www.hayfrp.org">HayFrp</a> | Based on HayFrp Server</em></p>
</div>
</body>
</html>
`
)
func getNotFoundPageContent() []byte {
var (
buf []byte
err error
)
if NotFoundPagePath != "" {
buf, err = os.ReadFile(NotFoundPagePath)
if err != nil {
log.Warnf("read custom 404 page error: %v", err)
buf = []byte(NotFound)
}
} else {
buf = []byte(NotFound)
}
return buf
}
func NotFoundResponse() *http.Response {
header := make(http.Header)
header.Set("server", "hayfrp/"+version.Full())
header.Set("Content-Type", "text/html")
content := getNotFoundPageContent()
res := &http.Response{
Status: "Not Found",
StatusCode: 404,
Proto: "HTTP/1.1",
ProtoMajor: 1,
ProtoMinor: 1,
Header: header,
Body: io.NopCloser(bytes.NewReader(content)),
ContentLength: int64(len(content)),
}
return res
}