main_func_setting_main.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. from .tool.func import *
  2. def main_func_setting_main(db_set):
  3. with get_db_connect() as conn:
  4. curs = conn.cursor()
  5. if admin_check() != 1:
  6. return re_error('/ban')
  7. setting_list = {
  8. 0 : ['name', 'Wiki'],
  9. 2 : ['frontpage', 'FrontPage'],
  10. 4 : ['upload', '2'],
  11. 5 : ['skin', ''],
  12. 7 : ['reg', ''],
  13. 8 : ['ip_view', ''],
  14. 9 : ['back_up', ''],
  15. 10 : ['port', '3000'],
  16. 11 : ['key', load_random_key()],
  17. 12 : ['update', 'stable'],
  18. 15 : ['encode', 'sha3'],
  19. 16 : ['host', '0.0.0.0'],
  20. 19 : ['slow_edit', ''],
  21. 20 : ['requires_approval', ''],
  22. 21 : ['backup_where', ''],
  23. 22 : ['domain', flask.request.host],
  24. 23 : ['ua_get', ''],
  25. 24 : ['enable_comment', ''],
  26. 25 : ['enable_challenge', ''],
  27. 26 : ['edit_bottom_compulsion', ''],
  28. 27 : ['http_select', 'http'],
  29. 28 : ['title_max_length', ''],
  30. 29 : ['title_topic_max_length', ''],
  31. 30 : ['password_min_length', ''],
  32. 31 : ['wiki_access_password_need', ''],
  33. 32 : ['wiki_access_password', ''],
  34. 33 : ['history_recording_off', '']
  35. }
  36. if flask.request.method == 'POST':
  37. for i in setting_list:
  38. curs.execute(db_change("update other set data = ? where name = ?"), [
  39. flask.request.form.get(setting_list[i][0], setting_list[i][1]),
  40. setting_list[i][0]
  41. ])
  42. conn.commit()
  43. admin_check(None, 'edit_set (main)')
  44. return redirect('/setting/main')
  45. else:
  46. d_list = {}
  47. for i in setting_list:
  48. curs.execute(db_change('select data from other where name = ?'), [setting_list[i][0]])
  49. db_data = curs.fetchall()
  50. if not db_data:
  51. curs.execute(db_change('insert into other (name, data) values (?, ?)'), [setting_list[i][0], setting_list[i][1]])
  52. d_list[i] = db_data[0][0] if db_data else setting_list[i][1]
  53. else:
  54. conn.commit()
  55. init_set_list = get_init_set_list()
  56. # 언어도 변경 가능하도록 필요
  57. encode_select = ''
  58. encode_select_data = init_set_list['encode']['list'] + ['sha256']
  59. for encode_select_one in encode_select_data:
  60. if encode_select_one == d_list[15]:
  61. encode_select = '<option value="' + encode_select_one + '">' + encode_select_one + '</option>' + encode_select
  62. else:
  63. encode_select += '<option value="' + encode_select_one + '">' + encode_select_one + '</option>'
  64. tls_select = ''
  65. tls_select_data = ['http', 'https']
  66. for tls_select_one in tls_select_data:
  67. if tls_select_one == d_list[27]:
  68. tls_select = '<option value="' + tls_select_one + '">' + tls_select_one + '</option>' + tls_select
  69. else:
  70. tls_select += '<option value="' + tls_select_one + '">' + tls_select_one + '</option>'
  71. check_box_div = ['', '', '', '', '', '', '', '', '', '']
  72. for i in range(0, len(check_box_div)):
  73. if i == 0:
  74. acl_num = 7
  75. elif i == 1:
  76. acl_num = 8
  77. elif i == 3:
  78. acl_num = 20
  79. elif i == 4:
  80. acl_num = 23
  81. elif i == 5:
  82. acl_num = 24
  83. elif i == 6:
  84. acl_num = 25
  85. elif i == 7:
  86. acl_num = 26
  87. elif i == 8:
  88. acl_num = 31
  89. elif i == 9:
  90. acl_num = 33
  91. if d_list[acl_num]:
  92. check_box_div[i] = 'checked="checked"'
  93. branch_div = ''
  94. branch_list = ['stable', 'dev', 'beta']
  95. for i in branch_list:
  96. if d_list[12] == i:
  97. branch_div = '<option value="' + i + '">' + i + '</option>' + branch_div
  98. else:
  99. branch_div += '<option value="' + i + '">' + i + '</option>'
  100. sqlite_only = 'style="display:none;"' if db_set != 'sqlite' else ''
  101. return easy_minify(flask.render_template(skin_check(),
  102. imp = [load_lang('main_setting'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
  103. data = '''
  104. <form method="post" id="opennamu_simple_render">
  105. <h2>1. ''' + load_lang('basic_set') + '''</h2>
  106. <span>''' + load_lang('wiki_name') + '''</span>
  107. <hr class="main_hr">
  108. <input name="name" value="''' + html.escape(d_list[0]) + '''">
  109. <hr class="main_hr">
  110. <span><a href="/setting/main/logo">(''' + load_lang('wiki_logo') + ''')</a></span>
  111. <hr class="main_hr">
  112. <span>''' + load_lang('main_page') + '''</span>
  113. <hr class="main_hr">
  114. <input name="frontpage" value="''' + html.escape(d_list[2]) + '''">
  115. <hr class="main_hr">
  116. <span>''' + load_lang('tls_method') + '''</span>
  117. <hr class="main_hr">
  118. <select name="http_select">''' + tls_select + '''</select>
  119. <hr class="main_hr">
  120. <span>''' + load_lang('domain') + '''</span> (EX : 2du.pythonanywhere.com)
  121. <hr class="main_hr">
  122. <input name="domain" value="''' + html.escape(d_list[22]) + '''">
  123. <hr class="main_hr">
  124. <span>''' + load_lang('wiki_host') + '''</span>
  125. <hr class="main_hr">
  126. <input name="host" value="''' + html.escape(d_list[16]) + '''">
  127. <hr class="main_hr">
  128. <span>''' + load_lang('wiki_port') + '''</span>
  129. <hr class="main_hr">
  130. <input name="port" value="''' + html.escape(d_list[10]) + '''">
  131. <hr class="main_hr">
  132. <span>''' + load_lang('wiki_secret_key') + '''</span>
  133. <hr class="main_hr">
  134. <input type="password" name="key" value="''' + html.escape(d_list[11]) + '''">
  135. <hr class="main_hr">
  136. <span>''' + load_lang('encryption_method') + '''</span>
  137. <hr class="main_hr">
  138. <select name="encode">''' + encode_select + '''</select>
  139. <hr class="main_hr">
  140. <input type="checkbox" name="wiki_access_password_need" ''' + check_box_div[8] + '''> ''' + load_lang('set_wiki_access_password_need') + ''' (''' + load_lang('restart_required') + ''') (''' + load_lang('beta') + ''')
  141. <hr class="main_hr">
  142. <span>''' + load_lang('set_wiki_access_password') + ''' (''' + load_lang('restart_required') + ''') (''' + load_lang('beta') + ''')</span>
  143. <hr class="main_hr">
  144. <input type="password" name="wiki_access_password" value="''' + html.escape(d_list[32]) + '''">
  145. <h3>1.1. ''' + load_lang('communication_set') + '''</h3>
  146. <input type="checkbox" name="enable_comment" ''' + check_box_div[5] + '''> ''' + load_lang('enable_comment_function') + ''' (''' + load_lang('not_working') + ''')
  147. <hr class="main_hr">
  148. <input type="checkbox" name="enable_challenge" ''' + check_box_div[6] + '''> ''' + load_lang('enable_challenge_function') + ''' (''' + load_lang('not_working') + ''')
  149. <hr class="main_hr">
  150. <h2>2. ''' + load_lang('design_set') + '''</h2>
  151. <span>''' + load_lang('wiki_skin') + '''</span>
  152. <hr class="main_hr">
  153. <select name="skin">''' + load_skin(d_list[5] if d_list[5] != '' else 'tenshi') + '''</select>
  154. <h2>3. ''' + load_lang('login_set') + '''</h2>
  155. <input type="checkbox" name="reg" ''' + check_box_div[0] + '''> ''' + load_lang('no_register') + '''
  156. <hr class="main_hr">
  157. <input type="checkbox" name="ip_view" ''' + check_box_div[1] + '''> ''' + load_lang('hide_ip') + '''
  158. <hr class="main_hr">
  159. <input type="checkbox" name="requires_approval" ''' + check_box_div[3] + '''> ''' + load_lang('requires_approval') + '''
  160. <hr class="main_hr">
  161. <input type="checkbox" name="ua_get" ''' + check_box_div[4] + '''> ''' + load_lang('ua_get_off') + '''
  162. <hr class="main_hr">
  163. <span>''' + load_lang('password_min_length') + ''' (''' + load_lang('beta') + ''') (''' + load_lang('off') + ''' : ''' + load_lang('empty') + ''')</span>
  164. <hr class="main_hr">
  165. <input name="password_min_length" value="''' + html.escape(d_list[30]) + '''">
  166. <h2>4. ''' + load_lang('server_set') + '''</h2>
  167. <span>''' + load_lang('update_branch') + '''</span>
  168. <hr class="main_hr">
  169. <select name="update">''' + branch_div + '''</select>
  170. <span ''' + sqlite_only + '''>
  171. <h3>4.1. ''' + load_lang('sqlite_only') + '''</h3>
  172. <span>
  173. ''' + load_lang('backup_interval') + ''' (''' + load_lang('hour') + ''') (''' + load_lang('off') + ''' : ''' + load_lang('empty') + ''') ''' + \
  174. '''(''' + load_lang('restart_required') + ''')</span>
  175. <hr class="main_hr">
  176. <input name="back_up" value="''' + html.escape(d_list[9]) + '''">
  177. <hr class="main_hr">
  178. <span>
  179. ''' + load_lang('backup_where') + ''' (''' + load_lang('default') + ''' : ''' + load_lang('empty') + ''') ''' + \
  180. '''(''' + load_lang('restart_required') + ''') (''' + load_lang('example') + ''' : ./data/backup.db)
  181. </span>
  182. <hr class="main_hr">
  183. <input name="backup_where" value="''' + html.escape(d_list[21]) + '''">
  184. <hr class="main_hr">
  185. </span>
  186. <h2>5. ''' + load_lang('edit_set') + '''</h2>
  187. <span><a href="/setting/acl">(''' + load_lang('main_acl_setting') + ''')</a></span>
  188. <hr class="main_hr">
  189. <span>''' + load_lang('slow_edit') + ''' (''' + load_lang('second') + ''') (''' + load_lang('off') + ''' : ''' + load_lang('empty') + ''')</span>
  190. <hr class="main_hr">
  191. <input name="slow_edit" value="''' + html.escape(d_list[19]) + '''">
  192. <hr class="main_hr">
  193. <input type="checkbox" name="edit_bottom_compulsion" ''' + check_box_div[7] + '''> ''' + load_lang('edit_bottom_compulsion') + ''' (''' + load_lang('beta') + ''')
  194. <hr class="main_hr">
  195. <span>''' + load_lang('title_max_length') + ''' (''' + load_lang('beta') + ''') (''' + load_lang('off') + ''' : ''' + load_lang('empty') + ''')</span>
  196. <hr class="main_hr">
  197. <input name="title_max_length" value="''' + html.escape(d_list[28]) + '''">
  198. <hr class="main_hr">
  199. <span>''' + load_lang('title_topic_max_length') + ''' (''' + load_lang('beta') + ''') (''' + load_lang('off') + ''' : ''' + load_lang('empty') + ''')</span>
  200. <hr class="main_hr">
  201. <input name="title_topic_max_length" value="''' + html.escape(d_list[29]) + '''">
  202. <hr class="main_hr">
  203. <span>''' + load_lang('max_file_size') + ''' (MB)</span>
  204. <hr class="main_hr">
  205. <input name="upload" value="''' + html.escape(d_list[4]) + '''">
  206. <hr class="main_hr">
  207. <input type="checkbox" name="history_recording_off" ''' + check_box_div[9] + '''> ''' + load_lang('set_history_recording_off') + ''' (''' + load_lang('beta') + ''')
  208. <hr class="main_hr">
  209. <button id="opennamu_js_save" type="submit">''' + load_lang('save') + '''</button>
  210. </form>
  211. <!-- JS : opennamu_do_render_simple -->
  212. ''',
  213. menu = [['setting', load_lang('return')]]
  214. ))