main

mattermost/focalboard

Last updated at: 29/12/2023 09:45

limits.go

TLDR

This file defines two methods, handleCloudLimits and handleNotifyAdminUpgrade, in the API struct. These methods handle HTTP requests for fetching cloud limits and notifying admins for upgrade request, respectively.

Methods

handleCloudLimits

This method handles the HTTP GET request for fetching the cloud limits of the server. It internally calls the GetBoardsCloudLimits method of the app object to retrieve the limits. The retrieved limits are then marshaled into JSON format and sent as the response.

handleNotifyAdminUpgrade

This method handles the HTTP POST request for notifying admins about an upgrade request. It checks if MattermostAuth field is set to true in the API struct. If not, it returns a not permitted error response. Otherwise, it extracts the teamID from the request path, and calls the NotifyPortalAdminsUpgradeRequest method of the app object to notify the admin about the upgrade request.

This method does not return any response body.

package api

import (
	"encoding/json"
	"net/http"

	"github.com/gorilla/mux"
	"github.com/mattermost/focalboard/server/model"
)

func (a *API) registerLimitsRoutes(r *mux.Router) {
	// limits
	r.HandleFunc("/limits", a.sessionRequired(a.handleCloudLimits)).Methods("GET")
	r.HandleFunc("/teams/{teamID}/notifyadminupgrade", a.sessionRequired(a.handleNotifyAdminUpgrade)).Methods(http.MethodPost)
}

func (a *API) handleCloudLimits(w http.ResponseWriter, r *http.Request) {
	// swagger:operation GET /limits cloudLimits
	//
	// Fetches the cloud limits of the server.
	//
	// ---
	// produces:
	// - application/json
	// security:
	// - BearerAuth: []
	// responses:
	//   '200':
	//     description: success
	//     schema:
	//         "$ref": "#/definitions/BoardsCloudLimits"
	//   default:
	//     description: internal error
	//     schema:
	//       "$ref": "#/definitions/ErrorResponse"

	boardsCloudLimits, err := a.app.GetBoardsCloudLimits()
	if err != nil {
		a.errorResponse(w, r, err)
		return
	}

	data, err := json.Marshal(boardsCloudLimits)
	if err != nil {
		a.errorResponse(w, r, err)
		return
	}

	jsonBytesResponse(w, http.StatusOK, data)
}

func (a *API) handleNotifyAdminUpgrade(w http.ResponseWriter, r *http.Request) {
	// swagger:operation GET /api/v2/teams/{teamID}/notifyadminupgrade handleNotifyAdminUpgrade
	//
	// Notifies admins for upgrade request.
	//
	// ---
	// produces:
	// - application/json
	// parameters:
	// - name: teamID
	//   in: path
	//   description: Team ID
	//   required: true
	//   type: string
	// security:
	// - BearerAuth: []
	// responses:
	//   '200':
	//     description: success
	//   default:
	//     description: internal error
	//     schema:
	//       "$ref": "#/definitions/ErrorResponse"

	if !a.MattermostAuth {
		a.errorResponse(w, r, model.NewErrNotImplemented("not permitted in standalone mode"))
		return
	}

	vars := mux.Vars(r)
	teamID := vars["teamID"]

	if err := a.app.NotifyPortalAdminsUpgradeRequest(teamID); err != nil {
		jsonStringResponse(w, http.StatusOK, "{}")
	}
}