diff --git a/group/group.go b/group/group.go index 3a6f538..b909856 100644 --- a/group/group.go +++ b/group/group.go @@ -1177,6 +1177,7 @@ func (desc *Description) GetPermission(group string, creds ClientCredentials) (s type Status struct { Name string `json:"name"` + Endpoint string `json:"endpoint"` DisplayName string `json:"displayName,omitempty"` Description string `json:"description,omitempty"` AuthServer string `json:"authServer,omitempty"` @@ -1185,10 +1186,11 @@ type Status struct { ClientCount *int `json:"clientCount,omitempty"` } -func (g *Group) Status(authentified bool) Status { +func (g *Group) Status(authentified bool, endpoint string) Status { desc := g.Description() d := Status{ Name: g.name, + Endpoint: endpoint, DisplayName: desc.DisplayName, AuthServer: desc.AuthServer, AuthPortal: desc.AuthPortal, @@ -1209,7 +1211,7 @@ func GetPublic() []Status { gs := make([]Status, 0) Range(func(g *Group) bool { if g.Description().Public { - gs = append(gs, g.Status(false)) + gs = append(gs, g.Status(false, "")) } return true }) diff --git a/rtpconn/webclient.go b/rtpconn/webclient.go index f0b66e2..2fea510 100644 --- a/rtpconn/webclient.go +++ b/rtpconn/webclient.go @@ -1148,7 +1148,7 @@ func handleAction(c *webClient, a interface{}) error { if a.group != "" { g := group.Get(a.group) if g != nil { - s := g.Status(true) + s := g.Status(true, "") status = &s data = g.Data() } @@ -1170,7 +1170,7 @@ func handleAction(c *webClient, a interface{}) error { return errors.New("Permissions changed in no group") } perms := append([]string(nil), c.permissions...) - status := g.Status(true) + status := g.Status(true, "") c.write(clientMessage{ Type: "joined", Kind: "change", diff --git a/static/galene.js b/static/galene.js index 6b7349d..95d2ec6 100644 --- a/static/galene.js +++ b/static/galene.js @@ -3431,7 +3431,12 @@ async function serverConnect() { serverConnection.onusermessage = gotUserMessage; serverConnection.onfiletransfer = gotFileTransfer; - let url = `ws${location.protocol === 'https:' ? 's' : ''}://${location.host}/ws`; + let url = groupStatus.endpoint; + if(!url) { + console.warn("no endpoint in status"); + url = `ws${location.protocol === 'https:' ? 's' : ''}://${location.host}/ws`; + } + try { await serverConnection.connect(url); } catch(e) { diff --git a/webserver/webserver.go b/webserver/webserver.go index 9085c35..37f8b60 100644 --- a/webserver/webserver.go +++ b/webserver/webserver.go @@ -102,7 +102,7 @@ func cspHeader(w http.ResponseWriter, connect string) { c = "connect-src " + connect + " ws: wss: 'self';" } w.Header().Add("Content-Security-Policy", - c + " img-src data: 'self'; media-src blob: 'self'; default-src 'self'") + c+" img-src data: 'self'; media-src blob: 'self'; default-src 'self'") } func notFound(w http.ResponseWriter) { @@ -327,7 +327,7 @@ func groupHandler(w http.ResponseWriter, r *http.Request) { return } - status := g.Status(false) + status := g.Status(false, "") cspHeader(w, status.AuthServer) serveFile(w, r, filepath.Join(StaticRoot, "galene.html")) } @@ -351,7 +351,16 @@ func groupStatusHandler(w http.ResponseWriter, r *http.Request) { return } - d := g.Status(false) + scheme := "wss" + if Insecure { + scheme = "ws" + } + endpoint := url.URL{ + Scheme: scheme, + Host: r.Host, + Path: "/ws", + } + d := g.Status(false, endpoint.String()) w.Header().Set("content-type", "application/json") w.Header().Set("cache-control", "no-cache")