limits.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package controller
  2. import (
  3. "net/http"
  4. "github.com/gravitl/netmaker/database"
  5. "github.com/gravitl/netmaker/logic"
  6. "github.com/gravitl/netmaker/models"
  7. )
  8. // limit consts
  9. const (
  10. limitChoiceNetworks = iota
  11. limitChoiceUsers
  12. limitChoiceMachines
  13. limitChoiceIngress
  14. limitChoiceEgress
  15. )
  16. func checkFreeTierLimits(limitChoice int, next http.Handler) http.HandlerFunc {
  17. return func(w http.ResponseWriter, r *http.Request) {
  18. var errorResponse = models.ErrorResponse{
  19. Code: http.StatusForbidden, Message: "free tier limits exceeded on ",
  20. }
  21. if logic.FreeTier { // check that free tier limits not exceeded
  22. switch limitChoice {
  23. case limitChoiceNetworks:
  24. currentNetworks, err := logic.GetNetworks()
  25. if (err != nil && !database.IsEmptyRecord(err)) ||
  26. len(currentNetworks) >= logic.NetworksLimit {
  27. errorResponse.Message += "networks"
  28. logic.ReturnErrorResponse(w, r, errorResponse)
  29. return
  30. }
  31. case limitChoiceUsers:
  32. users, err := logic.GetUsers()
  33. if (err != nil && !database.IsEmptyRecord(err)) ||
  34. len(users) >= logic.UsersLimit {
  35. errorResponse.Message += "users"
  36. logic.ReturnErrorResponse(w, r, errorResponse)
  37. return
  38. }
  39. case limitChoiceMachines:
  40. hosts, hErr := logic.GetAllHosts()
  41. clients, cErr := logic.GetAllExtClients()
  42. if (hErr != nil && !database.IsEmptyRecord(hErr)) ||
  43. (cErr != nil && !database.IsEmptyRecord(cErr)) ||
  44. len(hosts)+len(clients) >= logic.MachinesLimit {
  45. errorResponse.Message += "machines"
  46. logic.ReturnErrorResponse(w, r, errorResponse)
  47. return
  48. }
  49. case limitChoiceIngress:
  50. ingresses, err := logic.GetAllIngresses()
  51. if (err != nil && !database.IsEmptyRecord(err)) ||
  52. len(ingresses) >= logic.IngressesLimit {
  53. errorResponse.Message += "ingresses"
  54. logic.ReturnErrorResponse(w, r, errorResponse)
  55. return
  56. }
  57. case limitChoiceEgress:
  58. egresses, err := logic.GetAllEgresses()
  59. if (err != nil && !database.IsEmptyRecord(err)) ||
  60. len(egresses) >= logic.EgressesLimit {
  61. errorResponse.Message += "egresses"
  62. logic.ReturnErrorResponse(w, r, errorResponse)
  63. return
  64. }
  65. }
  66. }
  67. next.ServeHTTP(w, r)
  68. }
  69. }