apifiber/services/channelservices.go

83 lines
2.7 KiB
Go

package services
import (
"api/globals"
"api/models"
"api/utils"
"log"
"time"
)
func VerifyTransmissionsLimits() {
// log.Println("Verificando")
for channelname, currentTransmission := range globals.Transmissions {
// If the channel has no daily transmission limit, skip the verification (Channels with 24 hours daily limit)
if time.Duration(currentTransmission.LimiteDiario) == 1440 {
continue
}
// AddTransmissionlog(channelname, "Verificando expiração de transmissão")
// TODO: Implementar verificação de limite de transmissão diária (ou seja, quanto já foi transmitido HOJE)
if time.Now().After(currentTransmission.Limite) {
// AddTransmissionlog(channelname, "Limite de transmissão diária atingido")
utils.KickSession(channelname, currentTransmission.SessionID)
}
}
}
func VerifyTransmissionAuthorization(channelname, sessionid, transmissionkey, playerKey string) (bool, models.CurrentTransmission) {
var (
channel models.Canal
currentTransmission models.CurrentTransmission
)
result := globals.DB.Where("nome = ?", channelname).First(&channel)
if result.Error != nil {
log.Printf("Error finding channel '%s': %v\n", channelname, result.Error)
}
currentTransmission.Canal = channel.ID
currentTransmission.SessionID = sessionid
currentTransmission.Chave = transmissionkey
currentTransmission.LimiteDiario = channel.LimiteDiario
currentTransmission.Inicio = time.Now()
currentTransmission.Limite = currentTransmission.Inicio.Add(time.Duration(channel.LimiteDiario) * time.Hour)
// If the channel is not found, kick the session
if channel.ID == 0 {
// AddTransmissionlog(channelname, "Canal inexistente")
utils.KickSession(channelname, sessionid)
return false, currentTransmission
}
// If the channel expiration date is reached, kick the session
if time.Now().After(channel.Validade) {
// AddTransmissionlog(channelname, "Canal com data de expiração vencida")
utils.KickSession(channelname, sessionid)
return false, currentTransmission
}
// // If the channel is not active, kick the session
// if channel.Status != "A" {
// AddTransmissionlog(channelname, "Canal não está ativo")
// utils.KickSession(channelname, sessionid)
// return false, currentTransmission
// }
// If the transmission key does not match, kick the session
if transmissionkey != channel.Chave {
// AddTransmissionlog(channelname, "Transmissão com chave de transmissão errada")
utils.KickSession(channelname, sessionid)
return false, currentTransmission
}
// TODO: Save the transmission on database for future calculation of remaining daily time
globals.Transmissions[channelname] = &currentTransmission
return true, currentTransmission
}