| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | package licenseimport (	"net/http"	"github.com/gin-gonic/gin"	"github.com/uozi-tech/cosy"	"github.com/0xJacky/Nginx-UI/internal/license")type Controller struct{}func InitRouter(r *gin.RouterGroup) {	c := NewController()	licenseGroup := r.Group("/licenses")	{		licenseGroup.GET("", c.GetLicenses)		licenseGroup.GET("/backend", c.GetBackendLicenses)		licenseGroup.GET("/frontend", c.GetFrontendLicenses)		licenseGroup.GET("/stats", c.GetLicenseStats)	}}func NewController() *Controller {	return &Controller{}}// GetLicenses godoc// @Summary Get all open source component licenses// @Description Returns license information for all backend and frontend components// @Tags License// @Accept json// @Produce json// @Success 200 {object} license.ComponentInfo "License information"// @Failure 500 {object} cosy.HTTPError "Internal Server Error"// @Router /api/licenses [get]func (c *Controller) GetLicenses(ctx *gin.Context) {	info, err := license.GetLicenseInfo()	if err != nil {		cosy.ErrHandler(ctx, err)		return	}	ctx.JSON(http.StatusOK, info)}// GetBackendLicenses godoc// @Summary Get backend component licenses// @Description Returns license information for backend Go modules// @Tags License// @Accept json// @Produce json// @Success 200 {array} license.License "Backend license information"// @Failure 500 {object} cosy.HTTPError "Internal Server Error"// @Router /api/licenses/backend [get]func (c *Controller) GetBackendLicenses(ctx *gin.Context) {	licenses, err := license.GetBackendLicenses()	if err != nil {		cosy.ErrHandler(ctx, err)		return	}	ctx.JSON(http.StatusOK, licenses)}// GetFrontendLicenses godoc// @Summary Get frontend component licenses// @Description Returns license information for frontend npm packages// @Tags License// @Accept json// @Produce json// @Success 200 {array} license.License "Frontend license information"// @Failure 500 {object} cosy.HTTPError "Internal Server Error"// @Router /api/licenses/frontend [get]func (c *Controller) GetFrontendLicenses(ctx *gin.Context) {	licenses, err := license.GetFrontendLicenses()	if err != nil {		cosy.ErrHandler(ctx, err)		return	}	ctx.JSON(http.StatusOK, licenses)}// GetLicenseStats godoc// @Summary Get license statistics// @Description Returns statistics about the distribution of licenses// @Tags License// @Accept json// @Produce json// @Success 200 {object} map[string]interface{} "License statistics"// @Failure 500 {object} cosy.HTTPError "Internal Server Error"// @Router /api/licenses/stats [get]func (c *Controller) GetLicenseStats(ctx *gin.Context) {	stats, err := license.GetLicenseStats()	if err != nil {		cosy.ErrHandler(ctx, err)		return	}	ctx.JSON(http.StatusOK, stats)}
 |