handler.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package blacklist
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strings"
  6. "imuslab.com/arozos/mod/network"
  7. "imuslab.com/arozos/mod/utils"
  8. )
  9. /*
  10. Handler for blacklist module
  11. */
  12. func (bl *BlackList) HandleAddBannedIP(w http.ResponseWriter, r *http.Request) {
  13. ipRange, err := utils.Mv(r, "iprange", true)
  14. if err != nil {
  15. utils.SendErrorResponse(w, "Invalid ip range given")
  16. return
  17. }
  18. err = bl.Ban(ipRange)
  19. if err != nil {
  20. utils.SendErrorResponse(w, err.Error())
  21. return
  22. }
  23. utils.SendOK(w)
  24. }
  25. func (bl *BlackList) HandleRemoveBannedIP(w http.ResponseWriter, r *http.Request) {
  26. ipRange, err := utils.Mv(r, "iprange", true)
  27. if err != nil {
  28. utils.SendErrorResponse(w, "Invalid ip range given")
  29. return
  30. }
  31. err = bl.UnBan(ipRange)
  32. if err != nil {
  33. utils.SendErrorResponse(w, err.Error())
  34. return
  35. }
  36. utils.SendOK(w)
  37. }
  38. func (bl *BlackList) HandleSetBlacklistEnable(w http.ResponseWriter, r *http.Request) {
  39. enableMode, _ := utils.Mv(r, "enable", true)
  40. if enableMode == "" {
  41. //Get the current blacklist status
  42. js, _ := json.Marshal(bl.Enabled)
  43. utils.SendJSONResponse(w, string(js))
  44. return
  45. } else {
  46. if strings.ToLower(enableMode) == "true" {
  47. bl.SetBlacklistEnabled(true)
  48. utils.SendOK(w)
  49. } else if strings.ToLower(enableMode) == "false" {
  50. bl.SetBlacklistEnabled(false)
  51. utils.SendOK(w)
  52. } else {
  53. utils.SendErrorResponse(w, "Invalid mode given")
  54. }
  55. }
  56. }
  57. func (bl *BlackList) SetBlacklistEnabled(enabled bool) {
  58. if enabled {
  59. bl.Enabled = true
  60. bl.database.Write("ipblacklist", "enable", true)
  61. } else {
  62. bl.Enabled = false
  63. bl.database.Write("ipblacklist", "enable", false)
  64. }
  65. }
  66. func (bl *BlackList) HandleListBannedIPs(w http.ResponseWriter, r *http.Request) {
  67. bannedIpRanges := bl.ListBannedIpRanges()
  68. js, _ := json.Marshal(bannedIpRanges)
  69. utils.SendJSONResponse(w, string(js))
  70. }
  71. func (bl *BlackList) CheckIsBannedByRequest(r *http.Request) bool {
  72. if bl.Enabled == false {
  73. //Blacklist not enabled. Always return not banned
  74. return false
  75. }
  76. //Get the IP address from the request header
  77. requestIP, err := network.GetIpFromRequest(r)
  78. if err != nil {
  79. return false
  80. }
  81. return bl.IsBanned(requestIP)
  82. }