Browse Source

완전 차단 사이트 접근 차단 추가

https://github.com/openNAMU/openNAMU/issues/2284
잉여개발기 (SPDV) 2 years ago
parent
commit
5b78911f6f
5 changed files with 47 additions and 11 deletions
  1. 2 0
      lang/en-US.json
  2. 3 1
      lang/ko-KR.json
  3. 6 0
      route/give_user_ban.py
  4. 32 10
      route_go/route/tool/acl_and_auth.go
  5. 4 0
      route_go/route/tool/ip_parser.go

+ 2 - 0
lang/en-US.json

@@ -145,6 +145,8 @@
     "ban" : "Block",
     "blocked" : "Blocked user",
     "release" : "Unblock",
+    "completely_ban" : "Completely block",
+    "dont_come_this_site" : "Site access block",
     
     "_comment_" : "Func",
     "wiki_restart" : "Restart wiki engine",

+ 3 - 1
lang/ko-KR.json

@@ -646,5 +646,7 @@
     "edit_bottom_compulsion_pass_authority": "편집 사유 필수 넘기기 권한",
     "404_page_setting": "404 페이지 설정",
     "404_page": "아래의 입력을 404 페이지로 사용",
-    "404_file": "루트 폴더 안의 404.html 사용"
+    "404_file": "루트 폴더 안의 404.html 사용",
+    "completely_ban": "완전 차단",
+    "dont_come_this_site": "사이트 접근 차단"
 }

+ 6 - 0
route/give_user_ban.py

@@ -39,6 +39,10 @@ def give_user_ban(name = None, ban_type = ''):
                 login = 'O'
             elif ban_option == 'edit_request_able':
                 login = 'E'
+            elif ban_option == 'completely_ban':
+                login = 'A'
+            elif ban_option == 'dont_come_this_site':
+                login = 'D'
             elif ban_option == 'release':
                 release = '1'
 
@@ -134,6 +138,8 @@ def give_user_ban(name = None, ban_type = ''):
                             <option value="">''' + get_lang(conn, 'default') + '''</option>
                             <option value="login_able">''' + get_lang(conn, 'login_able') + '''</option>
                             <option value="edit_request_able">''' + get_lang(conn, 'edit_request_able') + '''</option>
+                            <option value="completely_ban">''' + get_lang(conn, 'completely_ban') + '''</option>
+                            <option value="dont_come_this_site">''' + get_lang(conn, 'dont_come_this_site') + '''</option>
                             <option value="release">''' + get_lang(conn, 'release') + '''</option>
                         </select>
         

+ 32 - 10
route_go/route/tool/acl_and_auth.go

@@ -174,10 +174,26 @@ func Check_acl(db *sql.DB, name string, topic_number string, tool string, ip str
 	level_int, _ := strconv.Atoi(level)
 
 	get_ban := ""
+	ban_type := ""
 	if tool == "document_edit_request" {
-		get_ban = Get_user_ban(db, ip, "edit_request")[0]
+		temp_arr := Get_user_ban(db, ip, "edit_request")
+
+		get_ban = temp_arr[0]
+		ban_type = temp_arr[1]
 	} else {
-		get_ban = Get_user_ban(db, ip, "")[0]
+		temp_arr := Get_user_ban(db, ip, "")
+
+		get_ban = temp_arr[0]
+		ban_type = temp_arr[1]
+	}
+
+	if ban_type != "" {
+		ban_type_len := len(ban_type)
+		if ban_type_len == 1 {
+			ban_type = string(ban_type[0])
+		} else if ban_type_len == 2 {
+			ban_type = string(ban_type[1])
+		}
 	}
 
 	if tool == "" && name != "" {
@@ -770,6 +786,12 @@ func Check_acl(db *sql.DB, name string, topic_number string, tool string, ip str
 			}
 		}
 
+		if auth_info[acl_pass_auth] {
+			return true
+		} else if ban_type == "4" {
+			return false
+		}
+
 		if acl_data == "" {
 			if tool == "recaptcha" {
 				acl_data = "admin"
@@ -782,22 +804,22 @@ func Check_acl(db *sql.DB, name string, topic_number string, tool string, ip str
 
 		except_ban_tool_list := []string{"render", "topic_view", "bbs_view"}
 		if acl_data != "normal" {
-			if !(acl_data == "ban" || acl_data == "ban_admin") && !Arr_in_str(except_ban_tool_list, tool) {
-				if get_ban == "true" {
-					return false
+			if !(acl_data == "ban" || acl_data == "ban_admin") || ban_type == "3" {
+				if !Arr_in_str(except_ban_tool_list, tool) {
+					if get_ban == "true" {
+						return false
+					}
 				}
 			}
 
-			if auth_info[acl_pass_auth] {
-				return true
-			} else if acl_data == "all" || acl_data == "ban" {
+			if acl_data == "all" || acl_data == "ban" {
 				return true
 			} else if acl_data == "user" {
 				if !ip_or_user {
 					return true
 				}
 			} else if acl_data == "admin" {
-				if auth_info["admin_default_feature"] {
+				if auth_info["treat_as_admin"] {
 					return true
 				}
 			} else if acl_data == "50_edit" {
@@ -903,7 +925,7 @@ func Check_acl(db *sql.DB, name string, topic_number string, tool string, ip str
 					return true
 				}
 			} else if acl_data == "ban_admin" {
-				if auth_info["admin_default_feature"] || get_ban == "true" {
+				if auth_info["treat_as_admin"] || get_ban == "true" {
 					return true
 				}
 			} else if acl_data == "not_all" {

+ 4 - 0
route_go/route/tool/ip_parser.go

@@ -224,6 +224,10 @@ func Get_user_ban_type(ban_type string) string {
 		return "1"
 	} else if ban_type == "E" {
 		return "2"
+	} else if ban_type == "A" {
+		return "3"
+	} else if ban_type == "D" {
+		return "4"
 	} else {
 		return ""
 	}