1
0
mirror of https://gitlab.crans.org/nounous/ghostream.git synced 2025-07-04 10:32:16 +02:00

1 Commits

Author SHA1 Message Date
91b7f3d789 Config on legal mentions 2020-11-12 01:34:02 +01:00
18 changed files with 30 additions and 103 deletions

View File

@ -20,7 +20,7 @@ type Options struct {
// Backend to log user in // Backend to log user in
type Backend interface { type Backend interface {
Login(string, string) (bool, string, error) Login(string, string) (bool, error)
Close() Close()
} }

View File

@ -23,15 +23,15 @@ type Basic struct {
// Login hashs password and compare // Login hashs password and compare
// Returns (true, nil) if success // Returns (true, nil) if success
func (a Basic) Login(username string, password string) (bool, string, error) { func (a Basic) Login(username string, password string) (bool, error) {
hash, ok := a.Cfg.Credentials[username] hash, ok := a.Cfg.Credentials[username]
if !ok { if !ok {
return false, "", errors.New("user not found in credentials") return false, errors.New("user not found in credentials")
} }
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
// Login succeeded if no error // Login succeeded if no error
return err == nil, username, err return err == nil, err
} }
// Close has no connection to close // Close has no connection to close

View File

@ -3,15 +3,12 @@ package ldap
import ( import (
"github.com/go-ldap/ldap/v3" "github.com/go-ldap/ldap/v3"
"log"
"strings"
) )
// Options holds package configuration // Options holds package configuration
type Options struct { type Options struct {
Aliases map[string]map[string]string URI string
URI string UserDn string
UserDn string
} }
// LDAP authentification backend // LDAP authentification backend
@ -22,37 +19,13 @@ type LDAP struct {
// Login tries to bind to LDAP // Login tries to bind to LDAP
// Returns (true, nil) if success // Returns (true, nil) if success
func (a LDAP) Login(username string, password string) (bool, string, error) { func (a LDAP) Login(username string, password string) (bool, error) {
aliasSplit := strings.SplitN(username, "__", 2) // Try to bind as user
potentialUsernames := []string{username} bindDn := "cn=" + username + "," + a.Cfg.UserDn
err := a.Conn.Bind(bindDn, password)
if len(aliasSplit) == 2 { // Login succeeded if no error
alias := aliasSplit[0] return err == nil, err
trueUsername := aliasSplit[1]
// Resolve stream alias if necessary
if aliases, ok := a.Cfg.Aliases[alias]; ok {
if _, ok := aliases[trueUsername]; ok {
log.Printf("[LDAP] Use stream alias %s for username %s", alias, trueUsername)
potentialUsernames = append(potentialUsernames, trueUsername)
}
}
}
var err error = nil
for _, username := range potentialUsernames {
// Try to bind as user
bindDn := "cn=" + username + "," + a.Cfg.UserDn
log.Printf("[LDAP] Logging to %s...", bindDn)
err = a.Conn.Bind(bindDn, password)
if err == nil {
// Login succeeded if no error
return true, aliasSplit[0], nil
}
}
log.Printf("[LDAP] Logging failed: %s", err)
// Unable to log in
return err == nil, "", err
} }
// Close LDAP connection // Close LDAP connection

View File

@ -21,11 +21,8 @@
</IceCandidates> </IceCandidates>
</WebRTC> </WebRTC>
<HLS> <HLS>
<Port>80</Port>
</HLS>
<DASH>
<Port>80</Port> <Port>80</Port>
</DASH> </HLS>
</Publishers> </Publishers>
</Bind> </Bind>
@ -55,15 +52,14 @@
</Video> </Video>
</Encode> </Encode>
<Encode> <Encode>
<Name>bypass</Name> <Name>BYPASS</Name>
<Audio>
<Bypass>true</Bypass>
</Audio>
<Video> <Video>
<Bypass>true</Bypass> <Bypass>true</Bypass>
</Video> </Video>
<Audio>
<Bypass>true</Bypass>
</Audio>
</Encode> </Encode>
</Encodes> </Encodes>
<Streams> <Streams>
<Stream> <Stream>
@ -75,10 +71,9 @@
<Stream> <Stream>
<Name>${OriginStreamName}_bypass</Name> <Name>${OriginStreamName}_bypass</Name>
<Profiles> <Profiles>
<Profile>bypass</Profile> <Profile>BYPASS</Profile>
</Profiles> </Profiles>
</Stream> </Stream>
</Streams> </Streams>
<Providers> <Providers>
<RTMP> <RTMP>
@ -91,28 +86,15 @@
<Timeout>30000</Timeout> <Timeout>30000</Timeout>
</WebRTC> </WebRTC>
<HLS> <HLS>
<SegmentDuration>2</SegmentDuration> <SegmentDuration>5</SegmentDuration>
<SegmentCount>2</SegmentCount> <SegmentCount>2</SegmentCount>
<CrossDomain> <CrossDomain>
<Url>*</Url> <Url>*</Url>
</CrossDomain> </CrossDomain>
</HLS> </HLS>
<DASH>
<SegmentDuration>2</SegmentDuration>
<SegmentCount>2</SegmentCount>
<CrossDomain>
<Url>*</Url>
</CrossDomain>
</DASH>
<LLDASH>
<SegmentDuration>2</SegmentDuration>
<CrossDomain>
<Url>*</Url>
</CrossDomain>
</LLDASH>
</Publishers> </Publishers>
</Application> </Application>
</Applications> </Applications>
</VirtualHost> </VirtualHost>
</VirtualHosts> </VirtualHosts>
</Server> </Server>

View File

@ -34,13 +34,6 @@ auth:
#ldap: #ldap:
# uri: ldap://127.0.0.1:389 # uri: ldap://127.0.0.1:389
# userdn: cn=users,dc=example,dc=com # userdn: cn=users,dc=example,dc=com
#
# # You can define aliases, to stream on stream.example.com/example with the credentials of the demo account.
# # You will have to use the streamid example__demo:password
# aliases:
# example:
# demo: ignored
#
## Stream forwarding ## ## Stream forwarding ##
# Forward an incoming stream to other servers # Forward an incoming stream to other servers

View File

@ -42,9 +42,8 @@ func New() *Config {
Credentials: make(map[string]string), Credentials: make(map[string]string),
}, },
LDAP: ldap.Options{ LDAP: ldap.Options{
Aliases: make(map[string]map[string]string), URI: "ldap://127.0.0.1:389",
URI: "ldap://127.0.0.1:389", UserDn: "cn=users,dc=example,dc=com",
UserDn: "cn=users,dc=example,dc=com",
}, },
}, },
Forwarding: make(map[string][]string), Forwarding: make(map[string][]string),

View File

@ -82,13 +82,11 @@ func Serve(streams *messaging.Streams, authBackend auth.Backend, cfg *Options) {
name, password := split[0], split[1] name, password := split[0], split[1]
if authBackend != nil { if authBackend != nil {
// check password // check password
ok, username, err := authBackend.Login(name, password) if ok, err := authBackend.Login(name, password); !ok || err != nil {
if !ok || err != nil {
log.Printf("Failed to authenticate for stream %s", name) log.Printf("Failed to authenticate for stream %s", name)
s.Close() s.Close()
continue continue
} }
name = username
} }
go handleStreamer(s, streams, name) go handleStreamer(s, streams, name)

View File

@ -47,20 +47,10 @@ export function initViewerPage(stream, omeApp, viewersCounterRefreshPeriod, post
"label": " WebRTC - Source" "label": " WebRTC - Source"
}, },
{ {
"file": "https://" + window.location.host + "/" + omeApp + "/" + stream + "_bypass/playlist.m3u8",
"type": "hls", "type": "hls",
"file": "https://" + window.location.host + "/" + omeApp + "/" + stream + "_bypass/playlist.m3u8",
"label": " HLS" "label": " HLS"
}, }
{
"file": "https://" + window.location.host + "/" + omeApp + "/" + stream + "_bypass/manifest.mpd",
"type": "dash",
"label": "DASH"
},
{
"file": "https://" + window.location.host + "/" + omeApp + "/" + stream + "_bypass/manifest_ll.mpd",
"type": "dash",
"label": "LL-DASH"
},
] ]
}); });
player.on("stateChanged", function (data) { player.on("stateChanged", function (data) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
/*! OvenPlayerv0.9.0 | (c)2020 AirenSoft Co., Ltd. | MIT license (https://github.com/AirenSoft/OvenPlayerPrivate/blob/master/LICENSE) | Github : https://github.com/AirenSoft/OvenPlayer */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
/*! OvenPlayerv0.9.0 | (c)2020 AirenSoft Co., Ltd. | MIT license (https://github.com/AirenSoft/OvenPlayerPrivate/blob/master/LICENSE) | Github : https://github.com/AirenSoft/OvenPlayer */

View File

@ -36,7 +36,6 @@
{{if .OMECfg.Enabled}} {{if .OMECfg.Enabled}}
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dashjs/2.9.3/dash.all.min.js"></script>
<script src="/static/ovenplayer/ovenplayer.js"></script> <script src="/static/ovenplayer/ovenplayer.js"></script>
<script src="/static/js/ovenplayer.js"></script> <script src="/static/js/ovenplayer.js"></script>
{{end}} {{end}}