user_setting.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. from .tool.func import *
  2. async def user_setting():
  3. with get_db_connect() as conn:
  4. curs = conn.cursor()
  5. support_language = ['default'] + get_init_set_list()['language']['list']
  6. ip = ip_check()
  7. if ip_or_user(ip) == 0:
  8. if flask.request.method == 'POST':
  9. auto_list = [
  10. ['skin', flask.request.form.get('skin', '')],
  11. ['lang', flask.request.form.get('lang', '')],
  12. ['user_title', flask.request.form.get('user_title', '')],
  13. ['sub_user_name' , flask.request.form.get('sub_user_name', '')]
  14. ]
  15. if not auto_list[2][1] in await get_user_title_list(conn, ip):
  16. auto_list[2][1] = ''
  17. twofa_on = flask.request.form.get('2fa', '')
  18. if twofa_on != '':
  19. twofa_pw = flask.request.form.get('2fa_pw', '')
  20. if twofa_pw != '':
  21. twofa_pw = pw_encode(conn, twofa_pw)
  22. curs.execute(db_change("select data from user_set where id = ? and name = 'encode'"), [ip])
  23. twofa_encode = curs.fetchall()[0][0]
  24. auto_list += [['2fa', 'on'], ['2fa_pw', twofa_pw], ['2fa_pw_encode', twofa_encode]]
  25. else:
  26. auto_list += [['2fa', 'on']]
  27. else:
  28. auto_list += [['2fa', '']]
  29. for auto_data in auto_list:
  30. curs.execute(db_change('select data from user_set where name = ? and id = ?'), [auto_data[0], ip])
  31. if curs.fetchall():
  32. curs.execute(db_change("update user_set set data = ? where name = ? and id = ?"), [auto_data[1], auto_data[0], ip])
  33. else:
  34. curs.execute(db_change("insert into user_set (name, id, data) values (?, ?, ?)"), [auto_data[0], ip, auto_data[1]])
  35. return redirect(conn, '/change')
  36. else:
  37. curs.execute(db_change('select data from user_set where name = "email" and id = ?'), [ip])
  38. data = curs.fetchall()
  39. email = data[0][0] if data and data[0][0] != '' else '-'
  40. curs.execute(db_change('select data from user_set where name = "random_key" and id = ?'), [ip])
  41. data = curs.fetchall()
  42. ramdom_key = data[0][0] if data and data[0][0] != '' else '-'
  43. curs.execute(db_change('select data from user_set where name = "skin" and id = ?'), [ip])
  44. data = curs.fetchall()
  45. div2 = await load_skin(data[0][0] if data else '', 0, 1)
  46. curs.execute(db_change('select data from user_set where name = "lang" and id = ?'), [ip])
  47. data = curs.fetchall()
  48. data = [['default']] if not data else data
  49. div3 = ''
  50. for lang_data in support_language:
  51. see_data = lang_data if lang_data != 'default' else await get_lang('default')
  52. if data and data[0][0] == lang_data:
  53. div3 = '<option value="' + lang_data + '">' + see_data + '</option>' + div3
  54. else:
  55. div3 += '<option value="' + lang_data + '">' + see_data + '</option>'
  56. curs.execute(db_change('select data from user_set where name = "user_title" and id = ?'), [ip])
  57. data = curs.fetchall()
  58. data = [['']] if not data else data
  59. user_title_list = await get_user_title_list(conn, ip)
  60. div4 = ''
  61. for user_title in user_title_list:
  62. if data and data[0][0] == user_title:
  63. div4 = '<option value="' + user_title + '">' + user_title_list[user_title] + '</option>' + div4
  64. else:
  65. div4 += '<option value="' + user_title + '">' + user_title_list[user_title] + '</option>'
  66. curs.execute(db_change('select data from user_set where name = "2fa" and id = ?'), [ip])
  67. fa_data = curs.fetchall()
  68. fa_data = fa_data[0][0] if fa_data and fa_data[0][0] != '' else ''
  69. fa_data_select = ''
  70. fa_data_sp_list = [[await get_lang('off'), ''], [await get_lang('password'), 'on']]
  71. for fa_data_get in fa_data_sp_list:
  72. fa_data_selected = ''
  73. if fa_data == fa_data_get[1]:
  74. fa_data_selected = 'selected'
  75. fa_data_select += '<option ' + fa_data_selected + ' value="' + fa_data_get[1] + '">' + fa_data_get[0] + '</option>'
  76. curs.execute(db_change('select data from user_set where name = "2fa_pw" and id = ?'), [ip])
  77. fa_data_pw = curs.fetchall()
  78. fa_data_pw = await get_lang('2fa_password_change') if fa_data_pw else await get_lang('2fa_password')
  79. curs.execute(db_change('select data from user_set where name = "user_name" and id = ?'), [ip])
  80. db_data = curs.fetchall()
  81. user_name = db_data[0][0] if db_data else ip
  82. curs.execute(db_change('select data from user_set where name = "sub_user_name" and id = ?'), [ip])
  83. db_data = curs.fetchall()
  84. sub_user_name = db_data[0][0] if db_data else ''
  85. return await render_template(
  86. await get_lang('user_setting'),
  87. '''
  88. <form method="post">
  89. <div id="opennamu_get_user_info">''' + html.escape(ip) + '''</div>
  90. <hr class="main_hr">
  91. <a href="/change/pw">(''' + await get_lang('password_change') + ''')</a>
  92. <hr class="main_hr">
  93. <span>''' + await get_lang('email') + ''' : ''' + email + '''</span> <a href="/change/email">(''' + await get_lang('email_change') + ''')</a> <a href="/change/email/delete">(''' + await get_lang('email_delete') + ''')</a>
  94. <hr class="main_hr">
  95. <span>''' + await get_lang('password_instead_key') + ''' : ''' + ramdom_key + ''' <a href="/change/key">(''' + await get_lang('key_change') + ''')</a> <a href="/change/key/delete">(''' + await get_lang('key_delete') + ''')</a></span>
  96. <h2>''' + await get_lang('main') + '''</h2>
  97. <a href="/change/head">(''' + await get_lang('user_head') + ''')</a> <a href="/change/top_menu">(''' + await get_lang('user_added_menu') + ''')</a>
  98. <hr class="main_hr">
  99. <span>''' + await get_lang('skin') + '''</span>
  100. <hr class="main_hr">
  101. <span class="__ON_SELECT_DIV__"><select class="__ON_SELECT__" name="skin">''' + div2 + '''</select></span>
  102. <hr class="main_hr">
  103. <a href="/change/skin_set">(''' + await get_lang('skin_set') + ''')</a> <a href="/change/skin_set/main">(''' + await get_lang('main_skin_set') + ''')</a>
  104. <hr class="main_hr">
  105. <span>''' + await get_lang('language') + '''</span>
  106. <hr class="main_hr">
  107. <span class="__ON_SELECT_DIV__"><select class="__ON_SELECT__" name="lang">''' + div3 + '''</select></span>
  108. <hr class="main_hr">
  109. <span>''' + await get_lang('user_title') + '''</span>
  110. <hr class="main_hr">
  111. <span class="__ON_SELECT_DIV__"><select class="__ON_SELECT__" name="user_title">''' + div4 + '''</select></span>
  112. <h2>''' + await get_lang('2fa') + '''</h2>
  113. <span class="__ON_SELECT_DIV__"><select class="__ON_SELECT__" name="2fa" id="twofa_check_input">''' + fa_data_select + '''</select></span>
  114. <hr class="main_hr">
  115. <input class="__ON_INPUT__" type="password" name="2fa_pw" placeholder="''' + fa_data_pw + '''">
  116. <h2>''' + await get_lang('main_user_name') + '''</h2>
  117. <a href="/change/user_name">(''' + await get_lang('change_user_name') + ''')</a>
  118. <hr class="main_hr">
  119. ''' + await get_lang('user_name') + ''' : ''' + html.escape(user_name) + '''
  120. <h2>''' + await get_lang('sub_user_name') + '''</h2>
  121. <input class="__ON_INPUT__" name="sub_user_name" value="''' + html.escape(sub_user_name) + '''" placeholder="''' + await get_lang('sub_user_name') + '''">
  122. <hr class="main_hr">
  123. <button class="__ON_BUTTON__" type="submit">''' + await get_lang('save') + '''</button>
  124. ''' + await http_warning() + '''
  125. </form>
  126. ''',
  127. 0,
  128. [['user', await get_lang('return')]]
  129. )
  130. else:
  131. if flask.request.method == 'POST':
  132. flask.session['skin'] = flask.request.form.get('skin', '')
  133. flask.session['lang'] = flask.request.form.get('lang', '')
  134. return redirect(conn, '/change')
  135. else:
  136. div2 = await load_skin(
  137. ('' if not 'skin' in flask.session else flask.session['skin']),
  138. 0,
  139. 1
  140. )
  141. data = [['default']] if not 'lang' in flask.session else [[flask.session['lang']]]
  142. div3 = ''
  143. for lang_data in support_language:
  144. see_data = lang_data if lang_data != 'default' else await get_lang('default')
  145. if data and data[0][0] == lang_data:
  146. div3 = '<option value="' + lang_data + '">' + see_data + '</option>' + div3
  147. else:
  148. div3 += '<option value="' + lang_data + '">' + see_data + '</option>'
  149. return await render_template(
  150. await get_lang('user_setting'),
  151. '''
  152. <form method="post">
  153. <div id="opennamu_get_user_info">''' + html.escape(ip) + '''</div>
  154. <hr class="main_hr">
  155. <h2>''' + await get_lang('main') + '''</h2>
  156. <span>''' + await get_lang('skin') + '''</span>
  157. <hr class="main_hr">
  158. <span class="__ON_SELECT_DIV__"><select class="__ON_SELECT__" name="skin">''' + div2 + '''</select></span>
  159. <hr class="main_hr">
  160. <a href="/change/skin_set">(''' + await get_lang('skin_set') + ''')</a> <a href="/change/skin_set/main">(''' + await get_lang('main_skin_set') + ''')</a>
  161. <hr class="main_hr">
  162. <span>''' + await get_lang('language') + '''</span>
  163. <hr class="main_hr">
  164. <span class="__ON_SELECT_DIV__"><select class="__ON_SELECT__" name="lang">''' + div3 + '''</select></span>
  165. <hr class="main_hr">
  166. <button class="__ON_BUTTON__" type="submit">''' + await get_lang('save') + '''</button>
  167. ''' + await http_warning() + '''
  168. <hr class="main_hr">
  169. <span>''' + await get_lang('user_head_warning') + '''</span>
  170. </form>
  171. ''',
  172. 0,
  173. [['user', await get_lang('return')]]
  174. )