func.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  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 title 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 title 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 custom_css_user():
  98. if(session.get('Now') == True):
  99. if(session['Daydream']):
  100. data = format(session['Daydream'])
  101. else:
  102. data = ''
  103. else:
  104. data = ''
  105. return data
  106. def acl_check(ip, name):
  107. m = re.search("^사용자:(.*)", name)
  108. n = re.search("^파일:(.*)", name)
  109. if(m):
  110. g = m.groups()
  111. if(ip == g[0]):
  112. if(re.search("\.", g[0])):
  113. return 1
  114. else:
  115. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  116. rows = db_get()
  117. if(rows):
  118. return 1
  119. else:
  120. return 0
  121. else:
  122. return 1
  123. elif(n):
  124. if(not owner_check() == 1):
  125. return 1
  126. else:
  127. b = re.search("^([0-9](?:[0-9]?[0-9]?)\.[0-9](?:[0-9]?[0-9]?))", ip)
  128. if(b):
  129. results = b.groups()
  130. db_ex("select * from ban where block = '" + db_pas(results[0]) + "' and band = 'O'")
  131. rowss = db_get()
  132. if(rowss):
  133. return 1
  134. else:
  135. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  136. rows = db_get()
  137. if(rows):
  138. return 1
  139. else:
  140. db_ex("select acl from data where title = '" + db_pas(name) + "'")
  141. row = db_get()
  142. if(row):
  143. db_ex("select * from user where id = '" + db_pas(ip) + "'")
  144. rows = db_get()
  145. if(row[0]['acl'] == 'user'):
  146. if(rows):
  147. return 0
  148. else:
  149. return 1
  150. elif(row[0]['acl'] == 'admin'):
  151. if(rows):
  152. if(rows[0]['acl'] == 'admin' or rows[0]['acl'] == 'owner'):
  153. return 0
  154. else:
  155. return 1
  156. else:
  157. return 1
  158. else:
  159. return 0
  160. else:
  161. return 0
  162. else:
  163. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  164. rows = db_get()
  165. if(rows):
  166. return 1
  167. else:
  168. db_ex("select acl from data where title = '" + db_pas(name) + "'")
  169. row = db_get()
  170. if(row):
  171. db_ex("select * from user where id = '" + db_pas(ip) + "'")
  172. rows = db_get()
  173. if(row[0]['acl'] == 'user'):
  174. if(rows):
  175. return 0
  176. else:
  177. return 1
  178. elif(row[0]['acl'] == 'admin'):
  179. if(rows):
  180. if(rows[0]['acl'] == 'admin' or rows[0]['acl'] == 'owner'):
  181. return 0
  182. else:
  183. return 1
  184. else:
  185. return 1
  186. else:
  187. return 0
  188. else:
  189. return 0
  190. def ban_check(ip):
  191. b = re.search("^([0-9](?:[0-9]?[0-9]?)\.[0-9](?:[0-9]?[0-9]?))", ip)
  192. if(b):
  193. results = b.groups()
  194. db_ex("select * from ban where block = '" + db_pas(results[0]) + "' and band = 'O'")
  195. rowss = db_get()
  196. if(rowss):
  197. return 1
  198. else:
  199. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  200. rows = db_get()
  201. if(rows):
  202. return 1
  203. else:
  204. return 0
  205. else:
  206. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  207. rows = db_get()
  208. if(rows):
  209. return 1
  210. else:
  211. return 0
  212. def topic_check(ip, name, sub):
  213. b = re.search("^([0-9](?:[0-9]?[0-9]?)\.[0-9](?:[0-9]?[0-9]?))", ip)
  214. if(b):
  215. results = b.groups()
  216. db_ex("select * from ban where block = '" + db_pas(results[0]) + "' and band = 'O'")
  217. rowss = db_get()
  218. if(rowss):
  219. return 1
  220. else:
  221. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  222. rows = db_get()
  223. if(rows):
  224. return 1
  225. else:
  226. db_ex("select * from stop where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "'")
  227. rows = db_get()
  228. if(rows):
  229. return 1
  230. else:
  231. return 0
  232. else:
  233. db_ex("select * from ban where block = '" + db_pas(ip) + "'")
  234. rows = db_get()
  235. if(rows):
  236. return 1
  237. else:
  238. db_ex("select * from stop where title = '" + db_pas(name) + "' and sub = '" + db_pas(sub) + "'")
  239. rows = db_get()
  240. if(rows):
  241. return 1
  242. else:
  243. return 0
  244. def get_time():
  245. now = time.localtime()
  246. 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)
  247. return date
  248. def rd_plus(title, sub, date):
  249. db_ex("select * from rd where title = '" + db_pas(title) + "' and sub = '" + db_pas(sub) + "'")
  250. rd = db_get()
  251. if(rd):
  252. db_ex("update rd set date = '" + db_pas(date) + "' where title = '" + db_pas(title) + "' and sub = '" + db_pas(sub) + "'")
  253. else:
  254. db_ex("insert into rd (title, sub, date) value ('" + db_pas(title) + "', '" + db_pas(sub) + "', '" + db_pas(date) + "')")
  255. db_com()
  256. def rb_plus(block, end, today, blocker, why):
  257. db_ex("insert into rb (block, end, today, blocker, why) value ('" + db_pas(block) + "', '" + db_pas(end) + "', '" + today + "', '" + db_pas(blocker) + "', '" + db_pas(why) + "')")
  258. db_com()
  259. def history_plus(title, data, date, ip, send, leng):
  260. db_ex("select * from history where title = '" + db_pas(title) + "' order by id+0 desc limit 1")
  261. rows = db_get()
  262. if(rows):
  263. number = int(rows[0]['id']) + 1
  264. 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 + "')")
  265. db_com()
  266. else:
  267. 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 + "')")
  268. db_com()
  269. def leng_check(a, b):
  270. if(a < b):
  271. c = b - a
  272. c = '+' + str(c)
  273. elif(b < a):
  274. c = a - b
  275. c = '-' + str(c)
  276. else:
  277. c = '0'
  278. return c