summaryrefslogtreecommitdiffstats
path: root/app/webrtc.go
diff options
context:
space:
mode:
Diffstat (limited to 'app/webrtc.go')
-rw-r--r--app/webrtc.go40
1 files changed, 37 insertions, 3 deletions
diff --git a/app/webrtc.go b/app/webrtc.go
index 2d0bb0708..d8684f1fd 100644
--- a/app/webrtc.go
+++ b/app/webrtc.go
@@ -23,8 +23,9 @@ func GetWebrtcInfoForSession(sessionId string) (*model.WebrtcInfoResponse, *mode
}
result := &model.WebrtcInfoResponse{
- Token: token,
- GatewayUrl: *utils.Cfg.WebrtcSettings.GatewayWebsocketUrl,
+ Token: token,
+ GatewayUrl: *utils.Cfg.WebrtcSettings.GatewayWebsocketUrl,
+ GatewayType: *utils.Cfg.WebrtcSettings.GatewayType,
}
if len(*utils.Cfg.WebrtcSettings.StunURI) > 0 {
@@ -48,6 +49,16 @@ func GetWebrtcToken(sessionId string) (string, *model.AppError) {
return "", model.NewAppError("WebRTC.getWebrtcToken", "api.webrtc.disabled.app_error", nil, "", http.StatusNotImplemented)
}
+ switch strings.ToLower(*utils.Cfg.WebrtcSettings.GatewayType) {
+ case "kopano-webmeetings":
+ return GetKopanoWebmeetingsWebrtcToken(sessionId)
+ default:
+ // Default to Janus.
+ return GetJanusWebrtcToken(sessionId)
+ }
+}
+
+func GetJanusWebrtcToken(sessionId string) (string, *model.AppError) {
token := base64.StdEncoding.EncodeToString([]byte(sessionId))
data := make(map[string]string)
@@ -65,7 +76,7 @@ func GetWebrtcToken(sessionId string) (string, *model.AppError) {
defer consumeAndClose(rp)
return "", model.AppErrorFromJson(rp.Body)
} else {
- janusResponse := model.GatewayResponseFromJson(rp.Body)
+ janusResponse := model.JanusGatewayResponseFromJson(rp.Body)
if janusResponse.Status != "success" {
return "", model.NewAppError("getWebrtcToken", "api.webrtc.register_token.app_error", nil, "", http.StatusInternalServerError)
}
@@ -74,6 +85,29 @@ func GetWebrtcToken(sessionId string) (string, *model.AppError) {
return token, nil
}
+func GetKopanoWebmeetingsWebrtcToken(sessionId string) (string, *model.AppError) {
+ data := make(map[string]string)
+ data["type"] = "Token"
+ data["id"] = sessionId
+
+ rq, _ := http.NewRequest("POST", *utils.Cfg.WebrtcSettings.GatewayAdminUrl+"/auth/tokens", strings.NewReader(model.MapToJson(data)))
+ rq.Header.Set("Content-Type", "application/json")
+ rq.Header.Set("Authorization", "Bearer "+*utils.Cfg.WebrtcSettings.GatewayAdminSecret)
+
+ if rp, err := utils.HttpClient(true).Do(rq); err != nil {
+ return "", model.NewAppError("WebRTC.Token", "model.client.connecting.app_error", nil, err.Error(), http.StatusInternalServerError)
+ } else if rp.StatusCode >= 300 {
+ defer consumeAndClose(rp)
+ return "", model.AppErrorFromJson(rp.Body)
+ } else {
+ kwmResponse := model.KopanoWebmeetingsResponseFromJson(rp.Body)
+ if kwmResponse.Value == "" {
+ return "", model.NewAppError("getWebrtcToken", "api.webrtc.register_token.app_error", nil, "", http.StatusInternalServerError)
+ }
+ return kwmResponse.Value, nil
+ }
+}
+
func GenerateTurnPassword(username string, secret string) string {
key := []byte(secret)
h := hmac.New(sha1.New, key)