mirror of
https://github.com/Ernous/TorrServerJellyfin.git
synced 2025-12-19 13:36:09 +05:00
add web log
This commit is contained in:
@@ -17,13 +17,14 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type args struct {
|
type args struct {
|
||||||
Port string `arg:"-p" help:"web server port"`
|
Port string `arg:"-p" help:"web server port"`
|
||||||
Path string `arg:"-d" help:"database path"`
|
Path string `arg:"-d" help:"database path"`
|
||||||
LogPath string `arg:"-l" help:"log path"`
|
LogPath string `arg:"-l" help:"log path"`
|
||||||
RDB bool `arg:"-r" help:"start in read-only DB mode"`
|
WebLogPath string `arg:"-w" help:"web log path"`
|
||||||
HttpAuth bool `arg:"-a" help:"http auth on all requests"`
|
RDB bool `arg:"-r" help:"start in read-only DB mode"`
|
||||||
DontKill bool `arg:"-k" help:"dont kill server on signal"`
|
HttpAuth bool `arg:"-a" help:"http auth on all requests"`
|
||||||
UI bool `arg:"-u" help:"run page torrserver in browser"`
|
DontKill bool `arg:"-k" help:"dont kill server on signal"`
|
||||||
|
UI bool `arg:"-u" help:"run page torrserver in browser"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (args) Version() string {
|
func (args) Version() string {
|
||||||
@@ -45,7 +46,7 @@ func main() {
|
|||||||
|
|
||||||
settings.Path = params.Path
|
settings.Path = params.Path
|
||||||
settings.HttpAuth = params.HttpAuth
|
settings.HttpAuth = params.HttpAuth
|
||||||
log.Init(params.LogPath)
|
log.Init(params.LogPath, params.WebLogPath)
|
||||||
|
|
||||||
dnsResolve()
|
dnsResolve()
|
||||||
Preconfig(params.DontKill)
|
Preconfig(params.DontKill)
|
||||||
@@ -59,6 +60,7 @@ func main() {
|
|||||||
|
|
||||||
server.Start(params.Port, params.RDB)
|
server.Start(params.Port, params.RDB)
|
||||||
log.TLogln(server.WaitServer())
|
log.TLogln(server.WaitServer())
|
||||||
|
log.Close()
|
||||||
time.Sleep(time.Second * 3)
|
time.Sleep(time.Second * 3)
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,100 @@
|
|||||||
package log
|
package log
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Init(path string) {
|
var logPath = ""
|
||||||
|
var webLogPath = ""
|
||||||
|
|
||||||
|
var webLog *log.Logger
|
||||||
|
|
||||||
|
var logFile *os.File
|
||||||
|
var webLogFile *os.File
|
||||||
|
|
||||||
|
func Init(path, webpath string) {
|
||||||
|
webLogPath = webpath
|
||||||
|
logPath = path
|
||||||
|
|
||||||
|
if webpath != "" {
|
||||||
|
ff, err := os.OpenFile(webLogPath, os.O_RDWR|os.O_CREATE, 0666)
|
||||||
|
if err != nil {
|
||||||
|
TLogln("Error create web log file:", err)
|
||||||
|
} else {
|
||||||
|
webLogFile = ff
|
||||||
|
webLog = log.New(ff, " ", log.LstdFlags)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if path != "" {
|
if path != "" {
|
||||||
ff, err := os.Create(path)
|
if fi, err := os.Lstat(path); err == nil {
|
||||||
|
if fi.Size() >= 1*1024*1024*1024 {
|
||||||
|
os.Remove(path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ff, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
TLogln("Error create log file:", err)
|
TLogln("Error create log file:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
logFile = ff
|
||||||
os.Stdout = ff
|
os.Stdout = ff
|
||||||
os.Stderr = ff
|
os.Stderr = ff
|
||||||
log.SetOutput(ff)
|
log.SetOutput(ff)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Close() {
|
||||||
|
if logFile != nil {
|
||||||
|
logFile.Close()
|
||||||
|
}
|
||||||
|
if webLogFile != nil {
|
||||||
|
webLogFile.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TLogln(v ...interface{}) {
|
func TLogln(v ...interface{}) {
|
||||||
log.Println(v...)
|
log.Println(v...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WebLogln(v ...interface{}) {
|
||||||
|
if webLog != nil {
|
||||||
|
webLog.Println(v...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func WebLogger() gin.HandlerFunc {
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
if webLog == nil {
|
||||||
|
c.Next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
body, _ := ioutil.ReadAll(c.Request.Body)
|
||||||
|
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body))
|
||||||
|
c.Next()
|
||||||
|
|
||||||
|
statusCode := c.Writer.Status()
|
||||||
|
clientIP := c.ClientIP()
|
||||||
|
method := c.Request.Method
|
||||||
|
path := c.Request.URL.Path
|
||||||
|
raw := c.Request.URL.RawQuery
|
||||||
|
if raw != "" {
|
||||||
|
path = path + "?" + raw
|
||||||
|
}
|
||||||
|
|
||||||
|
logStr := fmt.Sprintf("%3d | %12s | %-7s %#v %v",
|
||||||
|
statusCode,
|
||||||
|
clientIP,
|
||||||
|
method,
|
||||||
|
path,
|
||||||
|
string(body),
|
||||||
|
)
|
||||||
|
WebLogln(logStr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ func Blocker() gin.HandlerFunc {
|
|||||||
minifyIP(&ip)
|
minifyIP(&ip)
|
||||||
if whiteIpList.NumRanges() > 0 {
|
if whiteIpList.NumRanges() > 0 {
|
||||||
if _, ok := whiteIpList.Lookup(ip); !ok {
|
if _, ok := whiteIpList.Lookup(ip); !ok {
|
||||||
log.TLogln("Block ip, not in white list", ip.String())
|
log.WebLogln("Block ip, not in white list", ip.String())
|
||||||
c.String(http.StatusTeapot, "Banned")
|
c.String(http.StatusTeapot, "Banned")
|
||||||
c.Abort()
|
c.Abort()
|
||||||
return
|
return
|
||||||
@@ -49,7 +49,7 @@ func Blocker() gin.HandlerFunc {
|
|||||||
}
|
}
|
||||||
if blackIpList.NumRanges() > 0 {
|
if blackIpList.NumRanges() > 0 {
|
||||||
if r, ok := blackIpList.Lookup(ip); ok {
|
if r, ok := blackIpList.Lookup(ip); ok {
|
||||||
log.TLogln("Block ip, in black list:", ip.String(), "in range", r.Description, ":", r.First, "-", r.Last)
|
log.WebLogln("Block ip, in black list:", ip.String(), "in range", r.Description, ":", r.First, "-", r.Last)
|
||||||
c.String(http.StatusTeapot, "Banned")
|
c.String(http.StatusTeapot, "Banned")
|
||||||
c.Abort()
|
c.Abort()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ package web
|
|||||||
import (
|
import (
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
"server/web/blocker"
|
|
||||||
|
|
||||||
"github.com/gin-contrib/cors"
|
"github.com/gin-contrib/cors"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
|
||||||
@@ -13,6 +11,7 @@ import (
|
|||||||
"server/version"
|
"server/version"
|
||||||
"server/web/api"
|
"server/web/api"
|
||||||
"server/web/auth"
|
"server/web/auth"
|
||||||
|
"server/web/blocker"
|
||||||
"server/web/pages"
|
"server/web/pages"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -34,8 +33,12 @@ func Start(port string) {
|
|||||||
}
|
}
|
||||||
gin.SetMode(gin.ReleaseMode)
|
gin.SetMode(gin.ReleaseMode)
|
||||||
|
|
||||||
|
corsCfg := cors.DefaultConfig()
|
||||||
|
corsCfg.AllowAllOrigins = true
|
||||||
|
corsCfg.AllowHeaders = []string{"Origin", "Content-Length", "Content-Type", "X-Requested-With", "Accept", "Authorization"}
|
||||||
|
|
||||||
route := gin.New()
|
route := gin.New()
|
||||||
route.Use(gin.Recovery(), cors.Default(), blocker.Blocker())
|
route.Use(log.WebLogger(), blocker.Blocker(), gin.Recovery(), cors.New(corsCfg))
|
||||||
|
|
||||||
route.GET("/echo", echo)
|
route.GET("/echo", echo)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user