summaryrefslogtreecommitdiffstats
path: root/api/webrtc.go
diff options
context:
space:
mode:
authorenahum <nahumhbl@gmail.com>2016-09-15 09:35:44 -0300
committerChristopher Speller <crspeller@gmail.com>2016-09-15 08:35:44 -0400
commitb180bb46e3034d0ce75c9961a8ccea3eefbc855c (patch)
tree10cfc7affeca5b7c7634b73daf7817cc0c71cfd0 /api/webrtc.go
parent3b4c9d7588e061b865dd5e35e785919962875fb9 (diff)
downloadchat-b180bb46e3034d0ce75c9961a8ccea3eefbc855c.tar.gz
chat-b180bb46e3034d0ce75c9961a8ccea3eefbc855c.tar.bz2
chat-b180bb46e3034d0ce75c9961a8ccea3eefbc855c.zip
PLT-3412 WebRTC Server side & System Console (#3706)
* WebRTC Server side * WebRTC System Console * Consistency on variable names * Add turn and stun uri validation
Diffstat (limited to 'api/webrtc.go')
-rw-r--r--api/webrtc.go51
1 files changed, 51 insertions, 0 deletions
diff --git a/api/webrtc.go b/api/webrtc.go
new file mode 100644
index 000000000..4664524f4
--- /dev/null
+++ b/api/webrtc.go
@@ -0,0 +1,51 @@
+// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+package api
+
+import (
+ l4g "github.com/alecthomas/log4go"
+ "github.com/mattermost/platform/einterfaces"
+ "github.com/mattermost/platform/model"
+ "github.com/mattermost/platform/utils"
+ "net/http"
+)
+
+func InitWebrtc() {
+ l4g.Debug(utils.T("api.webrtc.init.debug"))
+
+ BaseRoutes.Webrtc.Handle("/token", ApiUserRequired(webrtcToken)).Methods("POST")
+
+ BaseRoutes.WebSocket.Handle("webrtc", ApiWebSocketHandler(webrtcMessage))
+}
+
+func webrtcToken(c *Context, w http.ResponseWriter, r *http.Request) {
+ webrtcInterface := einterfaces.GetWebrtcInterface()
+
+ if webrtcInterface == nil {
+ c.Err = model.NewLocAppError("webrtcToken", "api.webrtc.not_available.app_error", nil, "")
+ c.Err.StatusCode = http.StatusNotImplemented
+ return
+ }
+
+ if result, err := webrtcInterface.Token(c.Session.Id); err != nil {
+ c.Err = err
+ return
+ } else {
+ w.Write([]byte(model.MapToJson(result)))
+ }
+}
+
+func webrtcMessage(req *model.WebSocketRequest) (map[string]interface{}, *model.AppError) {
+ var ok bool
+ var toUserId string
+ if toUserId, ok = req.Data["to_user_id"].(string); !ok || len(toUserId) != 26 {
+ return nil, NewInvalidWebSocketParamError(req.Action, "to_user_id")
+ }
+
+ event := model.NewWebSocketEvent("", "", toUserId, model.WEBSOCKET_EVENT_WEBRTC)
+ event.Data = req.Data
+ go Publish(event)
+
+ return nil, nil
+}