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:
30
db.go
30
db.go
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user