mirror of
https://github.com/gravitl/netmaker.git
synced 2024-11-10 17:48:25 +08:00
59 lines
1.8 KiB
Go
59 lines
1.8 KiB
Go
package controller
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gravitl/netmaker/database"
|
|
"github.com/gravitl/netmaker/logic"
|
|
"github.com/gravitl/netmaker/models"
|
|
"github.com/gravitl/netmaker/servercfg"
|
|
)
|
|
|
|
// limit consts
|
|
const (
|
|
node_l = 0
|
|
networks_l = 1
|
|
users_l = 2
|
|
clients_l = 3
|
|
)
|
|
|
|
func checkFreeTierLimits(limit_choice int, next http.Handler) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
var errorResponse = models.ErrorResponse{
|
|
Code: http.StatusUnauthorized, Message: "free tier limits exceeded on networks",
|
|
}
|
|
|
|
if logic.Free_Tier && servercfg.Is_EE { // check that free tier limits not exceeded
|
|
if limit_choice == networks_l {
|
|
currentNetworks, err := logic.GetNetworks()
|
|
if (err != nil && !database.IsEmptyRecord(err)) || len(currentNetworks) >= logic.Networks_Limit {
|
|
logic.ReturnErrorResponse(w, r, errorResponse)
|
|
return
|
|
}
|
|
} else if limit_choice == node_l {
|
|
nodes, err := logic.GetAllNodes()
|
|
if (err != nil && !database.IsEmptyRecord(err)) || len(nodes) >= logic.Node_Limit {
|
|
errorResponse.Message = "free tier limits exceeded on nodes"
|
|
logic.ReturnErrorResponse(w, r, errorResponse)
|
|
return
|
|
}
|
|
} else if limit_choice == users_l {
|
|
users, err := logic.GetUsers()
|
|
if (err != nil && !database.IsEmptyRecord(err)) || len(users) >= logic.Users_Limit {
|
|
errorResponse.Message = "free tier limits exceeded on users"
|
|
logic.ReturnErrorResponse(w, r, errorResponse)
|
|
return
|
|
}
|
|
} else if limit_choice == clients_l {
|
|
clients, err := logic.GetAllExtClients()
|
|
if (err != nil && !database.IsEmptyRecord(err)) || len(clients) >= logic.Clients_Limit {
|
|
errorResponse.Message = "free tier limits exceeded on external clients"
|
|
logic.ReturnErrorResponse(w, r, errorResponse)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
next.ServeHTTP(w, r)
|
|
}
|
|
}
|