mirror of
https://gitlab.crans.org/nounous/ghostream.git
synced 2024-12-22 09:12:19 +00:00
Fix #7: make each module optional
This commit is contained in:
parent
99bfc5e109
commit
45c6b5dba5
11
auth/auth.go
11
auth/auth.go
@ -6,12 +6,12 @@ import (
|
||||
"strings"
|
||||
|
||||
"gitlab.crans.org/nounous/ghostream/auth/basic"
|
||||
"gitlab.crans.org/nounous/ghostream/auth/bypass"
|
||||
"gitlab.crans.org/nounous/ghostream/auth/ldap"
|
||||
)
|
||||
|
||||
// Options holds package configuration
|
||||
type Options struct {
|
||||
Enabled bool
|
||||
Backend string
|
||||
Basic basic.Options
|
||||
LDAP ldap.Options
|
||||
@ -25,14 +25,17 @@ type Backend interface {
|
||||
|
||||
// New initialize authentification backend
|
||||
func New(cfg *Options) (Backend, error) {
|
||||
var backend Backend
|
||||
var backend Backend = nil
|
||||
var err error
|
||||
|
||||
if !cfg.Enabled {
|
||||
// Authentification is disabled
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
switch strings.ToLower(cfg.Backend) {
|
||||
case "basic":
|
||||
backend, err = basic.New(&cfg.Basic)
|
||||
case "bypass":
|
||||
backend, err = bypass.New()
|
||||
case "ldap":
|
||||
backend, err = ldap.New(&cfg.LDAP)
|
||||
default:
|
||||
|
@ -1,21 +0,0 @@
|
||||
package bypass
|
||||
|
||||
// ByPass authentification backend
|
||||
// By pass password check, open your streaming server to everyone!
|
||||
type ByPass struct {
|
||||
}
|
||||
|
||||
// Login always return success
|
||||
func (a ByPass) Login(username string, password string) (bool, error) {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// Close has no connection to close
|
||||
func (a ByPass) Close() {
|
||||
}
|
||||
|
||||
// New instanciates a new Basic authentification backend
|
||||
func New() (ByPass, error) {
|
||||
backend := ByPass{}
|
||||
return backend, nil
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
package bypass
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestBypassLogin(t *testing.T) {
|
||||
backend, _ := New()
|
||||
ok, err := backend.Login("demo", "demo")
|
||||
if !ok {
|
||||
t.Error("Error while logging with the bypass authentication:", err)
|
||||
}
|
||||
backend.Close()
|
||||
}
|
@ -5,11 +5,14 @@
|
||||
# e.g. GHOSTREAM_AUTH_BACKEND=ldap will change auth.backend to "ldap"
|
||||
|
||||
## Authentification package ##
|
||||
# Manage incoming stream authentification
|
||||
auth:
|
||||
# If you disable authentification no more check will be done on incoming
|
||||
# streams.
|
||||
#
|
||||
#enabled: true
|
||||
|
||||
# Authentification backend,
|
||||
# can be "basic" to use a list of user:password
|
||||
# can be "bypass" to bypass the authentification process
|
||||
# can be "ldap" to use a LDAP server
|
||||
#
|
||||
#backend: basic
|
||||
@ -41,6 +44,10 @@ forwarding:
|
||||
## Prometheus monitoring ##
|
||||
# Expose a monitoring endpoint for Prometheus
|
||||
monitoring:
|
||||
# If you disable monitoring module, no more metrics will be exposed.
|
||||
#
|
||||
#enabled: true
|
||||
|
||||
# You should not expose monitoring metrics to the whole world.
|
||||
# To limit access to only localhost, use 127.0.0.1:2112
|
||||
#listenAddress: :2112
|
||||
@ -48,6 +55,11 @@ monitoring:
|
||||
## SRT server ##
|
||||
# The SRT server receive incoming stream and can also serve video to clients.
|
||||
srt:
|
||||
# If you disable SRT module, it will be no more possible to receive incoming
|
||||
# streams and this whole app will become useless.
|
||||
#
|
||||
#enabled: true
|
||||
|
||||
# To limit access to only localhost, use 127.0.0.1:9710
|
||||
#listenAddress: :9710
|
||||
|
||||
@ -57,6 +69,11 @@ srt:
|
||||
## Web server ##
|
||||
# The web server serves a WebRTC player.
|
||||
web:
|
||||
# If you disable web module, the stream will be accessible only via SRT or
|
||||
# via forwarding module (see above).
|
||||
#
|
||||
#enabled: true
|
||||
|
||||
# Web page favicon, can be .ico, .png or .svg
|
||||
#
|
||||
#favicon: /static/img/favicon.svg
|
||||
@ -94,6 +111,10 @@ web:
|
||||
|
||||
## WebRTC server ##
|
||||
webrtc:
|
||||
# If you disable webrtc module, the web client won't be able to play streams.
|
||||
#
|
||||
#enabled: true
|
||||
|
||||
# UDP port range used to stream
|
||||
# This range must be opened in your firewall.
|
||||
#
|
||||
|
@ -11,6 +11,7 @@ import (
|
||||
|
||||
// Options holds web package configuration
|
||||
type Options struct {
|
||||
Enabled bool
|
||||
ListenAddress string
|
||||
}
|
||||
|
||||
@ -36,6 +37,11 @@ var (
|
||||
|
||||
// Serve monitoring server that expose prometheus metrics
|
||||
func Serve(cfg *Options) {
|
||||
if !cfg.Enabled {
|
||||
// Monitoring is not enabled, ignore
|
||||
return
|
||||
}
|
||||
|
||||
mux := http.NewServeMux()
|
||||
mux.Handle("/metrics", promhttp.Handler())
|
||||
log.Printf("Monitoring HTTP server listening on %s", cfg.ListenAddress)
|
||||
|
9
main.go
9
main.go
@ -45,6 +45,7 @@ func loadConfiguration() {
|
||||
}
|
||||
|
||||
// Define configuration default values
|
||||
viper.SetDefault("Auth.Enabled", true)
|
||||
viper.SetDefault("Auth.Backend", "Basic")
|
||||
viper.SetDefault("Auth.Basic.Credentials", map[string]string{
|
||||
// Demo user with password "demo"
|
||||
@ -53,15 +54,19 @@ func loadConfiguration() {
|
||||
viper.SetDefault("Auth.LDAP.URI", "ldap://127.0.0.1:389")
|
||||
viper.SetDefault("Auth.LDAP.UserDn", "cn=users,dc=example,dc=com")
|
||||
viper.SetDefault("Forwarding", make(map[string][]string))
|
||||
viper.SetDefault("Monitoring.Enabled", true)
|
||||
viper.SetDefault("Monitoring.ListenAddress", ":2112")
|
||||
viper.SetDefault("Srt.Enabled", true)
|
||||
viper.SetDefault("Srt.ListenAddress", ":9710")
|
||||
viper.SetDefault("Srt.MaxClients", 64)
|
||||
viper.SetDefault("Web.Enabled", true)
|
||||
viper.SetDefault("Web.Favicon", "/static/img/favicon.svg")
|
||||
viper.SetDefault("Web.Hostname", "localhost")
|
||||
viper.SetDefault("Web.ListenAddress", ":8080")
|
||||
viper.SetDefault("Web.Name", "Ghostream")
|
||||
viper.SetDefault("Web.OneStreamPerDomain", false)
|
||||
viper.SetDefault("Web.ViewersCounterRefreshPeriod", 20000)
|
||||
viper.SetDefault("WebRTC.Enabled", true)
|
||||
viper.SetDefault("WebRTC.MaxPortUDP", 10005)
|
||||
viper.SetDefault("WebRTC.MinPortUDP", 10000)
|
||||
viper.SetDefault("WebRTC.STUNServers", []string{"stun:stun.l.google.com:19302"})
|
||||
@ -101,7 +106,9 @@ func main() {
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to load authentification backend:", err)
|
||||
}
|
||||
defer authBackend.Close()
|
||||
if authBackend != nil {
|
||||
defer authBackend.Close()
|
||||
}
|
||||
|
||||
// WebRTC session description channels
|
||||
remoteSdpChan := make(chan struct {
|
||||
|
@ -19,6 +19,7 @@ var (
|
||||
|
||||
// Options holds web package configuration
|
||||
type Options struct {
|
||||
Enabled bool
|
||||
ListenAddress string
|
||||
MaxClients int
|
||||
}
|
||||
@ -53,6 +54,11 @@ func GetNumberConnectedSessions(streamID string) int {
|
||||
|
||||
// Serve SRT server
|
||||
func Serve(cfg *Options, authBackend auth.Backend, forwardingChannel, webrtcChannel chan Packet) {
|
||||
if !cfg.Enabled {
|
||||
// SRT is not enabled, ignore
|
||||
return
|
||||
}
|
||||
|
||||
// Start SRT in listening mode
|
||||
log.Printf("SRT server listening on %s", cfg.ListenAddress)
|
||||
host, port := splitHostPort(cfg.ListenAddress)
|
||||
|
@ -13,9 +13,9 @@ import (
|
||||
|
||||
// Options holds web package configuration
|
||||
type Options struct {
|
||||
MinPortUDP uint16
|
||||
MaxPortUDP uint16
|
||||
|
||||
Enabled bool
|
||||
MinPortUDP uint16
|
||||
MaxPortUDP uint16
|
||||
STUNServers []string
|
||||
}
|
||||
|
||||
@ -179,6 +179,11 @@ func Serve(remoteSdpChan chan struct {
|
||||
StreamID string
|
||||
RemoteDescription webrtc.SessionDescription
|
||||
}, localSdpChan chan webrtc.SessionDescription, inputChannel chan srt.Packet, cfg *Options) {
|
||||
if !cfg.Enabled {
|
||||
// SRT is not enabled, ignore
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("WebRTC server using UDP from port %d to %d", cfg.MinPortUDP, cfg.MaxPortUDP)
|
||||
|
||||
// Allocate memory
|
||||
|
@ -15,6 +15,7 @@ import (
|
||||
|
||||
// Options holds web package configuration
|
||||
type Options struct {
|
||||
Enabled bool
|
||||
Favicon string
|
||||
Hostname string
|
||||
ListenAddress string
|
||||
@ -82,6 +83,11 @@ func Serve(rSdpChan chan struct {
|
||||
localSdpChan = lSdpChan
|
||||
cfg = c
|
||||
|
||||
if !cfg.Enabled {
|
||||
// SRT is not enabled, ignore
|
||||
return
|
||||
}
|
||||
|
||||
// Load templates
|
||||
if err := loadTemplates(); err != nil {
|
||||
log.Fatalln("Failed to load templates:", err)
|
||||
|
Loading…
Reference in New Issue
Block a user