2
0

edit_upload.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. from .tool.func import *
  2. async def edit_upload():
  3. with get_db_connect() as conn:
  4. curs = conn.cursor()
  5. if await acl_check('', 'upload') == 1:
  6. return await re_error(conn, 0)
  7. curs.execute(db_change('select data from other where name = "upload"'))
  8. db_data = curs.fetchall()
  9. file_max = number_check(db_data[0][0]) if db_data and db_data[0][0] != '' else '2'
  10. file_max = int(file_max)
  11. if flask.request.method == 'POST':
  12. if await captcha_post(conn, flask.request.form.get('g-recaptcha-response', flask.request.form.get('g-recaptcha', ''))) == 1:
  13. return await re_error(conn, 13)
  14. file_data = flask.request.files.getlist("f_data[]")
  15. file_len = len(file_data)
  16. file_size_all = flask.request.content_length
  17. if file_size_all == None:
  18. file_size_all = 0
  19. if (file_max * 1000 * 1000 * file_len) < file_size_all or file_size_all == 0:
  20. return await re_error(conn, 17)
  21. if file_len == 1:
  22. file_num = None
  23. else:
  24. if await acl_check('', 'many_upload') == 1:
  25. return await re_error(conn, 0)
  26. file_num = 1
  27. for data in file_data:
  28. file_name = data.filename if data.filename else ''
  29. if file_name == '':
  30. return await re_error(conn, 9)
  31. value_tmp = os.path.splitext(file_name)
  32. value = ''
  33. if len(value_tmp) >= 2:
  34. value = value_tmp[1]
  35. curs.execute(db_change("select html from html_filter where kind = 'extension'"))
  36. extension = [i[0].lower() for i in curs.fetchall()]
  37. if not re.sub(r'^\.', '', value).lower() in extension:
  38. return await re_error(conn, 14)
  39. name = ''
  40. if flask.request.form.get('f_name', None):
  41. name = flask.request.form.get('f_name', '') + (' ' + str(file_num) if file_num else '') + value
  42. else:
  43. name = file_name
  44. piece = os.path.splitext(name)
  45. if re.search(r'\.', piece[0]):
  46. return await re_error(conn, 22)
  47. e_data = sha224_replace(piece[0]) + piece[1]
  48. curs.execute(db_change("select title from data where title = ?"), ['file:' + name])
  49. if curs.fetchall():
  50. return await re_error(conn, 16)
  51. curs.execute(db_change("select html from html_filter where kind = 'file'"))
  52. db_data = curs.fetchall()
  53. for i in db_data:
  54. t_re = re.compile(i[0])
  55. if t_re.search(name):
  56. return redirect(conn, '/filter/file_filter')
  57. data_url_image = load_image_url(conn)
  58. if os.path.exists(os.path.join(data_url_image, e_data)):
  59. return await re_error(conn, 16)
  60. else:
  61. data.save(os.path.join(data_url_image, e_data))
  62. ip = ip_check()
  63. g_lice = flask.request.form.get('f_lice', '')
  64. file_size = os.stat(os.path.join(data_url_image, e_data)).st_size
  65. file_size = str(round(file_size / 1000, 1))
  66. curs.execute(db_change("select data from other where name = 'markup'"))
  67. db_data = curs.fetchall()
  68. if db_data and db_data[0][0] == 'namumark':
  69. file_d = '' + \
  70. flask.request.form.get('f_lice_sel', 'direct_input') + '\n' + \
  71. '[[category:' + re.sub(r'\]', '_', flask.request.form.get('f_lice_sel', '')) + ']]\n' + \
  72. (g_lice if g_lice != '' else '') + \
  73. ''
  74. else:
  75. file_d = '' + \
  76. flask.request.form.get('f_lice_sel', 'direct_input') + '\n' + \
  77. (g_lice if g_lice != '' else '') + \
  78. ''
  79. curs.execute(db_change("insert into data (title, data) values (?, ?)"), ['file:' + name, file_d])
  80. await render_set(conn,
  81. doc_name = 'file:' + name,
  82. doc_data = file_d,
  83. data_type = 'backlink'
  84. )
  85. history_plus(conn,
  86. 'file:' + name,
  87. file_d,
  88. get_time(),
  89. ip,
  90. '',
  91. '0',
  92. mode = 'upload'
  93. )
  94. if file_num:
  95. file_num += 1
  96. return redirect(conn, '/w/file:' + name)
  97. else:
  98. license_list = '<option value="direct_input">' + await get_lang('direct_input') + '</option>'
  99. file_name = html.escape(flask.request.args.get('name', ''))
  100. curs.execute(db_change("select html from html_filter where kind = 'image_license'"))
  101. db_data = curs.fetchall()
  102. license_list += ''.join(['<option value="' + i[0] + '">' + i[0] + '</option>' for i in db_data])
  103. curs.execute(db_change("select data from other where name = 'upload_help'"))
  104. db_data = curs.fetchall()
  105. upload_help = ('<hr class="main_hr">' + db_data[0][0]) if db_data and db_data[0][0] != '' else ''
  106. curs.execute(db_change("select data from other where name = 'upload_default'"))
  107. db_data = curs.fetchall()
  108. upload_default = html.escape(db_data[0][0]) if db_data and db_data[0][0] != '' else ''
  109. return easy_minify(flask.render_template(await skin_check(),
  110. imp = [await get_lang('upload'), await wiki_set(), await wiki_custom(conn), wiki_css([0, 0])],
  111. data = '''
  112. <a href="/filter/file_filter">(''' + await get_lang('file_filter_list') + ''')</a> <a href="/filter/extension_filter">(''' + await get_lang('extension_filter_list') + ''')</a>
  113. ''' + upload_help + '''
  114. <hr class="main_hr">
  115. ''' + await get_lang('max_file_size') + ''' : ''' + str(file_max) + '''MB
  116. <hr class="main_hr">
  117. <form method="post" enctype="multipart/form-data" accept-charset="utf8">
  118. <input multiple="multiple" type="file" name="f_data[]">
  119. <hr class="main_hr">
  120. <input placeholder="''' + await get_lang('file_name') + '''" name="f_name" value="''' + file_name + '''">
  121. <hr class="main_hr">
  122. <select name="f_lice_sel">
  123. ''' + license_list + '''
  124. </select>
  125. <hr class="main_hr">
  126. <textarea class="opennamu_textarea_100" placeholder="''' + await get_lang('other') + '''" name="f_lice">''' + upload_default + '''</textarea>
  127. <hr class="main_hr">
  128. ''' + await captcha_get(conn) + '''
  129. <button id="opennamu_save_button" type="submit">''' + await get_lang('save') + '''</button>
  130. </form>
  131. ''',
  132. menu = [['other', await get_lang('return')]]
  133. ))