addressBook.go 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. package my
  2. import (
  3. "encoding/json"
  4. "github.com/gin-gonic/gin"
  5. "github.com/lejianwen/rustdesk-api/global"
  6. "github.com/lejianwen/rustdesk-api/http/request/admin"
  7. "github.com/lejianwen/rustdesk-api/http/response"
  8. "github.com/lejianwen/rustdesk-api/service"
  9. "gorm.io/gorm"
  10. )
  11. type AddressBook struct{}
  12. // List 列表
  13. // @Tags 我的地址簿
  14. // @Summary 地址簿列表
  15. // @Description 地址簿列表
  16. // @Accept json
  17. // @Produce json
  18. // @Param page query int false "页码"
  19. // @Param page_size query int false "页大小"
  20. // @Param user_id query int false "用户id"
  21. // @Success 200 {object} response.Response{data=model.AddressBookList}
  22. // @Failure 500 {object} response.Response
  23. // @Router /admin/my/address_book/list [get]
  24. // @Security token
  25. func (ct *AddressBook) List(c *gin.Context) {
  26. query := &admin.AddressBookQuery{}
  27. if err := c.ShouldBindQuery(query); err != nil {
  28. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  29. return
  30. }
  31. u := service.AllService.UserService.CurUser(c)
  32. query.UserId = int(u.Id)
  33. res := service.AllService.AddressBookService.List(query.Page, query.PageSize, func(tx *gorm.DB) {
  34. //预加载地址簿名称
  35. tx.Preload("Collection", func(txc *gorm.DB) *gorm.DB {
  36. return txc.Select("id,name")
  37. })
  38. if query.Id != "" {
  39. tx.Where("id like ?", "%"+query.Id+"%")
  40. }
  41. tx.Where("user_id = ?", query.UserId)
  42. if query.Username != "" {
  43. tx.Where("username like ?", "%"+query.Username+"%")
  44. }
  45. if query.Hostname != "" {
  46. tx.Where("hostname like ?", "%"+query.Hostname+"%")
  47. }
  48. if query.CollectionId != nil && *query.CollectionId >= 0 {
  49. tx.Where("collection_id = ?", query.CollectionId)
  50. }
  51. })
  52. abCIds := make([]uint, 0)
  53. for _, ab := range res.AddressBooks {
  54. abCIds = append(abCIds, ab.CollectionId)
  55. }
  56. response.Success(c, res)
  57. }
  58. // Create 创建地址簿
  59. // @Tags 我的地址簿
  60. // @Summary 创建地址簿
  61. // @Description 创建地址簿
  62. // @Accept json
  63. // @Produce json
  64. // @Param body body admin.AddressBookForm true "地址簿信息"
  65. // @Success 200 {object} response.Response{data=model.AddressBook}
  66. // @Failure 500 {object} response.Response
  67. // @Router /admin/my/address_book/create [post]
  68. // @Security token
  69. func (ct *AddressBook) Create(c *gin.Context) {
  70. f := &admin.AddressBookForm{}
  71. if err := c.ShouldBindJSON(f); err != nil {
  72. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  73. return
  74. }
  75. errList := global.Validator.ValidStruct(c, f)
  76. if len(errList) > 0 {
  77. response.Fail(c, 101, errList[0])
  78. return
  79. }
  80. t := f.ToAddressBook()
  81. u := service.AllService.UserService.CurUser(c)
  82. t.UserId = u.Id
  83. if t.CollectionId > 0 && !service.AllService.AddressBookService.CheckCollectionOwner(t.UserId, t.CollectionId) {
  84. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
  85. return
  86. }
  87. ex := service.AllService.AddressBookService.InfoByUserIdAndIdAndCid(t.UserId, t.Id, t.CollectionId)
  88. if ex.RowId > 0 {
  89. response.Fail(c, 101, response.TranslateMsg(c, "ItemExists"))
  90. return
  91. }
  92. err := service.AllService.AddressBookService.Create(t)
  93. if err != nil {
  94. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  95. return
  96. }
  97. response.Success(c, nil)
  98. }
  99. // Update 编辑
  100. // @Tags 我的地址簿
  101. // @Summary 地址簿编辑
  102. // @Description 地址簿编辑
  103. // @Accept json
  104. // @Produce json
  105. // @Param body body admin.AddressBookForm true "地址簿信息"
  106. // @Success 200 {object} response.Response{data=model.AddressBook}
  107. // @Failure 500 {object} response.Response
  108. // @Router /admin/my/address_book/update [post]
  109. // @Security token
  110. func (ct *AddressBook) Update(c *gin.Context) {
  111. f := &admin.AddressBookForm{}
  112. if err := c.ShouldBindJSON(f); err != nil {
  113. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  114. return
  115. }
  116. errList := global.Validator.ValidStruct(c, f)
  117. if len(errList) > 0 {
  118. response.Fail(c, 101, errList[0])
  119. return
  120. }
  121. if f.RowId == 0 {
  122. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
  123. return
  124. }
  125. u := service.AllService.UserService.CurUser(c)
  126. if f.UserId != u.Id {
  127. response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
  128. return
  129. }
  130. ex := service.AllService.AddressBookService.InfoByRowId(f.RowId)
  131. if ex.RowId == 0 {
  132. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  133. return
  134. }
  135. if ex.UserId != u.Id {
  136. response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
  137. return
  138. }
  139. t := f.ToAddressBook()
  140. if t.CollectionId > 0 && !service.AllService.AddressBookService.CheckCollectionOwner(t.UserId, t.CollectionId) {
  141. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
  142. return
  143. }
  144. err := service.AllService.AddressBookService.UpdateAll(t)
  145. if err != nil {
  146. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  147. return
  148. }
  149. response.Success(c, nil)
  150. }
  151. // Delete 删除
  152. // @Tags 我的地址簿
  153. // @Summary 地址簿删除
  154. // @Description 地址簿删除
  155. // @Accept json
  156. // @Produce json
  157. // @Param body body admin.AddressBookForm true "地址簿信息"
  158. // @Success 200 {object} response.Response
  159. // @Failure 500 {object} response.Response
  160. // @Router /admin/my/address_book/delete [post]
  161. // @Security token
  162. func (ct *AddressBook) Delete(c *gin.Context) {
  163. f := &admin.AddressBookForm{}
  164. if err := c.ShouldBindJSON(f); err != nil {
  165. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  166. return
  167. }
  168. id := f.RowId
  169. errList := global.Validator.ValidVar(c, id, "required,gt=0")
  170. if len(errList) > 0 {
  171. response.Fail(c, 101, errList[0])
  172. return
  173. }
  174. ex := service.AllService.AddressBookService.InfoByRowId(f.RowId)
  175. if ex.RowId == 0 {
  176. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  177. return
  178. }
  179. u := service.AllService.UserService.CurUser(c)
  180. if ex.UserId != u.Id {
  181. response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
  182. return
  183. }
  184. err := service.AllService.AddressBookService.Delete(ex)
  185. if err == nil {
  186. response.Success(c, nil)
  187. return
  188. }
  189. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  190. return
  191. }
  192. func (ct *AddressBook) BatchCreateFromPeers(c *gin.Context) {
  193. f := &admin.BatchCreateFromPeersForm{}
  194. if err := c.ShouldBindJSON(f); err != nil {
  195. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  196. return
  197. }
  198. u := service.AllService.UserService.CurUser(c)
  199. if f.CollectionId != 0 {
  200. collection := service.AllService.AddressBookService.CollectionInfoById(f.CollectionId)
  201. if collection.Id == 0 {
  202. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  203. return
  204. }
  205. if collection.UserId != u.Id {
  206. response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
  207. return
  208. }
  209. }
  210. if len(f.PeerIds) == 0 {
  211. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
  212. return
  213. }
  214. pl := int64(len(f.PeerIds))
  215. peers := service.AllService.PeerService.List(1, uint(pl), func(tx *gorm.DB) {
  216. tx.Where("row_id in ?", f.PeerIds)
  217. tx.Where("user_id = ?", u.Id)
  218. })
  219. if peers.Total == 0 || pl != peers.Total {
  220. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  221. return
  222. }
  223. tags, _ := json.Marshal(f.Tags)
  224. for _, peer := range peers.Peers {
  225. ab := service.AllService.AddressBookService.FromPeer(peer)
  226. ab.Tags = tags
  227. ab.CollectionId = f.CollectionId
  228. ex := service.AllService.AddressBookService.InfoByUserIdAndIdAndCid(u.Id, ab.Id, ab.CollectionId)
  229. if ex.RowId != 0 {
  230. continue
  231. }
  232. service.AllService.AddressBookService.Create(ab)
  233. }
  234. response.Success(c, nil)
  235. }
  236. func (ct *AddressBook) BatchUpdateTags(c *gin.Context) {
  237. f := &admin.BatchUpdateTagsForm{}
  238. if err := c.ShouldBindJSON(f); err != nil {
  239. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  240. return
  241. }
  242. u := service.AllService.UserService.CurUser(c)
  243. abs := service.AllService.AddressBookService.List(1, 999, func(tx *gorm.DB) {
  244. tx.Where("row_id in ?", f.RowIds)
  245. tx.Where("user_id = ?", u.Id)
  246. })
  247. if abs.Total == 0 {
  248. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  249. return
  250. }
  251. err := service.AllService.AddressBookService.BatchUpdateTags(abs.AddressBooks, f.Tags)
  252. if err != nil {
  253. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  254. return
  255. }
  256. response.Success(c, nil)
  257. }