Files
2025-05-27 09:22:01 +02:00

88 lines
2.5 KiB
Go

package settings
import (
"encoding/json"
"net/http"
"github.com/gorilla/mux"
nbcontext "github.com/netbirdio/netbird/management/server/context"
"github.com/netbirdio/netbird/management/server/http/util"
"management/internal/shared/db"
"management/internal/shared/errors"
"management/internal/shared/permissions"
"management/internal/shared/permissions/modules"
"management/internal/shared/permissions/operations"
)
type handler struct {
manager *Manager
permissionsManager permissions.Manager
}
func newHandler(manager *Manager, permissionsManager permissions.Manager) *handler {
return &handler{
manager: manager,
permissionsManager: permissionsManager,
}
}
func (h *handler) RegisterEndpoints(router *mux.Router) {
router.HandleFunc("/account/{accountID}/settings", h.getSettings).Methods("GET", "OPTIONS")
router.HandleFunc("/account/{accountID}/settings", h.updateSettings).Methods("PUT", "OPTIONS")
}
func (h *handler) getSettings(w http.ResponseWriter, r *http.Request) {
userAuth, err := nbcontext.GetUserAuthFromContext(r.Context())
if err != nil {
util.WriteError(r.Context(), err, w)
return
}
vars := mux.Vars(r)
accountId := vars["accountID"]
allowed, err := h.permissionsManager.ValidateUserPermissions(r.Context(), accountId, userAuth.UserId, modules.Settings, operations.Read)
if err != nil {
util.WriteError(r.Context(), errors.NewPermissionValidationError(err), w)
return
}
if !allowed {
util.WriteError(r.Context(), errors.NewPermissionDeniedError(), w)
}
users, err := h.manager.GetSettings(r.Context(), nil, db.LockingStrengthShare, accountId)
if err != nil {
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
return
}
_ = json.NewEncoder(w).Encode(users)
}
func (h *handler) updateSettings(w http.ResponseWriter, r *http.Request) {
userAuth, err := nbcontext.GetUserAuthFromContext(r.Context())
if err != nil {
util.WriteError(r.Context(), err, w)
return
}
vars := mux.Vars(r)
accountId := vars["accountID"]
allowed, err := h.permissionsManager.ValidateUserPermissions(r.Context(), accountId, userAuth.UserId, modules.Settings, operations.Write)
if err != nil {
util.WriteError(r.Context(), errors.NewPermissionValidationError(err), w)
return
}
if !allowed {
util.WriteError(r.Context(), errors.NewPermissionDeniedError(), w)
}
settings, err := h.manager.UpdateSettings(r.Context(), nil, db.LockingStrengthShare, accountId)
if err != nil {
http.Error(w, "Not Found", http.StatusNotFound)
return
}
_ = json.NewEncoder(w).Encode(settings)
}