acl_and_auth.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077
  1. package tool
  2. import (
  3. "database/sql"
  4. "log"
  5. "strconv"
  6. "strings"
  7. "time"
  8. )
  9. func List_acl(func_type string) []string {
  10. if func_type == "user_document" {
  11. return []string{
  12. "",
  13. "user",
  14. "all",
  15. }
  16. } else {
  17. return []string{
  18. "",
  19. "all",
  20. "user",
  21. "admin",
  22. "owner",
  23. "50_edit",
  24. "email",
  25. "ban",
  26. "before",
  27. "30_day",
  28. "90_day",
  29. "ban_admin",
  30. "not_all",
  31. "up_to_level_3",
  32. "up_to_level_10",
  33. "30_day_50_edit",
  34. }
  35. }
  36. }
  37. func Do_insert_auth_history(db *sql.DB, ip string, what string) {
  38. var log_off string
  39. err := db.QueryRow(DB_change("select data from other where name = 'auth_history_off'")).Scan(&log_off)
  40. if err != nil {
  41. if err == sql.ErrNoRows {
  42. log_off = ""
  43. } else {
  44. log.Fatal(err)
  45. }
  46. }
  47. if log_off == "" {
  48. stmt, err := db.Prepare(DB_change("insert into re_admin (who, what, time) values (?, ?, ?)"))
  49. if err != nil {
  50. log.Fatal(err)
  51. }
  52. defer stmt.Close()
  53. time := Get_time()
  54. _, err = stmt.Exec(ip, what, time)
  55. if err != nil {
  56. log.Fatal(err)
  57. }
  58. }
  59. }
  60. func Get_user_auth(db *sql.DB, ip string) string {
  61. if !IP_or_user(ip) {
  62. var auth string
  63. stmt, err := db.Prepare(DB_change("select data from user_set where id = ? and name = 'acl'"))
  64. if err != nil {
  65. log.Fatal(err)
  66. }
  67. defer stmt.Close()
  68. err = stmt.QueryRow(ip).Scan(&auth)
  69. if err != nil {
  70. if err == sql.ErrNoRows {
  71. auth = "user"
  72. } else {
  73. log.Fatal(err)
  74. }
  75. }
  76. if auth != "user" && auth != "ban" {
  77. return auth
  78. } else {
  79. return ""
  80. }
  81. }
  82. return ""
  83. }
  84. func Get_auth_group_info(db *sql.DB, auth string) map[string]bool {
  85. stmt, err := db.Prepare(DB_change("select acl from alist where name = ?"))
  86. if err != nil {
  87. log.Fatal(err)
  88. }
  89. defer stmt.Close()
  90. rows, err := stmt.Query(auth)
  91. if err != nil {
  92. log.Fatal(err)
  93. }
  94. defer rows.Close()
  95. data_list := map[string]bool{}
  96. for rows.Next() {
  97. var name string
  98. err := rows.Scan(&name)
  99. if err != nil {
  100. log.Fatal(err)
  101. }
  102. data_list[name] = true
  103. }
  104. return Check_auth(data_list)
  105. }
  106. func Check_auth(auth_info map[string]bool) map[string]bool {
  107. if _, ok := auth_info["owner"]; ok {
  108. auth_info["admin"] = true
  109. }
  110. admin_auth := []string{"ban", "toron", "check", "acl", "hidel", "give", "bbs", "vote"}
  111. if _, ok := auth_info["admin"]; ok {
  112. for _, v := range admin_auth {
  113. auth_info[v] = true
  114. }
  115. }
  116. check := false
  117. for _, v := range admin_auth {
  118. if _, ok := auth_info[v]; ok {
  119. check = true
  120. break
  121. }
  122. }
  123. if check {
  124. auth_info["admin_default_feature"] = true
  125. }
  126. admin_default_feature := []string{"treat_as_admin", "user_name_bold", "multiple_upload", "slow_edit_pass", "edit_bottom_compulsion_pass", "user"}
  127. if _, ok := auth_info["admin_default_feature"]; ok {
  128. for _, v := range admin_default_feature {
  129. auth_info[v] = true
  130. }
  131. }
  132. user_default := []string{"captcha_pass", "ip"}
  133. if _, ok := auth_info["user"]; ok {
  134. for _, v := range user_default {
  135. auth_info[v] = true
  136. }
  137. }
  138. ip_default = []string{"document", "discuss", "upload", "vote", "captcha_one_check_five_pass"}
  139. if _, ok := auth_info["ip"]; ok {
  140. for _, v := range ip_default {
  141. auth_info[v] = true
  142. }
  143. }
  144. return auth_info
  145. }
  146. func Check_acl(db *sql.DB, name string, topic_number string, tool string, ip string) bool {
  147. auth_name := Get_user_auth(db, ip)
  148. auth_info := Get_auth_group_info(db, auth_name)
  149. ip_or_user := IP_or_user(ip)
  150. level := "0"
  151. if !ip_or_user {
  152. level = Get_level(db, ip)[0]
  153. }
  154. level_int, _ := strconv.Atoi(level)
  155. get_ban := ""
  156. ban_type := ""
  157. if tool == "document_edit_request" {
  158. temp_arr := Get_user_ban(db, ip, "edit_request")
  159. get_ban = temp_arr[0]
  160. ban_type = temp_arr[1]
  161. } else {
  162. temp_arr := Get_user_ban(db, ip, "")
  163. get_ban = temp_arr[0]
  164. ban_type = temp_arr[1]
  165. }
  166. if ban_type != "" {
  167. ban_type_len := len(ban_type)
  168. if ban_type_len == 1 {
  169. ban_type = string(ban_type[0])
  170. } else if ban_type_len == 2 {
  171. ban_type = string(ban_type[1])
  172. }
  173. }
  174. if tool == "" && name != "" {
  175. if !Check_acl(db, name, "", "render", ip) {
  176. return false
  177. }
  178. if strings.HasPrefix(name, "user:") {
  179. user_page_str := name[5:]
  180. if slash_index := strings.Index(user_page_str, "/"); slash_index != -1 {
  181. user_page_str = user_page_str[:slash_index]
  182. }
  183. if auth_info["acl"] {
  184. return true
  185. }
  186. if get_ban == "true" {
  187. return false
  188. }
  189. stmt, err := db.Prepare(DB_change("select data from acl where title = ? and type = 'decu'"))
  190. if err != nil {
  191. log.Fatal(err)
  192. }
  193. defer stmt.Close()
  194. var acl_data string
  195. err = stmt.QueryRow(name).Scan(&acl_data)
  196. if err != nil {
  197. if err == sql.ErrNoRows {
  198. acl_data = ""
  199. } else {
  200. log.Fatal(err)
  201. }
  202. }
  203. if acl_data == "all" {
  204. return true
  205. } else if acl_data == "user" {
  206. if !ip_or_user {
  207. return true
  208. }
  209. } else if ip == user_page_str {
  210. if !ip_or_user {
  211. return true
  212. }
  213. }
  214. return false
  215. }
  216. }
  217. if Arr_in_str([]string{"document_edit", "document_edit_request", "document_move", "document_delete"}, tool) {
  218. if !Check_acl(db, name, topic_number, "", ip) {
  219. return false
  220. }
  221. } else if Arr_in_str([]string{"bbs_edit", "bbs_comment"}, tool) {
  222. if !Check_acl(db, name, topic_number, "bbs_view", ip) {
  223. return false
  224. }
  225. }
  226. if tool == "topic" {
  227. if name == "" {
  228. stmt, err := db.Prepare(DB_change("select title from rd where code = ?"))
  229. if err != nil {
  230. log.Fatal(err)
  231. }
  232. defer stmt.Close()
  233. err = stmt.QueryRow(topic_number).Scan(&name)
  234. if err != nil {
  235. if err == sql.ErrNoRows {
  236. name = "test"
  237. } else {
  238. log.Fatal(err)
  239. }
  240. }
  241. }
  242. }
  243. end_number := 1
  244. for for_a := 0; for_a < end_number; for_a++ {
  245. acl_data := ""
  246. acl_pass_auth := ""
  247. if tool == "all_admin_auth" {
  248. acl_pass_auth = "treat_as_admin"
  249. acl_data = "owner"
  250. } else if tool == "owner_auth" {
  251. acl_pass_auth = "owner"
  252. acl_data = "owner"
  253. } else if tool == "ban_auth" {
  254. acl_pass_auth = "ban"
  255. acl_data = "owner"
  256. } else if tool == "bbs_auth" {
  257. acl_pass_auth = "bbs"
  258. acl_data = "owner"
  259. } else if tool == "toron_auth" {
  260. acl_pass_auth = "toron"
  261. acl_data = "owner"
  262. } else if tool == "check_auth" {
  263. acl_pass_auth = "check"
  264. acl_data = "owner"
  265. } else if tool == "acl_auth" {
  266. acl_pass_auth = "acl"
  267. acl_data = "owner"
  268. } else if tool == "hidel_auth" {
  269. acl_pass_auth = "hidel"
  270. acl_data = "owner"
  271. } else if tool == "give_auth" {
  272. acl_pass_auth = "give"
  273. acl_data = "owner"
  274. } else if tool == "vote_auth" {
  275. acl_pass_auth = "vote_fix"
  276. acl_data = "owner"
  277. } else if tool == "" {
  278. acl_pass_auth = "acl"
  279. if for_a == 0 {
  280. end_number += 1
  281. stmt, err := db.Prepare(DB_change("select data from acl where title = ? and type = 'decu'"))
  282. if err != nil {
  283. log.Fatal(err)
  284. }
  285. defer stmt.Close()
  286. err = stmt.QueryRow(name).Scan(&acl_data)
  287. if err != nil {
  288. if err == sql.ErrNoRows {
  289. acl_data = ""
  290. } else {
  291. log.Fatal(err)
  292. }
  293. }
  294. } else {
  295. err := db.QueryRow(DB_change("select data from other where name = 'edit'")).Scan(&acl_data)
  296. if err != nil {
  297. if err == sql.ErrNoRows {
  298. acl_data = ""
  299. } else {
  300. log.Fatal(err)
  301. }
  302. }
  303. }
  304. } else if tool == "document_move" {
  305. acl_pass_auth = "acl"
  306. if for_a == 0 {
  307. end_number += 1
  308. stmt, err := db.Prepare(DB_change("select data from acl where title = ? and type = 'document_move_acl'"))
  309. if err != nil {
  310. log.Fatal(err)
  311. }
  312. defer stmt.Close()
  313. err = stmt.QueryRow(name).Scan(&acl_data)
  314. if err != nil {
  315. if err == sql.ErrNoRows {
  316. acl_data = ""
  317. } else {
  318. log.Fatal(err)
  319. }
  320. }
  321. } else {
  322. err := db.QueryRow(DB_change("select data from other where name = 'document_move_acl'")).Scan(&acl_data)
  323. if err != nil {
  324. if err == sql.ErrNoRows {
  325. acl_data = ""
  326. } else {
  327. log.Fatal(err)
  328. }
  329. }
  330. }
  331. } else if tool == "document_edit" {
  332. acl_pass_auth = "acl"
  333. if for_a == 0 {
  334. end_number += 1
  335. stmt, err := db.Prepare(DB_change("select data from acl where title = ? and type = 'document_edit_acl'"))
  336. if err != nil {
  337. log.Fatal(err)
  338. }
  339. defer stmt.Close()
  340. err = stmt.QueryRow(name).Scan(&acl_data)
  341. if err != nil {
  342. if err == sql.ErrNoRows {
  343. acl_data = ""
  344. } else {
  345. log.Fatal(err)
  346. }
  347. }
  348. } else {
  349. err := db.QueryRow(DB_change("select data from other where name = 'document_edit_acl'")).Scan(&acl_data)
  350. if err != nil {
  351. if err == sql.ErrNoRows {
  352. acl_data = ""
  353. } else {
  354. log.Fatal(err)
  355. }
  356. }
  357. }
  358. } else if tool == "document_edit" {
  359. acl_pass_auth = "acl"
  360. if for_a == 0 {
  361. end_number += 1
  362. stmt, err := db.Prepare(DB_change("select data from acl where title = ? and type = 'document_delete_acl'"))
  363. if err != nil {
  364. log.Fatal(err)
  365. }
  366. defer stmt.Close()
  367. err = stmt.QueryRow(name).Scan(&acl_data)
  368. if err != nil {
  369. if err == sql.ErrNoRows {
  370. acl_data = ""
  371. } else {
  372. log.Fatal(err)
  373. }
  374. }
  375. } else {
  376. err := db.QueryRow(DB_change("select data from other where name = 'document_delete_acl'")).Scan(&acl_data)
  377. if err != nil {
  378. if err == sql.ErrNoRows {
  379. acl_data = ""
  380. } else {
  381. log.Fatal(err)
  382. }
  383. }
  384. }
  385. } else if tool == "topic" {
  386. acl_pass_auth = "topic"
  387. if for_a == 0 {
  388. end_number += 1
  389. stmt, err := db.Prepare(DB_change("select acl from rd where code = ?"))
  390. if err != nil {
  391. log.Fatal(err)
  392. }
  393. defer stmt.Close()
  394. err = stmt.QueryRow(topic_number).Scan(&acl_data)
  395. if err != nil {
  396. if err == sql.ErrNoRows {
  397. acl_data = ""
  398. } else {
  399. log.Fatal(err)
  400. }
  401. }
  402. } else if for_a == 1 {
  403. end_number += 1
  404. stmt, err := db.Prepare(DB_change("select data from acl where title = ? and type = 'dis'"))
  405. if err != nil {
  406. log.Fatal(err)
  407. }
  408. defer stmt.Close()
  409. err = stmt.QueryRow(name).Scan(&acl_data)
  410. if err != nil {
  411. if err == sql.ErrNoRows {
  412. acl_data = ""
  413. } else {
  414. log.Fatal(err)
  415. }
  416. }
  417. } else {
  418. err := db.QueryRow(DB_change("select data from other where name = 'discussion'")).Scan(&acl_data)
  419. if err != nil {
  420. if err == sql.ErrNoRows {
  421. acl_data = ""
  422. } else {
  423. log.Fatal(err)
  424. }
  425. }
  426. }
  427. } else if tool == "topic_view" {
  428. acl_pass_auth = "topic"
  429. stmt, err := db.Prepare(DB_change("select set_data from topic_set where thread_code = ? and set_name = 'thread_view_acl'"))
  430. if err != nil {
  431. log.Fatal(err)
  432. }
  433. defer stmt.Close()
  434. err = stmt.QueryRow(topic_number).Scan(&acl_data)
  435. if err != nil {
  436. if err == sql.ErrNoRows {
  437. acl_data = ""
  438. } else {
  439. log.Fatal(err)
  440. }
  441. }
  442. } else if tool == "upload" {
  443. acl_pass_auth = "multiple_upload"
  444. err := db.QueryRow(DB_change("select data from other where name = 'upload_acl'")).Scan(&acl_data)
  445. if err != nil {
  446. if err == sql.ErrNoRows {
  447. acl_data = ""
  448. } else {
  449. log.Fatal(err)
  450. }
  451. }
  452. } else if tool == "many_upload" {
  453. acl_pass_auth = "multiple_upload"
  454. err := db.QueryRow(DB_change("select data from other where name = 'many_upload_acl'")).Scan(&acl_data)
  455. if err != nil {
  456. if err == sql.ErrNoRows {
  457. acl_data = ""
  458. } else {
  459. log.Fatal(err)
  460. }
  461. }
  462. } else if tool == "vote" {
  463. acl_pass_auth = "vote_fix"
  464. if for_a == 0 {
  465. end_number += 1
  466. if topic_number != "" {
  467. stmt, err := db.Prepare(DB_change("select acl from vote where id = ? and user = ''"))
  468. if err != nil {
  469. log.Fatal(err)
  470. }
  471. defer stmt.Close()
  472. err = stmt.QueryRow(topic_number).Scan(&acl_data)
  473. if err != nil {
  474. if err == sql.ErrNoRows {
  475. acl_data = ""
  476. } else {
  477. log.Fatal(err)
  478. }
  479. }
  480. } else {
  481. continue
  482. }
  483. } else {
  484. err := db.QueryRow(DB_change("select data from other where name = 'vote_acl'")).Scan(&acl_data)
  485. if err != nil {
  486. if err == sql.ErrNoRows {
  487. acl_data = ""
  488. } else {
  489. log.Fatal(err)
  490. }
  491. }
  492. }
  493. } else if tool == "slow_edit" {
  494. acl_pass_auth = "slow_edit_pass"
  495. err := db.QueryRow(DB_change("select data from other where name = 'slow_edit_acl'")).Scan(&acl_data)
  496. if err != nil {
  497. if err == sql.ErrNoRows {
  498. acl_data = ""
  499. } else {
  500. log.Fatal(err)
  501. }
  502. }
  503. } else if tool == "edit_bottom_compulsion" {
  504. acl_pass_auth = "edit_bottom_compulsion_pass"
  505. err := db.QueryRow(DB_change("select data from other where name = 'edit_bottom_compulsion_acl'")).Scan(&acl_data)
  506. if err != nil {
  507. if err == sql.ErrNoRows {
  508. acl_data = ""
  509. } else {
  510. log.Fatal(err)
  511. }
  512. }
  513. } else if tool == "bbs_edit" {
  514. acl_pass_auth = "bbs"
  515. if for_a == 0 {
  516. end_number += 1
  517. stmt, err := db.Prepare(DB_change("select set_data from bbs_set where set_name = 'bbs_edit_acl' and set_id = ?"))
  518. if err != nil {
  519. log.Fatal(err)
  520. }
  521. defer stmt.Close()
  522. err = stmt.QueryRow(name).Scan(&acl_data)
  523. if err != nil {
  524. if err == sql.ErrNoRows {
  525. acl_data = ""
  526. } else {
  527. log.Fatal(err)
  528. }
  529. }
  530. } else if for_a == 1 {
  531. end_number += 1
  532. stmt, err := db.Prepare(DB_change("select set_data from bbs_set where set_name = 'bbs_acl' and set_id = ?"))
  533. if err != nil {
  534. log.Fatal(err)
  535. }
  536. defer stmt.Close()
  537. err = stmt.QueryRow(name).Scan(&acl_data)
  538. if err != nil {
  539. if err == sql.ErrNoRows {
  540. acl_data = ""
  541. } else {
  542. log.Fatal(err)
  543. }
  544. }
  545. } else if for_a == 2 {
  546. end_number += 1
  547. err := db.QueryRow(DB_change("select set_data from bbs_set where set_name = 'bbs_edit_acl_all'")).Scan(&acl_data)
  548. if err != nil {
  549. if err == sql.ErrNoRows {
  550. acl_data = ""
  551. } else {
  552. log.Fatal(err)
  553. }
  554. }
  555. } else {
  556. err := db.QueryRow(DB_change("select set_data from bbs_set where set_name = 'bbs_acl_all'")).Scan(&acl_data)
  557. if err != nil {
  558. if err == sql.ErrNoRows {
  559. acl_data = ""
  560. } else {
  561. log.Fatal(err)
  562. }
  563. }
  564. }
  565. } else if tool == "bbs_comment" {
  566. acl_pass_auth = "bbs"
  567. if for_a == 0 {
  568. end_number += 1
  569. stmt, err := db.Prepare(DB_change("select set_data from bbs_set where set_name = 'bbs_comment_acl' and set_id = ?"))
  570. if err != nil {
  571. log.Fatal(err)
  572. }
  573. defer stmt.Close()
  574. err = stmt.QueryRow(name).Scan(&acl_data)
  575. if err != nil {
  576. if err == sql.ErrNoRows {
  577. acl_data = ""
  578. } else {
  579. log.Fatal(err)
  580. }
  581. }
  582. } else if for_a == 1 {
  583. end_number += 1
  584. stmt, err := db.Prepare(DB_change("select set_data from bbs_set where set_name = 'bbs_acl' and set_id = ?"))
  585. if err != nil {
  586. log.Fatal(err)
  587. }
  588. defer stmt.Close()
  589. err = stmt.QueryRow(name).Scan(&acl_data)
  590. if err != nil {
  591. if err == sql.ErrNoRows {
  592. acl_data = ""
  593. } else {
  594. log.Fatal(err)
  595. }
  596. }
  597. } else if for_a == 2 {
  598. end_number += 1
  599. err := db.QueryRow(DB_change("select set_data from bbs_set where set_name = 'bbs_comment_acl_all'")).Scan(&acl_data)
  600. if err != nil {
  601. if err == sql.ErrNoRows {
  602. acl_data = ""
  603. } else {
  604. log.Fatal(err)
  605. }
  606. }
  607. } else {
  608. err := db.QueryRow(DB_change("select set_data from bbs_set where set_name = 'bbs_acl_all'")).Scan(&acl_data)
  609. if err != nil {
  610. if err == sql.ErrNoRows {
  611. acl_data = ""
  612. } else {
  613. log.Fatal(err)
  614. }
  615. }
  616. }
  617. } else if tool == "bbs_view" {
  618. acl_pass_auth = "bbs"
  619. if for_a == 0 {
  620. end_number += 1
  621. stmt, err := db.Prepare(DB_change("select set_data from bbs_set where set_name = 'bbs_view_acl' and set_id = ?"))
  622. if err != nil {
  623. log.Fatal(err)
  624. }
  625. defer stmt.Close()
  626. err = stmt.QueryRow(name).Scan(&acl_data)
  627. if err != nil {
  628. if err == sql.ErrNoRows {
  629. acl_data = ""
  630. } else {
  631. log.Fatal(err)
  632. }
  633. }
  634. } else {
  635. err := db.QueryRow(DB_change("select set_data from bbs_set where set_name = 'bbs_view_acl_all'")).Scan(&acl_data)
  636. if err != nil {
  637. if err == sql.ErrNoRows {
  638. acl_data = ""
  639. } else {
  640. log.Fatal(err)
  641. }
  642. }
  643. }
  644. } else if tool == "recaptcha" {
  645. acl_pass_auth = "captcha_pass"
  646. err := db.QueryRow(DB_change("select data from other where name = 'recaptcha_pass_acl'")).Scan(&acl_data)
  647. if err != nil {
  648. if err == sql.ErrNoRows {
  649. acl_data = ""
  650. } else {
  651. log.Fatal(err)
  652. }
  653. }
  654. } else if tool == "recaptcha_five_pass" {
  655. acl_pass_auth = "captcha_one_check_five_pass"
  656. err := db.QueryRow(DB_change("select data from other where name = 'recaptcha_one_check_five_pass_acl'")).Scan(&acl_data)
  657. if err != nil {
  658. if err == sql.ErrNoRows {
  659. acl_data = ""
  660. } else {
  661. log.Fatal(err)
  662. }
  663. }
  664. } else if tool == "document_edit_request" {
  665. acl_pass_auth = "acl"
  666. if for_a == 0 {
  667. end_number += 1
  668. stmt, err := db.Prepare(DB_change("select data from acl where title = ? and type = 'document_edit_request_acl'"))
  669. if err != nil {
  670. log.Fatal(err)
  671. }
  672. defer stmt.Close()
  673. err = stmt.QueryRow(name).Scan(&acl_data)
  674. if err != nil {
  675. if err == sql.ErrNoRows {
  676. acl_data = ""
  677. } else {
  678. log.Fatal(err)
  679. }
  680. }
  681. } else {
  682. err := db.QueryRow(DB_change("select data from other where name = 'document_edit_request_acl'")).Scan(&acl_data)
  683. if err != nil {
  684. if err == sql.ErrNoRows {
  685. acl_data = ""
  686. } else {
  687. log.Fatal(err)
  688. }
  689. }
  690. }
  691. } else if tool == "document_make_acl" {
  692. acl_pass_auth = "acl"
  693. err := db.QueryRow(DB_change("select data from other where name = 'document_make_acl'")).Scan(&acl_data)
  694. if err != nil {
  695. if err == sql.ErrNoRows {
  696. acl_data = ""
  697. } else {
  698. log.Fatal(err)
  699. }
  700. }
  701. } else {
  702. // tool == "render"
  703. acl_pass_auth = "acl"
  704. if for_a == 0 {
  705. end_number += 1
  706. stmt, err := db.Prepare(DB_change("select data from acl where title = ? and type = 'view'"))
  707. if err != nil {
  708. log.Fatal(err)
  709. }
  710. defer stmt.Close()
  711. err = stmt.QueryRow(name).Scan(&acl_data)
  712. if err != nil {
  713. if err == sql.ErrNoRows {
  714. acl_data = ""
  715. } else {
  716. log.Fatal(err)
  717. }
  718. }
  719. } else {
  720. err := db.QueryRow(DB_change("select data from other where name = 'all_view_acl'")).Scan(&acl_data)
  721. if err != nil {
  722. if err == sql.ErrNoRows {
  723. acl_data = ""
  724. } else {
  725. log.Fatal(err)
  726. }
  727. }
  728. }
  729. }
  730. if auth_info[acl_pass_auth] {
  731. return true
  732. } else if ban_type == "4" {
  733. return false
  734. }
  735. if acl_data == "" {
  736. if tool == "recaptcha" {
  737. acl_data = "admin"
  738. } else if tool == "slow_edit" || tool == "edit_bottom_compulsion" {
  739. acl_data = "not_all"
  740. } else {
  741. acl_data = "normal"
  742. }
  743. }
  744. except_ban_tool_list := []string{"render", "topic_view", "bbs_view"}
  745. if acl_data != "normal" {
  746. if !(acl_data == "ban" || acl_data == "ban_admin") || ban_type == "3" {
  747. if !Arr_in_str(except_ban_tool_list, tool) {
  748. if get_ban == "true" {
  749. return false
  750. }
  751. }
  752. }
  753. if acl_data == "all" || acl_data == "ban" {
  754. return true
  755. } else if acl_data == "user" {
  756. if !ip_or_user {
  757. return true
  758. }
  759. } else if acl_data == "admin" {
  760. if auth_info["treat_as_admin"] {
  761. return true
  762. }
  763. } else if acl_data == "50_edit" {
  764. if !ip_or_user {
  765. stmt, err := db.Prepare(DB_change("select count(*) from history where ip = ?"))
  766. if err != nil {
  767. log.Fatal(err)
  768. }
  769. defer stmt.Close()
  770. var count int
  771. err = stmt.QueryRow(ip).Scan(&count)
  772. if err != nil {
  773. if err == sql.ErrNoRows {
  774. count = 0
  775. } else {
  776. log.Fatal(err)
  777. }
  778. }
  779. if count >= 50 {
  780. return true
  781. }
  782. }
  783. } else if acl_data == "before" {
  784. stmt, err := db.Prepare(DB_change("select ip from history where title = ? and ip = ?"))
  785. if err != nil {
  786. log.Fatal(err)
  787. }
  788. defer stmt.Close()
  789. var exist string
  790. err = stmt.QueryRow(name, ip).Scan(&exist)
  791. if err != nil {
  792. if err == sql.ErrNoRows {
  793. exist = ""
  794. } else {
  795. log.Fatal(err)
  796. }
  797. }
  798. if exist != "" {
  799. return true
  800. }
  801. } else if acl_data == "30_day" || acl_data == "90_day" {
  802. if !ip_or_user {
  803. stmt, err := db.Prepare(DB_change("select data from user_set where id = ? and name = 'date'"))
  804. if err != nil {
  805. log.Fatal(err)
  806. }
  807. defer stmt.Close()
  808. var signup_date string
  809. err = stmt.QueryRow(ip).Scan(&signup_date)
  810. if err != nil {
  811. if err == sql.ErrNoRows {
  812. signup_date = Get_time()
  813. } else {
  814. log.Fatal(err)
  815. }
  816. }
  817. time_1, _ := time.Parse("2006-01-02 15:04:05", signup_date)
  818. if acl_data == "30_day" {
  819. time_1 = time_1.AddDate(0, 0, 30)
  820. } else {
  821. time_1 = time_1.AddDate(0, 0, 90)
  822. }
  823. time_2, _ := time.Parse("2006-01-02 15:04:05", Get_time())
  824. if time_2.After(time_1) {
  825. return true
  826. }
  827. }
  828. } else if acl_data == "email" {
  829. if !ip_or_user {
  830. stmt, err := db.Prepare(DB_change("select data from user_set where id = ? and name = 'email'"))
  831. if err != nil {
  832. log.Fatal(err)
  833. }
  834. defer stmt.Close()
  835. var exist string
  836. err = stmt.QueryRow(ip).Scan(&exist)
  837. if err != nil {
  838. if err == sql.ErrNoRows {
  839. exist = ""
  840. } else {
  841. log.Fatal(err)
  842. }
  843. }
  844. if exist != "" {
  845. return true
  846. }
  847. }
  848. } else if acl_data == "owner" {
  849. if auth_info["owner"] {
  850. return true
  851. }
  852. } else if acl_data == "ban_admin" {
  853. if auth_info["treat_as_admin"] || get_ban == "true" {
  854. return true
  855. }
  856. } else if acl_data == "not_all" {
  857. return false
  858. } else if acl_data == "up_to_level_3" || acl_data == "up_to_level_10" {
  859. if acl_data == "up_to_level_3" {
  860. if level_int >= 3 {
  861. return true
  862. }
  863. } else if acl_data == "up_to_level_10" {
  864. if level_int >= 10 {
  865. return true
  866. }
  867. }
  868. } else if acl_data == "30_day_50_edit" {
  869. if !ip_or_user {
  870. stmt, err := db.Prepare(DB_change("select data from user_set where id = ? and name = 'date'"))
  871. if err != nil {
  872. log.Fatal(err)
  873. }
  874. defer stmt.Close()
  875. var signup_date string
  876. err = stmt.QueryRow(ip).Scan(&signup_date)
  877. if err != nil {
  878. if err == sql.ErrNoRows {
  879. signup_date = Get_time()
  880. } else {
  881. log.Fatal(err)
  882. }
  883. }
  884. time_1, _ := time.Parse("2006-01-02 15:04:05", signup_date)
  885. time_1 = time_1.AddDate(0, 0, 30)
  886. time_2, _ := time.Parse("2006-01-02 15:04:05", Get_time())
  887. if time_2.After(time_1) {
  888. stmt, err := db.Prepare(DB_change("select count(*) from history where ip = ?"))
  889. if err != nil {
  890. log.Fatal(err)
  891. }
  892. defer stmt.Close()
  893. var count int
  894. err = stmt.QueryRow(ip).Scan(&count)
  895. if err != nil {
  896. if err == sql.ErrNoRows {
  897. count = 0
  898. } else {
  899. log.Fatal(err)
  900. }
  901. }
  902. if count >= 50 {
  903. return true
  904. }
  905. }
  906. }
  907. }
  908. return false
  909. } else if for_a == end_number-1 {
  910. if !Arr_in_str(except_ban_tool_list, tool) {
  911. if get_ban == "true" {
  912. return false
  913. }
  914. }
  915. if tool == "topic" {
  916. stmt, err := db.Prepare(DB_change("select title from rd where code = ? and stop != ''"))
  917. if err != nil {
  918. log.Fatal(err)
  919. }
  920. defer stmt.Close()
  921. var topic_state string
  922. err = stmt.QueryRow(topic_number).Scan(&topic_state)
  923. if err != nil {
  924. if err == sql.ErrNoRows {
  925. topic_state = ""
  926. } else {
  927. log.Fatal(err)
  928. }
  929. }
  930. if topic_state != "" {
  931. if auth_info["topic"] {
  932. return true
  933. } else {
  934. return false
  935. }
  936. } else {
  937. return true
  938. }
  939. } else {
  940. return true
  941. }
  942. }
  943. }
  944. return false
  945. }