ip_parser.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. package tool
  2. import (
  3. "database/sql"
  4. "log"
  5. "regexp"
  6. "strconv"
  7. )
  8. func IP_or_user(ip string) bool {
  9. match, _ := regexp.MatchString("(\\.|:)", ip)
  10. if match {
  11. return true
  12. } else {
  13. return false
  14. }
  15. }
  16. func Get_level(db *sql.DB, db_set map[string]string, ip string) []string {
  17. var level string
  18. var exp string
  19. var max_exp string
  20. stmt, err := db.Prepare(DB_change(db_set, "select data from user_set where id = ? and name = 'level'"))
  21. if err != nil {
  22. log.Fatal(err)
  23. }
  24. defer stmt.Close()
  25. err = stmt.QueryRow(ip).Scan(&level)
  26. if err != nil {
  27. if err == sql.ErrNoRows {
  28. level = "0"
  29. } else {
  30. log.Fatal(err)
  31. }
  32. }
  33. stmt, err = db.Prepare(DB_change(db_set, "select data from user_set where id = ? and name = 'experience'"))
  34. if err != nil {
  35. log.Fatal(err)
  36. }
  37. defer stmt.Close()
  38. err = stmt.QueryRow(ip).Scan(&exp)
  39. if err != nil {
  40. if err == sql.ErrNoRows {
  41. exp = "0"
  42. } else {
  43. log.Fatal(err)
  44. }
  45. }
  46. level_int, _ := strconv.Atoi(level)
  47. max_exp = strconv.Itoa(level_int*50 + 500)
  48. return []string{level, exp, max_exp}
  49. }
  50. func Get_user_auth(db *sql.DB, db_set map[string]string, ip string) string {
  51. if !IP_or_user(ip) {
  52. var auth string
  53. stmt, err := db.Prepare(DB_change(db_set, "select data from user_set where id = ? and name = 'acl'"))
  54. if err != nil {
  55. log.Fatal(err)
  56. }
  57. defer stmt.Close()
  58. err = stmt.QueryRow(ip).Scan(&auth)
  59. if err != nil {
  60. if err == sql.ErrNoRows {
  61. auth = "user"
  62. } else {
  63. log.Fatal(err)
  64. }
  65. }
  66. if auth != "user" && auth != "ban" {
  67. return auth
  68. } else {
  69. return ""
  70. }
  71. }
  72. return ""
  73. }
  74. func Get_auth_group_info(db *sql.DB, db_set map[string]string, auth string) map[string]bool {
  75. stmt, err := db.Prepare(DB_change(db_set, "select name from alist where name = ?"))
  76. if err != nil {
  77. log.Fatal(err)
  78. }
  79. defer stmt.Close()
  80. rows, err := stmt.Query(auth)
  81. if err != nil {
  82. log.Fatal(err)
  83. }
  84. defer rows.Close()
  85. data_list := map[string]bool{}
  86. for rows.Next() {
  87. var name string
  88. err := rows.Scan(&name)
  89. if err != nil {
  90. log.Fatal(err)
  91. }
  92. data_list[name] = true
  93. }
  94. return data_list
  95. }
  96. func IP_preprocess(db *sql.DB, db_set map[string]string, ip string, my_ip string) []string {
  97. var ip_view string
  98. var user_name_view string
  99. err := db.QueryRow(DB_change(db_set, "select data from other where name = 'ip_view'")).Scan(&ip_view)
  100. if err != nil {
  101. if err == sql.ErrNoRows {
  102. ip_view = ""
  103. } else {
  104. log.Fatal(err)
  105. }
  106. }
  107. err = db.QueryRow(DB_change(db_set, "select data from other where name = 'user_name_view'")).Scan(&user_name_view)
  108. if err != nil {
  109. if err == sql.ErrNoRows {
  110. user_name_view = ""
  111. } else {
  112. log.Fatal(err)
  113. }
  114. }
  115. if Get_user_auth(db, db_set, my_ip) != "" {
  116. ip_view = ""
  117. user_name_view = ""
  118. }
  119. ip_change := ""
  120. if IP_or_user(ip) {
  121. if ip_view != "" && ip != my_ip {
  122. hash_ip := Sha224(ip)
  123. ip = hash_ip[:10]
  124. ip_change = "true"
  125. }
  126. } else {
  127. if user_name_view != "" {
  128. var sub_user_name string
  129. stmt, err := db.Prepare(DB_change(db_set, "select data from user_set where id = ? and name = 'sub_user_name'"))
  130. if err != nil {
  131. log.Fatal(err)
  132. }
  133. defer stmt.Close()
  134. err = stmt.QueryRow(ip).Scan(&sub_user_name)
  135. if err != nil {
  136. if err == sql.ErrNoRows {
  137. sub_user_name = Get_language(db, db_set, "member", false)
  138. } else {
  139. log.Fatal(err)
  140. }
  141. }
  142. if sub_user_name == "" {
  143. sub_user_name = Get_language(db, db_set, "member", false)
  144. }
  145. ip = sub_user_name
  146. ip_change = "true"
  147. } else {
  148. var user_name string
  149. stmt, err := db.Prepare(DB_change(db_set, "select data from user_set where name = 'user_name' and id = ?"))
  150. if err != nil {
  151. log.Fatal(err)
  152. }
  153. defer stmt.Close()
  154. err = stmt.QueryRow(ip).Scan(&user_name)
  155. if err != nil {
  156. if err == sql.ErrNoRows {
  157. user_name = ip
  158. } else {
  159. log.Fatal(err)
  160. }
  161. }
  162. if user_name == "" {
  163. user_name = ip
  164. }
  165. ip = user_name
  166. }
  167. }
  168. return []string{ip, ip_change}
  169. }
  170. func IP_parser(db *sql.DB, db_set map[string]string, ip string, my_ip string) string {
  171. ip_pre_data := IP_preprocess(db, db_set, ip, my_ip)
  172. if ip_pre_data[0] == "" {
  173. return ""
  174. }
  175. if ip_pre_data[1] != "" {
  176. return ip_pre_data[0]
  177. } else {
  178. raw_ip := ip
  179. ip = HTML_escape(ip_pre_data[0])
  180. if !IP_or_user(raw_ip) {
  181. var user_name_level string
  182. var user_title string
  183. err := db.QueryRow(DB_change(db_set, "select data from other where name = 'user_name_level'")).Scan(&user_name_level)
  184. if err != nil {
  185. if err == sql.ErrNoRows {
  186. user_name_level = ""
  187. } else {
  188. log.Fatal(err)
  189. }
  190. }
  191. if user_name_level != "" {
  192. level_data := Get_level(db, db_set, raw_ip)
  193. ip += "<sup>" + level_data[0] + "</sup>"
  194. }
  195. ip = "<a href=\"/w/" + Url_parser("user:"+raw_ip) + "\">" + ip + "</a>"
  196. stmt, err := db.Prepare(DB_change(db_set, "select data from user_set where name = 'user_title' and id = ?"))
  197. if err != nil {
  198. log.Fatal(err)
  199. }
  200. defer stmt.Close()
  201. err = stmt.QueryRow(raw_ip).Scan(&user_title)
  202. if err != nil {
  203. if err == sql.ErrNoRows {
  204. user_title = ""
  205. } else {
  206. log.Fatal(err)
  207. }
  208. }
  209. if Get_user_auth(db, db_set, ip) != "" {
  210. ip = "<b>" + ip + "</b>"
  211. }
  212. ip = user_title + ip
  213. }
  214. ip += " <a href=\"/user/" + Url_parser(raw_ip) + "\">(" + Get_language(db, db_set, "tool", false) + ")</a>"
  215. return ip
  216. }
  217. }