limits.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. node_l = 0
  11. networks_l = 1
  12. users_l = 2
  13. clients_l = 3
  14. )
  15. func checkFreeTierLimits(limit_choice int, next http.Handler) http.HandlerFunc {
  16. return func(w http.ResponseWriter, r *http.Request) {
  17. var errorResponse = models.ErrorResponse{
  18. Code: http.StatusUnauthorized, Message: "free tier limits exceeded on networks",
  19. }
  20. if logic.Free_Tier && logic.Is_EE { // check that free tier limits not exceeded
  21. if limit_choice == networks_l {
  22. currentNetworks, err := logic.GetNetworks()
  23. if (err != nil && !database.IsEmptyRecord(err)) || len(currentNetworks) >= logic.Networks_Limit {
  24. logic.ReturnErrorResponse(w, r, errorResponse)
  25. return
  26. }
  27. } else if limit_choice == node_l {
  28. nodes, err := logic.GetAllNodes()
  29. if (err != nil && !database.IsEmptyRecord(err)) || len(nodes) >= logic.Node_Limit {
  30. errorResponse.Message = "free tier limits exceeded on nodes"
  31. logic.ReturnErrorResponse(w, r, errorResponse)
  32. return
  33. }
  34. } else if limit_choice == users_l {
  35. users, err := logic.GetUsers()
  36. if (err != nil && !database.IsEmptyRecord(err)) || len(users) >= logic.Users_Limit {
  37. errorResponse.Message = "free tier limits exceeded on users"
  38. logic.ReturnErrorResponse(w, r, errorResponse)
  39. return
  40. }
  41. } else if limit_choice == clients_l {
  42. clients, err := logic.GetAllExtClients()
  43. if (err != nil && !database.IsEmptyRecord(err)) || len(clients) >= logic.Clients_Limit {
  44. errorResponse.Message = "free tier limits exceeded on external clients"
  45. logic.ReturnErrorResponse(w, r, errorResponse)
  46. return
  47. }
  48. }
  49. }
  50. next.ServeHTTP(w, r)
  51. }
  52. }