2024-05-08 14:14:49 +02:00

63 lines
1.3 KiB
Go

package main
import (
"net/http"
"os"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
"github.com/livekit/protocol/auth"
)
var (
SERVER_PORT = getEnv("SERVER_PORT", "6080")
LIVEKIT_API_KEY = getEnv("LIVEKIT_API_KEY", "devkey")
LIVEKIT_API_SECRET = getEnv("LIVEKIT_API_SECRET", "secret")
)
func getEnv(key, defaultValue string) string {
if value, ok := os.LookupEnv(key); ok {
return value
}
return defaultValue
}
func getToken(context *gin.Context) {
var body struct {
RoomName string `json:"roomName"`
ParticipantName string `json:"participantName"`
}
if err := context.BindJSON(&body); err != nil {
context.JSON(http.StatusBadRequest, err.Error())
return
}
if body.RoomName == "" || body.ParticipantName == "" {
context.JSON(http.StatusBadRequest, "roomName and participantName are required")
return
}
at := auth.NewAccessToken(LIVEKIT_API_KEY, LIVEKIT_API_SECRET)
grant := &auth.VideoGrant{
RoomJoin: true,
Room: body.RoomName,
}
at.AddGrant(grant).SetIdentity(body.ParticipantName)
token, err := at.ToJWT()
if err != nil {
context.JSON(http.StatusInternalServerError, err.Error())
return
}
context.JSON(http.StatusOK, token)
}
func main() {
router := gin.Default()
router.Use(cors.Default())
router.POST("/token", getToken)
router.Run(":" + SERVER_PORT)
}