feat: add permanent whitelist list endpoint and rename DB table

- Add GET /api/whitelist/perm/list to list permanent whitelisted entries
- Implement permWhitelistListHandler with API key verification
- Rename permanent_whitelist table to perm_whitelist for consistency
- Update default DB path from ./data to /data
- Comment out build job in CI/CD workflow
This commit is contained in:
db123-test
2026-05-04 11:29:01 +03:30
parent e46077f4fa
commit 7221feb6d4
9 changed files with 104 additions and 25 deletions

30
db.go
View File

@@ -21,7 +21,7 @@ func InitDB(dbPath string) (*sql.DB, error) {
}
schema := `
CREATE TABLE IF NOT EXISTS permanent_whitelist (
CREATE TABLE IF NOT EXISTS perm_whitelist (
id INTEGER PRIMARY KEY AUTOINCREMENT,
entry TEXT NOT NULL UNIQUE,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
@@ -56,7 +56,7 @@ func InitDB(dbPath string) (*sql.DB, error) {
}
func AddPermanentEntry(db *sql.DB, entry, apiClientIP string) (bool, error) {
_, err := db.Exec(`INSERT INTO permanent_whitelist(entry) VALUES(?)`, entry)
_, err := db.Exec(`INSERT INTO perm_whitelist(entry) VALUES(?)`, entry)
if err != nil {
if isUniqueConstraintError(err) {
return false, nil
@@ -68,7 +68,7 @@ func AddPermanentEntry(db *sql.DB, entry, apiClientIP string) (bool, error) {
}
func DeletePermanentEntry(db *sql.DB, entry, apiClientIP string) error {
res, err := db.Exec(`DELETE FROM permanent_whitelist WHERE entry = ?`, entry)
res, err := db.Exec(`DELETE FROM perm_whitelist WHERE entry = ?`, entry)
if err != nil {
return err
}
@@ -80,7 +80,7 @@ func DeletePermanentEntry(db *sql.DB, entry, apiClientIP string) error {
}
func IsPermanentWhitelisted(db *sql.DB, ip string) (bool, error) {
rows, err := db.Query(`SELECT entry FROM permanent_whitelist`)
rows, err := db.Query(`SELECT entry FROM perm_whitelist`)
if err != nil {
return false, err
}
@@ -189,6 +189,26 @@ func ListTempEntries(db *sql.DB) ([]map[string]interface{}, error) {
return list, nil
}
func ListPermEntries(db *sql.DB) ([]map[string]interface{}, error) {
rows, err := db.Query(`SELECT ip FROM perm_whitelist ORDER BY ip`)
if err != nil {
return nil, err
}
defer rows.Close()
var list []map[string]interface{}
for rows.Next() {
var ip, reason string
var expiresAt time.Time
if err := rows.Scan(&ip, &expiresAt, &reason); err != nil {
continue
}
list = append(list, map[string]interface{}{
"ip": ip,
})
}
return list, nil
}
func ipMatchesEntry(ip, entry string) (bool, error) {
if entry == ip {
return true, nil
@@ -221,5 +241,5 @@ func isUniqueConstraintError(err error) bool {
if err == nil {
return false
}
return err.Error() == "UNIQUE constraint failed: permanent_whitelist.entry"
return err.Error() == "UNIQUE constraint failed: perm_whitelist.entry"
}