Map domain to streamid instead of considering that the domain is the streamid: no need to pass a YAML key that contains dots

This commit is contained in:
Yohann D'ANELLO 2020-10-13 17:12:19 +02:00
parent 3b8c149e38
commit 4546f3b8fb
5 changed files with 29 additions and 27 deletions

View File

@ -73,7 +73,7 @@ srt:
telnet: telnet:
# By default, this easter egg is disabled. # By default, this easter egg is disabled.
# You must enable it to use it. # You must enable it to use it.
#enable: false #enabled: false
#listenAddress: :8023 #listenAddress: :8023
@ -115,11 +115,13 @@ web:
# #
#name: Ghostream #name: Ghostream
# Use the domain name as the stream name # Use the domain name as the stream name for some hosts
# e.g., on http://example.com:8080/ the stream served will be "example.com" # e.g., on http://stream.example.com:8080/, if the domain stream.example.com is mapped to "example",
# the stream served will be "example".
# This implies that your domain will be able to serve only one stream. # This implies that your domain will be able to serve only one stream.
# #
#oneStreamPerDomain: false #mapDomainToStream:
# stream.example.com: example
# Stream player poster # Stream player poster
# Shown when stream is loading or inactive. # Shown when stream is loading or inactive.

View File

@ -71,7 +71,7 @@ func New() *Config {
Hostname: "localhost", Hostname: "localhost",
ListenAddress: ":8080", ListenAddress: ":8080",
Name: "Ghostream", Name: "Ghostream",
OneStreamPerDomain: false, MapDomainToStream: make(map[string]string),
PlayerPoster: "/static/img/no_stream.svg", PlayerPoster: "/static/img/no_stream.svg",
ViewersCounterRefreshPeriod: 20000, ViewersCounterRefreshPeriod: 20000,
}, },

View File

@ -24,17 +24,17 @@ func viewerPostHandler(w http.ResponseWriter, r *http.Request) {
// Get stream ID from URL, or from domain name // Get stream ID from URL, or from domain name
path := r.URL.Path[1:] path := r.URL.Path[1:]
if cfg.OneStreamPerDomain { host := r.Host
host := r.Host if strings.Contains(host, ":") {
if strings.Contains(host, ":") { realHost, _, err := net.SplitHostPort(r.Host)
realHost, _, err := net.SplitHostPort(r.Host) if err != nil {
if err != nil { log.Printf("Failed to split host and port from %s", r.Host)
log.Printf("Failed to split host and port from %s", r.Host) return
return
}
host = realHost
} }
path = host host = realHost
}
if streamID, ok := cfg.MapDomainToStream[host]; ok {
path = streamID
} }
// Decode client description // Decode client description
@ -73,20 +73,20 @@ func viewerPostHandler(w http.ResponseWriter, r *http.Request) {
func viewerGetHandler(w http.ResponseWriter, r *http.Request) { func viewerGetHandler(w http.ResponseWriter, r *http.Request) {
// Get stream ID from URL, or from domain name // Get stream ID from URL, or from domain name
path := r.URL.Path[1:] path := r.URL.Path[1:]
if cfg.OneStreamPerDomain { host := r.Host
host := r.Host if strings.Contains(host, ":") {
if strings.Contains(host, ":") { realHost, _, err := net.SplitHostPort(r.Host)
realHost, _, err := net.SplitHostPort(r.Host) if err != nil {
if err != nil { log.Printf("Failed to split host and port from %s", r.Host)
log.Printf("Failed to split host and port from %s", r.Host) return
return
}
host = realHost
} }
host = realHost
}
if streamID, ok := cfg.MapDomainToStream[host]; ok {
if path == "about" { if path == "about" {
path = "" path = ""
} else { } else {
path = host path = streamID
} }
} }

View File

@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>{{if .Path}}{{if not .Cfg.OneStreamPerDomain}}{{.Path}} - {{end}}{{end}}{{.Cfg.Name}}</title> <title>{{if .Path}}{{.Path}} - {{end}}{{.Cfg.Name}}</title>
<link rel="stylesheet" href="static/css/style.css"> <link rel="stylesheet" href="static/css/style.css">
<link rel="stylesheet" href="static/css/player.css"> <link rel="stylesheet" href="static/css/player.css">
{{if .Cfg.CustomCSS}}<link rel="stylesheet" href="{{.Cfg.CustomCSS}}">{{end}} {{if .Cfg.CustomCSS}}<link rel="stylesheet" href="{{.Cfg.CustomCSS}}">{{end}}

View File

@ -22,7 +22,7 @@ type Options struct {
Hostname string Hostname string
ListenAddress string ListenAddress string
Name string Name string
OneStreamPerDomain bool MapDomainToStream map[string]string
PlayerPoster string PlayerPoster string
SRTServerPort string SRTServerPort string
STUNServers []string STUNServers []string