diff --git a/go/iptables-api.go b/go/iptables-api.go index 14d688a..0876a50 100644 --- a/go/iptables-api.go +++ b/go/iptables-api.go @@ -76,7 +76,7 @@ func main() { router.HandleFunc("/puship/{ipaddress}", pushIPAddress).Methods("GET") router.HandleFunc("/removeip/{ipaddress}", removeIPAddress).Methods("GET") router.HandleFunc("/unblockip/{ipaddress}", removeIPAddress).Methods("GET") - router.HandleFunc("/", rHandleIPAddress).Methods("DELETE", "POST", "PUT") + router.HandleFunc("/", rHandleIPAddress).Methods("DELETE", "POST", "PUT", "PATCH") http.ListenAndServe("0.0.0.0:"+APIport, router) } @@ -212,6 +212,14 @@ func iptableHandle(proto string, task string, ipvar string) (string, error) { } else { return "flushed", nil } + case "match": + err = ipt.AppendUnique("filter", "APIBANLOCAL", "-m", "string", "--algo", "bm", "--string", ipvar, "-j", targetChain) + if err != nil { + log.Println("iptableHandler: error adding address", err) + return "", err + } else { + return "added", nil + } case "push": var exists = false exists, err = ipt.Exists("filter", "APIBANLOCAL", "-s", ipvar, "-d", "0/0", "-j", targetChain) @@ -331,6 +339,8 @@ func rHandleIPAddress(w http.ResponseWriter, r *http.Request) { handleType = "push" case "POST": handleType = "add" + case "PATCH": + handleType = "match" } // parse body diff --git a/iptables-api b/iptables-api index 88da0e7..83bdde2 100755 Binary files a/iptables-api and b/iptables-api differ diff --git a/iptables-api-arm b/iptables-api-arm index 8e9af59..5f59c06 100755 Binary files a/iptables-api-arm and b/iptables-api-arm differ