give_user_ban.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. from .tool.func import *
  2. def give_user_ban(name = None, ban_type = ''):
  3. with get_db_connect() as conn:
  4. curs = conn.cursor()
  5. ip = ip_check()
  6. if ban_check(ip = ip, tool = 'login') == 1:
  7. if ip_or_user(ip) == 1 or admin_check('all', None, ip) == 0:
  8. return re_error('/ban')
  9. else:
  10. if admin_check(1, None, ip) != 1:
  11. return re_error('/error/3')
  12. if flask.request.method == 'POST':
  13. time_limit = flask.request.form.get('date', '')
  14. if re.search(r'^[0-9]{4}-[0-9]{2}-[0-9]{2}$', time_limit):
  15. end = time_limit + ' 00:00:00'
  16. else:
  17. end = '0'
  18. regex_get = flask.request.form.get('regex', None)
  19. login = flask.request.form.get('login', '')
  20. why = flask.request.form.get('why', '')
  21. release = flask.request.form.get('release', '')
  22. if ban_type == 'multiple':
  23. all_user = re.findall(r'([^\n]+)\n', flask.request.form.get('name', 'test').replace('\r', '') + '\n')
  24. else:
  25. if name:
  26. all_user = [name]
  27. else:
  28. all_user = [flask.request.form.get('name', 'test')]
  29. for name in all_user:
  30. if regex_get or ban_type == 'regex':
  31. type_d = 'regex' if regex_get else ban_type
  32. try:
  33. re.compile(name)
  34. except:
  35. return re_error('/error/23')
  36. else:
  37. type_d = None
  38. if type_d:
  39. if admin_check(None, 'ban' + (' ' + type_d if type_d else '') + ' (' + name + ')') != 1:
  40. return re_error('/error/3')
  41. else:
  42. if name == ip:
  43. if admin_check('all', 'ban (' + name + ')') != 1:
  44. return re_error('/error/3')
  45. else:
  46. if admin_check(1, 'ban (' + name + ')') != 1:
  47. return re_error('/error/3')
  48. ban_insert(
  49. name,
  50. end,
  51. why,
  52. login,
  53. ip_check(),
  54. type_d,
  55. 1 if release != '' else 0
  56. )
  57. return redirect('/block_log')
  58. else:
  59. if ban_type == 'multiple':
  60. main_name = load_lang('multiple_ban')
  61. n_name = '<textarea class="opennamu_textarea_500" placeholder="' + load_lang('name_or_ip_or_regex_multiple') + '" name="name"></textarea><hr class="main_hr">'
  62. else:
  63. main_name = load_lang('ban')
  64. n_name = '<input placeholder="' + load_lang('name_or_ip_or_regex') + '" value="' + (name if name else '') + '" name="name"><hr class="main_hr">'
  65. now = 0
  66. if ban_type == 'multiple':
  67. action = 'action="/auth/give/ban_multiple"'
  68. else:
  69. action = 'action="/auth/give/ban"'
  70. date_value = ''
  71. info_data = ''
  72. if name:
  73. curs.execute(db_change("select end from rb where block = ? and ongoing = '1'"), [name])
  74. db_data = curs.fetchall()
  75. if db_data and db_data[0][0] != '':
  76. date_value = db_data[0][0].split()[0]
  77. info_data = '''
  78. <div id="opennamu_get_user_info">''' + html.escape(name) + '''</div>
  79. <hr class="main_hr">
  80. '''
  81. return easy_minify(flask.render_template(skin_check(),
  82. imp = [main_name, wiki_set(), wiki_custom(), wiki_css([now, 0])],
  83. data = info_data + '''
  84. <form method="post" ''' + action + '''>
  85. ''' + n_name + '''
  86. <input type="checkbox" name="regex" ''' + ('checked' if ban_type == 'regex' else '') + '> ' + load_lang('regex') + '''
  87. <hr class="main_hr">
  88. <input type="date" value="''' + date_value + '''" name="date" pattern="\\d{4}-\\d{2}-\\d{2}">
  89. <hr class="main_hr">
  90. <input placeholder="''' + load_lang('why') + '''" name="why" type="text">
  91. <hr class="main_hr">
  92. <input type="checkbox" name="login"> ''' + load_lang('login_able') + '''
  93. <hr class="main_hr">
  94. <input type="checkbox" name="release"> ''' + load_lang('release') + '''
  95. <hr class="main_hr">
  96. <button type="submit">''' + load_lang('save') + '''</button>
  97. </form>
  98. ''',
  99. menu = [['manager', load_lang('return')]]
  100. ))