added transmission webhooks
parent
4f8b9a6a42
commit
c36ac25cef
|
|
@ -0,0 +1,51 @@
|
||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"api/globals"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetTransmissions(c *fiber.Ctx) error {
|
||||||
|
return c.JSON(globals.Transmissions)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetTransmissionByChannel(c *fiber.Ctx) error {
|
||||||
|
channel := c.Params("channel")
|
||||||
|
if channel == "" {
|
||||||
|
return fiber.ErrBadRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
transmission, exists := globals.Transmissions[channel]
|
||||||
|
if !exists {
|
||||||
|
return fiber.ErrNotFound
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(transmission)
|
||||||
|
}
|
||||||
|
|
||||||
|
// func GetGroups(c *fiber.Ctx) error {
|
||||||
|
// var groups []models.SystemGroup
|
||||||
|
|
||||||
|
// globals.DB.Find(&groups)
|
||||||
|
|
||||||
|
// return c.JSON(groups)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func CreateUser(c *fiber.Ctx) error {
|
||||||
|
// var body map[string]interface{}
|
||||||
|
|
||||||
|
// if err := c.BodyParser(&body); err != nil {
|
||||||
|
// return fiber.ErrBadRequest
|
||||||
|
// }
|
||||||
|
|
||||||
|
// email := body["email"].(string)
|
||||||
|
|
||||||
|
// user := services.GetUserByEmail(email)
|
||||||
|
|
||||||
|
// if user.ID == 0 {
|
||||||
|
// fmt.Println("inexistent user")
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return c.JSON(user)
|
||||||
|
// }
|
||||||
|
|
@ -59,6 +59,14 @@ func ServerStart(c *fiber.Ctx) error {
|
||||||
// return c.SendString("On_Update: " + string(c.Body()))
|
// return c.SendString("On_Update: " + string(c.Body()))
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
func OnSubStart(c *fiber.Ctx) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func OnSubStop(c *fiber.Ctx) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func OnPubStart(c *fiber.Ctx) error {
|
func OnPubStart(c *fiber.Ctx) error {
|
||||||
// ================================================================
|
// ================================================================
|
||||||
// Called when a publisher starts streaming - Start of Transmission
|
// Called when a publisher starts streaming - Start of Transmission
|
||||||
|
|
@ -72,20 +80,18 @@ func OnPubStart(c *fiber.Ctx) error {
|
||||||
// Parse the URL parameters, in ordere to get the transmission key and the player key
|
// Parse the URL parameters, in ordere to get the transmission key and the player key
|
||||||
transmissionkey, playerkey := utils.ParseTransmissionString(p.UrlParam)
|
transmissionkey, playerkey := utils.ParseTransmissionString(p.UrlParam)
|
||||||
|
|
||||||
log.Printf("======================== Start StreamName %s, Transmission Key %s, PlayerKey %s, SessionId %s\n", p.StreamName, transmissionkey, playerkey, p.SessionId)
|
// log.Printf("======================== Start StreamName %s (%s), Transmission Key %s, PlayerKey %s, SessionId %s\n", p.StreamName, p.RemoteAddress, transmissionkey, playerkey, p.SessionId)
|
||||||
|
|
||||||
// Get the channel from the database
|
// Get the channel from the database
|
||||||
ok, currentTransmission := services.VerifyTransmissionAuthorization(p.StreamName, p.SessionId, transmissionkey)
|
ok, currentTransmission := services.VerifyTransmissionAuthorization(p.StreamName, p.SessionId, transmissionkey, playerkey)
|
||||||
|
|
||||||
log.Printf("%v\n", currentTransmission)
|
log.Printf("%v\n", currentTransmission)
|
||||||
|
|
||||||
// Check if the channel has authorized time to transmit
|
// Check if the channel has authorized time to transmit
|
||||||
|
|
||||||
if ok {
|
if ok {
|
||||||
// If the channel is authorized, add it to the global transmissions list
|
// If the channel is authorized, add it to the global transmissions list
|
||||||
globals.Transmissions[p.StreamName] = currentTransmission
|
globals.Transmissions[p.StreamName] = currentTransmission
|
||||||
|
|
||||||
services.AddTransmissionlog(p.StreamName, "Transmissão iniciada")
|
|
||||||
return c.SendString("On_Pub_Start: " + string(c.Body()))
|
return c.SendString("On_Pub_Start: " + string(c.Body()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -103,16 +109,27 @@ func OnPubStop(c *fiber.Ctx) error {
|
||||||
|
|
||||||
transm := globals.Transmissions[p.StreamName]
|
transm := globals.Transmissions[p.StreamName]
|
||||||
|
|
||||||
|
// TODO: Check if the transmission does not have errors and log only if true (and only once)
|
||||||
|
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
duration := now.Sub(transm.StartTime)
|
duration := now.Sub(transm.StartTime)
|
||||||
|
|
||||||
minutes := float64(duration) / float64(time.Minute)
|
minutes := int(duration.Minutes())
|
||||||
|
|
||||||
|
if minutes > 43200 {
|
||||||
|
minutes = 0
|
||||||
|
return c.SendString("On_Pub_Stop: " + string(c.Body()))
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("======================== Stop StreamName %s - Duration %d\n", p.StreamName, duration)
|
||||||
|
|
||||||
// TODO: Updates the transmission on database for future calculation of remaining daily time
|
// TODO: Updates the transmission on database for future calculation of remaining daily time
|
||||||
|
|
||||||
msg := fmt.Sprintf("Transmissão encerrada: Duration %d\n", int(minutes))
|
msg := fmt.Sprintf("Transmissão encerrada. Duração %d minutos.\n", int(minutes))
|
||||||
|
|
||||||
services.AddTransmissionlog(p.StreamName, msg)
|
services.AddTransmissionlog(p.StreamName, msg)
|
||||||
|
|
||||||
|
delete(globals.Transmissions, p.StreamName)
|
||||||
return c.SendString("On_Pub_Stop: " + string(c.Body()))
|
return c.SendString("On_Pub_Stop: " + string(c.Body()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -235,6 +235,7 @@ type CurrentTransmission struct {
|
||||||
StartTime time.Time
|
StartTime time.Time
|
||||||
Limit time.Time
|
Limit time.Time
|
||||||
SessionID string
|
SessionID string
|
||||||
|
PlayerKey string
|
||||||
PlanDailyLimit int
|
PlanDailyLimit int
|
||||||
Watchers int
|
Watchers int
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"api/controllers"
|
"api/controllers"
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"github.com/gofiber/websocket/v2"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Setup sets up the routes
|
// Setup sets up the routes
|
||||||
|
|
@ -28,16 +27,10 @@ func Setup(app *fiber.App) {
|
||||||
// app.Post("/on_update", controllers.OnUpdate)
|
// app.Post("/on_update", controllers.OnUpdate)
|
||||||
app.Post("/on_pub_start", controllers.OnPubStart)
|
app.Post("/on_pub_start", controllers.OnPubStart)
|
||||||
app.Post("/on_pub_stop", controllers.OnPubStop)
|
app.Post("/on_pub_stop", controllers.OnPubStop)
|
||||||
// app.Post("/on_sub_start", controllers.OnSubStart)
|
app.Post("/on_sub_start", controllers.OnSubStart)
|
||||||
|
app.Post("/on_sub_stop", controllers.OnSubStop)
|
||||||
|
|
||||||
// WebSocket route
|
// Interfaces of transmissions
|
||||||
app.Use("/ws", func(c *fiber.Ctx) error {
|
app.Get("/transmissions", controllers.GetTransmissions)
|
||||||
if websocket.IsWebSocketUpgrade(c) {
|
app.Get("/transmission/:channel", controllers.GetTransmissionByChannel)
|
||||||
c.Locals("allowed", true)
|
|
||||||
return c.Next()
|
|
||||||
}
|
|
||||||
return fiber.ErrUpgradeRequired
|
|
||||||
})
|
|
||||||
|
|
||||||
// app.Get("/ws", websocket.New(controllers.WebsocketHandler))
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,11 @@ import (
|
||||||
"api/globals"
|
"api/globals"
|
||||||
"api/models"
|
"api/models"
|
||||||
"api/utils"
|
"api/utils"
|
||||||
"log"
|
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func VerifyTransmissionsLimits() {
|
func VerifyTransmissionsLimits() {
|
||||||
log.Println("Verificando")
|
// log.Println("Verificando")
|
||||||
for channelname, currentTransmission := range globals.Transmissions {
|
for channelname, currentTransmission := range globals.Transmissions {
|
||||||
// If the channel has no daily transmission limit, skip the verification (Channels with 24 hours daily limit)
|
// If the channel has no daily transmission limit, skip the verification (Channels with 24 hours daily limit)
|
||||||
if time.Duration(currentTransmission.PlanDailyLimit) == 1440 {
|
if time.Duration(currentTransmission.PlanDailyLimit) == 1440 {
|
||||||
|
|
@ -26,7 +25,7 @@ func VerifyTransmissionsLimits() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func VerifyTransmissionAuthorization(channelname, sessionid, transmissionkey string) (bool, models.CurrentTransmission) {
|
func VerifyTransmissionAuthorization(channelname, sessionid, transmissionkey, playerKey string) (bool, models.CurrentTransmission) {
|
||||||
var (
|
var (
|
||||||
channel models.Channel
|
channel models.Channel
|
||||||
plan models.Plan
|
plan models.Plan
|
||||||
|
|
@ -39,6 +38,7 @@ func VerifyTransmissionAuthorization(channelname, sessionid, transmissionkey str
|
||||||
|
|
||||||
currentTransmission.Channel = channel.Name
|
currentTransmission.Channel = channel.Name
|
||||||
currentTransmission.SessionID = sessionid
|
currentTransmission.SessionID = sessionid
|
||||||
|
currentTransmission.PlayerKey = playerKey
|
||||||
currentTransmission.PlanDailyLimit = plan.DailyLimitTransmission
|
currentTransmission.PlanDailyLimit = plan.DailyLimitTransmission
|
||||||
currentTransmission.StartTime = time.Now()
|
currentTransmission.StartTime = time.Now()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue