2
0

func.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. from flask import Flask, session, request
  2. from urllib import parse
  3. import json
  4. import pymysql
  5. import time
  6. import re
  7. import json
  8. json_data = open('set.json').read()
  9. set_data = json.loads(json_data)
  10. conn = pymysql.connect(host = set_data['host'], user = set_data['user'], password = set_data['pw'], charset = 'utf8mb4')
  11. curs = conn.cursor(pymysql.cursors.DictCursor)
  12. def db_com():
  13. conn.commit()
  14. def url_pas(data):
  15. return parse.quote(data).replace('/','%2F')
  16. def db_get():
  17. return curs.fetchall()
  18. db_ex = curs.execute
  19. db_pas = pymysql.escape_string
  20. db_ex("use " + set_data['db'])
  21. def diff(seqm):
  22. output= []
  23. for opcode, a0, a1, b0, b1 in seqm.get_opcodes():
  24. if(opcode == 'equal'):
  25. output.append(seqm.a[a0:a1])
  26. elif(opcode == 'insert'):
  27. output.append("<span style='background:#CFC;'>" + seqm.b[b0:b1] + "</span>")
  28. elif(opcode == 'delete'):
  29. output.append("<span style='background:#FDD;'>" + seqm.a[a0:a1] + "</span>")
  30. elif(opcode == 'replace'):
  31. output.append("<span style='background:#CFC;'>" + seqm.b[b0:b1] + "</span><span style='background:#FDD;'>" + seqm.a[a0:a1] + "</span>")
  32. else:
  33. output.append(seqm.a[a0:a1])
  34. return ''.join(output)
  35. def admin_check():
  36. if(session.get('Now') == True):
  37. ip = ip_check()
  38. db_ex("select * from user where id = '" + db_pas(ip) + "'")
  39. user = db_get()
  40. if(user):
  41. if(user[0]['acl'] == 'owner' or user[0]['acl'] == 'admin'):
  42. return 1
  43. def owner_check():
  44. if(session.get('Now') == True):
  45. ip = ip_check()
  46. db_ex("select * from user where id = '" + db_pas(ip) + "'")
  47. user = db_get()
  48. if(user):
  49. if(user[0]['acl'] == 'owner'):
  50. return 1
  51. def include_check(name, data):
  52. if(re.search('^틀:', name)):
  53. db_ex("select * from back where title = '" + db_pas(name) + "' and type = 'include'")
  54. back = db_get()
  55. if(back):
  56. i = 0
  57. while(True):
  58. try:
  59. namumark(back[i]['link'], data)
  60. except:
  61. break
  62. i += 1
  63. def login_check():
  64. if(session.get('Now') == True):
  65. return 1
  66. else:
  67. return 0
  68. def ip_pas(raw_ip):
  69. yes = re.search("([^-]*)\s\-\s(Close|Reopen|Stop|Restart|Admin|Agreement|Settlement)$", raw_ip)
  70. if(yes):
  71. results = yes.groups()
  72. db_ex("select * from data where title = '사용자:" + db_pas(results[0]) + "'")
  73. row = db_get()
  74. if(row):
  75. ip = '<a href="/w/' + url_pas('사용자:' + results[0]) + '">' + results[0] + '</a> - ' + results[1] + ' <a href="/record/' + url_pas(results[0]) + '/n/1">(기록)</a>'
  76. else:
  77. ip = '<a class="not_thing" href="/w/' + url_pas('사용자:' + results[0]) + '">' + results[0] + '</a> - ' + results[1] + ' <a href="/record/' + url_pas(results[0]) + '/n/1">(기록)</a>'
  78. elif(re.search("\.", raw_ip)):
  79. ip = raw_ip + ' <a href="/record/' + url_pas(raw_ip) + '/n/1">(기록)</a>'
  80. else:
  81. db_ex("select * from data where title = '사용자:" + db_pas(raw_ip) + "'")
  82. row = db_get()
  83. if(row):
  84. ip = '<a href="/w/' + url_pas('사용자:' + raw_ip) + '">' + raw_ip + '</a> <a href="/record/' + url_pas(raw_ip) + '/n/1">(기록)</a>'
  85. else:
  86. ip = '<a class="not_thing" href="/w/' + url_pas('사용자:' + raw_ip) + '">' + raw_ip + '</a> <a href="/record/' + url_pas(raw_ip) + '/n/1">(기록)</a>'
  87. return ip
  88. def ip_check():
  89. if(session.get('Now') == True):
  90. ip = format(session['DREAMER'])
  91. else:
  92. if(request.headers.getlist("X-Forwarded-For")):
  93. ip = request.headers.getlist("X-Forwarded-For")[0]
  94. else:
  95. ip = request.remote_addr
  96. return ip
  97. def acl_check(ip, name):
  98. m = re.search("^사용자:(.*)", name)
  99. n = re.search("^파일:(.*)", name)
  100. if(m):
  101. g = m.groups()
  102. if(ip == g[0]):
  103. if(re.search("\.", g[0])):
  104. return 1
  105. else:
  106. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  107. rows = db_get()
  108. if(rows):
  109. return 1
  110. else:
  111. return 0
  112. else:
  113. return 1
  114. elif(n):
  115. if(not owner_check() == 1):
  116. return 1
  117. else:
  118. b = re.search("^([0-9](?:[0-9]?[0-9]?)\.[0-9](?:[0-9]?[0-9]?))", ip)
  119. if(b):
  120. results = b.groups()
  121. db_ex("select * from ban where block = '" + db_pas(results[0]) + "' and band = 'O'")
  122. rowss = db_get()
  123. if(rowss):
  124. return 1
  125. else:
  126. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  127. rows = db_get()
  128. if(rows):
  129. return 1
  130. else:
  131. db_ex("select * from data where title = '" + db_pas(name) + "'")
  132. row = db_get()
  133. if(row):
  134. db_ex("select * from user where id = '" + db_pas(ip) + "'")
  135. rows = db_get()
  136. if(row[0]['acl'] == 'user'):
  137. if(rows):
  138. return 0
  139. else:
  140. return 1
  141. elif(row[0]['acl'] == 'admin'):
  142. if(rows):
  143. if(rows[0]['acl'] == 'admin' or rows[0]['acl'] == 'owner'):
  144. return 0
  145. else:
  146. return 1
  147. else:
  148. return 1
  149. else:
  150. return 0
  151. else:
  152. return 0
  153. else:
  154. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  155. rows = db_get()
  156. if(rows):
  157. return 1
  158. else:
  159. db_ex("select * from data where title = '" + db_pas(name) + "'")
  160. row = db_get()
  161. if(row):
  162. db_ex("select * from user where id = '" + db_pas(ip) + "'")
  163. rows = db_get()
  164. if(row[0]['acl'] == 'user'):
  165. if(rows):
  166. return 0
  167. else:
  168. return 1
  169. elif(row[0]['acl'] == 'admin'):
  170. if(rows):
  171. if(rows[0]['acl'] == 'admin' or rows[0]['acl'] == 'owner'):
  172. return 0
  173. else:
  174. return 1
  175. else:
  176. return 1
  177. else:
  178. return 0
  179. else:
  180. return 0
  181. def ban_check(ip):
  182. b = re.search("^([0-9](?:[0-9]?[0-9]?)\.[0-9](?:[0-9]?[0-9]?))", ip)
  183. if(b):
  184. results = b.groups()
  185. db_ex("select * from ban where block = '" + db_pas(results[0]) + "' and band = 'O'")
  186. rowss = db_get()
  187. if(rowss):
  188. return 1
  189. else:
  190. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  191. rows = db_get()
  192. if(rows):
  193. return 1
  194. else:
  195. return 0
  196. else:
  197. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  198. rows = db_get()
  199. if(rows):
  200. return 1
  201. else:
  202. return 0
  203. def topic_check(ip, name, sub):
  204. b = re.search("^([0-9](?:[0-9]?[0-9]?)\.[0-9](?:[0-9]?[0-9]?))", ip)
  205. if(b):
  206. results = b.groups()
  207. db_ex("select * from ban where block = '" + db_pas(results[0]) + "' and band = 'O'")
  208. rowss = db_get()
  209. if(rowss):
  210. return 1
  211. else:
  212. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  213. rows = db_get()
  214. if(rows):
  215. return 1
  216. else:
  217. db_ex("select * from stop where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "'")
  218. rows = db_get()
  219. if(rows):
  220. return 1
  221. else:
  222. return 0
  223. else:
  224. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  225. rows = db_get()
  226. if(rows):
  227. return 1
  228. else:
  229. db_ex("select * from stop where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "'")
  230. rows = db_get()
  231. if(rows):
  232. return 1
  233. else:
  234. return 0
  235. def get_time():
  236. now = time.localtime()
  237. date = "%04d-%02d-%02d %02d:%02d:%02d" % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec)
  238. return date
  239. def rd_plus(title, sub, date):
  240. db_ex("select * from rd where title = '" + db_pas(title) + "' and sub = '" + db_pas(sub) + "'")
  241. rd = db_get()
  242. if(rd):
  243. db_ex("update rd set date = '" + db_pas(date) + "' where title = '" + db_pas(title) + "' and sub = '" + db_pas(sub) + "'")
  244. else:
  245. db_ex("insert into rd (title, sub, date) value ('" + db_pas(title) + "', '" + db_pas(sub) + "', '" + db_pas(date) + "')")
  246. db_com()
  247. def rb_plus(block, end, today, blocker, why):
  248. db_ex("insert into rb (block, end, today, blocker, why) value ('" + db_pas(block) + "', '" + db_pas(end) + "', '" + today + "', '" + db_pas(blocker) + "', '" + db_pas(why) + "')")
  249. db_com()
  250. def history_plus(title, data, date, ip, send, leng):
  251. db_ex("select * from history where title = '" + db_pas(title) + "' order by id+0 desc limit 1")
  252. rows = db_get()
  253. if(rows):
  254. number = int(rows[0]['id']) + 1
  255. db_ex("insert into history (id, title, data, date, ip, send, leng) value ('" + str(number) + "', '" + db_pas(title) + "', '" + db_pas(data) + "', '" + date + "', '" + db_pas(ip) + "', '" + db_pas(send) + "', '" + leng + "')")
  256. db_com()
  257. else:
  258. db_ex("insert into history (id, title, data, date, ip, send, leng) value ('1', '" + db_pas(title) + "', '" + db_pas(data) + "', '" + date + "', '" + db_pas(ip) + "', '" + db_pas(send + ' (새 문서)') + "', '" + leng + "')")
  259. db_com()
  260. def leng_check(a, b):
  261. if(a < b):
  262. c = b - a
  263. c = '+' + str(c)
  264. elif(b < a):
  265. c = a - b
  266. c = '-' + str(c)
  267. else:
  268. c = '0'
  269. return c