2014-06-16 05:38:10 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"github.com/Sean-Der/fail2go"
|
2014-06-16 10:15:26 +02:00
|
|
|
"github.com/gorilla/mux"
|
2014-06-16 05:38:10 +02:00
|
|
|
"net/http"
|
|
|
|
)
|
|
|
|
|
2014-06-18 07:53:54 +02:00
|
|
|
func jailGetHandler(res http.ResponseWriter, req *http.Request, fail2goConn *fail2go.Fail2goConn) {
|
2014-06-20 15:58:57 +02:00
|
|
|
currentlyFailed, totalFailed, fileList, currentlyBanned, totalBanned, IPList, _ := fail2goConn.JailStatus(mux.Vars(req)["jail"])
|
|
|
|
failRegexes, _ := fail2goConn.JailFailRegex(mux.Vars(req)["jail"])
|
2014-06-25 07:23:33 +02:00
|
|
|
findTime, _ := fail2goConn.JailFindTime(mux.Vars(req)["jail"])
|
|
|
|
useDNS, _ := fail2goConn.JailUseDNS(mux.Vars(req)["jail"])
|
|
|
|
maxRetry, _ := fail2goConn.JailMaxRetry(mux.Vars(req)["jail"])
|
2014-06-20 15:58:57 +02:00
|
|
|
|
|
|
|
encodedOutput, err := json.Marshal(map[string]interface{}{
|
|
|
|
"currentlyFailed": currentlyFailed,
|
|
|
|
"totalFailed": totalFailed,
|
|
|
|
"fileList": fileList,
|
|
|
|
"currentlyBanned": currentlyBanned,
|
|
|
|
"totalBanned": totalBanned,
|
|
|
|
"IPList": IPList,
|
2014-06-25 07:23:33 +02:00
|
|
|
"failRegexes": failRegexes,
|
|
|
|
"findTime": findTime,
|
|
|
|
"useDNS": useDNS,
|
|
|
|
"maxRetry": maxRetry})
|
2014-06-16 05:38:10 +02:00
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
res.Write(encodedOutput)
|
|
|
|
}
|
|
|
|
|
2014-06-17 08:02:54 +02:00
|
|
|
type jailBanIPBody struct {
|
|
|
|
IP string
|
|
|
|
}
|
|
|
|
|
2014-06-18 07:53:54 +02:00
|
|
|
func jailBanIPHandler(res http.ResponseWriter, req *http.Request, fail2goConn *fail2go.Fail2goConn) {
|
2014-06-17 08:02:54 +02:00
|
|
|
var input jailBanIPBody
|
|
|
|
err := json.NewDecoder(req.Body).Decode(&input)
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
2014-06-18 07:53:54 +02:00
|
|
|
output, _ := fail2goConn.JailBanIP(mux.Vars(req)["jail"], input.IP)
|
2014-06-17 08:02:54 +02:00
|
|
|
|
2014-06-20 15:58:57 +02:00
|
|
|
encodedOutput, err := json.Marshal(map[string]interface{}{"bannedIP": output})
|
2014-06-17 08:02:54 +02:00
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
res.Write(encodedOutput)
|
|
|
|
}
|
|
|
|
|
2014-06-18 07:53:54 +02:00
|
|
|
func jailUnbanIPHandler(res http.ResponseWriter, req *http.Request, fail2goConn *fail2go.Fail2goConn) {
|
2014-06-17 08:02:54 +02:00
|
|
|
var input jailBanIPBody
|
|
|
|
err := json.NewDecoder(req.Body).Decode(&input)
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
2014-06-18 07:53:54 +02:00
|
|
|
output, _ := fail2goConn.JailUnbanIP(mux.Vars(req)["jail"], input.IP)
|
2014-06-17 08:02:54 +02:00
|
|
|
|
2014-06-20 15:58:57 +02:00
|
|
|
encodedOutput, err := json.Marshal(map[string]interface{}{"unBannedIP": output})
|
2014-06-17 08:02:54 +02:00
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
res.Write(encodedOutput)
|
2014-06-21 04:48:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
type jailFailRegexBody struct {
|
|
|
|
FailRegex string
|
|
|
|
}
|
|
|
|
|
|
|
|
func jailAddFailRegexHandler(res http.ResponseWriter, req *http.Request, fail2goConn *fail2go.Fail2goConn) {
|
|
|
|
var input jailFailRegexBody
|
2014-06-23 08:53:42 +02:00
|
|
|
var encodedOutput []byte
|
|
|
|
|
2014-06-21 04:48:40 +02:00
|
|
|
err := json.NewDecoder(req.Body).Decode(&input)
|
|
|
|
if err != nil {
|
2014-06-23 08:53:42 +02:00
|
|
|
|
2014-06-21 04:48:40 +02:00
|
|
|
}
|
|
|
|
|
2014-06-23 08:53:42 +02:00
|
|
|
output, err := fail2goConn.JailAddFailRegex(mux.Vars(req)["jail"], input.FailRegex)
|
|
|
|
if err != nil {
|
|
|
|
res.WriteHeader(400)
|
|
|
|
encodedOutput, err = json.Marshal(ErrorBody{Error: "Invalid Regex"})
|
|
|
|
} else {
|
|
|
|
encodedOutput, err = json.Marshal(map[string]interface{}{"FailRegex": output})
|
|
|
|
}
|
2014-06-21 04:48:40 +02:00
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
res.Write(encodedOutput)
|
|
|
|
}
|
2014-06-17 08:02:54 +02:00
|
|
|
|
2014-06-21 04:48:40 +02:00
|
|
|
func jailDeleteFailRegexHandler(res http.ResponseWriter, req *http.Request, fail2goConn *fail2go.Fail2goConn) {
|
|
|
|
var input jailFailRegexBody
|
|
|
|
err := json.NewDecoder(req.Body).Decode(&input)
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
output, _ := fail2goConn.JailDeleteFailRegex(mux.Vars(req)["jail"], input.FailRegex)
|
|
|
|
|
|
|
|
encodedOutput, err := json.Marshal(map[string]interface{}{"FailRegex": output})
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
res.Write(encodedOutput)
|
2014-06-17 08:02:54 +02:00
|
|
|
}
|
|
|
|
|
2014-06-25 09:00:44 +02:00
|
|
|
type jailFindTimeBody struct {
|
|
|
|
FindTime int
|
|
|
|
}
|
|
|
|
|
|
|
|
func jailSetFindTimeHandler(res http.ResponseWriter, req *http.Request, fail2goConn *fail2go.Fail2goConn) {
|
|
|
|
var input jailFindTimeBody
|
|
|
|
|
|
|
|
err := json.NewDecoder(req.Body).Decode(&input)
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
output, err := fail2goConn.JailSetFindTime(mux.Vars(req)["jail"], input.FindTime)
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
encodedOutput, err := json.Marshal(map[string]interface{}{"FindTime": output})
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
res.Write(encodedOutput)
|
|
|
|
}
|
|
|
|
|
|
|
|
type jailUseDNSBody struct {
|
|
|
|
UseDNS string
|
|
|
|
}
|
|
|
|
|
|
|
|
func jailSetUseDNSHandler(res http.ResponseWriter, req *http.Request, fail2goConn *fail2go.Fail2goConn) {
|
|
|
|
var input jailUseDNSBody
|
|
|
|
|
|
|
|
err := json.NewDecoder(req.Body).Decode(&input)
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
output, err := fail2goConn.JailSetUseDNS(mux.Vars(req)["jail"], input.UseDNS)
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
encodedOutput, err := json.Marshal(map[string]interface{}{"useDNS": output})
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
res.Write(encodedOutput)
|
|
|
|
}
|
|
|
|
|
|
|
|
type jailMaxRetryBody struct {
|
|
|
|
MaxRetry int
|
|
|
|
}
|
|
|
|
|
|
|
|
func jailSetMaxRetryHandler(res http.ResponseWriter, req *http.Request, fail2goConn *fail2go.Fail2goConn) {
|
|
|
|
var input jailMaxRetryBody
|
|
|
|
|
|
|
|
err := json.NewDecoder(req.Body).Decode(&input)
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
output, err := fail2goConn.JailSetMaxRetry(mux.Vars(req)["jail"], input.MaxRetry)
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
encodedOutput, err := json.Marshal(map[string]interface{}{"maxRetry": output})
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
}
|
|
|
|
|
|
|
|
res.Write(encodedOutput)
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-06-18 07:53:54 +02:00
|
|
|
func jailHandler(jailRouter *mux.Router, fail2goConn *fail2go.Fail2goConn) {
|
2014-06-20 08:30:18 +02:00
|
|
|
|
2014-06-21 04:48:40 +02:00
|
|
|
jailRouter.HandleFunc("/{jail}/bannedip", func(res http.ResponseWriter, req *http.Request) {
|
2014-06-18 07:53:54 +02:00
|
|
|
jailBanIPHandler(res, req, fail2goConn)
|
|
|
|
}).Methods("POST")
|
2014-06-21 04:48:40 +02:00
|
|
|
jailRouter.HandleFunc("/{jail}/bannedip", func(res http.ResponseWriter, req *http.Request) {
|
2014-06-18 07:53:54 +02:00
|
|
|
jailUnbanIPHandler(res, req, fail2goConn)
|
2014-06-20 08:30:18 +02:00
|
|
|
}).Methods("DELETE")
|
|
|
|
|
2014-06-21 04:48:40 +02:00
|
|
|
jailRouter.HandleFunc("/{jail}/failregex", func(res http.ResponseWriter, req *http.Request) {
|
|
|
|
jailAddFailRegexHandler(res, req, fail2goConn)
|
|
|
|
}).Methods("POST")
|
|
|
|
jailRouter.HandleFunc("/{jail}/failregex", func(res http.ResponseWriter, req *http.Request) {
|
|
|
|
jailDeleteFailRegexHandler(res, req, fail2goConn)
|
|
|
|
}).Methods("DELETE")
|
|
|
|
|
2014-06-25 09:00:44 +02:00
|
|
|
jailRouter.HandleFunc("/{jail}/findtime", func(res http.ResponseWriter, req *http.Request) {
|
|
|
|
jailSetFindTimeHandler(res, req, fail2goConn)
|
|
|
|
}).Methods("POST")
|
|
|
|
|
|
|
|
jailRouter.HandleFunc("/{jail}/usedns", func(res http.ResponseWriter, req *http.Request) {
|
|
|
|
jailSetUseDNSHandler(res, req, fail2goConn)
|
|
|
|
}).Methods("POST")
|
|
|
|
|
|
|
|
jailRouter.HandleFunc("/{jail}/maxretry", func(res http.ResponseWriter, req *http.Request) {
|
|
|
|
jailSetMaxRetryHandler(res, req, fail2goConn)
|
|
|
|
}).Methods("POST")
|
|
|
|
|
2014-06-18 07:53:54 +02:00
|
|
|
jailRouter.HandleFunc("/{jail}", func(res http.ResponseWriter, req *http.Request) {
|
|
|
|
jailGetHandler(res, req, fail2goConn)
|
|
|
|
}).Methods("GET")
|
2014-06-16 05:38:10 +02:00
|
|
|
}
|