287 lines
7.6 KiB
Go
287 lines
7.6 KiB
Go
package controllers
|
|
|
|
import (
|
|
"api/globals"
|
|
"api/models"
|
|
"api/services"
|
|
"api/utils"
|
|
"fmt"
|
|
"log"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
type ResponseTest struct {
|
|
Data DataTest `json:"data"`
|
|
}
|
|
|
|
type DataTest struct {
|
|
CNPJ string `json:"cnpj"`
|
|
Email string `json:"email"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
func ServerStart(c *fiber.Ctx) error {
|
|
// Creates a server struct
|
|
s := new(models.LalServer)
|
|
|
|
// Parse the body of the request to the server struct
|
|
if err := c.BodyParser(s); err != nil {
|
|
log.Printf("Error Start: %s\n", err)
|
|
return err
|
|
}
|
|
|
|
log.Printf("Server started")
|
|
|
|
// Marshal the server struct to JSON
|
|
utils.PrettyPrintJson(s)
|
|
return c.SendString("Server started: " + string(c.Body()))
|
|
}
|
|
|
|
// func OnUpdate(c *fiber.Ctx) error {
|
|
// p := new(models.Update)
|
|
// if err := c.BodyParser(p); err != nil {
|
|
// log.Printf("Error Update: %s\n", err)
|
|
// return err
|
|
// }
|
|
|
|
// log.Printf("======================== Update")
|
|
// utils.PrettyPrintJson(p)
|
|
|
|
// if len(p.Groups) > 0 {
|
|
// for _, g := range p.Groups {
|
|
// log.Printf("======================== Update %s %s [(%dx%d) %d]\n", g.Channel, g.UpdPub.StartTime, g.VideoWidth, g.VideoHeight, g.UpdPub.ReadBytesSum)
|
|
// }
|
|
// }
|
|
|
|
// return c.SendString("On_Update: " + string(c.Body()))
|
|
// }
|
|
|
|
func OnPubStart(c *fiber.Ctx) error {
|
|
// ================================================================
|
|
// Called when a publisher starts streaming - Start of Transmission
|
|
// ================================================================
|
|
p := new(models.Pub)
|
|
if err := c.BodyParser(p); err != nil {
|
|
log.Printf("Error PubStart: %s\n", err)
|
|
return err
|
|
}
|
|
|
|
// 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
|
|
ok, currentTransmission := services.VerifyTransmissionAuthorization(p.StreamName, p.SessionId, transmissionkey)
|
|
|
|
log.Printf("%v\n", currentTransmission)
|
|
|
|
// Check if the channel has authorized time to transmit
|
|
|
|
if ok {
|
|
// If the channel is authorized, add it to the global transmissions list
|
|
globals.Transmissions[p.StreamName] = currentTransmission
|
|
|
|
services.AddTransmissionlog(p.StreamName, "Transmissão iniciada")
|
|
return c.SendString("On_Pub_Start: " + string(c.Body()))
|
|
}
|
|
|
|
return fiber.ErrForbidden
|
|
}
|
|
|
|
func OnPubStop(c *fiber.Ctx) error {
|
|
// =============================================================
|
|
// Called when a publisher stops streaming - End of Transmission
|
|
// =============================================================
|
|
p := new(models.Pub)
|
|
if err := c.BodyParser(p); err != nil {
|
|
return err
|
|
}
|
|
|
|
transm := globals.Transmissions[p.StreamName]
|
|
|
|
now := time.Now()
|
|
duration := now.Sub(transm.StartTime)
|
|
|
|
minutes := float64(duration) / float64(time.Minute)
|
|
|
|
// TODO: Updates the transmission on database for future calculation of remaining daily time
|
|
|
|
msg := fmt.Sprintf("Transmissão encerrada: Duration %d\n", int(minutes))
|
|
|
|
services.AddTransmissionlog(p.StreamName, msg)
|
|
return c.SendString("On_Pub_Stop: " + string(c.Body()))
|
|
}
|
|
|
|
func WixTest(c *fiber.Ctx) error {
|
|
|
|
// Get the data from the callback
|
|
var r ResponseTest
|
|
if err := c.BodyParser(&r); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Pass the data to variables
|
|
cnpj := strings.TrimSpace(r.Data.CNPJ)
|
|
name := strings.TrimSpace(r.Data.Name)
|
|
email := strings.TrimSpace(r.Data.Email)
|
|
|
|
// Check if it is a valid CNPJ
|
|
if !utils.IsValid(cnpj) {
|
|
utils.SendTestEmail(email, name, "Foi informado um CNPJ inválido")
|
|
return c.SendString("CNPJ Inválido")
|
|
}
|
|
|
|
// Formats the CNPJ
|
|
cnpjf := fmt.Sprintf("%s.%s.%s/%s-%s",
|
|
cnpj[:2],
|
|
cnpj[2:5],
|
|
cnpj[5:8],
|
|
cnpj[8:12],
|
|
cnpj[12:])
|
|
|
|
// Let's see if it is a real CNPJ
|
|
log.Printf("CNPJ %s [%s] requisitou um teste usando o email %s (%s)\n", cnpj, cnpjf, name, email)
|
|
empresa := utils.GetEmpresa(cnpj)
|
|
|
|
if empresa.Situacao != "ATIVA" {
|
|
utils.SendTestEmail(email, name, "Foi informado um CNPJ pertencente à uma empresa inativa")
|
|
return c.SendString("Empresa inativa")
|
|
}
|
|
|
|
// Let's see if its already on database
|
|
customer := services.GetCustomerByCNPJ(cnpjf)
|
|
|
|
user := services.GetUserByEmail(email)
|
|
|
|
var userdb models.SystemUser
|
|
var customerdb models.Customer
|
|
|
|
if user.ID == 0 {
|
|
// Email not in database. Let's insert it
|
|
userdb = models.SystemUser{
|
|
Email: email,
|
|
}
|
|
|
|
err := globals.DB.Create(&userdb)
|
|
if err != nil {
|
|
log.Printf("Cannot create test user: %v\n", err)
|
|
}
|
|
|
|
user.ID = userdb.ID
|
|
}
|
|
|
|
if customer.ID == 0 {
|
|
// Inexistent customer; insert it into database
|
|
customerwww := utils.GetEmpresa(cnpj)
|
|
|
|
customerdb = models.Customer{
|
|
CNPJ: customerwww.CNPJ,
|
|
Nome: customerwww.Nome,
|
|
NomeFantasia: customerwww.Nome,
|
|
Tipo: customerwww.Tipo,
|
|
Porte: customerwww.Porte,
|
|
Situacao: customerwww.Situacao,
|
|
Abertura: customerwww.Abertura,
|
|
NaturezaJuridica: customerwww.NaturezaJuridica,
|
|
Logradouro: customerwww.Logradouro,
|
|
Numero: customerwww.Numero,
|
|
Complemento: customerwww.Complemento,
|
|
Municipio: customerwww.Municipio,
|
|
Bairro: customerwww.Bairro,
|
|
UF: customerwww.UF,
|
|
CEP: customerwww.CEP,
|
|
UserID: user.ID,
|
|
}
|
|
|
|
err := globals.DB.Create(&customerdb)
|
|
if err.Error != nil {
|
|
log.Printf("Cannot create test user: %v\n", err)
|
|
}
|
|
|
|
// Now let's create the customer channel
|
|
opts := utils.GenerationOptions{
|
|
Length: 10,
|
|
}
|
|
|
|
tkey, _ := utils.GenerateString(opts)
|
|
|
|
channel := models.Channel{
|
|
Name: cnpj + "-01",
|
|
TransmissionKey: tkey,
|
|
CustomerID: uint(customerdb.UserID),
|
|
ServerID: 1,
|
|
}
|
|
err = globals.DB.Create(&channel)
|
|
if err.Error != nil {
|
|
log.Printf("Cannot create test channel: %v\n", err)
|
|
}
|
|
|
|
// Finally, send an email
|
|
utils.SendTestEmailApproval(email, name, tkey, cnpj+"-01")
|
|
|
|
}
|
|
|
|
return c.SendString("On Test: " + empresa.Nome)
|
|
}
|
|
|
|
func WixIntegration(c *fiber.Ctx) error {
|
|
log.Println(string(c.Body()))
|
|
return c.SendString("On Integration: " + string(c.Body()))
|
|
|
|
// var data models.Purchase
|
|
|
|
// if err := c.BodyParser(&data); err != nil {
|
|
// return fiber.ErrBadRequest
|
|
// }
|
|
|
|
// fmt.Println(data.Data.Contact.Email)
|
|
// fmt.Println(data.Data.Contact.Name.First + " " + data.Data.Contact.Name.Last)
|
|
// fmt.Printf("%s", data.Data.PlanOrderID)
|
|
// fmt.Println(data.Data.PlanPrice.Value)
|
|
// fmt.Println(data.Data.PlanStartDate)
|
|
// fmt.Println(data.Data.PlanValidUntil)
|
|
// fmt.Println(data.Data.PlanTitle)
|
|
|
|
// var user models.SystemUser
|
|
|
|
// result := database.DB.Debug().Where("email = ?", data.Data.Contact.Email).First(&user)
|
|
|
|
// if result.RowsAffected == 0 {
|
|
// // User does not exist. Inserts it.
|
|
// user := models.User{
|
|
// Email: data.Data.Contact.Email,
|
|
// Name: data.Data.Contact.Name.First + " " + data.Data.Contact.Name.Last,
|
|
// Blocked: "N",
|
|
// Cancelled: "N",
|
|
// }
|
|
|
|
// database.DB.Debug().Create(&user)
|
|
// }
|
|
|
|
// value, err := strconv.ParseFloat(data.Data.PlanPrice.Value, 32)
|
|
|
|
// if err != nil {
|
|
// log.Printf("Error converting plan price: %s\n", err)
|
|
// return fiber.ErrBadRequest
|
|
// }
|
|
|
|
// transaction := models.Transaction{
|
|
// Email: data.Data.Contact.Email,
|
|
// PlanOrderID: data.Data.PlanOrderID,
|
|
// Value: value,
|
|
// PlanStartDate: data.Data.PlanStartDate,
|
|
// PlanValidUntil: data.Data.PlanValidUntil,
|
|
// PlanTitle: data.Data.PlanTitle,
|
|
// Operation: "Compra",
|
|
// Obs: "",
|
|
// }
|
|
|
|
// database.DB.Debug().Create(&transaction)
|
|
|
|
// return c.JSON(transaction)
|
|
}
|