handler.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package whitelist
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strings"
  6. "imuslab.com/arozos/mod/network"
  7. "imuslab.com/arozos/mod/utils"
  8. )
  9. func (wl *WhiteList) HandleAddWhitelistedIP(w http.ResponseWriter, r *http.Request) {
  10. ipRange, err := utils.Mv(r, "iprange", true)
  11. if err != nil {
  12. utils.SendErrorResponse(w, "Invalid ip range given")
  13. return
  14. }
  15. err = wl.SetWhitelist(ipRange)
  16. if err != nil {
  17. utils.SendErrorResponse(w, err.Error())
  18. return
  19. }
  20. utils.SendOK(w)
  21. }
  22. func (wl *WhiteList) HandleRemoveWhitelistedIP(w http.ResponseWriter, r *http.Request) {
  23. ipRange, err := utils.Mv(r, "iprange", true)
  24. if err != nil {
  25. utils.SendErrorResponse(w, "Invalid ip range given")
  26. return
  27. }
  28. err = wl.UnsetWhitelist(ipRange)
  29. if err != nil {
  30. utils.SendErrorResponse(w, err.Error())
  31. return
  32. }
  33. utils.SendOK(w)
  34. }
  35. func (wl *WhiteList) HandleSetWhitelistEnable(w http.ResponseWriter, r *http.Request) {
  36. enableMode, _ := utils.Mv(r, "enable", true)
  37. if enableMode == "" {
  38. //Get the current whitelist status
  39. js, _ := json.Marshal(wl.Enabled)
  40. utils.SendJSONResponse(w, string(js))
  41. return
  42. } else {
  43. if strings.ToLower(enableMode) == "true" {
  44. wl.SetWhitelistEnabled(true)
  45. utils.SendOK(w)
  46. } else if strings.ToLower(enableMode) == "false" {
  47. wl.SetWhitelistEnabled(false)
  48. utils.SendOK(w)
  49. } else {
  50. utils.SendErrorResponse(w, "Invalid mode given")
  51. }
  52. }
  53. }
  54. func (wl *WhiteList) HandleListWhitelistedIPs(w http.ResponseWriter, r *http.Request) {
  55. bannedIpRanges := wl.ListWhitelistedIpRanges()
  56. js, _ := json.Marshal(bannedIpRanges)
  57. utils.SendJSONResponse(w, string(js))
  58. }
  59. func (wl *WhiteList) CheckIsWhitelistedByRequest(r *http.Request) bool {
  60. if wl.Enabled == false {
  61. //Whitelist not enabled. Always return is whitelisted
  62. return true
  63. }
  64. //Get the IP address from the request header
  65. requestIP, err := network.GetIpFromRequest(r)
  66. if err != nil {
  67. return false
  68. }
  69. return wl.IsWhitelisted(requestIP)
  70. }