SysDataService.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. package Service
  2. import (
  3. "errors"
  4. "forward-core/Models"
  5. "forward-core/Utils"
  6. "math"
  7. "time"
  8. "github.com/astaxie/beego/logs"
  9. )
  10. type SysDataService struct {
  11. }
  12. func (_self *SysDataService) GetSysUserById(userId int) *Models.SysUser {
  13. entity := new(Models.SysUser)
  14. qs := OrmerS.QueryTable(entity)
  15. qs = qs.Filter("Id", userId)
  16. err := qs.One(entity)
  17. if err != nil {
  18. logs.Error("GetSysUserById ", err)
  19. return nil
  20. }
  21. return entity
  22. }
  23. func (_self *SysDataService) GetSysUserByName(userName string) *Models.SysUser {
  24. entity := new(Models.SysUser)
  25. qs := OrmerS.QueryTable(entity)
  26. qs = qs.Filter("UserName", userName)
  27. err := qs.One(entity)
  28. if err != nil {
  29. logs.Error("GetSysUserByName ", err)
  30. return nil
  31. }
  32. return entity
  33. }
  34. func (_self *SysDataService) ChangeUserPwd(id int, password string) error {
  35. pwd := Utils.GetMd5(password)
  36. res, err := OrmerS.Raw("update t_sys_user SET passWord = ? where id = ?",
  37. pwd, id).Exec()
  38. if err == nil {
  39. num, _ := res.RowsAffected()
  40. logs.Debug("ChangeUserPwd", num)
  41. } else {
  42. logs.Error("ChangeUserPwd", err)
  43. }
  44. return err
  45. }
  46. func (_self *SysDataService) UpdateSysUser(entity *Models.SysUser) error {
  47. _, err := OrmerS.Update(entity)
  48. return err
  49. }
  50. func (_self *SysDataService) DelSysUsers(ids []int) error {
  51. //批量删除
  52. del_num, err := OrmerS.QueryTable(new(Models.SysUser)).Filter("Id__in", ids).Delete()
  53. if err != nil {
  54. logs.Error("DelSysUsers err:", err)
  55. return err
  56. } else {
  57. logs.Debug("DelSysUsers rows:", del_num)
  58. }
  59. return nil
  60. }
  61. func (_self *SysDataService) GetPortForwardById(id int) *Models.PortForward {
  62. entity := new(Models.PortForward)
  63. qs := OrmerS.QueryTable(entity)
  64. qs = qs.Filter("Id", id)
  65. err := qs.One(entity)
  66. if err != nil {
  67. logs.Error("GetPortForwardById ", err)
  68. return nil
  69. }
  70. return entity
  71. }
  72. func (_self *SysDataService) ChkPortForwardByApi(sourcePort, protocol, targetPort string) *Models.PortForward {
  73. sourceArray := Utils.Split(sourcePort, ":")
  74. targetArray := Utils.Split(targetPort, ":")
  75. addr := sourceArray[0]
  76. port := Utils.ToInt(sourceArray[1])
  77. toAddr := targetArray[0]
  78. toPort := Utils.ToInt(targetArray[1])
  79. return _self.GetPortForwardByApi(addr, port, protocol, toAddr, toPort)
  80. }
  81. func (_self *SysDataService) GetPortForwardByApi(addr string, port int, protocol string, targetAddr string, targetPort int) *Models.PortForward {
  82. entity := new(Models.PortForward)
  83. qs := OrmerS.QueryTable(entity)
  84. qs = qs.Filter("Addr", addr)
  85. qs = qs.Filter("Port", port)
  86. qs = qs.Filter("Protocol", protocol)
  87. qs = qs.Filter("TargetAddr", targetAddr)
  88. qs = qs.Filter("TargetPort", targetPort)
  89. err := qs.One(entity)
  90. if err != nil {
  91. logs.Error("GetPortForwardByApi ", err)
  92. return nil
  93. }
  94. return entity
  95. }
  96. func (_self *SysDataService) SavePortForwardByApi(sourcePort, protocol, targetPort string) (*Models.PortForward, error) {
  97. if Utils.IsEmpty(sourcePort) {
  98. return nil, errors.New("本地监听端口信息不能为空")
  99. }
  100. if Utils.IsEmpty(targetPort) {
  101. return nil, errors.New("目标端口信息不能为空")
  102. }
  103. sourceArray := Utils.Split(sourcePort, ":")
  104. targetArray := Utils.Split(targetPort, ":")
  105. entity := &Models.PortForward{}
  106. entity.Name = "API_Forward_" + sourcePort
  107. entity.Addr = sourceArray[0]
  108. entity.Port = Utils.ToInt(sourceArray[1])
  109. entity.Protocol = protocol
  110. entity.TargetAddr = targetArray[0]
  111. entity.TargetPort = Utils.ToInt(targetArray[1])
  112. entity.CreateTime = time.Now()
  113. _, err := OrmerS.Insert(entity)
  114. return entity, err
  115. }
  116. func (_self *SysDataService) GetAllPortForwardList(status int) []*Models.PortForward {
  117. var entites []*Models.PortForward
  118. entity := new(Models.PortForward)
  119. qs := OrmerS.QueryTable(entity)
  120. if status > -1 {
  121. qs = qs.Filter("Status", status)
  122. }
  123. num, err := qs.All(&entites)
  124. if err != nil {
  125. logs.Error("GetAllPortForwardList ", err)
  126. } else {
  127. logs.Debug("GetAllPortForwardList rows ", num)
  128. }
  129. return entites
  130. }
  131. func (_self *SysDataService) GetPortForwardList(query *Models.PortForward, pageIndex int64, pageSize int64) Models.PageData {
  132. var entites []*Models.PortForward
  133. entity := new(Models.PortForward)
  134. qs := OrmerS.QueryTable(entity)
  135. if query.Port > 0 {
  136. qs = qs.Filter("Port", query.Port)
  137. }
  138. if query.TargetPort > 0 {
  139. qs = qs.Filter("TargetPort", query.TargetPort)
  140. }
  141. if query.FType > -1 {
  142. qs = qs.Filter("FType", query.FType)
  143. }
  144. totals, _ := qs.Count()
  145. pages := math.Ceil(float64(totals) / float64(pageSize))
  146. if pageIndex <= 0 {
  147. pageIndex = 1
  148. }
  149. offset := pageIndex - 1
  150. num, err := qs.Limit(pageSize, pageSize*offset).OrderBy("-Id").All(&entites)
  151. if err != nil {
  152. logs.Error("GetPortForwardList ", err)
  153. } else {
  154. logs.Debug("GetPortForwardList rows ", num)
  155. }
  156. return Models.PageData{PIndex: pageIndex, PSize: pageSize, TotalRows: totals, Pages: int64(pages), Data: entites}
  157. }
  158. func (_self *SysDataService) SavePortForward(entity *Models.PortForward) error {
  159. if entity.Id > 0 {
  160. update := &Models.PortForward{}
  161. qs := OrmerS.QueryTable(new(Models.PortForward))
  162. qs = qs.Filter("Id", entity.Id)
  163. err := qs.One(update)
  164. if err != nil {
  165. //如果没查到数据,会抛出 no row found
  166. return err
  167. }
  168. update.Name = entity.Name
  169. update.Addr = entity.Addr
  170. update.Port = entity.Port
  171. update.Protocol = entity.Protocol
  172. update.TargetAddr = entity.TargetAddr
  173. update.TargetPort = entity.TargetPort
  174. update.Others = entity.Others
  175. update.FType = entity.FType
  176. update.Status = entity.Status
  177. _, err1 := OrmerS.Update(update)
  178. return err1
  179. } else {
  180. entity.CreateTime = time.Now()
  181. res, err := OrmerS.Raw("INSERT INTO t_port_forward(name, status, addr, port, protocol, targetAddr, targetPort, createTime, others, fType) values(?,?,?,?,?,?,?,?,?,?)",
  182. entity.Name, entity.Status, entity.Addr, entity.Port, entity.Protocol, entity.TargetAddr, entity.TargetPort, entity.CreateTime, entity.Others, entity.FType).Exec()
  183. if err == nil {
  184. num, _ := res.RowsAffected()
  185. logs.Debug("AddPortForward", num)
  186. } else {
  187. logs.Error("AddPortForward", err)
  188. }
  189. return err
  190. }
  191. }
  192. func (_self *SysDataService) DelPortForwards(ids []int) error {
  193. //sqlite3在debug模式中,每次操作后会卡住,release环境中没有问题
  194. //批量删除
  195. del_num, err := OrmerS.QueryTable(new(Models.PortForward)).Filter("Id__in", ids).Delete()
  196. if err != nil {
  197. logs.Error("DelPortForwards err:", err)
  198. return err
  199. } else {
  200. logs.Debug("DelPortForwards rows:", del_num)
  201. }
  202. return nil
  203. }
  204. func (_self *SysDataService) ToForwardConfig(entity *Models.PortForward) *Models.ForwardConfig {
  205. config := new(Models.ForwardConfig)
  206. config.RuleId = entity.Id
  207. config.Name = entity.Name
  208. config.Protocol = entity.Protocol
  209. config.SrcAddr = entity.Addr
  210. config.SrcPort = entity.Port
  211. config.DestAddr = entity.TargetAddr
  212. config.DestPort = entity.TargetPort
  213. config.Status = entity.Status
  214. return config
  215. }
  216. func (_self *SysDataService) GetForwardJob(entity *Models.PortForward) *ForWardJob {
  217. return ForWardServ.GetForwardJob(_self.ToForwardConfig(entity))
  218. }
粤ICP备19079148号