mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-10 20:50:25 +08:00
优化代码
This commit is contained in:
@@ -5,7 +5,7 @@ import "sync"
|
|||||||
var eventsMap = map[string][]func(){} // event => []callbacks
|
var eventsMap = map[string][]func(){} // event => []callbacks
|
||||||
var locker = sync.Mutex{}
|
var locker = sync.Mutex{}
|
||||||
|
|
||||||
// 增加事件回调
|
// On 增加事件回调
|
||||||
func On(event string, callback func()) {
|
func On(event string, callback func()) {
|
||||||
locker.Lock()
|
locker.Lock()
|
||||||
defer locker.Unlock()
|
defer locker.Unlock()
|
||||||
@@ -15,7 +15,7 @@ func On(event string, callback func()) {
|
|||||||
eventsMap[event] = callbacks
|
eventsMap[event] = callbacks
|
||||||
}
|
}
|
||||||
|
|
||||||
// 通知事件
|
// Notify 通知事件
|
||||||
func Notify(event string) {
|
func Notify(event string) {
|
||||||
locker.Lock()
|
locker.Lock()
|
||||||
callbacks, _ := eventsMap[event]
|
callbacks, _ := eventsMap[event]
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeNode/internal/stats"
|
"github.com/TeaOSLab/EdgeNode/internal/stats"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
||||||
"github.com/iwind/TeaGo/lists"
|
"github.com/iwind/TeaGo/lists"
|
||||||
|
"github.com/iwind/TeaGo/logs"
|
||||||
"github.com/iwind/TeaGo/maps"
|
"github.com/iwind/TeaGo/maps"
|
||||||
"github.com/iwind/TeaGo/types"
|
"github.com/iwind/TeaGo/types"
|
||||||
"io"
|
"io"
|
||||||
@@ -1160,6 +1161,7 @@ func (this *HTTPRequest) Method() string {
|
|||||||
return this.RawReq.Method
|
return this.RawReq.Method
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TransferEncoding 获取传输编码
|
||||||
func (this *HTTPRequest) TransferEncoding() string {
|
func (this *HTTPRequest) TransferEncoding() string {
|
||||||
if len(this.RawReq.TransferEncoding) > 0 {
|
if len(this.RawReq.TransferEncoding) > 0 {
|
||||||
return this.RawReq.TransferEncoding[0]
|
return this.RawReq.TransferEncoding[0]
|
||||||
@@ -1167,6 +1169,15 @@ func (this *HTTPRequest) TransferEncoding() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cookie 获取Cookie
|
||||||
|
func (this *HTTPRequest) Cookie(name string) string {
|
||||||
|
c, err := this.RawReq.Cookie(name)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return c.Value
|
||||||
|
}
|
||||||
|
|
||||||
// DeleteHeader 删除Header
|
// DeleteHeader 删除Header
|
||||||
func (this *HTTPRequest) DeleteHeader(name string) {
|
func (this *HTTPRequest) DeleteHeader(name string) {
|
||||||
this.RawReq.Header.Del(name)
|
this.RawReq.Header.Del(name)
|
||||||
@@ -1182,10 +1193,12 @@ func (this *HTTPRequest) Header() http.Header {
|
|||||||
return this.RawReq.Header
|
return this.RawReq.Header
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// URI 获取当前请求的URI
|
||||||
func (this *HTTPRequest) URI() string {
|
func (this *HTTPRequest) URI() string {
|
||||||
return this.uri
|
return this.uri
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetURI 设置当前请求的URI
|
||||||
func (this *HTTPRequest) SetURI(uri string) {
|
func (this *HTTPRequest) SetURI(uri string) {
|
||||||
this.uri = uri
|
this.uri = uri
|
||||||
}
|
}
|
||||||
@@ -1213,6 +1226,12 @@ func (this *HTTPRequest) Close() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allow 放行
|
||||||
|
func (this *HTTPRequest) Allow() {
|
||||||
|
logs.Println("allow") // TODO
|
||||||
|
this.web.FirewallRef = nil
|
||||||
|
}
|
||||||
|
|
||||||
// 设置代理相关头部信息
|
// 设置代理相关头部信息
|
||||||
// 参考:https://tools.ietf.org/html/rfc7239
|
// 参考:https://tools.ietf.org/html/rfc7239
|
||||||
func (this *HTTPRequest) setForwardHeaders(header http.Header) {
|
func (this *HTTPRequest) setForwardHeaders(header http.Header) {
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ import (
|
|||||||
|
|
||||||
// 调用WAF
|
// 调用WAF
|
||||||
func (this *HTTPRequest) doWAFRequest() (blocked bool) {
|
func (this *HTTPRequest) doWAFRequest() (blocked bool) {
|
||||||
|
if this.web.FirewallRef == nil || !this.web.FirewallRef.IsOn {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
var remoteAddr = this.requestRemoteAddr(true)
|
var remoteAddr = this.requestRemoteAddr(true)
|
||||||
|
|
||||||
// 检查是否为白名单直连
|
// 检查是否为白名单直连
|
||||||
@@ -219,6 +223,10 @@ func (this *HTTPRequest) checkWAFRequest(firewallPolicy *firewallconfigs.HTTPFir
|
|||||||
|
|
||||||
// call response waf
|
// call response waf
|
||||||
func (this *HTTPRequest) doWAFResponse(resp *http.Response) (blocked bool) {
|
func (this *HTTPRequest) doWAFResponse(resp *http.Response) (blocked bool) {
|
||||||
|
if this.web.FirewallRef == nil || !this.web.FirewallRef.IsOn {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 当前服务的独立设置
|
// 当前服务的独立设置
|
||||||
if this.web.FirewallPolicy != nil && this.web.FirewallPolicy.IsOn {
|
if this.web.FirewallPolicy != nil && this.web.FirewallPolicy.IsOn {
|
||||||
blocked := this.checkWAFResponse(this.web.FirewallPolicy, resp)
|
blocked := this.checkWAFResponse(this.web.FirewallPolicy, resp)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"compress/flate"
|
"compress/flate"
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
|
"errors"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/caches"
|
"github.com/TeaOSLab/EdgeNode/internal/caches"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/compressions"
|
"github.com/TeaOSLab/EdgeNode/internal/compressions"
|
||||||
@@ -27,6 +28,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
@@ -217,13 +219,46 @@ func (this *HTTPWriter) WriteHeader(statusCode int) {
|
|||||||
this.statusCode = statusCode
|
this.statusCode = statusCode
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send 发送响应
|
// Send 直接发送内容,并终止请求
|
||||||
func (this *HTTPWriter) Send(status int, body string) {
|
func (this *HTTPWriter) Send(status int, body string) {
|
||||||
this.WriteHeader(status)
|
this.WriteHeader(status)
|
||||||
_, _ = this.WriteString(body)
|
_, _ = this.WriteString(body)
|
||||||
this.isFinished = true
|
this.isFinished = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SendFile 发送文件内容,并终止请求
|
||||||
|
func (this *HTTPWriter) SendFile(status int, path string) (int64, error) {
|
||||||
|
this.WriteHeader(status)
|
||||||
|
this.isFinished = true
|
||||||
|
|
||||||
|
fp, err := os.OpenFile(path, os.O_RDONLY, 0444)
|
||||||
|
if err != nil {
|
||||||
|
return 0, errors.New("open file '" + path + "' failed: " + err.Error())
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
_ = fp.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
|
stat, err := fp.Stat()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if stat.IsDir() {
|
||||||
|
return 0, errors.New("open file '" + path + "' failed: it is a directory")
|
||||||
|
}
|
||||||
|
|
||||||
|
var bufPool = this.req.bytePool(stat.Size())
|
||||||
|
var buf = bufPool.Get()
|
||||||
|
defer bufPool.Put(buf)
|
||||||
|
|
||||||
|
written, err := io.CopyBuffer(this, fp, buf)
|
||||||
|
if err != nil {
|
||||||
|
return written, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return written, nil
|
||||||
|
}
|
||||||
|
|
||||||
// StatusCode 读取状态码
|
// StatusCode 读取状态码
|
||||||
func (this *HTTPWriter) StatusCode() int {
|
func (this *HTTPWriter) StatusCode() int {
|
||||||
if this.statusCode == 0 {
|
if this.statusCode == 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user