Parcourir la source

Merge pull request #2026 from openNAMU/dev

버그 수정 및 UA, 차단 관련 수정
잉여개발기 il y a 2 ans
Parent
commit
6715841d14
8 fichiers modifiés avec 122 ajouts et 107 suppressions
  1. 47 0
      create_service.sh
  2. 2 2
      emergency_tool.py
  3. 43 65
      route/give_user_ban.py
  4. 0 3
      route/recent_block.py
  5. 22 29
      route/tool/func.py
  6. 2 2
      route/tool/func_render.py
  7. 2 2
      version.json
  8. 4 4
      views/ringo/index.html

+ 47 - 0
create_service.sh

@@ -0,0 +1,47 @@
+#!/bin/Bash
+
+#1단계 : 작업 디렉토리 & 서비스 명 받기
+read -p "설치된 디렉토리 (ex: /mnt/openNAMU) : " working_directory
+echo $working_directory
+
+read -p "원하는 서비스명 (ex: opennamu): " service_name
+echo $service_name
+
+read -p "설명 (ex: OpenNAMU 서비스입니다): " description
+echo $description
+
+read -p "로그위치 (ex: /var/log/openNAMU.log) : " log_path
+echo $log_path
+
+
+#2단계 : 파일제작
+cat <<EOF > /lib/systemd/system/${service_name}.service
+[Unit]
+Description=$description
+
+[Service]
+Type=simple
+
+WorkingDirectory=$working_directory
+ExecStart=/usr/bin/python3 $working_directory/app.py
+Restart=on-failure
+PIDFile=/run/$service_name.pid
+
+#rsyslog 사용
+#StandardOutput=syslog
+#StandardError=syslog
+#SyslogIdentifier=$service_name
+
+#systemctl 245 이후 로깅
+StandardOutput=append:$log_path
+StandardError=append:$log_path
+
+[Install]
+WantedBy=multi-user.target
+EOF
+
+
+#3단계 : 서비스 확인
+systemctl daemon-reload 
+systemctl start $service_name
+systemctl status $service_name

+ 2 - 2
emergency_tool.py

@@ -103,8 +103,8 @@ elif what_i_do == '3':
 
     curs.execute(
         db_change(
-            "insert into rb (block, end, today, blocker, why, band) "
-            "values (?, ?, ?, ?, ?, ?)"
+            "insert into rb (block, end, today, blocker, why, band, ongoing, login) "
+            "values (?, ?, ?, ?, ?, ?, '', '')"
         ),
         [
             user_data,

+ 43 - 65
route/give_user_ban.py

@@ -14,13 +14,18 @@ def give_user_ban(name = None, ban_type = ''):
                 return re_error('/error/3')
 
         if flask.request.method == 'POST':
-            end = flask.request.form.get('second', '0')
-            end = end if end else '0'
+            time_limit = flask.request.form.get('date', '')
+            if re.search(r'^[0-9]{4}-[0-9]{2}-[0-9]{2}$', time_limit):
+                end = time_limit + ' 00:00:00'
+            else:
+                end = '0'
             
             regex_get = flask.request.form.get('regex', None)
             login = flask.request.form.get('login', '')
             why = flask.request.form.get('why', '')
 
+            release = flask.request.form.get('release', '')
+
             if ban_type == 'multiple':
                 all_user = re.findall(r'([^\n]+)\n', flask.request.form.get('name', 'test').replace('\r', '') + '\n')
             else:
@@ -57,82 +62,55 @@ def give_user_ban(name = None, ban_type = ''):
                     why,
                     login,
                     ip_check(),
-                    type_d
+                    type_d,
+                    1 if release != '' else 0
                 )
 
             return redirect('/block_log')
         else:
-            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 ban_type == 'regex':
-                    action = 'action="/auth/give/ban_regex/' + url_pas(name) + '"'
-                else:
-                    action = 'action="/auth/give/ban/' + url_pas(name) + '"'
-
-                if end[0][0] == '':
-                    data = '<ul class="opennamu_ul"><li>' + load_lang('limitless') + '</li>'
-                else:
-                    data = '<ul class="opennamu_ul"><li>' + load_lang('period') + ' : ' + end[0][0] + '</li>'
-
-                curs.execute(db_change("select block from rb where block = ? and login = 'O' and ongoing = '1'"), [name])
-                if curs.fetchall():
-                    data += '<li>' + load_lang('login_able') + '</li>'
+            if ban_type == 'multiple':
+                main_name = load_lang('multiple_ban')
+                n_name = '<textarea class="opennamu_textarea_500" 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">'
 
-                if end[0][1] != '':
-                    data += '<li>' + load_lang('why') + ' : ' + end[0][1] + '</li></ul><hr class="main_hr">'
-                else:
-                    data += '</ul><hr class="main_hr">'
+            now = 0
+            
+            if ban_type == 'multiple':
+                action = 'action="/auth/give/ban_multiple"'
             else:
-                if ban_type == 'multiple':
-                    main_name = load_lang('multiple_ban')
-                    n_name = '<textarea class="opennamu_textarea_500" 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')],
-                    ['432000', load_lang('5_day')],
-                    ['2592000', load_lang('30_day')],
-                    ['15552000', load_lang('180_day')],
-                    ['31104000', load_lang('360_day')],
-                    ['0', load_lang('limitless')]
-                ]
-                insert_data = ''
-                for i in time_data:
-                    insert_data += '<a href="javascript:opennamu_insert_v(\'second\', \'' + i[0] + '\')">(' + i[1] + ')</a> '
+            date_value = ''
+            info_data = ''
+            if name:
+                curs.execute(db_change("select end from rb where block = ? and ongoing = '1'"), [name])
+                db_data = curs.fetchall()
+                if db_data and db_data[0][0] != '':
+                    date_value = db_data[0][0].split()[0]
 
-                data = n_name + '''
-                    ''' + regex + '''
-                    ''' + insert_data + '''
-                    <hr class="main_hr">
-                    <input placeholder="''' + load_lang('ban_period') + ''' (''' + load_lang('second') + ''')" name="second" id="second" type="text">
-                    <hr class="main_hr">
-                    <input placeholder="''' + load_lang('why') + '''" name="why" type="text">
+                info_data = '''
+                    <div id="opennamu_get_user_info">''' + html.escape(name) + '''</div>
                     <hr class="main_hr">
-                ''' + plus
+                '''
 
             return easy_minify(flask.render_template(skin_check(),
                 imp = [main_name, wiki_set(), wiki_custom(), wiki_css([now, 0])],
-                data = '''
+                data = info_data + '''
                     <form method="post" ''' + action + '''>
-                        ''' + data + '''
-                        <button type="submit">''' + b_now + '''</button>
+                        ''' + n_name + '''
+                        <input type="checkbox" name="regex" ''' + ('checked' if ban_type == 'regex' else '') + '> ' + load_lang('regex') + '''
+                        <hr class="main_hr">
+                        <input type="date" value="''' + date_value + '''" name="date" pattern="\\d{4}-\\d{2}-\\d{2}">
+                        <hr class="main_hr">
+                        <input placeholder="''' + load_lang('why') + '''" name="why" type="text">
+                        <hr class="main_hr">
+                        <input type="checkbox" name="login"> ''' + load_lang('login_able') + '''
+                        <hr class="main_hr">
+                        <input type="checkbox" name="release"> ''' + load_lang('release') + '''
+                        <hr class="main_hr">
+                        <button type="submit">''' + load_lang('save') + '''</button>
                     </form>
                 ''',
                 menu = [['manager', load_lang('return')]]

+ 0 - 3
route/recent_block.py

@@ -17,9 +17,6 @@ def recent_block_2(name = 'Test', tool = 'all'):
                     </tr>
         '''
 
-        curs.execute(db_change("update rb set ongoing = '' where end < ? and end != '' and ongoing = '1'"), [get_time()])
-        conn.commit()
-
         get_type = flask.request.args.get('type', '')
         sub_type = flask.request.args.get('s_type', '')
         if tool == 'all':

+ 22 - 29
route/tool/func.py

@@ -590,6 +590,11 @@ def update(ver_num, set_data):
             for db_data in select_data:
                 curs.execute(db_change("insert into user_set (id, name, data) values (?, ?, ?)"), [select_data[db_data][1], select_data[db_data][0], select_data[db_data][2]])
 
+        if ver_num < 3500374:
+            # ban 오류 해결
+            curs.execute(db_change("update rb set ongoing = '' where ongoing is null"))
+            curs.execute(db_change("update rb set login = '' where login is null"))
+
         conn.commit()
 
         print('Update completed')
@@ -2249,9 +2254,19 @@ def do_edit_filter(data):
             for data_list in curs.fetchall():
                 match = re.compile(data_list[0], re.I)
                 if match.search(data):
+                    end = '0' if data_list[1] == 'X' else data_list[1]
+
+                    if end != '0':
+                        end = int(number_check(end))
+                        time = datetime.datetime.now()
+                        plus = datetime.timedelta(seconds = end)
+                        r_time = (time + plus).strftime("%Y-%m-%d %H:%M:%S")
+                    else:
+                        r_time = '0'
+                
                     ban_insert(
                         ip_check(),
-                        '0' if data_list[1] == 'X' else data_list[1],
+                        r_time,
                         'edit filter',
                         None,
                         'tool:edit filter'
@@ -2402,25 +2417,16 @@ def ua_plus(u_id, u_ip, u_agent, time):
                 time
             ])
 
-def ban_insert(name, end, why, login, blocker, type_d = None):
+def ban_insert(name, end, why, login, blocker, type_d = None, release = 0):
     with get_db_connect() as conn:
         curs = conn.cursor()
 
         now_time = get_time()
         band = type_d if type_d else ''
 
-        curs.execute(db_change(
-            "update rb set ongoing = '' where end < ? and end != '' and ongoing = '1'"
-        ), [now_time])
-        curs.execute(db_change("" + \
-            "select block from rb " + \
-            "where ((end > ? and end != '') or end = '') and block = ? and " + \
-            "band = ? and ongoing = '1'" + \
-        ""), [now_time, name, band])
-        if curs.fetchall():
-            curs.execute(db_change(
-                "insert into rb (block, end, today, blocker, why, band) values (?, ?, ?, ?, ?, ?)"
-            ), [
+        curs.execute(db_change("update rb set ongoing = '' where block = ? and band = ? and ongoing = '1'"), [name, band])
+        if release == 1:
+            curs.execute(db_change("insert into rb (block, end, today, blocker, why, band, ongoing, login) values (?, ?, ?, ?, ?, ?, '', '')"), [
                 name,
                 'release',
                 now_time,
@@ -2428,24 +2434,11 @@ def ban_insert(name, end, why, login, blocker, type_d = None):
                 '',
                 band
             ])
-            curs.execute(db_change(
-                "update rb set ongoing = '' where block = ? and band = ? and ongoing = '1'"
-            ), [name, band])
         else:
             login = 'O' if login != '' else ''
+            r_time = end if end != '0' else ''
 
-            if end != '0':
-                end = int(number_check(end))
-                time = datetime.datetime.now()
-                plus = datetime.timedelta(seconds = end)
-                r_time = (time + plus).strftime("%Y-%m-%d %H:%M:%S")
-            else:
-                r_time = ''
-
-            curs.execute(db_change(
-                "insert into rb (block, end, today, blocker, why, band, ongoing, login) " + \
-                "values (?, ?, ?, ?, ?, ?, '1', ?)"
-            ), [
+            curs.execute(db_change("insert into rb (block, end, today, blocker, why, band, ongoing, login) values (?, ?, ?, ?, ?, ?, '1', ?)"), [
                 name, 
                 r_time, 
                 now_time, 

+ 2 - 2
route/tool/func_render.py

@@ -63,7 +63,7 @@ class class_do_render:
             data_end[0] = re.sub(r'&lt;(topic_a(?:_post|_thread)?)&gt;((?:(?!&lt;\/topic_a(?:_post|_thread)?&gt;).)+)&lt;\/topic_a(?:_post|_thread)?&gt;', do_thread_a_change, data_end[0])
             data_end[0] = re.sub(r'&lt;topic_call&gt;@(?P<in>(?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;', '<a href="/w/user:\\g<in>">@\\g<in></a>', data_end[0])
 
-        if data_type == 'backlink':
+        if data_type == 'backlink' and data_in == '':
             curs.execute(db_change("delete from back where link = ?"), [doc_name])
             curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
 
@@ -72,7 +72,7 @@ class class_do_render:
 
             backlink = data_end[2]['backlink'] if 'backlink' in data_end[2] else []
             if backlink != []:
-                curs.executemany(db_change("insert into back (link, title, type, data) values (?, ?, ?, ?)"), data_end[2]['backlink'])
+                curs.executemany(db_change("insert into back (link, title, type, data) values (?, ?, ?, ?)"), backlink)
                 curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
 
             link_count = 0

+ 2 - 2
version.json

@@ -1,7 +1,7 @@
 {
     "beta" : {
-        "r_ver" : "v3.4.6-RC5-dev77",
-        "c_ver" : "3500373",
+        "r_ver" : "v3.4.6-RC5-dev78",
+        "c_ver" : "3500374",
         "s_ver" : "3500112"
     }
 }

+ 4 - 4
views/ringo/index.html

@@ -240,12 +240,12 @@
             </div>
             <div id="nav_bar">
                 <div id="go_top">
-                    <a href="#logo">
+                    <a href="#main">
                         <span class="iconify" data-icon="ic:baseline-arrow-upward" data-inline="true"></span>
                     </a>
                 </div>
                 <div id="go_bottom">
-                    <a href="#b_logo">
+                    <a href="#footer">
                         <span class="iconify" data-icon="ic:baseline-arrow-downward" data-inline="true"></span>
                     </a>
                 </div>
@@ -256,11 +256,11 @@
                 </div>
             </div>
         </aside>
-        <footer class="only_mobile">
+        <footer class="only_mobile" id="footer">
             {{imp[1][1]|safe}}
             <br>
             <br>
             <a href="https://github.com/openNAMU/openNAMU"><img id="b_logo" src="/views/main_css/file/logo.svg"></a>
         </footer>
     </body>
-</html>
+</html>