Spaces:
Build error
Build error
| package main | |
| import ( | |
| "net/http" | |
| "os" | |
| "strconv" | |
| "time" | |
| "github.com/AgoraIO-Community/go-tokenbuilder/src/rtctokenbuilder" | |
| "github.com/gin-gonic/gin" | |
| ) | |
| type TokenRequest struct { | |
| TokenType string `json:"tokenType"` | |
| Channel string `json:"channel"` | |
| Role string `json:"role"` | |
| Uid string `json:"uid"` | |
| Expire int64 `json:"expire"` | |
| } | |
| func main() { | |
| appID := os.Getenv("APP_ID") | |
| appCert := os.Getenv("APP_CERTIFICATE") | |
| port := os.Getenv("PORT") | |
| if port == "" { | |
| port = "7860" | |
| } | |
| r := gin.Default() | |
| r.GET("/health", func(c *gin.Context) { c.String(200, "ok") }) | |
| r.POST("/token/getNew", func(c *gin.Context) { | |
| var req TokenRequest | |
| if err := c.BindJSON(&req); err != nil { | |
| c.JSON(http.StatusBadRequest, gin.H{"error": "invalid JSON"}) | |
| return | |
| } | |
| if appID == "" || appCert == "" { | |
| c.JSON(http.StatusInternalServerError, gin.H{"error": "missing APP_ID or APP_CERTIFICATE"}) | |
| return | |
| } | |
| if req.Channel == "" { | |
| c.JSON(http.StatusBadRequest, gin.H{"error": "missing channel"}) | |
| return | |
| } | |
| if req.Uid == "" { | |
| req.Uid = "0" | |
| } | |
| if req.Expire <= 0 { | |
| req.Expire = 3600 | |
| } | |
| role := rtctokenbuilder.RolePublisher | |
| if req.Role == "subscriber" { | |
| role = rtctokenbuilder.RoleSubscriber | |
| } | |
| expireTime := uint32(time.Now().Unix() + req.Expire) | |
| if uidInt, err := strconv.ParseUint(req.Uid, 10, 32); err == nil { | |
| token, err := rtctokenbuilder.BuildTokenWithUid(appID, appCert, req.Channel, uint32(uidInt), role, expireTime) | |
| if err != nil { | |
| c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| c.JSON(http.StatusOK, gin.H{"token": token}) | |
| return | |
| } | |
| token, err := rtctokenbuilder.BuildTokenWithUserAccount(appID, appCert, req.Channel, req.Uid, role, expireTime) | |
| if err != nil { | |
| c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) | |
| return | |
| } | |
| c.JSON(http.StatusOK, gin.H{"token": token}) | |
| }) | |
| r.Run(":" + port) | |
| } | |