delete useless custombackend popup
correct load of subpage when standalone binary ability to set external videourl when using standalone binary
This commit is contained in:
@ -4,7 +4,6 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"openmediacenter/apiGo/api/oauth"
|
||||
)
|
||||
@ -37,7 +36,7 @@ func AddHandler(action string, apiNode int, n interface{}, h func() []byte) {
|
||||
handlers = append(handlers, Handler{action, h, n, apiNode})
|
||||
}
|
||||
|
||||
func ServerInit(port uint16) {
|
||||
func ServerInit() {
|
||||
http.Handle(APIPREFIX+"/video", oauth.ValidateToken(videoHandler))
|
||||
http.Handle(APIPREFIX+"/tags", oauth.ValidateToken(tagHandler))
|
||||
http.Handle(APIPREFIX+"/settings", oauth.ValidateToken(settingsHandler))
|
||||
@ -48,9 +47,6 @@ func ServerInit(port uint16) {
|
||||
|
||||
// initialize oauth service and add corresponding auth routes
|
||||
oauth.InitOAuth()
|
||||
|
||||
fmt.Printf("OpenMediacenter server up and running on port %d\n", port)
|
||||
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), nil))
|
||||
}
|
||||
|
||||
func handleAPICall(action string, requestBody string, apiNode int) []byte {
|
||||
|
@ -3,6 +3,8 @@ package api
|
||||
import (
|
||||
"encoding/json"
|
||||
"openmediacenter/apiGo/database/settings"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func AddInitHandlers() {
|
||||
@ -20,11 +22,15 @@ func passwordNeeded() {
|
||||
VideoPath string
|
||||
}
|
||||
|
||||
regexMatchUrl := regexp.MustCompile("^http(|s):\\/\\/([0-9]){1,3}\\.([0-9]){1,3}\\.([0-9]){1,3}\\.([0-9]){1,3}:[0-9]{1,5}")
|
||||
videoUrl := regexMatchUrl.FindString(sett.VideoPath)
|
||||
serverVideoPath := strings.TrimPrefix(sett.VideoPath, videoUrl)
|
||||
|
||||
res := InitialDataTypeResponse{
|
||||
DarkMode: sett.DarkMode,
|
||||
Pasword: sett.Pasword != "-1",
|
||||
MediacenterName: sett.Mediacenter_name,
|
||||
VideoPath: sett.VideoPath,
|
||||
VideoPath: serverVideoPath,
|
||||
}
|
||||
|
||||
str, _ := json.Marshal(res)
|
||||
|
@ -3,12 +3,16 @@ package main
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"openmediacenter/apiGo/api"
|
||||
"openmediacenter/apiGo/database"
|
||||
"openmediacenter/apiGo/static"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println("init OpenMediaCenter server")
|
||||
port := 8081
|
||||
|
||||
db, verbose, pathPrefix := handleCommandLineArguments()
|
||||
// todo some verbosity logger or sth
|
||||
@ -28,7 +32,13 @@ func main() {
|
||||
api.AddActorsHandlers()
|
||||
api.AddInitHandlers()
|
||||
|
||||
api.ServerInit(8081)
|
||||
// add the static files
|
||||
static.ServeStaticFiles()
|
||||
|
||||
api.ServerInit()
|
||||
|
||||
fmt.Printf("OpenMediacenter server up and running on port %d\n", port)
|
||||
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), nil))
|
||||
}
|
||||
|
||||
func handleCommandLineArguments() (*database.DatabaseConfig, bool, *string) {
|
||||
|
89
apiGo/static/StaticServe.go
Normal file
89
apiGo/static/StaticServe.go
Normal file
@ -0,0 +1,89 @@
|
||||
// +build static
|
||||
|
||||
package static
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
"net/http/httputil"
|
||||
"net/url"
|
||||
"openmediacenter/apiGo/database/settings"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
//go:embed build
|
||||
var staticFiles embed.FS
|
||||
|
||||
func ServeStaticFiles() {
|
||||
// http.FS can be used to create a http Filesystem
|
||||
subfs, _ := fs.Sub(staticFiles, "build")
|
||||
staticFS := http.FS(subfs)
|
||||
fs := http.FileServer(staticFS)
|
||||
|
||||
// Serve static files
|
||||
http.Handle("/", validatePrefix(fs))
|
||||
|
||||
// we need to proxy the videopath to somewhere in a standalone binary
|
||||
proxyVideoURL()
|
||||
}
|
||||
|
||||
type handler struct {
|
||||
proxy *httputil.ReverseProxy
|
||||
}
|
||||
|
||||
func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
h.proxy.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
func proxyVideoURL() {
|
||||
conf := settings.LoadSettings()
|
||||
|
||||
// match base url
|
||||
regexMatchUrl := regexp.MustCompile("^http(|s):\\/\\/([0-9]){1,3}\\.([0-9]){1,3}\\.([0-9]){1,3}\\.([0-9]){1,3}:[0-9]{1,5}")
|
||||
|
||||
var videoUrl *url.URL
|
||||
if regexMatchUrl.MatchString(conf.VideoPath) {
|
||||
fmt.Println("matches string...")
|
||||
var err error
|
||||
videoUrl, err = url.Parse(regexMatchUrl.FindString(conf.VideoPath))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
} else {
|
||||
videoUrl, _ = url.Parse("http://127.0.0.1:8081")
|
||||
}
|
||||
|
||||
director := func(req *http.Request) {
|
||||
req.URL.Scheme = videoUrl.Scheme
|
||||
req.URL.Host = videoUrl.Host
|
||||
}
|
||||
|
||||
serverVideoPath := strings.TrimPrefix(conf.VideoPath, regexMatchUrl.FindString(conf.VideoPath))
|
||||
|
||||
reverseProxy := &httputil.ReverseProxy{Director: director}
|
||||
handler := handler{proxy: reverseProxy}
|
||||
http.Handle(serverVideoPath, handler)
|
||||
}
|
||||
|
||||
// ValidatePrefix check if requested path is a file -- if not proceed with index.html
|
||||
func validatePrefix(h http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
regex := regexp.MustCompile("\\..*$")
|
||||
matchFile := regex.MatchString(r.URL.Path)
|
||||
|
||||
if matchFile {
|
||||
h.ServeHTTP(w, r)
|
||||
} else {
|
||||
r2 := new(http.Request)
|
||||
*r2 = *r
|
||||
r2.URL = new(url.URL)
|
||||
*r2.URL = *r.URL
|
||||
r2.URL.Path = "/"
|
||||
r2.URL.RawPath = "/"
|
||||
h.ServeHTTP(w, r2)
|
||||
}
|
||||
})
|
||||
}
|
6
apiGo/static/StaticServe_apionly.go
Normal file
6
apiGo/static/StaticServe_apionly.go
Normal file
@ -0,0 +1,6 @@
|
||||
// +build !static
|
||||
|
||||
package static
|
||||
|
||||
// add nothing on no static build
|
||||
func ServeStaticFiles() {}
|
Reference in New Issue
Block a user