limits.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package controller
  2. import (
  3. "net/http"
  4. "github.com/gravitl/netmaker/database"
  5. "github.com/gravitl/netmaker/ee"
  6. "github.com/gravitl/netmaker/logic"
  7. "github.com/gravitl/netmaker/models"
  8. )
  9. // limit consts
  10. const (
  11. node_l = 0
  12. networks_l = 1
  13. users_l = 2
  14. clients_l = 3
  15. )
  16. func checkFreeTierLimits(limit_choice int, next http.Handler) http.HandlerFunc {
  17. return func(w http.ResponseWriter, r *http.Request) {
  18. var errorResponse = models.ErrorResponse{
  19. Code: http.StatusUnauthorized, Message: "free tier limits exceeded on networks",
  20. }
  21. if ee.Limits.FreeTier { // check that free tier limits not exceeded
  22. if limit_choice == networks_l {
  23. currentNetworks, err := logic.GetNetworks()
  24. if (err != nil && !database.IsEmptyRecord(err)) || len(currentNetworks) >= ee.Limits.Networks {
  25. returnErrorResponse(w, r, errorResponse)
  26. return
  27. }
  28. } else if limit_choice == node_l {
  29. nodes, err := logic.GetAllNodes()
  30. if (err != nil && !database.IsEmptyRecord(err)) || len(nodes) >= ee.Limits.Nodes {
  31. errorResponse.Message = "free tier limits exceeded on nodes"
  32. returnErrorResponse(w, r, errorResponse)
  33. return
  34. }
  35. } else if limit_choice == users_l {
  36. users, err := logic.GetUsers()
  37. if (err != nil && !database.IsEmptyRecord(err)) || len(users) >= ee.Limits.Users {
  38. errorResponse.Message = "free tier limits exceeded on users"
  39. returnErrorResponse(w, r, errorResponse)
  40. return
  41. }
  42. } else if limit_choice == clients_l {
  43. clients, err := logic.GetAllExtClients()
  44. if (err != nil && !database.IsEmptyRecord(err)) || len(clients) >= ee.Limits.Clients {
  45. errorResponse.Message = "free tier limits exceeded on external clients"
  46. returnErrorResponse(w, r, errorResponse)
  47. return
  48. }
  49. }
  50. }
  51. next.ServeHTTP(w, r)
  52. }
  53. }