SysDataService.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  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 len(query.TargetAddr) > 0 {
  139. qs = qs.Filter("TargetAddr__icontains", query.TargetAddr)
  140. }
  141. if query.TargetPort > 0 {
  142. qs = qs.Filter("TargetPort", query.TargetPort)
  143. }
  144. if query.FType > -1 {
  145. qs = qs.Filter("FType", query.FType)
  146. }
  147. totals, _ := qs.Count()
  148. pages := math.Ceil(float64(totals) / float64(pageSize))
  149. if pageIndex <= 0 {
  150. pageIndex = 1
  151. }
  152. offset := pageIndex - 1
  153. num, err := qs.Limit(pageSize, pageSize*offset).OrderBy("-Id").All(&entites)
  154. if err != nil {
  155. logs.Error("GetPortForwardList ", err)
  156. } else {
  157. logs.Debug("GetPortForwardList rows ", num)
  158. }
  159. return Models.PageData{PIndex: pageIndex, PSize: pageSize, TotalRows: totals, Pages: int64(pages), Data: entites}
  160. }
  161. func (_self *SysDataService) SavePortForward(entity *Models.PortForward) error {
  162. if entity.Id > 0 {
  163. update := &Models.PortForward{}
  164. qs := OrmerS.QueryTable(new(Models.PortForward))
  165. qs = qs.Filter("Id", entity.Id)
  166. err := qs.One(update)
  167. if err != nil {
  168. //如果没查到数据,会抛出 no row found
  169. return err
  170. }
  171. update.Name = entity.Name
  172. update.Addr = entity.Addr
  173. update.Port = entity.Port
  174. update.Protocol = entity.Protocol
  175. update.TargetAddr = entity.TargetAddr
  176. update.TargetPort = entity.TargetPort
  177. update.Others = entity.Others
  178. update.FType = entity.FType
  179. update.Status = entity.Status
  180. _, err1 := OrmerS.Update(update)
  181. return err1
  182. } else {
  183. entity.CreateTime = time.Now()
  184. res, err := OrmerS.Raw("INSERT INTO t_port_forward(name, status, addr, port, protocol, targetAddr, targetPort, createTime, others, fType) values(?,?,?,?,?,?,?,?,?,?)",
  185. entity.Name, entity.Status, entity.Addr, entity.Port, entity.Protocol, entity.TargetAddr, entity.TargetPort, entity.CreateTime, entity.Others, entity.FType).Exec()
  186. if err == nil {
  187. num, _ := res.RowsAffected()
  188. logs.Debug("AddPortForward", num)
  189. } else {
  190. logs.Error("AddPortForward", err)
  191. }
  192. return err
  193. }
  194. }
  195. func (_self *SysDataService) DelPortForwards(ids []int) error {
  196. //sqlite3在debug模式中,每次操作后会卡住,release环境中没有问题
  197. //批量删除
  198. del_num, err := OrmerS.QueryTable(new(Models.PortForward)).Filter("Id__in", ids).Delete()
  199. if err != nil {
  200. logs.Error("DelPortForwards err:", err)
  201. return err
  202. } else {
  203. logs.Debug("DelPortForwards rows:", del_num)
  204. }
  205. return nil
  206. }
  207. func (_self *SysDataService) ToForwardConfig(entity *Models.PortForward) *Models.ForwardConfig {
  208. config := new(Models.ForwardConfig)
  209. config.RuleId = entity.Id
  210. config.Name = entity.Name
  211. config.Protocol = entity.Protocol
  212. config.SrcAddr = entity.Addr
  213. config.SrcPort = entity.Port
  214. config.DestAddr = entity.TargetAddr
  215. config.DestPort = entity.TargetPort
  216. config.Status = entity.Status
  217. return config
  218. }
  219. func (_self *SysDataService) GetForwardJob(entity *Models.PortForward) *ForWardJob {
  220. return ForWardServ.GetForwardJob(_self.ToForwardConfig(entity))
  221. }
粤ICP备19079148号