func_upload.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. from .tool.func import *
  2. def func_upload_2(conn):
  3. curs = conn.cursor()
  4. if acl_check(None, 'upload') == 1:
  5. return re_error('/ban')
  6. if flask.request.method == 'POST':
  7. if captcha_post(flask.request.form.get('g-recaptcha-response', flask.request.form.get('g-recaptcha', ''))) == 1:
  8. return re_error('/error/13')
  9. else:
  10. captcha_post('', 0)
  11. file_data = flask.request.files.getlist("f_data[]", None)
  12. if not file_data:
  13. return re_error('/error/9')
  14. if len(file_data) == 1:
  15. file_num = None
  16. else:
  17. if acl_check(None, 'many_upload') == 1:
  18. return re_error('/ban')
  19. file_num = 1
  20. for data in file_data:
  21. if int(wiki_set(3)) * 1024 * 1024 < flask.request.content_length:
  22. return re_error('/error/17')
  23. value = os.path.splitext(data.filename)[1]
  24. curs.execute(db_change("select html from html_filter where kind = 'extension'"))
  25. extension = [i[0].lower() for i in curs.fetchall()]
  26. if not re.sub(r'^\.', '', value).lower() in extension:
  27. return re_error('/error/14')
  28. if flask.request.form.get('f_name', None):
  29. name = flask.request.form.get('f_name', None) + (' ' + str(file_num) if file_num else '') + value
  30. else:
  31. name = data.filename
  32. piece = os.path.splitext(name)
  33. if re.search(r'[^ㄱ-힣0-9a-zA-Z_\- ]', piece[0]):
  34. return re_error('/error/22')
  35. e_data = sha224_replace(piece[0]) + piece[1]
  36. curs.execute(db_change("select title from data where title = ?"), ['file:' + name])
  37. if curs.fetchall():
  38. return re_error('/error/16')
  39. curs.execute(db_change("select html from html_filter where kind = 'file'"))
  40. db_data = curs.fetchall()
  41. for i in db_data:
  42. t_re = re.compile(i[0])
  43. if t_re.search(name):
  44. return redirect('/file_filter')
  45. if os.path.exists(os.path.join(app_var['path_data_image'], e_data)):
  46. os.remove(os.path.join(app_var['path_data_image'], e_data))
  47. data.save(os.path.join(app_var['path_data_image'], e_data))
  48. else:
  49. data.save(os.path.join(app_var['path_data_image'], e_data))
  50. ip = ip_check()
  51. g_lice = g_lice
  52. curs.execute(db_change("select data from other where name = 'markup'"))
  53. db_data = curs.fetchall()
  54. if db_data and db_data[0][0] == 'namumark':
  55. if flask.request.form.get('f_lice_sel', 'direct_input') == 'direct_input':
  56. lice = g_lice + '[br][br]'
  57. if ip_or_user(ip) != 0:
  58. lice += ip
  59. else:
  60. lice += '[[user:' + ip + ']]'
  61. lice += '[[category:direct_input]]'
  62. else:
  63. lice = flask.request.form.get('f_lice_sel', '')
  64. lice += '[br][br]' + g_lice
  65. lice += '[[category:' + re.sub(r'\]', '_', flask.request.form.get('f_lice_sel', '')) + ']]'
  66. file_d = '[[file:' + name + ']][br][br]{{{[[file:' + name + ']]}}}[br][br]' + lice
  67. else:
  68. file_d = name + ' | /image/' + e_data + ((' | ' + g_lice) if g_lice != '' else '') + ' | ' + ip
  69. curs.execute(db_change("insert into data (title, data) values (?, ?)"), ['file:' + name, file_d])
  70. curs.execute(db_change("insert into acl (title, decu, dis, why, view) values (?, 'admin', '', '', '')"), ['file:' + name])
  71. render_set(
  72. title = 'file:' + name,
  73. data = file_d,
  74. num = 1
  75. )
  76. history_plus(
  77. 'file:' + name,
  78. file_d,
  79. get_time(),
  80. ip,
  81. ip,
  82. '0',
  83. 'upload'
  84. )
  85. if file_num:
  86. file_num += 1
  87. conn.commit()
  88. return redirect('/w/file:' + name)
  89. else:
  90. license_list = '''
  91. <option value="direct_input">''' + load_lang('direct_input') + '''</option>
  92. '''
  93. curs.execute(db_change("select html from html_filter where kind = 'image_license'"))
  94. db_data = curs.fetchall()
  95. for i in db_data:
  96. license_list += '''
  97. <option value="''' + i[0] + '''">''' + i[0] + '''</option>
  98. '''
  99. return easy_minify(flask.render_template(skin_check(),
  100. imp = [load_lang('upload'), wiki_set(), custom(), other2([0, 0])],
  101. data = '''
  102. <a href="/file_filter">(''' + load_lang('file_filter_list') + ''')</a>
  103. <hr class=\"main_hr\">
  104. ''' + load_lang('max_file_size') + ''' : ''' + wiki_set(3) + '''MB
  105. <hr class=\"main_hr\">
  106. <form method="post" enctype="multipart/form-data" accept-charset="utf8">
  107. <input multiple="multiple" type="file" name="f_data[]">
  108. <hr class=\"main_hr\">
  109. <input placeholder="''' + load_lang('file_name') + '''" name="f_name" value="''' + flask.request.args.get('name', '') + '''">
  110. <hr class=\"main_hr\">
  111. <select name="f_lice_sel">
  112. ''' + license_list + '''
  113. </select>
  114. <hr class=\"main_hr\">
  115. <textarea rows="10" placeholder="''' + load_lang('other') + '''" name="f_lice"></textarea>
  116. <hr class=\"main_hr\">
  117. ''' + captcha_get() + '''
  118. <button id="save" type="submit">''' + load_lang('save') + '''</button>
  119. </form>
  120. ''',
  121. menu = [['other', load_lang('return')]]
  122. ))