package api import ( "github.com/gin-gonic/gin" apiReq "github.com/lejianwen/rustdesk-api/v2/http/request/api" "github.com/lejianwen/rustdesk-api/v2/http/response" apiResp "github.com/lejianwen/rustdesk-api/v2/http/response/api" "github.com/lejianwen/rustdesk-api/v2/model" "github.com/lejianwen/rustdesk-api/v2/service" "net/http" ) type Group struct { } // Users 用户列表 // @Tags 群组 // @Summary 用户列表 // @Description 用户列表 // @Accept json // @Produce json // @Param page query int false "页码" // @Param pageSize query int false "每页数量" // @Param status query int false "状态" // @Param accessible query string false "accessible" // @Success 200 {object} response.DataResponse{data=[]apiResp.UserPayload} // @Failure 500 {object} response.ErrorResponse // @Router /users [get] // @Security BearerAuth func (g *Group) Users(c *gin.Context) { q := &apiReq.UserListQuery{} err := c.ShouldBindQuery(&q) if err != nil { response.Error(c, err.Error()) return } u := service.AllService.UserService.CurUser(c) gr := service.AllService.GroupService.InfoById(u.GroupId) userList := &model.UserList{} if !*u.IsAdmin && gr.Type != model.GroupTypeShare { //仅能获取到自己 userList.Users = append(userList.Users, u) userList.Total = 1 } else { userList = service.AllService.UserService.ListByGroupId(u.GroupId, q.Page, q.PageSize) } data := make([]*apiResp.UserPayload, 0, len(userList.Users)) for _, user := range userList.Users { up := &apiResp.UserPayload{} up.FromUser(user) data = append(data, up) } c.JSON(http.StatusOK, response.DataResponse{ Total: uint(userList.Total), Data: data, }) } // Peers // @Tags 群组 // @Summary 机器 // @Description 机器 // @Accept json // @Produce json // @Param page query int false "页码" // @Param pageSize query int false "每页数量" // @Param status query int false "状态" // @Param accessible query string false "accessible" // @Success 200 {object} response.DataResponse // @Failure 500 {object} response.Response // @Router /peers [get] // @Security BearerAuth func (g *Group) Peers(c *gin.Context) { u := service.AllService.UserService.CurUser(c) q := &apiReq.PeerListQuery{} err := c.ShouldBindQuery(&q) if err != nil { response.Error(c, err.Error()) return } gr := service.AllService.GroupService.InfoById(u.GroupId) users := make([]*model.User, 0, 1) if !*u.IsAdmin && gr.Type != model.GroupTypeShare { //仅能获取到自己 users = append(users, u) } else { users = service.AllService.UserService.ListIdAndNameByGroupId(u.GroupId) } namesById := make(map[uint]string, len(users)) userIds := make([]uint, 0, len(users)) for _, user := range users { namesById[user.Id] = user.Username userIds = append(userIds, user.Id) } dGroupNameById := make(map[uint]string) allGroup := service.AllService.GroupService.DeviceGroupList(1, 999, nil) for _, group := range allGroup.DeviceGroups { dGroupNameById[group.Id] = group.Name } peerList := service.AllService.PeerService.ListByUserIds(userIds, q.Page, q.PageSize) data := make([]*apiResp.GroupPeerPayload, 0, len(peerList.Peers)) for _, peer := range peerList.Peers { uname, ok := namesById[peer.UserId] if !ok { uname = "" } dGroupName, ok2 := dGroupNameById[peer.GroupId] if !ok2 { dGroupName = "" } pp := &apiResp.GroupPeerPayload{} pp.FromPeer(peer, uname, dGroupName) data = append(data, pp) } c.JSON(http.StatusOK, response.DataResponse{ Total: uint(peerList.Total), Data: data, }) } // Device // @Tags 群组 // @Summary 设备 // @Description 机器 // @Accept json // @Produce json // @Param page query int false "页码" // @Param pageSize query int false "每页数量" // @Param status query int false "状态" // @Param accessible query string false "accessible" // @Success 200 {object} response.DataResponse // @Failure 500 {object} response.Response // @Router /device-group/accessible [get] // @Security BearerAuth func (g *Group) Device(c *gin.Context) { u := service.AllService.UserService.CurUser(c) if !service.AllService.UserService.IsAdmin(u) { response.Error(c, "Permission denied") return } allGroup := service.AllService.GroupService.DeviceGroupList(1, 999, nil) c.JSON(http.StatusOK, response.DataResponse{ Total: 0, Data: allGroup.DeviceGroups, }) }