2
0

acl_and_auth.go 23 KB

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