2du 4 лет назад
Родитель
Сommit
b6561b7aca
3 измененных файлов с 54 добавлено и 36 удалено
  1. 1 3
      app.py
  2. 2 0
      lang/en-US.json
  3. 51 33
      route/give_user_ban.py

+ 1 - 3
app.py

@@ -342,10 +342,8 @@ def give_admin(name = None):
 # /auth/give/<name>
 app.route('/auth/give/ban', methods = ['POST', 'GET'])(give_user_ban)
 app.route('/auth/give/ban/<name>', methods = ['POST', 'GET'])(give_user_ban)
-
 app.route('/auth/give/ban_regex/<everything:name>', methods = ['POST', 'GET'], defaults = { 'ban_type' : 'regex' })(give_user_ban)
-
-# app.route('/auth/give/ban_multiple', methods = ['POST', 'GET'])(give_user_ban_multiple)
+app.route('/auth/give/ban_multiple', methods = ['POST', 'GET'], defaults = { 'ban_type' : 'multiple' })(give_user_ban)
 
 # /auth/list
 @app.route('/admin_group')

+ 2 - 0
lang/en-US.json

@@ -226,6 +226,7 @@
         "email_delete" : "Delete email",
         "challenge" : "Challenge",
         "user_title" : "User title",
+        "multiple_ban" : "Multiple ban"
         "_comment_2.1_" : "Filter",
             "_comment_2.1.1_" : "List",
                 "interwiki_list" : "Interwiki(s) list",
@@ -423,6 +424,7 @@
         "default_edit_help" : "Describe it here",
         "markup_enabled" : "Markup enabled",
         "many_delete_help" : "Please write down the documents name one by one on the line.",
+        "name_or_ip_or_regex_multiple" : "Please write down the username or IP or Regex one by one on the line.",
         "sqlite_only" : "SQLite only",
         "approval_question_visible_only_when_approval_on" : "Approval questions are visible only when approval requirement is on",
         "msg_whatchlist_lmt": "You can add as many as",

+ 51 - 33
route/give_user_ban.py

@@ -4,63 +4,72 @@ def give_user_ban(name = None, ban_type = ''):
     with get_db_connect() as conn:
         curs = conn.cursor()
 
-        band = ban_type
         ip = ip_check()
+        
         if ban_check(ip = ip, tool = 'login') == 1:
             if ip_or_user(ip) == 1 or admin_check('all', None, ip) == 0:
                 return re_error('/ban')
         else:
-            if admin_check(1, None, ip) !=1:
+            if admin_check(1, None, ip) != 1:
                 return re_error('/error/3')
 
         if flask.request.method == 'POST':
             end = flask.request.form.get('second', '0')
             end = end if end else '0'
-            name = name if name else flask.request.form.get('name', 'test')
+            
             regex_get = flask.request.form.get('regex', None)
             login = flask.request.form.get('login', '')
             why = flask.request.form.get('why', '')
 
-            if regex_get or band != '':
-                type_d = 'regex' if regex_get else band
-
-                try:
-                    re.compile(name)
-                except:
-                    return re_error('/error/23')
+            if ban_type == 'multiple':
+                all_user = re.findall(r'([^\n]+)\n', flask.request.form.get('name', 'test').replace('\r\n', '\n') + '\n')
             else:
-                type_d = None
+                if name:
+                    all_user = [name]
+                else:
+                    all_user = [flask.request.form.get('name', 'test')]
 
-            if type_d:
-                if admin_check(None, 'ban' + (' ' + type_d if type_d else '') + ' (' + name + ')') != 1:
-                    return re_error('/error/3')
-            else:
-                if name == ip:
-                    if admin_check('all', 'ban (' + name + ')') != 1:
-                        return re_error('/error/3')
+            for name in all_user:
+                if regex_get or ban_type == 'regex':
+                    type_d = 'regex' if regex_get else ban_type
+
+                    try:
+                        re.compile(name)
+                    except:
+                        return re_error('/error/23')
                 else:
-                    if admin_check(1, 'ban (' + name + ')') != 1:
+                    type_d = None
+
+                if type_d:
+                    if admin_check(None, 'ban' + (' ' + type_d if type_d else '') + ' (' + name + ')') != 1:
                         return re_error('/error/3')
+                else:
+                    if name == ip:
+                        if admin_check('all', 'ban (' + name + ')') != 1:
+                            return re_error('/error/3')
+                    else:
+                        if admin_check(1, 'ban (' + name + ')') != 1:
+                            return re_error('/error/3')
 
-            ban_insert(
-                name,
-                end,
-                why,
-                login,
-                ip_check(),
-                type_d
-            )
+                ban_insert(
+                    name,
+                    end,
+                    why,
+                    login,
+                    ip_check(),
+                    type_d
+                )
 
             return redirect('/block_log')
         else:
-            curs.execute(db_change("select end, why from rb where block = ? and ongoing = '1' and band = ?"), [name, band])
+            curs.execute(db_change("select end, why from rb where block = ? and ongoing = '1' and band = ?"), [name, ban_type])
             end = curs.fetchall()
             if end:
                 main_name = name
                 b_now = load_lang('release')
                 now = '(' + b_now + ')'
                 
-                if band != '':
+                if ban_type == 'regex':
                     action = 'action="/auth/give/ban_regex/' + url_pas(name) + '"'
                 else:
                     action = 'action="/auth/give/ban/' + url_pas(name) + '"'
@@ -79,13 +88,22 @@ def give_user_ban(name = None, ban_type = ''):
                 else:
                     data += '</ul><hr class="main_hr">'
             else:
-                main_name = load_lang('ban')
-                n_name = '<input placeholder="' + load_lang('name_or_ip_or_regex') + '" value="' + (name if name else '') + '" name="name" type="text"><hr class="main_hr">'
-                regex = '<input type="checkbox" name="regex" ' + ('checked' if band == 'regex' else '') + '> ' + load_lang('regex') + '<hr class="main_hr">'
+                if ban_type == 'multiple':
+                    main_name = load_lang('multiple_ban')
+                    n_name = '<textarea rows="25" placeholder="' + load_lang('name_or_ip_or_regex_multiple') + '" name="name"></textarea><hr class="main_hr">'
+                else:
+                    main_name = load_lang('ban')
+                    n_name = '<input placeholder="' + load_lang('name_or_ip_or_regex') + '" value="' + (name if name else '') + '" name="name"><hr class="main_hr">'
+                
+                regex = '<input type="checkbox" name="regex" ' + ('checked' if ban_type == 'regex' else '') + '> ' + load_lang('regex') + '<hr class="main_hr">'
                 plus = '<input type="checkbox" name="login"> ' + load_lang('login_able') + '<hr class="main_hr">'
                 now = 0
                 b_now = load_lang('ban')
-                action = 'action="/auth/give/ban"'
+                
+                if ban_type == 'multiple':
+                    action = 'action="/auth/give/ban_multiple"'
+                else:
+                    action = 'action="/auth/give/ban"'
 
                 time_data = [
                     ['86400', load_lang('1_day')],