Files
TorrServerJellyfin/server/web/server.go
2023-08-08 17:52:17 +03:00

119 lines
2.4 KiB
Go

package web
import (
"net"
"sort"
"server/rutor"
"github.com/gin-contrib/cors"
"github.com/gin-contrib/location"
"github.com/gin-gonic/gin"
"server/dlna"
"server/settings"
"server/web/msx"
"server/log"
"server/torr"
"server/version"
"server/web/api"
"server/web/auth"
"server/web/blocker"
"server/web/pages"
)
var (
BTS = torr.NewBTS()
waitChan = make(chan error)
)
func Start(port string) {
log.TLogln("Start TorrServer " + version.Version + " torrent " + version.GetTorrentVersion())
ips := getLocalIps()
if len(ips) > 0 {
log.TLogln("Local IPs:", ips)
}
err := BTS.Connect()
if err != nil {
log.TLogln("BTS.Connect() error!", err)
waitChan <- err
return
}
rutor.Start()
gin.SetMode(gin.ReleaseMode)
// corsCfg := cors.DefaultConfig()
// corsCfg.AllowAllOrigins = true
// corsCfg.AllowHeaders = []string{"*"}
// corsCfg.AllowMethods = []string{"*"}
// corsCfg.AllowPrivateNetwork = true
corsCfg := cors.DefaultConfig()
corsCfg.AllowAllOrigins = true
corsCfg.AllowHeaders = []string{"Origin", "Content-Length", "Content-Type", "X-Requested-With", "Accept", "Authorization"}
route := gin.New()
route.Use(log.WebLogger(), blocker.Blocker(), gin.Recovery(), cors.New(corsCfg), location.Default())
route.GET("/echo", echo)
routeAuth := auth.SetupAuth(route)
if routeAuth != nil {
api.SetupRoute(routeAuth)
msx.SetupRoute(routeAuth)
pages.SetupRoute(routeAuth)
} else {
api.SetupRoute(&route.RouterGroup)
msx.SetupRoute(&route.RouterGroup)
pages.SetupRoute(&route.RouterGroup)
}
if settings.BTsets.EnableDLNA {
dlna.Start()
}
log.TLogln("Start web server at port", port)
waitChan <- route.Run(":" + port)
}
func Wait() error {
return <-waitChan
}
func Stop() {
dlna.Stop()
BTS.Disconnect()
waitChan <- nil
}
func echo(c *gin.Context) {
c.String(200, "%v", version.Version)
}
func getLocalIps() []string {
ifaces, err := net.Interfaces()
if err != nil {
log.TLogln("Error get local IPs")
return nil
}
var list []string
for _, i := range ifaces {
addrs, _ := i.Addrs()
if i.Flags&net.FlagUp == net.FlagUp {
for _, addr := range addrs {
var ip net.IP
switch v := addr.(type) {
case *net.IPNet:
ip = v.IP
case *net.IPAddr:
ip = v.IP
}
if !ip.IsLoopback() && !ip.IsLinkLocalUnicast() && !ip.IsLinkLocalMulticast() {
list = append(list, ip.String())
}
}
}
}
sort.Strings(list)
return list
}