Pārlūkot izejas kodu

Golang 파트에서도 IP 렌더링에 차단 확인 지원

잉여개발기 (SPDV) 2 gadi atpakaļ
vecāks
revīzija
fd4faf1ceb

+ 3 - 44
route/api_user_info.py

@@ -37,52 +37,11 @@ def api_user_info(user_name = ''):
         data_result['max_exp'] = level_data[2]
             
         # ban part
-        if ban_check(conn, user_name)[0] == 0:
+        ban = ban_check(conn, user_name)
+        if ban[0] == 0:
             data_result['ban'] = '0'
         else:
-            data_result['ban'] = {}
-            regex_ban = 0
-            
-            curs.execute(db_change("select login, block, end, why from rb where band = 'regex' and ongoing = '1'"))
-            for db_data in curs.fetchall():
-                if re.compile(db_data[1]).search(user_name):
-                    regex_ban = 1
-                    
-                    data_result['ban']['type'] = 'regex'
-                    if db_data[0] == 'E':
-                        data_result['ban']['login_able'] = '2'
-                    elif db_data[0] == 'O':
-                        data_result['ban']['login_able'] = '1'
-                    else:
-                        data_result['ban']['login_able'] = '0'
-                        
-                    if db_data[2] == '':
-                        data_result['ban']['period'] = '0'
-                    else:
-                        data_result['ban']['period'] = db_data[2]
-                        
-                    data_result['ban']['reason'] = db_data[3]
-                    
-                    break
-                    
-            if regex_ban == 0:
-                curs.execute(db_change("select login, block, end, why from rb where block = ? and ongoing = '1'"), [user_name])
-                db_data = curs.fetchall()
-                if db_data:
-                    data_result['ban']['type'] = 'normal'
-                    if db_data[0][0] == 'E':
-                        data_result['ban']['login_able'] = '2'
-                    elif db_data[0][0] == 'O':
-                        data_result['ban']['login_able'] = '1'
-                    else:
-                        data_result['ban']['login_able'] = '0'
-                        
-                    if db_data[0][2] == '':
-                        data_result['ban']['period'] = '0'
-                    else:
-                        data_result['ban']['period'] = db_data[0][2]
-                        
-                    data_result['ban']['reason'] = db_data[0][3]
+            data_result['ban'] = ban
         
         # user document part
         curs.execute(db_change("select title from data where title = ?"), ['user:' + user_name])

+ 1 - 1
route/tool/func.py

@@ -2164,7 +2164,7 @@ def ban_check(conn, ip = None, tool = ''):
     curs.execute(db_change("select data from user_set where id = ? and name = 'acl'"), [ip])
     db_data = curs.fetchall()
     if db_data and db_data[0][0] == 'ban':
-        return [1, 'b']
+        return [1, 'c']
 
     return [0, '']
 

BIN
route_go/bin/main.amd64.bin


BIN
route_go/bin/main.amd64.exe


BIN
route_go/bin/main.arm64.bin


BIN
route_go/bin/main.arm64.exe


+ 1 - 0
route_go/go.mod

@@ -5,6 +5,7 @@ go 1.21
 toolchain go1.22.0
 
 require (
+	github.com/3th1nk/cidr v0.2.0
 	github.com/dlclark/regexp2 v1.11.0
 	github.com/go-sql-driver/mysql v1.8.1
 	github.com/google/generative-ai-go v0.11.0

+ 3 - 0
route_go/go.sum

@@ -13,6 +13,8 @@ cloud.google.com/go/longrunning v0.5.6 h1:xAe8+0YaWoCKr9t1+aWe+OeQgN/iJK1fEgZSXm
 cloud.google.com/go/longrunning v0.5.6/go.mod h1:vUaDrWYOMKRuhiv6JBnn49YxCPz2Ayn9GqyjaBT8/mA=
 filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
 filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
+github.com/3th1nk/cidr v0.2.0 h1:81jjEknszD8SHPLVTPPk+BZjNVqq1ND2YXLSChl6Lrs=
+github.com/3th1nk/cidr v0.2.0/go.mod h1:XsSQnS4rEYyB2veDfnIGgViulFpIITPKtp3f0VxpiLw=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
@@ -91,6 +93,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
 github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=

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

@@ -6,6 +6,9 @@ import (
 	"regexp"
 	"strconv"
 	"strings"
+
+	"github.com/3th1nk/cidr"
+	"github.com/dlclark/regexp2"
 )
 
 func IP_or_user(ip string) bool {
@@ -274,6 +277,144 @@ func IP_menu(db *sql.DB, db_set map[string]string, ip string, my_ip string, opti
 	return menu
 }
 
+func Get_user_ban_type(ban_type string) string {
+	if ban_type == "O" {
+		return "1"
+	} else if ban_type == "E" {
+		return "2"
+	} else {
+		return ""
+	}
+}
+
+func Get_user_ban(db *sql.DB, db_set map[string]string, ip string, tool string) []string {
+	if Get_user_auth(db, db_set, ip) != "" {
+		return []string{"", ""}
+	}
+
+	rows, err := db.Query(DB_change(db_set, "select login, block from rb where band = 'regex' and ongoing = '1'"))
+	if err != nil {
+		log.Fatal(err)
+	}
+	defer rows.Close()
+
+	for rows.Next() {
+		var login string
+		var block string
+
+		err := rows.Scan(&login, &block)
+		if err != nil {
+			log.Fatal(err)
+		}
+
+		ban_type := Get_user_ban_type(login)
+
+		r := regexp2.MustCompile(block, 0)
+		if m, _ := r.FindStringMatch(ip); m != nil {
+			if tool == "login" {
+				if ban_type != "1" {
+					return []string{"true", "a" + ban_type}
+				}
+			} else if tool == "edit_request" {
+				if ban_type != "2" {
+					return []string{"true", "a" + ban_type}
+				}
+			} else {
+				return []string{"true", "a" + ban_type}
+			}
+		}
+	}
+
+	if IP_or_user(ip) {
+		rows, err = db.Query(DB_change(db_set, "select login, block from rb where band = 'cidr' and ongoing = '1'"))
+		if err != nil {
+			log.Fatal(err)
+		}
+		defer rows.Close()
+
+		for rows.Next() {
+			var login string
+			var block string
+
+			err := rows.Scan(&login, &block)
+			if err != nil {
+				log.Fatal(err)
+			}
+
+			ban_type := Get_user_ban_type(login)
+
+			c, _ := cidr.Parse(block)
+			if c.Contains(ip) {
+				if tool == "login" {
+					if ban_type != "1" {
+						return []string{"true", "b" + ban_type}
+					}
+				} else if tool == "edit_request" {
+					if ban_type != "2" {
+						return []string{"true", "b" + ban_type}
+					}
+				} else {
+					return []string{"true", "b" + ban_type}
+				}
+			}
+		}
+	}
+
+	stmt, err := db.Prepare(DB_change(db_set, "select login from rb where block = ? and band = '' and ongoing = '1'"))
+	if err != nil {
+		log.Fatal(err)
+	}
+	defer stmt.Close()
+
+	var login string
+
+	err = stmt.QueryRow(ip).Scan(&login)
+	if err != nil {
+		if err == sql.ErrNoRows {
+
+		} else {
+			log.Fatal(err)
+		}
+	} else {
+		ban_type := Get_user_ban_type(login)
+
+		if tool == "login" {
+			if ban_type != "1" {
+				return []string{"true", ban_type}
+			}
+		} else if tool == "edit_request" {
+			if ban_type != "2" {
+				return []string{"true", ban_type}
+			}
+		} else {
+			return []string{"true", ban_type}
+		}
+	}
+
+	stmt, err = db.Prepare(DB_change(db_set, "select data from user_set where id = ? and name = 'acl'"))
+	if err != nil {
+		log.Fatal(err)
+	}
+	defer stmt.Close()
+
+	var data string
+
+	err = stmt.QueryRow(ip).Scan(&data)
+	if err != nil {
+		if err == sql.ErrNoRows {
+
+		} else {
+			log.Fatal(err)
+		}
+	} else {
+		if data == "ban" {
+			return []string{"true", "c"}
+		}
+	}
+
+	return []string{"", ""}
+}
+
 func IP_parser(db *sql.DB, db_set map[string]string, ip string, my_ip string) string {
 	ip_pre_data := IP_preprocess(db, db_set, ip, my_ip)
 	if ip_pre_data[0] == "" {
@@ -328,6 +469,11 @@ func IP_parser(db *sql.DB, db_set map[string]string, ip string, my_ip string) st
 			ip = user_title + ip
 		}
 
+		ban := Get_user_ban(db, db_set, raw_ip, "")
+		if ban[0] == "true" {
+			ip = "<sup>" + ban[1] + "</sup><s>" + ip + "</s>"
+		}
+
 		ip += "<a href=\"javascript:void(0);\" name=\"" + Url_parser(raw_ip) + "\" onclick=\"opennamu_do_ip_click(this);\">⚒️</a>"
 
 		return ip

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.5.0-v120",
+        "r_ver" : "v3.5.0-v121",
         "c_ver" : "20240513",
         "s_ver" : "20240426"
     }

+ 14 - 4
views/main_css/js/func/insert_user_info.js

@@ -31,9 +31,11 @@ function do_insert_user_info() {
                 get_data_ban += '<br>';
                 
                 get_data_ban += lang_data['type'] + ' : ';
-                if(data['data']['ban']['type'] === 'normal') {
+                if(data['data']['ban'][1].match(/^[0-9]+$/)) {
                     get_data_ban += '<a href="/recent_block/user/' + opennamu_do_url_encode(name) + '">' + lang_data['normal'] + '</a>'; 
-                } else if(data['data']['ban']['type'] === 'cidr') {
+                } else if(data['data']['ban'][1] === 'c') {
+                    get_data_ban += lang_data['normal']; 
+                } else if(data['data']['ban'].match(/^b/)) {
                     get_data_ban += '<a href="/recent_block/cidr">' + lang_data['cidr'] + '</a>';
                 } else {
                     get_data_ban += '<a href="/recent_block/regex">' + lang_data['regex'] + '</a>';
@@ -41,7 +43,13 @@ function do_insert_user_info() {
                 get_data_ban += '<br>';
                 
                 get_data_ban += lang_data['period'] + ' : ';
-                if(data['data']['ban']['period'] === '0') {
+                if(!data['data']['ban']['period']) {
+                    if(get_data_auth_date !== '0') {
+                        get_data_ban += '~ ' + get_data_auth_date;
+                    } else {
+                        get_data_ban += '~ ' + lang_data['limitless']; 
+                    }
+                } else if(data['data']['ban']['period'] === '0') {
                     get_data_ban += '~ ' + lang_data['limitless']; 
                 } else {
                     get_data_ban += '~ ' + data['data']['ban']['period'];
@@ -61,7 +69,9 @@ function do_insert_user_info() {
                 if(data['data']['ban']['reason'] === 'edit filter') {
                     get_data_ban += lang_data['why'] + ' : <a href="/edit_filter/' + opennamu_do_url_encode(name) + '">' + data['data']['ban']['reason'] + '</a>';
                 } else {
-                    get_data_ban += lang_data['why'] + ' : ' + data['data']['ban']['reason'];
+                    if(data['data']['ban']['reason']) {
+                        get_data_ban += lang_data['why'] + ' : ' + data['data']['ban']['reason'];
+                    }
                 }
             }