| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package controller
- import (
- "strings"
- "github.com/mhsanaei/3x-ui/v3/util/common"
- "github.com/mhsanaei/3x-ui/v3/web/service"
- "github.com/gin-gonic/gin"
- )
- type GroupController struct {
- clientService service.ClientService
- xrayService service.XrayService
- }
- func NewGroupController(g *gin.RouterGroup) *GroupController {
- a := &GroupController{}
- a.initRouter(g)
- return a
- }
- func (a *GroupController) initRouter(g *gin.RouterGroup) {
- g.GET("/groups", a.list)
- g.GET("/groups/:name/emails", a.emails)
- g.POST("/groups/create", a.create)
- g.POST("/groups/rename", a.rename)
- g.POST("/groups/delete", a.delete)
- g.POST("/groups/bulkAdd", a.bulkAdd)
- g.POST("/groups/bulkRemove", a.bulkRemove)
- }
- func (a *GroupController) list(c *gin.Context) {
- rows, err := a.clientService.ListGroups()
- if err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- jsonObj(c, rows, nil)
- }
- func (a *GroupController) emails(c *gin.Context) {
- name := c.Param("name")
- emails, err := a.clientService.EmailsByGroup(name)
- if err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- jsonObj(c, emails, nil)
- }
- type groupCreateBody struct {
- Name string `json:"name"`
- }
- func (a *GroupController) create(c *gin.Context) {
- var body groupCreateBody
- if err := c.ShouldBindJSON(&body); err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- if err := a.clientService.CreateGroup(body.Name); err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- jsonObj(c, gin.H{"name": body.Name}, nil)
- notifyClientsChanged()
- }
- type groupRenameBody struct {
- OldName string `json:"oldName"`
- NewName string `json:"newName"`
- }
- func (a *GroupController) rename(c *gin.Context) {
- var body groupRenameBody
- if err := c.ShouldBindJSON(&body); err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- affected, err := a.clientService.RenameGroup(body.OldName, body.NewName)
- if err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- a.xrayService.SetToNeedRestart()
- jsonObj(c, gin.H{"affected": affected}, nil)
- notifyClientsChanged()
- }
- type groupDeleteBody struct {
- Name string `json:"name"`
- }
- func (a *GroupController) delete(c *gin.Context) {
- var body groupDeleteBody
- if err := c.ShouldBindJSON(&body); err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- affected, err := a.clientService.DeleteGroup(body.Name)
- if err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- a.xrayService.SetToNeedRestart()
- jsonObj(c, gin.H{"affected": affected}, nil)
- notifyClientsChanged()
- }
- type bulkAddToGroupRequest struct {
- Emails []string `json:"emails"`
- Group string `json:"group"`
- }
- func (a *GroupController) bulkAdd(c *gin.Context) {
- var req bulkAddToGroupRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- if strings.TrimSpace(req.Group) == "" {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), common.NewError("group name is required"))
- return
- }
- affected, err := a.clientService.AddToGroup(req.Emails, req.Group)
- if err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- jsonObj(c, gin.H{"affected": affected}, nil)
- a.xrayService.SetToNeedRestart()
- notifyClientsChanged()
- }
- type bulkRemoveFromGroupRequest struct {
- Emails []string `json:"emails"`
- }
- func (a *GroupController) bulkRemove(c *gin.Context) {
- var req bulkRemoveFromGroupRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- affected, err := a.clientService.RemoveFromGroup(req.Emails)
- if err != nil {
- jsonMsg(c, I18nWeb(c, "somethingWentWrong"), err)
- return
- }
- jsonObj(c, gin.H{"affected": affected}, nil)
- a.xrayService.SetToNeedRestart()
- notifyClientsChanged()
- }
|