main

mattermost/focalboard

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

onboarding.go

TLDR

This file defines the handleOnboard function which is responsible for onboarding a user on Boards by preparing an onboarding tour and returning the team ID and board ID.

Methods

registerOnboardingRoutes

This method registers the /teams/{teamID}/onboard endpoint API and associates it with the handleOnboard function.

handleOnboard

This method handles the onboarding process by performing the following steps:

  1. Checks if the user has permission to view the team.
  2. Checks if the user is a guest and denies access to create a board.
  3. Prepares the onboarding tour by calling the PrepareOnboardingTour() method from the app package.
  4. Constructs a response map containing the team ID and board ID.
  5. Marshals the response map into JSON format.
  6. Writes the JSON response with the status code OK to the http.ResponseWriter.

Classes

No classes found in this file

package api

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

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

func (a *API) registerOnboardingRoutes(r *mux.Router) {
	// Onboarding tour endpoints APIs
	r.HandleFunc("/teams/{teamID}/onboard", a.sessionRequired(a.handleOnboard)).Methods(http.MethodPost)
}

func (a *API) handleOnboard(w http.ResponseWriter, r *http.Request) {
	// swagger:operation POST /team/{teamID}/onboard onboard
	//
	// Onboards a user on Boards.
	//
	// ---
	// produces:
	// - application/json
	// parameters:
	// - name: teamID
	//   in: path
	//   description: Team ID
	//   required: true
	//   type: string
	// security:
	// - BearerAuth: []
	// responses:
	//   '200':
	//     description: success
	//     schema:
	//       type: object
	//       properties:
	//         teamID:
	//           type: string
	//           description: Team ID
	//         boardID:
	//           type: string
	//           description: Board ID
	//   default:
	//     description: internal error
	//     schema:
	//       "$ref": "#/definitions/ErrorResponse"
	teamID := mux.Vars(r)["teamID"]
	userID := getUserID(r)

	if !a.permissions.HasPermissionToTeam(userID, teamID, model.PermissionViewTeam) {
		a.errorResponse(w, r, model.NewErrPermission("access denied to create board"))
		return
	}

	isGuest, err := a.userIsGuest(userID)
	if err != nil {
		a.errorResponse(w, r, err)
		return
	}
	if isGuest {
		a.errorResponse(w, r, model.NewErrPermission("access denied to create board"))
		return
	}

	teamID, boardID, err := a.app.PrepareOnboardingTour(userID, teamID)
	if err != nil {
		a.errorResponse(w, r, err)
		return
	}

	response := map[string]string{
		"teamID":  teamID,
		"boardID": boardID,
	}
	data, err := json.Marshal(response)
	if err != nil {
		a.errorResponse(w, r, err)
		return
	}

	jsonBytesResponse(w, http.StatusOK, data)
}