give_user_ban.py 5.5 KB

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