잉여개발기 (SPDV) 3 лет назад
Родитель
Сommit
06282f4339
4 измененных файлов с 72 добавлено и 41 удалено
  1. 22 34
      route/main_func_setting_robot.py
  2. 16 4
      route/main_view_file.py
  3. 33 2
      route/tool/func.py
  4. 1 1
      version.json

+ 22 - 34
route/main_func_setting_robot.py

@@ -6,52 +6,38 @@ def main_func_setting_robot():
 
         if admin_check() != 1:
             return re_error('/ban')
+
+        curs.execute(db_change("select data from other where name = 'robot'"))
+        db_data = curs.fetchall()
+        if db_data:
+            data = db_data[0][0]
+        else:
+            data = ''
+
+        curs.execute(db_change("select data from other where name = 'robot_default'"))
+        db_data_2 = curs.fetchall()
+        if db_data_2 and db_data_2[0][0] != '':
+            default_data = 'checked'
+        else:
+            default_data = ''
         
         if flask.request.method == 'POST':
-            curs.execute(db_change("select name from other where name = 'robot'"))
-            if curs.fetchall():
+            if db_data:
                 curs.execute(db_change("update other set data = ? where name = 'robot'"), [flask.request.form.get('content', '')])
             else:
                 curs.execute(db_change("insert into other (name, data) values ('robot', ?)"), [flask.request.form.get('content', '')])
 
-            conn.commit()
+            if db_data_2:
+                curs.execute(db_change("update other set data = ? where name = 'robot_default'"), [flask.request.form.get('default', '')])
+            else:
+                curs.execute(db_change("insert into other (name, data) values ('robot_default', ?)"), [flask.request.form.get('default', '')])
 
-            fw = open('./robots.txt', 'w', encoding='utf8')
-            fw.write(re.sub('\r\n', '\n', flask.request.form.get('content', '')))
-            fw.close()
+            conn.commit()
 
             admin_check(None, 'edit_set (robot)')
 
             return redirect('/setting/robot')
         else:
-            if not os.path.exists('robots.txt'):
-                curs.execute(db_change('select data from other where name = "robot"'))
-                robot_test = curs.fetchall()
-                if robot_test:
-                    fw_test = open('./robots.txt', 'w', encoding='utf8')
-                    fw_test.write(re.sub('\r\n', '\n', robot_test[0][0]))
-                    fw_test.close()
-                else:
-                    fw_test = open('./robots.txt', 'w', encoding='utf8')
-                    fw_test.write('User-agent: *\nDisallow: /\nAllow: /$\nAllow: /w/')
-                    fw_test.close()
-
-                    curs.execute(db_change('insert into other (name, data) values ("robot", "User-agent: *\nDisallow: /\nAllow: /$\nAllow: /w/")'))
-
-            curs.execute(db_change("select data from other where name = 'robot'"))
-            robot = curs.fetchall()
-            if robot:
-                data = robot[0][0]
-            else:
-                data = ''
-
-            f = open('./robots.txt', encoding='utf8')
-            lines = f.readlines()
-            f.close()
-
-            if not data or data == '':
-                data = ''.join(lines)
-
             return easy_minify(flask.render_template(skin_check(),
                 imp = ['robots.txt', wiki_set(), wiki_custom(), wiki_css([0, 0])],
                 data = '''
@@ -60,6 +46,8 @@ def main_func_setting_robot():
                     <form method="post">
                         <textarea rows="25" name="content">''' + html.escape(data) + '''</textarea>
                         <hr class="main_hr">
+                        <input type="checkbox" name="default" ''' + default_data + '''> ''' + load_lang('default') + '''
+                        <hr class="main_hr">
                         <button id="opennamu_js_save" type="submit">''' + load_lang('save') + '''</button>
                     </form>
                 ''',

+ 16 - 4
route/main_view_file.py

@@ -3,12 +3,24 @@ from .main_error_404 import main_error_404
 
 def main_view_file(data = ''):
     with get_db_connect() as conn:
-        if data == 'robots.txt' and not os.path.exists('robots.txt'):
-            return flask.Response('User-agent: *\nDisallow: /\nAllow: /$\nAllow: /w/', mimetype = 'text/plain')
+        if data == 'robots.txt':
+            curs = conn.cursor()
+
+            curs.execute(db_change("select data from other where name = 'robot_default'"))
+            db_data = curs.fetchall()
+            if db_data and db_data[0][0] != '':
+                return flask.Response(get_default_robots_txt(), mimetype = 'text/plain')
+            else:
+                curs.execute(db_change("select data from other where name = 'robot'"))
+                db_data = curs.fetchall()
+                if db_data:
+                    return flask.Response(db_data[0][0], mimetype = 'text/plain')
+                else:
+                    return flask.Response(get_default_robots_txt(), mimetype = 'text/plain')
         elif os.path.exists(data):
             if re.search(r'\.txt$', data, flags = re.I):
                 return flask.send_from_directory('./', data, mimetype = 'text/plain')
             else:
                 return flask.send_from_directory('./', data, mimetype = 'text/xml')
-
-        return main_error_404()
+        else:
+            return main_error_404()

+ 33 - 2
route/tool/func.py

@@ -604,6 +604,19 @@ def update(ver_num, set_data):
     if ver_num < 3500114:
         curs.execute(db_change('delete from alarm'))
 
+    if ver_num < 3500354:
+        curs.execute(db_change("select data from other where name = 'robot'"))
+        db_data = curs.fetchall()
+        if db_data:
+            robot_default = '' + \
+                'User-agent: *\n' + \
+                'Disallow: /\n' + \
+                'Allow: /$\n' + \
+                'Allow: /w/' + \
+            ''
+            if db_data[0][0] == robot_default:
+                curs.execute(db_change("insert into other (name, data) values ('robot_default', 'on')"))
+
     conn.commit()
     
     # 아이피 상태인 이메일 제거 예정
@@ -685,6 +698,22 @@ def set_init():
 def get_default_admin_group():
     return ['owner', 'ban']
 
+def get_default_robots_txt():
+    data = '' + \
+        'User-agent: *\n' + \
+        'Disallow: /\n' + \
+        'Allow: /$\n' + \
+        'Allow: /w/' + \
+    ''
+
+    if os.path.exists('sitemap.xml'):
+        data += '' + \
+            '\n' + \
+            'Sitemap: /sitemap.xml' + \
+        ''
+
+    return data
+
 def get_user_title_list():
     # default
     user_title = {
@@ -1238,8 +1267,10 @@ def render_set(doc_name = '', doc_data = '', data_type = 'view', data_in = '', d
                     'toc' : load_lang('toc'),
                     'category' : load_lang('category')
                 }
-                get_class_render = class_do_render(conn, render_lang_data)
-                return get_class_render.do_render(doc_name, doc_data, data_type, data_in)
+
+                get_class_render = class_do_render(conn, render_lang_data).do_render(doc_name, doc_data, data_type, data_in)
+
+                return get_class_render
             else:
                 return 'HTTP Request 404'
 

+ 1 - 1
version.json

@@ -1,7 +1,7 @@
 {
     "beta" : {
         "r_ver" : "v3.4.5 (stable2) (beta3) (dev54)",
-        "c_ver" : "3500114",
+        "c_ver" : "3500354",
         "s_ver" : "3500110"
     }
 }