Преглед изворни кода

설정 버그 수정, 전역 ACL 2개 추가

Surplus_Up (2DU) пре 6 година
родитељ
комит
e143594e75
6 измењених фајлова са 87 додато и 74 уклоњено
  1. 2 0
      language/en-US.json
  2. 3 1
      language/ko-KR.json
  3. 1 1
      route/func_upload.py
  4. 55 47
      route/setting.py
  5. 24 23
      route/tool/func.py
  6. 2 2
      route/topic.py

+ 2 - 0
language/en-US.json

@@ -224,6 +224,8 @@
                 "wiki_skin" : "Wiki[s] Skin",
                 "default_acl" : "Default edit ACL",
                 "default_discussion_acl" : "Default discussion ACL",
+                "upload_acl" : "Upload ACL",
+                "default_view_acl" : "Default document viewed ACL",
                 "no_register" : "No sign-up",
                 "hide_ip" : "Hide IP",
                 "wiki_host" : "Wiki[s] host",

+ 3 - 1
language/ko-KR.json

@@ -304,5 +304,7 @@
     "defalut_edit_help" : "이곳에 내용을 써주세요",
     "many_delete" : "대량 삭제",
     "many_delete_help" : "한 줄에 문서명 하나씩 적어주세요.",
-    "content" : "내용"
+    "content" : "내용",
+    "upload_acl" : "업로드 ACL",
+    "default_view_acl" : "기본 보기 ACL"
 }

+ 1 - 1
route/func_upload.py

@@ -3,7 +3,7 @@ from .tool.func import *
 def func_upload_2(conn):
     curs = conn.cursor()
 
-    if ban_check() == 1:
+    if acl_check(None, 'upload') == 1:
         return re_error('/ban')
     
     if flask.request.method == 'POST':

+ 55 - 47
route/setting.py

@@ -48,7 +48,9 @@ def setting_2(conn, num):
             13 : 'email_have', 
             14 : 'discussion', 
             15 : 'encode', 
-            16 : 'host'
+            16 : 'host',
+            17 : 'upload_acl',
+            18 : 'all_view_acl'
         }
         n_list = {
             0 : 'Wiki', 
@@ -67,7 +69,9 @@ def setting_2(conn, num):
             13 : '', 
             14 : 'normal', 
             15 : 'sha3', 
-            16 : '0.0.0.0'
+            16 : '0.0.0.0',
+            17 : '',
+            18 : ''
         }
         
         if flask.request.method == 'POST':
@@ -97,50 +101,46 @@ def setting_2(conn, num):
 
             conn.commit()
             
-            div = ''
+            acl_div = ['', '', '', '', '']
             acl_list = ['normal', 'user', 'admin', 'owner', '50_edit', 'email']
-            for i in acl_list:
-                if i == d_list[6]:
-                    div = '<option value="' + i + '">' + i + '</option>' + div
+            encode_data = ['sha256', 'sha3']
+            for i in range(0, 5):
+                if i == 0:
+                    acl_num = 6
+                elif i == 1:
+                    acl_num = 14
+                elif i == 2:
+                    acl_num = 17
+                elif i == 4:
+                    acl_num = 18
                 else:
-                    div += '<option value="' + i + '">' + i + '</option>'
-
-            div4 = ''
-            for i in acl_list:
-                if i == d_list[14]:
-                    div4 = '<option value="' + i + '">' + i + '</option>' + div4
+                    acl_num = 15
+
+                for acl_data in (encode_data if i == 3 else acl_list):
+                    if acl_data == d_list[acl_num]:
+                        acl_div[i] = '<option value="' + acl_data + '">' + acl_data + '</option>' + acl_div[i]
+                    else:
+                        acl_div[i] += '<option value="' + acl_data + '">' + acl_data + '</option>'
+
+            check_box_div = ['', '', '']
+            for i in range(0, 3):
+                if i == 0:
+                    acl_num = 7
+                elif i == 1:
+                    acl_num = 8
                 else:
-                    div4 += '<option value="' + i + '">' + i + '</option>'
-
-            ch_1 = ''
-            if d_list[7]:
-                ch_1 = 'checked="checked"'
+                    acl_num = 13
 
-            ch_2 = ''
-            if d_list[8]:
-                ch_2 = 'checked="checked"'
-            
-            ch_3 = ''
-            if d_list[13]:
-                ch_3 = 'checked="checked"'
-
-            div2 = load_skin(d_list[5])
+                if d_list[acl_num]:
+                    check_box_div[i] = 'checked="checked"'
 
-            div3 =''
+            branch_div =''
             if d_list[12] == 'stable':
-                div3 += '<option value="stable">stable</option>'
-                div3 += '<option value="master">master</option>'
+                branch_div += '<option value="stable">stable</option>'
+                branch_div += '<option value="master">master</option>'
             else:
-                div3 += '<option value="master">master</option>'
-                div3 += '<option value="stable">stable</option>'
-                
-            div5 =''
-            encode_data = ['sha256', 'sha3']
-            for i in encode_data:
-                if d_list[15] == i:
-                    div5 = '<option value="' + i + '">' + i + '</option>' + div5
-                else:
-                    div5 += '<option value="' + i + '">' + i + '</option>'
+                branch_div += '<option value="master">master</option>'
+                branch_div += '<option value="stable">stable</option>'
 
             return easy_minify(flask.render_template(skin_check(), 
                 imp = [load_lang('main_setting'), wiki_set(), custom(), other2([0, 0])],
@@ -172,21 +172,29 @@ def setting_2(conn, num):
                         <hr class=\"main_hr\">
                         <span>''' + load_lang('wiki_skin') + '''</span>
                         <hr class=\"main_hr\">
-                        <select name="skin">''' + div2 + '''</select>
+                        <select name="skin">''' + load_skin(d_list[5]) + '''</select>
                         <hr class=\"main_hr\">
                         <span>''' + load_lang('default_acl') + '</span> <a href="/acl/TEST">(' + load_lang('reference') + ''')</a>
                         <hr class=\"main_hr\">
-                        <select name="edit">''' + div + '''</select>
+                        <select name="edit">''' + acl_div[0] + '''</select>
                         <hr class=\"main_hr\">
                         <span>''' + load_lang('default_discussion_acl') + '''</span>
                         <hr class=\"main_hr\">
-                        <select name="discussion">''' + div4 + '''</select>
+                        <select name="discussion">''' + acl_div[1] + '''</select>
+                        <hr class=\"main_hr\">
+                        <span>''' + load_lang('upload_acl') + '''</span>
+                        <hr class=\"main_hr\">
+                        <select name="upload_acl">''' + acl_div[2] + '''</select>
+                        <hr class=\"main_hr\">
+                        <span>''' + load_lang('default_view_acl') + '''</span>
+                        <hr class=\"main_hr\">
+                        <select name="all_view_acl">''' + acl_div[4] + '''</select>
                         <hr class=\"main_hr\">
-                        <input type="checkbox" name="reg" ''' + ch_1 + '''> ''' + load_lang('no_register') + '''
+                        <input type="checkbox" name="reg" ''' + check_box_div[0] + '''> ''' + load_lang('no_register') + '''
                         <hr class=\"main_hr\">
-                        <input type="checkbox" name="ip_view" ''' + ch_2 + '''> ''' + load_lang('hide_ip') + '''
+                        <input type="checkbox" name="ip_view" ''' + check_box_div[1] + '''> ''' + load_lang('hide_ip') + '''
                         <hr class=\"main_hr\">
-                        <input type="checkbox" name="email_have" ''' + ch_3 + '''> ''' + load_lang('email_required') + ' <a href="/setting/6">{' + load_lang('google_imap_required') + '''}</a>
+                        <input type="checkbox" name="email_have" ''' + check_box_div[2] + '''> ''' + load_lang('email_required') + ' <a href="/setting/6">{' + load_lang('google_imap_required') + '''}</a>
                         <hr class=\"main_hr\">
                         <span>''' + load_lang('wiki_host') + '''</span>
                         <hr class=\"main_hr\">
@@ -202,11 +210,11 @@ def setting_2(conn, num):
                         <hr class=\"main_hr\">
                         <span>''' + load_lang('update_branch') + '''</span>
                         <hr class=\"main_hr\">
-                        <select name="update">''' + div3 + '''</select>
+                        <select name="update">''' + branch_div + '''</select>
                         <hr class=\"main_hr\">
                         <span>''' + load_lang('encryption_method') + '''</span>
                         <hr class=\"main_hr\">
-                        <select name="encode">''' + div5 + '''</select>
+                        <select name="encode">''' + acl_div[3] + '''</select>
                         <hr class=\"main_hr\">
                         <button id="save" type="submit">''' + load_lang('save') + '''</button>
                     </form>

+ 24 - 23
route/tool/func.py

@@ -712,8 +712,7 @@ def custom():
     return ['', '', user_icon, user_head, email, user_name, user_admin, user_ban, user_notice, user_acl_list]
 
 def load_skin(data = '', set_n = 0):
-    div2 = ''
-    div3 = []
+    skin_return_data = ''
     system_file = ['main_css']
 
     if data == '':
@@ -725,42 +724,43 @@ def load_skin(data = '', set_n = 0):
         if not data:
             curs.execute(db_change('select data from other where name = "skin"'))
             data = curs.fetchall()
-            if not data:
+            if not data or data[0][0] == '':
                 data = [['marisa']]
 
         if set_n == 0:
             for skin_data in os.listdir(os.path.abspath('views')):
                 if not skin_data in system_file:
+                    print(data[0][0])
                     if data[0][0] == skin_data:
-                        div2 = '<option value="' + skin_data + '">' + skin_data + '</option>' + div2
+                        skin_return_data = '<option value="' + skin_data + '">' + skin_data + '</option>' + skin_return_data
                     else:
-                        div2 += '<option value="' + skin_data + '">' + skin_data + '</option>'
+                        skin_return_data += '<option value="' + skin_data + '">' + skin_data + '</option>'
         else:
-            div2 = []
+            skin_return_data = []
             for skin_data in os.listdir(os.path.abspath('views')):
                 if not skin_data in system_file:
                     if data[0][0] == skin_data:
-                        div2 = [skin_data] + div2
+                        skin_return_data = [skin_data] + skin_return_data
                     else:
-                        div2 += [skin_data]
+                        skin_return_data += [skin_data]
     else:
         if set_n == 0:
             for skin_data in os.listdir(os.path.abspath('views')):
                 if not skin_data in system_file:
                     if data == skin_data:
-                        div2 = '<option value="' + skin_data + '">' + skin_data + '</option>' + div2
+                        skin_return_data = '<option value="' + skin_data + '">' + skin_data + '</option>' + skin_return_data
                     else:
-                        div2 += '<option value="' + skin_data + '">' + skin_data + '</option>'
+                        skin_return_data += '<option value="' + skin_data + '">' + skin_data + '</option>'
         else:
-            div2 = []
+            skin_return_data = []
             for skin_data in os.listdir(os.path.abspath('views')):
                 if not skin_data in system_file:
                     if data == skin_data:
-                        div2 = [skin_data] + div2
+                        skin_return_data = [skin_data] + skin_return_data
                     else:
-                        div2 += [skin_data]
+                        skin_return_data += [skin_data]
 
-    return div2
+    return skin_return_data
 
 def acl_check(name = 'test', tool = '', sub = 'test'):
     ip = ip_check()
@@ -768,7 +768,7 @@ def acl_check(name = 'test', tool = '', sub = 'test'):
     if ban_check() == 1:
         return 1
 
-    if tool != 'topic' and tool != 'render':
+    if tool != 'topic' and tool != 'render' and name:
         acl_c = re.search("^user:((?:(?!\/).)*)", name)
         if acl_c:
             acl_n = acl_c.groups()
@@ -798,7 +798,7 @@ def acl_check(name = 'test', tool = '', sub = 'test'):
 
     if tool == '':
         end = 3
-    elif tool == 'topic':
+    elif tool == 'topic' or tool == 'render':
         end = 2
     else:
         end = 1
@@ -807,30 +807,31 @@ def acl_check(name = 'test', tool = '', sub = 'test'):
         if tool == '':
             if i == 0:
                 curs.execute(db_change("select decu from acl where title = ?"), [name])
-                acl_data = curs.fetchall()
             elif i == 1:
                 curs.execute(db_change('select data from other where name = "edit"'))
-                acl_data = curs.fetchall()
             else:
                 curs.execute(db_change("select view from acl where title = ?"), [name])
-                acl_data = curs.fetchall()
 
             num = 5
         elif tool == 'topic':
             if i == 0:
                 curs.execute(db_change("select dis from acl where title = ?"), [name])
-                acl_data = curs.fetchall()
             else:
                 curs.execute(db_change('select data from other where name = "discussion"'))
-                acl_data = curs.fetchall()
 
             num = 3
+        elif tool == 'upload':
+            curs.execute(db_change("select data from other where name = 'upload_acl'"))
+            num = 5
         else:
-            curs.execute(db_change("select view from acl where title = ?"), [name])
-            acl_data = curs.fetchall()
+            if i == 0:
+                curs.execute(db_change("select view from acl where title = ?"), [name])
+            if i == 1:
+                curs.execute(db_change("select data from other where name = 'all_view_acl'"))
 
             num = 5
 
+        acl_data = curs.fetchall()
         if acl_data and acl_data[0][0] != 'normal':
             if acl_data[0][0] == 'user':
                 if ip_or_user(ip) == 1:

+ 2 - 2
route/topic.py

@@ -11,7 +11,7 @@ def topic_2(conn, topic_num):
         name = topic_change_data[0]
         sub = topic_change_data[1]
 
-    ban = topic_check(name, sub)
+    ban = acl_check(name, 'topic', sub)
     admin = admin_check(3)
 
     curs.execute(db_change("select id from topic where title = ? and sub = ? limit 1"), [name, sub])
@@ -98,7 +98,7 @@ def topic_2(conn, topic_num):
     
         curs.execute(db_change("select stop from rd where title = ? and sub = ? and stop != ''"), [name, sub])
         close_data = curs.fetchall()
-        if (close_data and admin != 1) or topic_check(name, sub) == 1:
+        if (close_data and admin != 1) or ban == 1:
             display = 'display: none;'
         else:
             display = ''