api_list_recent_block.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package route
  2. import (
  3. "database/sql"
  4. "opennamu/route/tool"
  5. )
  6. func Api_list_recent_block(config tool.Config, num string, set_type string, why string, user_name string) map[string]any {
  7. db := tool.DB_connect()
  8. defer tool.DB_close(db)
  9. page_int := tool.Str_to_int(num)
  10. if page_int > 0 {
  11. page_int = (page_int * 50) - 50
  12. } else {
  13. page_int = 0
  14. }
  15. // private 공개 안되도록 조심할 것
  16. var rows *sql.Rows
  17. switch set_type {
  18. case "all":
  19. query := ""
  20. if why != "" {
  21. query = "select why, block, blocker, end, today, band, ongoing from rb where band != 'private' and why like ? order by today desc limit ?, 50"
  22. } else {
  23. query = "select why, block, blocker, end, today, band, ongoing from rb where band != 'private' order by today desc limit ?, 50"
  24. }
  25. if why != "" {
  26. rows = tool.Query_DB(
  27. db,
  28. query,
  29. why + "%", page_int,
  30. )
  31. } else {
  32. rows = tool.Query_DB(
  33. db,
  34. query,
  35. page_int,
  36. )
  37. }
  38. case "ongoing":
  39. rows = tool.Query_DB(
  40. db,
  41. "select why, block, blocker, end, today, band, ongoing from rb where ongoing = '1' and band != 'private' order by end desc limit ?, 50",
  42. page_int,
  43. )
  44. case "regex":
  45. rows = tool.Query_DB(
  46. db,
  47. "select why, block, blocker, end, today, band, ongoing from rb where band = 'regex' order by today desc limit ?, 50",
  48. page_int,
  49. )
  50. case "private":
  51. rows = tool.Query_DB(
  52. db,
  53. "select why, block, blocker, end, today, band, ongoing from rb where band = 'private' order by today desc limit ?, 50",
  54. page_int,
  55. )
  56. case "user":
  57. rows = tool.Query_DB(
  58. db,
  59. "select why, block, blocker, end, today, band, ongoing from rb where block = ? and band != 'private' order by today desc limit ?, 50",
  60. user_name, page_int,
  61. )
  62. case "cidr":
  63. rows = tool.Query_DB(
  64. db,
  65. "select why, block, blocker, end, today, band, ongoing from rb where band = 'cidr' order by today desc limit ?, 50",
  66. page_int,
  67. )
  68. default:
  69. rows = tool.Query_DB(
  70. db,
  71. "select why, block, blocker, end, today, band, ongoing from rb where blocker = ? and band != 'private' order by today desc limit ?, 50",
  72. user_name, page_int,
  73. )
  74. }
  75. defer rows.Close()
  76. data_list := [][]string{}
  77. ip_parser_temp := map[string][]string{}
  78. for rows.Next() {
  79. var why string
  80. var block string
  81. var blocker string
  82. var end string
  83. var today string
  84. var band string
  85. var ongoing string
  86. err := rows.Scan(&why, &block, &blocker, &end, &today, &band, &ongoing)
  87. if err != nil {
  88. panic(err)
  89. }
  90. var ip_pre_blocker string
  91. var ip_render_blocker string
  92. if _, ok := ip_parser_temp[blocker]; ok {
  93. ip_pre_blocker = ip_parser_temp[blocker][0]
  94. ip_render_blocker = ip_parser_temp[blocker][1]
  95. } else {
  96. ip_pre_blocker = tool.IP_preprocess(db, blocker, config.IP)[0]
  97. ip_render_blocker = tool.IP_parser(db, blocker, config.IP)
  98. ip_parser_temp[blocker] = []string{ip_pre_blocker, ip_render_blocker}
  99. }
  100. var ip_pre_block string
  101. var ip_render_block string
  102. if band == "" {
  103. if _, ok := ip_parser_temp[block]; ok {
  104. ip_pre_block = ip_parser_temp[block][0]
  105. ip_render_block = ip_parser_temp[block][1]
  106. } else {
  107. ip_pre_block = tool.IP_preprocess(db, block, config.IP)[0]
  108. ip_render_block = tool.IP_parser(db, block, config.IP)
  109. ip_parser_temp[block] = []string{ip_pre_block, ip_render_block}
  110. }
  111. } else {
  112. ip_pre_block = block
  113. ip_render_block = block
  114. }
  115. data_list = append(data_list, []string{
  116. why,
  117. ip_pre_block,
  118. ip_render_block,
  119. ip_pre_blocker,
  120. ip_render_blocker,
  121. end,
  122. today,
  123. band,
  124. ongoing,
  125. })
  126. }
  127. if set_type == "private" {
  128. if !tool.Check_acl(db, "", "", "owner_auth", config.IP) {
  129. data_list = [][]string{}
  130. }
  131. }
  132. return_data := make(map[string]any)
  133. return_data["response"] = "ok"
  134. return_data["data"] = data_list
  135. return return_data
  136. }