diff --git a/controllers/admin/changeStreamKey.go b/controllers/admin/changeStreamKey.go new file mode 100644 index 000000000..394998858 --- /dev/null +++ b/controllers/admin/changeStreamKey.go @@ -0,0 +1,35 @@ +package admin + +import ( + "encoding/json" + "net/http" + + "github.com/gabek/owncast/config" + "github.com/gabek/owncast/controllers" + + log "github.com/sirupsen/logrus" +) + +// ChangeStreamKey will change the stream key (in memory) +func ChangeStreamKey(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + controllers.WriteSimpleResponse(w, false, r.Method+" not supported") + return + } + + decoder := json.NewDecoder(r.Body) + var request changeStreamKeyRequest + err := decoder.Decode(&request) + if err != nil { + log.Errorln(err) + controllers.WriteSimpleResponse(w, false, "") + return + } + + config.Config.VideoSettings.StreamingKey = request.Key + controllers.WriteSimpleResponse(w, true, "changed") +} + +type changeStreamKeyRequest struct { + Key string `json:"key"` +} diff --git a/controllers/admin.go b/controllers/admin/disconnect.go similarity index 60% rename from controllers/admin.go rename to controllers/admin/disconnect.go index 106768301..08fbc4f30 100644 --- a/controllers/admin.go +++ b/controllers/admin/disconnect.go @@ -1,19 +1,21 @@ -package controllers +package admin import ( "net/http" + "github.com/gabek/owncast/controllers" "github.com/gabek/owncast/core" + "github.com/gabek/owncast/core/rtmp" ) // DisconnectInboundConnection will force-disconnect an inbound stream func DisconnectInboundConnection(w http.ResponseWriter, r *http.Request) { if !core.GetStatus().Online { - writeSimpleResponse(w, false, "no inbound stream connected") + controllers.WriteSimpleResponse(w, false, "no inbound stream connected") return } rtmp.Disconnect() - writeSimpleResponse(w, true, "inbound stream disconnected") + controllers.WriteSimpleResponse(w, true, "inbound stream disconnected") } diff --git a/controllers/controllers.go b/controllers/controllers.go index 7a54a3f09..bd9c75634 100644 --- a/controllers/controllers.go +++ b/controllers/controllers.go @@ -27,7 +27,7 @@ func badRequestHandler(w http.ResponseWriter, err error) { json.NewEncoder(w).Encode(j{"error": err.Error()}) } -func writeSimpleResponse(w http.ResponseWriter, success bool, message string) { +func WriteSimpleResponse(w http.ResponseWriter, success bool, message string) { response := models.BaseAPIResponse{ Success: success, Message: message, diff --git a/router/router.go b/router/router.go index 70ac3afec..5643d5d4d 100644 --- a/router/router.go +++ b/router/router.go @@ -8,6 +8,8 @@ import ( "github.com/gabek/owncast/config" "github.com/gabek/owncast/controllers" + "github.com/gabek/owncast/controllers/admin" + "github.com/gabek/owncast/core/chat" "github.com/gabek/owncast/core/rtmp" "github.com/gabek/owncast/router/middleware" @@ -47,7 +49,10 @@ func Start() error { // Authenticated admin requests // Disconnect inbound stream - http.HandleFunc("/api/admin/disconnect", middleware.RequireAdminAuth(controllers.DisconnectInboundConnection)) + http.HandleFunc("/api/admin/disconnect", middleware.RequireAdminAuth(admin.DisconnectInboundConnection)) + + // Change the current streaming key in memory + http.HandleFunc("/api/admin/changekey", middleware.RequireAdminAuth(admin.ChangeStreamKey)) port := config.Config.GetPublicWebServerPort()