| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | package controllerimport (	"net/http"	"github.com/gravitl/netmaker/database"	"github.com/gravitl/netmaker/logic"	"github.com/gravitl/netmaker/models")// limit constsconst (	limitChoiceNetworks = iota	limitChoiceUsers	limitChoiceMachines	limitChoiceIngress	limitChoiceEgress)func checkFreeTierLimits(limitChoice int, next http.Handler) http.HandlerFunc {	return func(w http.ResponseWriter, r *http.Request) {		var errorResponse = models.ErrorResponse{			Code: http.StatusForbidden, Message: "free tier limits exceeded on ",		}		if logic.FreeTier { // check that free tier limits not exceeded			switch limitChoice {			case limitChoiceNetworks:				currentNetworks, err := logic.GetNetworks()				if (err != nil && !database.IsEmptyRecord(err)) ||					len(currentNetworks) >= logic.NetworksLimit {					errorResponse.Message += "networks"					logic.ReturnErrorResponse(w, r, errorResponse)					return				}			case limitChoiceUsers:				users, err := logic.GetUsers()				if (err != nil && !database.IsEmptyRecord(err)) ||					len(users) >= logic.UsersLimit {					errorResponse.Message += "users"					logic.ReturnErrorResponse(w, r, errorResponse)					return				}			case limitChoiceMachines:				hosts, hErr := logic.GetAllHosts()				clients, cErr := logic.GetAllExtClients()				if (hErr != nil && !database.IsEmptyRecord(hErr)) ||					(cErr != nil && !database.IsEmptyRecord(cErr)) ||					len(hosts)+len(clients) >= logic.MachinesLimit {					errorResponse.Message += "machines"					logic.ReturnErrorResponse(w, r, errorResponse)					return				}			case limitChoiceIngress:				ingresses, err := logic.GetAllIngresses()				if (err != nil && !database.IsEmptyRecord(err)) ||					len(ingresses) >= logic.IngressesLimit {					errorResponse.Message += "ingresses"					logic.ReturnErrorResponse(w, r, errorResponse)					return				}			case limitChoiceEgress:				egresses, err := logic.GetAllEgresses()				if (err != nil && !database.IsEmptyRecord(err)) ||					len(egresses) >= logic.EgressesLimit {					errorResponse.Message += "egresses"					logic.ReturnErrorResponse(w, r, errorResponse)					return				}			}		}		next.ServeHTTP(w, r)	}}
 |