added verifications on start streaming
parent
3170c53534
commit
6670e1a701
|
|
@ -109,12 +109,41 @@ func OnPubStart(c *fiber.Ctx) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("======================== Start StreamName %s, UrlParam %s, SessionId %s\n", p.StreamName, p.UrlParam, p.SessionId)
|
// Parse the URL parameters, in ordere to get the transmission key and the player key
|
||||||
|
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)
|
||||||
|
|
||||||
|
// Get the channel from the database
|
||||||
|
channel := services.GetChannelByName(p.StreamName)
|
||||||
|
|
||||||
|
// If the channel is not found, kick the session
|
||||||
|
if channel.ID == 0 {
|
||||||
|
services.AddTransmissionlog(p.StreamName, "Canal inexistente")
|
||||||
|
KickSession(p.StreamName, p.SessionId)
|
||||||
|
return fiber.ErrForbidden
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the channel is not active, kick the session
|
||||||
|
if channel.Status != "A" {
|
||||||
|
services.AddTransmissionlog(p.StreamName, "Canal não está ativo")
|
||||||
|
KickSession(p.StreamName, p.SessionId)
|
||||||
|
return fiber.ErrForbidden
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the transmission key does not match, kick the session
|
||||||
|
if transmissionkey != channel.TransmissionKey {
|
||||||
|
services.AddTransmissionlog(p.StreamName, "Transmissão com chave de transmissão errada")
|
||||||
|
KickSession(p.StreamName, p.SessionId)
|
||||||
|
return fiber.ErrForbidden
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the channel has authorized time to transmit
|
||||||
|
|
||||||
// TODO: Verify if the key is correct. If not, Kick the Session.
|
|
||||||
// KickSession(p.StreamName, p.SessionId)
|
// KickSession(p.StreamName, p.SessionId)
|
||||||
// return fiber.ErrForbidden
|
// return fiber.ErrForbidden
|
||||||
|
|
||||||
|
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()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -236,7 +265,7 @@ func WixTest(c *fiber.Ctx) error {
|
||||||
channel := models.Channel{
|
channel := models.Channel{
|
||||||
Name: cnpj + "-01",
|
Name: cnpj + "-01",
|
||||||
TransmissionKey: tkey,
|
TransmissionKey: tkey,
|
||||||
CustomerID: customerdb.UserID,
|
CustomerID: uint(customerdb.UserID),
|
||||||
ServerID: 1,
|
ServerID: 1,
|
||||||
}
|
}
|
||||||
err = globals.DB.Create(&channel)
|
err = globals.DB.Create(&channel)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package models
|
package models
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
// ====================================================================
|
// ====================================================================
|
||||||
// Adianti tables
|
// Adianti tables
|
||||||
|
|
||||||
|
|
@ -145,10 +147,84 @@ type Email struct {
|
||||||
EmailText string
|
EmailText string
|
||||||
}
|
}
|
||||||
|
|
||||||
type Channel struct {
|
// Server represents the servers table in the database
|
||||||
ID int
|
type Server struct {
|
||||||
Name string
|
ID uint `gorm:"primaryKey;column:id;autoIncrement"`
|
||||||
TransmissionKey string
|
Name string `gorm:"column:name;type:text;not null"`
|
||||||
CustomerID int
|
IP string `gorm:"column:ip;type:text;not null"`
|
||||||
ServerID int
|
Subdomain string `gorm:"column:subdomain;type:text;not null"`
|
||||||
|
|
||||||
|
// Relationship (back-reference)
|
||||||
|
Channels []Channel `gorm:"foreignKey:ServerID"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName overrides the table name
|
||||||
|
func (Server) TableName() string {
|
||||||
|
return "servers"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Plan represents the plans table in the database
|
||||||
|
type Plan struct {
|
||||||
|
ID uint `gorm:"primaryKey;column:id;autoIncrement"`
|
||||||
|
Name string `gorm:"column:name;type:text;not null"`
|
||||||
|
DailyLimitTransmission int `gorm:"column:daily_limit_transmission;type:integer;not null"`
|
||||||
|
MonthValue float64 `gorm:"column:month_value;type:numeric(10,2);not null"`
|
||||||
|
YearValue float64 `gorm:"column:year_value;type:numeric(10,2);not null"`
|
||||||
|
|
||||||
|
// Relationship (back-reference)
|
||||||
|
Channels []Channel `gorm:"foreignKey:PlanID"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName overrides the table name
|
||||||
|
func (Plan) TableName() string {
|
||||||
|
return "plans"
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelStat represents the channel_stats table in the database
|
||||||
|
type ChannelStat struct {
|
||||||
|
ID uint `gorm:"primaryKey;column:id;autoIncrement"`
|
||||||
|
Name string `gorm:"column:name;type:text;not null;uniqueIndex"`
|
||||||
|
Description string `gorm:"column:description;type:text;not null"`
|
||||||
|
|
||||||
|
// Relationship (back-reference)
|
||||||
|
Channels []Channel `gorm:"foreignKey:ChannelStatID"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName overrides the table name
|
||||||
|
func (ChannelStat) TableName() string {
|
||||||
|
return "channel_stats"
|
||||||
|
}
|
||||||
|
|
||||||
|
type Channel struct {
|
||||||
|
ID uint `gorm:"primaryKey;column:id;autoIncrement"`
|
||||||
|
Name string `gorm:"column:name;type:text;not null;uniqueIndex"`
|
||||||
|
TransmissionKey string `gorm:"column:transmission_key;type:text;not null;uniqueIndex"`
|
||||||
|
DateLimit time.Time `gorm:"column:date_limit;type:date;not null"`
|
||||||
|
CustomerID uint `gorm:"column:customer_id;not null"`
|
||||||
|
ServerID uint `gorm:"column:server_id;not null"`
|
||||||
|
PlanID uint `gorm:"column:plan_id;not null"`
|
||||||
|
Status string `gorm:"column:status;not null"`
|
||||||
|
|
||||||
|
// Define relationships
|
||||||
|
Customer Customer `gorm:"foreignKey:CustomerID;references:ID"`
|
||||||
|
Server Server `gorm:"foreignKey:ServerID;references:ID"`
|
||||||
|
Plan Plan `gorm:"foreignKey:PlanID;references:ID"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName overrides the table name
|
||||||
|
func (Channel) TableName() string {
|
||||||
|
return "channels"
|
||||||
|
}
|
||||||
|
|
||||||
|
// TransmissionLog represents the transmissionlog table in the database
|
||||||
|
type TransmissionLog struct {
|
||||||
|
ID uint `gorm:"primaryKey;column:id;autoIncrement"`
|
||||||
|
Datetime time.Time `gorm:"column:datetime;type:timestamp;not null"`
|
||||||
|
Channel string `gorm:"column:channel;type:text;not null"`
|
||||||
|
Message string `gorm:"column:message;type:text;not null"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName overrides the table name
|
||||||
|
func (TransmissionLog) TableName() string {
|
||||||
|
return "transmissionlog"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package services
|
||||||
|
|
||||||
|
import (
|
||||||
|
"api/globals"
|
||||||
|
"api/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetChannelByName(channelname string) models.Channel {
|
||||||
|
var channel models.Channel
|
||||||
|
|
||||||
|
globals.DB.Where("name = ?", channelname).Find(&channel)
|
||||||
|
|
||||||
|
return channel
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package services
|
||||||
|
|
||||||
|
import (
|
||||||
|
"api/globals"
|
||||||
|
"api/models"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func AddTransmissionlog(channelname, message string) {
|
||||||
|
var log models.TransmissionLog
|
||||||
|
|
||||||
|
log.Channel = channelname
|
||||||
|
log.Message = message
|
||||||
|
log.Datetime = time.Now()
|
||||||
|
|
||||||
|
globals.DB.Create(&log)
|
||||||
|
}
|
||||||
|
|
@ -255,3 +255,18 @@ func SendTestEmailApproval(email, name, transmkey, url string) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ParseTransmissionString(input string) (transmissionKey, password string) {
|
||||||
|
// Check if the string contains "&"
|
||||||
|
parts := strings.SplitN(input, "&", 2)
|
||||||
|
|
||||||
|
// The first part is always the transmission key
|
||||||
|
transmissionKey = parts[0]
|
||||||
|
|
||||||
|
// If there's a second part after "&", it's the password
|
||||||
|
if len(parts) > 1 {
|
||||||
|
password = parts[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
return transmissionKey, password
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue