mirror of
https://github.com/mattermost/focalboard.git
synced 2025-01-08 15:06:08 +02:00
Update focalboard endpoints to v2 namespace (#2781)
This commit is contained in:
parent
42d24d279a
commit
4c61ae9623
@ -10,7 +10,7 @@ declare global {
|
||||
}
|
||||
|
||||
async function request(method: string, host: string, resource: string, body: any, token: string | null) {
|
||||
const response = await fetch(`${host}/api/v1/${resource}`, {
|
||||
const response = await fetch(`${host}/api/v2/${resource}`, {
|
||||
'credentials': 'include',
|
||||
'headers': {
|
||||
'Accept': 'application/json',
|
||||
|
@ -5,4 +5,4 @@ if [[ $# < 2 ]] ; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
curl --unix-socket /var/tmp/focalboard_local.socket http://localhost/api/v1/admin/users/$1/password -X POST -H 'Content-Type: application/json' -d '{ "password": "'$2'" }'
|
||||
curl --unix-socket /var/tmp/focalboard_local.socket http://localhost/api/v2/admin/users/$1/password -X POST -H 'Content-Type: application/json' -d '{ "password": "'$2'" }'
|
||||
|
@ -68,94 +68,94 @@ func NewAPI(app *app.App, singleUserToken string, authService string, permission
|
||||
}
|
||||
|
||||
func (a *API) RegisterRoutes(r *mux.Router) {
|
||||
apiv1 := r.PathPrefix("/api/v1").Subrouter()
|
||||
apiv1.Use(a.panicHandler)
|
||||
apiv1.Use(a.requireCSRFToken)
|
||||
apiv2 := r.PathPrefix("/api/v2").Subrouter()
|
||||
apiv2.Use(a.panicHandler)
|
||||
apiv2.Use(a.requireCSRFToken)
|
||||
|
||||
// Board APIs
|
||||
apiv1.HandleFunc("/teams/{teamID}/boards", a.sessionRequired(a.handleGetBoards)).Methods("GET")
|
||||
apiv1.HandleFunc("/teams/{teamID}/boards/search", a.sessionRequired(a.handleSearchBoards)).Methods("GET")
|
||||
apiv1.HandleFunc("/teams/{teamID}/templates", a.sessionRequired(a.handleGetTemplates)).Methods("GET")
|
||||
apiv1.HandleFunc("/boards", a.sessionRequired(a.handleCreateBoard)).Methods("POST")
|
||||
apiv1.HandleFunc("/boards/{boardID}", a.attachSession(a.handleGetBoard, false)).Methods("GET")
|
||||
apiv1.HandleFunc("/boards/{boardID}", a.sessionRequired(a.handlePatchBoard)).Methods("PATCH")
|
||||
apiv1.HandleFunc("/boards/{boardID}", a.sessionRequired(a.handleDeleteBoard)).Methods("DELETE")
|
||||
apiv1.HandleFunc("/boards/{boardID}/duplicate", a.sessionRequired(a.handleDuplicateBoard)).Methods("POST")
|
||||
apiv1.HandleFunc("/boards/{boardID}/undelete", a.sessionRequired(a.handleUndeleteBoard)).Methods("POST")
|
||||
apiv1.HandleFunc("/boards/{boardID}/blocks", a.attachSession(a.handleGetBlocks, false)).Methods("GET")
|
||||
apiv1.HandleFunc("/boards/{boardID}/blocks", a.sessionRequired(a.handlePostBlocks)).Methods("POST")
|
||||
apiv1.HandleFunc("/boards/{boardID}/blocks", a.sessionRequired(a.handlePatchBlocks)).Methods("PATCH")
|
||||
apiv1.HandleFunc("/boards/{boardID}/blocks/{blockID}", a.sessionRequired(a.handleDeleteBlock)).Methods("DELETE")
|
||||
apiv1.HandleFunc("/boards/{boardID}/blocks/{blockID}", a.sessionRequired(a.handlePatchBlock)).Methods("PATCH")
|
||||
apiv1.HandleFunc("/boards/{boardID}/blocks/{blockID}/undelete", a.sessionRequired(a.handleUndeleteBlock)).Methods("POST")
|
||||
apiv1.HandleFunc("/boards/{boardID}/blocks/{blockID}/duplicate", a.sessionRequired(a.handleDuplicateBlock)).Methods("POST")
|
||||
apiv1.HandleFunc("/boards/{boardID}/metadata", a.sessionRequired(a.handleGetBoardMetadata)).Methods("GET")
|
||||
apiv2.HandleFunc("/teams/{teamID}/boards", a.sessionRequired(a.handleGetBoards)).Methods("GET")
|
||||
apiv2.HandleFunc("/teams/{teamID}/boards/search", a.sessionRequired(a.handleSearchBoards)).Methods("GET")
|
||||
apiv2.HandleFunc("/teams/{teamID}/templates", a.sessionRequired(a.handleGetTemplates)).Methods("GET")
|
||||
apiv2.HandleFunc("/boards", a.sessionRequired(a.handleCreateBoard)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards/{boardID}", a.attachSession(a.handleGetBoard, false)).Methods("GET")
|
||||
apiv2.HandleFunc("/boards/{boardID}", a.sessionRequired(a.handlePatchBoard)).Methods("PATCH")
|
||||
apiv2.HandleFunc("/boards/{boardID}", a.sessionRequired(a.handleDeleteBoard)).Methods("DELETE")
|
||||
apiv2.HandleFunc("/boards/{boardID}/duplicate", a.sessionRequired(a.handleDuplicateBoard)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards/{boardID}/undelete", a.sessionRequired(a.handleUndeleteBoard)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards/{boardID}/blocks", a.attachSession(a.handleGetBlocks, false)).Methods("GET")
|
||||
apiv2.HandleFunc("/boards/{boardID}/blocks", a.sessionRequired(a.handlePostBlocks)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards/{boardID}/blocks", a.sessionRequired(a.handlePatchBlocks)).Methods("PATCH")
|
||||
apiv2.HandleFunc("/boards/{boardID}/blocks/{blockID}", a.sessionRequired(a.handleDeleteBlock)).Methods("DELETE")
|
||||
apiv2.HandleFunc("/boards/{boardID}/blocks/{blockID}", a.sessionRequired(a.handlePatchBlock)).Methods("PATCH")
|
||||
apiv2.HandleFunc("/boards/{boardID}/blocks/{blockID}/undelete", a.sessionRequired(a.handleUndeleteBlock)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards/{boardID}/blocks/{blockID}/duplicate", a.sessionRequired(a.handleDuplicateBlock)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards/{boardID}/metadata", a.sessionRequired(a.handleGetBoardMetadata)).Methods("GET")
|
||||
|
||||
// Member APIs
|
||||
apiv1.HandleFunc("/boards/{boardID}/members", a.sessionRequired(a.handleGetMembersForBoard)).Methods("GET")
|
||||
apiv1.HandleFunc("/boards/{boardID}/members", a.sessionRequired(a.handleAddMember)).Methods("POST")
|
||||
apiv1.HandleFunc("/boards/{boardID}/members/{userID}", a.sessionRequired(a.handleUpdateMember)).Methods("PUT")
|
||||
apiv1.HandleFunc("/boards/{boardID}/members/{userID}", a.sessionRequired(a.handleDeleteMember)).Methods("DELETE")
|
||||
apiv1.HandleFunc("/boards/{boardID}/join", a.sessionRequired(a.handleJoinBoard)).Methods("POST")
|
||||
apiv1.HandleFunc("/boards/{boardID}/leave", a.sessionRequired(a.handleLeaveBoard)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards/{boardID}/members", a.sessionRequired(a.handleGetMembersForBoard)).Methods("GET")
|
||||
apiv2.HandleFunc("/boards/{boardID}/members", a.sessionRequired(a.handleAddMember)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards/{boardID}/members/{userID}", a.sessionRequired(a.handleUpdateMember)).Methods("PUT")
|
||||
apiv2.HandleFunc("/boards/{boardID}/members/{userID}", a.sessionRequired(a.handleDeleteMember)).Methods("DELETE")
|
||||
apiv2.HandleFunc("/boards/{boardID}/join", a.sessionRequired(a.handleJoinBoard)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards/{boardID}/leave", a.sessionRequired(a.handleLeaveBoard)).Methods("POST")
|
||||
|
||||
// Sharing APIs
|
||||
apiv1.HandleFunc("/boards/{boardID}/sharing", a.sessionRequired(a.handlePostSharing)).Methods("POST")
|
||||
apiv1.HandleFunc("/boards/{boardID}/sharing", a.sessionRequired(a.handleGetSharing)).Methods("GET")
|
||||
apiv2.HandleFunc("/boards/{boardID}/sharing", a.sessionRequired(a.handlePostSharing)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards/{boardID}/sharing", a.sessionRequired(a.handleGetSharing)).Methods("GET")
|
||||
|
||||
// Team APIs
|
||||
apiv1.HandleFunc("/teams", a.sessionRequired(a.handleGetTeams)).Methods("GET")
|
||||
apiv1.HandleFunc("/teams/{teamID}", a.sessionRequired(a.handleGetTeam)).Methods("GET")
|
||||
apiv1.HandleFunc("/teams/{teamID}/regenerate_signup_token", a.sessionRequired(a.handlePostTeamRegenerateSignupToken)).Methods("POST")
|
||||
apiv1.HandleFunc("/teams/{teamID}/users", a.sessionRequired(a.handleGetTeamUsers)).Methods("GET")
|
||||
apiv1.HandleFunc("/teams/{teamID}/archive/export", a.sessionRequired(a.handleArchiveExportTeam)).Methods("GET")
|
||||
apiv1.HandleFunc("/teams/{teamID}/{boardID}/files", a.sessionRequired(a.handleUploadFile)).Methods("POST")
|
||||
apiv2.HandleFunc("/teams", a.sessionRequired(a.handleGetTeams)).Methods("GET")
|
||||
apiv2.HandleFunc("/teams/{teamID}", a.sessionRequired(a.handleGetTeam)).Methods("GET")
|
||||
apiv2.HandleFunc("/teams/{teamID}/regenerate_signup_token", a.sessionRequired(a.handlePostTeamRegenerateSignupToken)).Methods("POST")
|
||||
apiv2.HandleFunc("/teams/{teamID}/users", a.sessionRequired(a.handleGetTeamUsers)).Methods("GET")
|
||||
apiv2.HandleFunc("/teams/{teamID}/archive/export", a.sessionRequired(a.handleArchiveExportTeam)).Methods("GET")
|
||||
apiv2.HandleFunc("/teams/{teamID}/{boardID}/files", a.sessionRequired(a.handleUploadFile)).Methods("POST")
|
||||
|
||||
// User APIs
|
||||
apiv1.HandleFunc("/users/me", a.sessionRequired(a.handleGetMe)).Methods("GET")
|
||||
apiv1.HandleFunc("/users/me/memberships", a.sessionRequired(a.handleGetMyMemberships)).Methods("GET")
|
||||
apiv1.HandleFunc("/users/{userID}", a.sessionRequired(a.handleGetUser)).Methods("GET")
|
||||
apiv1.HandleFunc("/users/{userID}/changepassword", a.sessionRequired(a.handleChangePassword)).Methods("POST")
|
||||
apiv1.HandleFunc("/users/{userID}/config", a.sessionRequired(a.handleUpdateUserConfig)).Methods(http.MethodPut)
|
||||
apiv2.HandleFunc("/users/me", a.sessionRequired(a.handleGetMe)).Methods("GET")
|
||||
apiv2.HandleFunc("/users/me/memberships", a.sessionRequired(a.handleGetMyMemberships)).Methods("GET")
|
||||
apiv2.HandleFunc("/users/{userID}", a.sessionRequired(a.handleGetUser)).Methods("GET")
|
||||
apiv2.HandleFunc("/users/{userID}/changepassword", a.sessionRequired(a.handleChangePassword)).Methods("POST")
|
||||
apiv2.HandleFunc("/users/{userID}/config", a.sessionRequired(a.handleUpdateUserConfig)).Methods(http.MethodPut)
|
||||
|
||||
// BoardsAndBlocks APIs
|
||||
apiv1.HandleFunc("/boards-and-blocks", a.sessionRequired(a.handleCreateBoardsAndBlocks)).Methods("POST")
|
||||
apiv1.HandleFunc("/boards-and-blocks", a.sessionRequired(a.handlePatchBoardsAndBlocks)).Methods("PATCH")
|
||||
apiv1.HandleFunc("/boards-and-blocks", a.sessionRequired(a.handleDeleteBoardsAndBlocks)).Methods("DELETE")
|
||||
apiv2.HandleFunc("/boards-and-blocks", a.sessionRequired(a.handleCreateBoardsAndBlocks)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards-and-blocks", a.sessionRequired(a.handlePatchBoardsAndBlocks)).Methods("PATCH")
|
||||
apiv2.HandleFunc("/boards-and-blocks", a.sessionRequired(a.handleDeleteBoardsAndBlocks)).Methods("DELETE")
|
||||
|
||||
// Auth APIs
|
||||
apiv1.HandleFunc("/login", a.handleLogin).Methods("POST")
|
||||
apiv1.HandleFunc("/logout", a.sessionRequired(a.handleLogout)).Methods("POST")
|
||||
apiv1.HandleFunc("/register", a.handleRegister).Methods("POST")
|
||||
apiv1.HandleFunc("/clientConfig", a.getClientConfig).Methods("GET")
|
||||
apiv2.HandleFunc("/login", a.handleLogin).Methods("POST")
|
||||
apiv2.HandleFunc("/logout", a.sessionRequired(a.handleLogout)).Methods("POST")
|
||||
apiv2.HandleFunc("/register", a.handleRegister).Methods("POST")
|
||||
apiv2.HandleFunc("/clientConfig", a.getClientConfig).Methods("GET")
|
||||
|
||||
// Category APIs
|
||||
apiv1.HandleFunc("/teams/{teamID}/categories", a.sessionRequired(a.handleCreateCategory)).Methods(http.MethodPost)
|
||||
apiv1.HandleFunc("/teams/{teamID}/categories/{categoryID}", a.sessionRequired(a.handleUpdateCategory)).Methods(http.MethodPut)
|
||||
apiv1.HandleFunc("/teams/{teamID}/categories/{categoryID}", a.sessionRequired(a.handleDeleteCategory)).Methods(http.MethodDelete)
|
||||
apiv2.HandleFunc("/teams/{teamID}/categories", a.sessionRequired(a.handleCreateCategory)).Methods(http.MethodPost)
|
||||
apiv2.HandleFunc("/teams/{teamID}/categories/{categoryID}", a.sessionRequired(a.handleUpdateCategory)).Methods(http.MethodPut)
|
||||
apiv2.HandleFunc("/teams/{teamID}/categories/{categoryID}", a.sessionRequired(a.handleDeleteCategory)).Methods(http.MethodDelete)
|
||||
|
||||
// Category Block APIs
|
||||
apiv1.HandleFunc("/teams/{teamID}/categories", a.sessionRequired(a.handleGetUserCategoryBlocks)).Methods(http.MethodGet)
|
||||
apiv1.HandleFunc("/teams/{teamID}/categories/{categoryID}/blocks/{blockID}", a.sessionRequired(a.handleUpdateCategoryBlock)).Methods(http.MethodPost)
|
||||
apiv2.HandleFunc("/teams/{teamID}/categories", a.sessionRequired(a.handleGetUserCategoryBlocks)).Methods(http.MethodGet)
|
||||
apiv2.HandleFunc("/teams/{teamID}/categories/{categoryID}/blocks/{blockID}", a.sessionRequired(a.handleUpdateCategoryBlock)).Methods(http.MethodPost)
|
||||
|
||||
// Get Files API
|
||||
apiv1.HandleFunc("/files/teams/{teamID}/{boardID}/{filename}", a.attachSession(a.handleServeFile, false)).Methods("GET")
|
||||
apiv2.HandleFunc("/files/teams/{teamID}/{boardID}/{filename}", a.attachSession(a.handleServeFile, false)).Methods("GET")
|
||||
|
||||
// Subscriptions
|
||||
apiv1.HandleFunc("/subscriptions", a.sessionRequired(a.handleCreateSubscription)).Methods("POST")
|
||||
apiv1.HandleFunc("/subscriptions/{blockID}/{subscriberID}", a.sessionRequired(a.handleDeleteSubscription)).Methods("DELETE")
|
||||
apiv1.HandleFunc("/subscriptions/{subscriberID}", a.sessionRequired(a.handleGetSubscriptions)).Methods("GET")
|
||||
apiv2.HandleFunc("/subscriptions", a.sessionRequired(a.handleCreateSubscription)).Methods("POST")
|
||||
apiv2.HandleFunc("/subscriptions/{blockID}/{subscriberID}", a.sessionRequired(a.handleDeleteSubscription)).Methods("DELETE")
|
||||
apiv2.HandleFunc("/subscriptions/{subscriberID}", a.sessionRequired(a.handleGetSubscriptions)).Methods("GET")
|
||||
|
||||
// onboarding tour endpoints
|
||||
apiv1.HandleFunc("/teams/{teamID}/onboard", a.sessionRequired(a.handleOnboard)).Methods(http.MethodPost)
|
||||
apiv2.HandleFunc("/teams/{teamID}/onboard", a.sessionRequired(a.handleOnboard)).Methods(http.MethodPost)
|
||||
|
||||
// archives
|
||||
apiv1.HandleFunc("/boards/{boardID}/archive/export", a.sessionRequired(a.handleArchiveExportBoard)).Methods("GET")
|
||||
apiv1.HandleFunc("/teams/{teamID}/archive/import", a.sessionRequired(a.handleArchiveImport)).Methods("POST")
|
||||
apiv2.HandleFunc("/boards/{boardID}/archive/export", a.sessionRequired(a.handleArchiveExportBoard)).Methods("GET")
|
||||
apiv2.HandleFunc("/teams/{teamID}/archive/import", a.sessionRequired(a.handleArchiveImport)).Methods("POST")
|
||||
}
|
||||
|
||||
func (a *API) RegisterAdminRoutes(r *mux.Router) {
|
||||
r.HandleFunc("/api/v1/admin/users/{username}/password", a.adminRequired(a.handleAdminSetPassword)).Methods("POST")
|
||||
r.HandleFunc("/api/v2/admin/users/{username}/password", a.adminRequired(a.handleAdminSetPassword)).Methods("POST")
|
||||
}
|
||||
|
||||
func getUserID(r *http.Request) string {
|
||||
@ -230,7 +230,7 @@ func (a *API) hasValidReadTokenForBoard(r *http.Request, boardID string) bool {
|
||||
}
|
||||
|
||||
func (a *API) handleGetBlocks(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/boards/{boardID}/blocks getBlocks
|
||||
// swagger:operation GET /boards/{boardID}/blocks getBlocks
|
||||
//
|
||||
// Returns blocks
|
||||
//
|
||||
@ -591,7 +591,7 @@ func (a *API) handleUpdateCategoryBlock(w http.ResponseWriter, r *http.Request)
|
||||
}
|
||||
|
||||
func (a *API) handlePostBlocks(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/boards/{boardID}/blocks updateBlocks
|
||||
// swagger:operation POST /boards/{boardID}/blocks updateBlocks
|
||||
//
|
||||
// Insert blocks. The specified IDs will only be used to link
|
||||
// blocks with existing ones, the rest will be replaced by server
|
||||
@ -719,7 +719,7 @@ func (a *API) handlePostBlocks(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleUpdateUserConfig(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation PATCH /api/v1/users/{userID}/config updateUserConfig
|
||||
// swagger:operation PATCH /users/{userID}/config updateUserConfig
|
||||
//
|
||||
// Updates user config
|
||||
//
|
||||
@ -793,7 +793,7 @@ func (a *API) handleUpdateUserConfig(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleGetUser(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/users/{userID} getUser
|
||||
// swagger:operation GET /users/{userID} getUser
|
||||
//
|
||||
// Returns a user
|
||||
//
|
||||
@ -842,7 +842,7 @@ func (a *API) handleGetUser(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleGetMe(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/users/me getMe
|
||||
// swagger:operation GET /users/me getMe
|
||||
//
|
||||
// Returns the currently logged-in user
|
||||
//
|
||||
@ -899,7 +899,7 @@ func (a *API) handleGetMe(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleGetMyMemberships(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/users/me/memberships getMyMemberships
|
||||
// swagger:operation GET /users/me/memberships getMyMemberships
|
||||
//
|
||||
// Returns the currently users board memberships
|
||||
//
|
||||
@ -944,7 +944,7 @@ func (a *API) handleGetMyMemberships(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleDeleteBlock(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation DELETE /api/v1/boards/{boardID}/blocks/{blockID} deleteBlock
|
||||
// swagger:operation DELETE /boards/{boardID}/blocks/{blockID} deleteBlock
|
||||
//
|
||||
// Deletes a block
|
||||
//
|
||||
@ -1012,7 +1012,7 @@ func (a *API) handleDeleteBlock(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleUndeleteBlock(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/boards/{boardID}/blocks/{blockID}/undelete undeleteBlock
|
||||
// swagger:operation POST /boards/{boardID}/blocks/{blockID}/undelete undeleteBlock
|
||||
//
|
||||
// Undeletes a block
|
||||
//
|
||||
@ -1105,7 +1105,7 @@ func (a *API) handleUndeleteBlock(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleUndeleteBoard(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/boards/{boardID}/undelete undeleteBoard
|
||||
// swagger:operation POST /boards/{boardID}/undelete undeleteBoard
|
||||
//
|
||||
// Undeletes a board
|
||||
//
|
||||
@ -1157,7 +1157,7 @@ func (a *API) handleUndeleteBoard(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handlePatchBlock(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation PATCH /api/v1/boards/{boardID}/blocks/{blockID} patchBlock
|
||||
// swagger:operation PATCH /boards/{boardID}/blocks/{blockID} patchBlock
|
||||
//
|
||||
// Partially updates a block
|
||||
//
|
||||
@ -1244,7 +1244,7 @@ func (a *API) handlePatchBlock(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handlePatchBlocks(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation PATCH /api/v1/boards/{boardID}/blocks/ patchBlocks
|
||||
// swagger:operation PATCH /boards/{boardID}/blocks/ patchBlocks
|
||||
//
|
||||
// Partially updates batch of blocks
|
||||
//
|
||||
@ -1327,7 +1327,7 @@ func (a *API) handlePatchBlocks(w http.ResponseWriter, r *http.Request) {
|
||||
// Sharing
|
||||
|
||||
func (a *API) handleGetSharing(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/boards/{boardID}/sharing getSharing
|
||||
// swagger:operation GET /boards/{boardID}/sharing getSharing
|
||||
//
|
||||
// Returns sharing information for a board
|
||||
//
|
||||
@ -1396,7 +1396,7 @@ func (a *API) handleGetSharing(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handlePostSharing(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/boards/{boardID}/sharing postSharing
|
||||
// swagger:operation POST /boards/{boardID}/sharing postSharing
|
||||
//
|
||||
// Sets sharing information for a board
|
||||
//
|
||||
@ -1491,7 +1491,7 @@ func (a *API) handlePostSharing(w http.ResponseWriter, r *http.Request) {
|
||||
// Team
|
||||
|
||||
func (a *API) handleGetTeams(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/teams getTeams
|
||||
// swagger:operation GET /teams getTeams
|
||||
//
|
||||
// Returns information of all the teams
|
||||
//
|
||||
@ -1534,7 +1534,7 @@ func (a *API) handleGetTeams(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleGetTeam(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/teams/{teamID} getTeam
|
||||
// swagger:operation GET /teams/{teamID} getTeam
|
||||
//
|
||||
// Returns information of the root team
|
||||
//
|
||||
@ -1603,7 +1603,7 @@ func (a *API) handleGetTeam(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handlePostTeamRegenerateSignupToken(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/teams/{teamID}/regenerate_signup_token regenerateSignupToken
|
||||
// swagger:operation POST /teams/{teamID}/regenerate_signup_token regenerateSignupToken
|
||||
//
|
||||
// Regenerates the signup token for the root team
|
||||
//
|
||||
@ -1654,7 +1654,7 @@ func (a *API) handlePostTeamRegenerateSignupToken(w http.ResponseWriter, r *http
|
||||
// File upload
|
||||
|
||||
func (a *API) handleServeFile(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET "api/v1/files/teams/{teamID}/{boardID}/{filename} getFile
|
||||
// swagger:operation GET "api/v2/files/teams/{teamID}/{boardID}/{filename} getFile
|
||||
//
|
||||
// Returns the contents of an uploaded file
|
||||
//
|
||||
@ -1765,7 +1765,7 @@ func FileUploadResponseFromJSON(data io.Reader) (*FileUploadResponse, error) {
|
||||
}
|
||||
|
||||
func (a *API) handleUploadFile(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/teams/{teamID}/boards/{boardID}/files uploadFile
|
||||
// swagger:operation POST /teams/{teamID}/boards/{boardID}/files uploadFile
|
||||
//
|
||||
// Upload a binary file, attached to a root block
|
||||
//
|
||||
@ -1866,7 +1866,7 @@ func (a *API) handleUploadFile(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleGetTeamUsers(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/teams/{teamID}/users getTeamUsers
|
||||
// swagger:operation GET /teams/{teamID}/users getTeamUsers
|
||||
//
|
||||
// Returns team users
|
||||
//
|
||||
@ -1931,7 +1931,7 @@ func (a *API) handleGetTeamUsers(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleGetBoards(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/teams/{teamID}/boards getBoards
|
||||
// swagger:operation GET /teams/{teamID}/boards getBoards
|
||||
//
|
||||
// Returns team boards
|
||||
//
|
||||
@ -1996,7 +1996,7 @@ func (a *API) handleGetBoards(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleGetTemplates(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/teams/{teamID}/templates getTemplates
|
||||
// swagger:operation GET /teams/{teamID}/templates getTemplates
|
||||
//
|
||||
// Returns team templates
|
||||
//
|
||||
@ -2072,7 +2072,7 @@ func (a *API) handleGetTemplates(w http.ResponseWriter, r *http.Request) {
|
||||
// subscriptions
|
||||
|
||||
func (a *API) handleCreateSubscription(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/subscriptions createSubscription
|
||||
// swagger:operation POST /subscriptions createSubscription
|
||||
//
|
||||
// Creates a subscription to a block for a user. The user will receive change notifications for the block.
|
||||
//
|
||||
@ -2159,7 +2159,7 @@ func (a *API) handleCreateSubscription(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleDeleteSubscription(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation DELETE /api/v1/subscriptions/{blockID}/{subscriberID} deleteSubscription
|
||||
// swagger:operation DELETE /subscriptions/{blockID}/{subscriberID} deleteSubscription
|
||||
//
|
||||
// Deletes a subscription a user has for a a block. The user will no longer receive change notifications for the block.
|
||||
//
|
||||
@ -2221,7 +2221,7 @@ func (a *API) handleDeleteSubscription(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleGetSubscriptions(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/subscriptions/{subscriberID} getSubscriptions
|
||||
// swagger:operation GET /subscriptions/{subscriberID} getSubscriptions
|
||||
//
|
||||
// Gets subscriptions for a user.
|
||||
//
|
||||
@ -2286,7 +2286,7 @@ func (a *API) handleGetSubscriptions(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleCreateBoard(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/boards createBoard
|
||||
// swagger:operation POST /boards createBoard
|
||||
//
|
||||
// Creates a new board
|
||||
//
|
||||
@ -2375,7 +2375,7 @@ func (a *API) handleCreateBoard(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleOnboard(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/team/{teamID}/onboard onboard
|
||||
// swagger:operation POST /team/{teamID}/onboard onboard
|
||||
//
|
||||
// Onboards a user on Boards.
|
||||
//
|
||||
@ -2427,7 +2427,7 @@ func (a *API) handleOnboard(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleGetBoard(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/boards/{boardID} getBoard
|
||||
// swagger:operation GET /boards/{boardID} getBoard
|
||||
//
|
||||
// Returns a board
|
||||
//
|
||||
@ -2508,7 +2508,7 @@ func (a *API) handleGetBoard(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handlePatchBoard(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation PATCH /api/v1/boards/{boardID} patchBoard
|
||||
// swagger:operation PATCH /boards/{boardID} patchBoard
|
||||
//
|
||||
// Partially updates a board
|
||||
//
|
||||
@ -2613,7 +2613,7 @@ func (a *API) handlePatchBoard(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleDeleteBoard(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation DELETE /api/v1/boards/{boardID} deleteBoard
|
||||
// swagger:operation DELETE /boards/{boardID} deleteBoard
|
||||
//
|
||||
// Removes a board
|
||||
//
|
||||
@ -2673,7 +2673,7 @@ func (a *API) handleDeleteBoard(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleDuplicateBoard(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/boards/{boardID}/duplicate duplicateBoard
|
||||
// swagger:operation POST /boards/{boardID}/duplicate duplicateBoard
|
||||
//
|
||||
// Returns the new created board and all the blocks
|
||||
//
|
||||
@ -2765,7 +2765,7 @@ func (a *API) handleDuplicateBoard(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleDuplicateBlock(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/boards/{boardID}/blocks/{blockID}/duplicate duplicateBlock
|
||||
// swagger:operation POST /boards/{boardID}/blocks/{blockID}/duplicate duplicateBlock
|
||||
//
|
||||
// Returns the new created blocks
|
||||
//
|
||||
@ -2868,7 +2868,7 @@ func (a *API) handleDuplicateBlock(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleGetBoardMetadata(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/boards/{boardID}/metadata getBoardMetadata
|
||||
// swagger:operation GET /boards/{boardID}/metadata getBoardMetadata
|
||||
//
|
||||
// Returns a board's metadata
|
||||
//
|
||||
@ -2943,7 +2943,7 @@ func (a *API) handleGetBoardMetadata(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleSearchBoards(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/teams/{teamID}/boards/search searchBoards
|
||||
// swagger:operation GET /teams/{teamID}/boards/search searchBoards
|
||||
//
|
||||
// Returns the boards that match with a search term
|
||||
//
|
||||
@ -3019,7 +3019,7 @@ func (a *API) handleSearchBoards(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleGetMembersForBoard(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/boards/{boardID}/members getMembersForBoard
|
||||
// swagger:operation GET /boards/{boardID}/members getMembersForBoard
|
||||
//
|
||||
// Returns the members of the board
|
||||
//
|
||||
@ -3453,7 +3453,7 @@ func (a *API) handleUpdateMember(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleDeleteMember(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation DELETE /api/v1/boards/{boardID}/members/{userID} deleteMember
|
||||
// swagger:operation DELETE /boards/{boardID}/members/{userID} deleteMember
|
||||
//
|
||||
// Deletes a member from a board
|
||||
//
|
||||
@ -3529,7 +3529,7 @@ func (a *API) handleDeleteMember(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleCreateBoardsAndBlocks(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/boards-and-blocks insertBoardsAndBlocks
|
||||
// swagger:operation POST /boards-and-blocks insertBoardsAndBlocks
|
||||
//
|
||||
// Creates new boards and blocks
|
||||
//
|
||||
@ -3673,7 +3673,7 @@ func (a *API) handleCreateBoardsAndBlocks(w http.ResponseWriter, r *http.Request
|
||||
}
|
||||
|
||||
func (a *API) handlePatchBoardsAndBlocks(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation PATCH /api/v1/boards-and-blocks patchBoardsAndBlocks
|
||||
// swagger:operation PATCH /boards-and-blocks patchBoardsAndBlocks
|
||||
//
|
||||
// Patches a set of related boards and blocks
|
||||
//
|
||||
@ -3811,7 +3811,7 @@ func (a *API) handlePatchBoardsAndBlocks(w http.ResponseWriter, r *http.Request)
|
||||
}
|
||||
|
||||
func (a *API) handleDeleteBoardsAndBlocks(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation DELETE /api/v1/boards-and-blocks deleteBoardsAndBlocks
|
||||
// swagger:operation DELETE /boards-and-blocks deleteBoardsAndBlocks
|
||||
//
|
||||
// Deletes boards and blocks
|
||||
//
|
||||
|
@ -17,7 +17,7 @@ const (
|
||||
)
|
||||
|
||||
func (a *API) handleArchiveExportBoard(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/boards/{boardID}/archive/export archiveExportBoard
|
||||
// swagger:operation GET /boards/{boardID}/archive/export archiveExportBoard
|
||||
//
|
||||
// Exports an archive of all blocks for one boards.
|
||||
//
|
||||
@ -85,7 +85,7 @@ func (a *API) handleArchiveExportBoard(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleArchiveExportTeam(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation GET /api/v1/teams/{teamID}/archive/export archiveExportTeam
|
||||
// swagger:operation GET /teams/{teamID}/archive/export archiveExportTeam
|
||||
//
|
||||
// Exports an archive of all blocks for all the boards in a team.
|
||||
//
|
||||
@ -154,7 +154,7 @@ func (a *API) handleArchiveExportTeam(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleArchiveImport(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/teams/{teamID}/archive/import archiveImport
|
||||
// swagger:operation POST /teams/{teamID}/archive/import archiveImport
|
||||
//
|
||||
// Import an archive of boards.
|
||||
//
|
||||
|
@ -139,7 +139,7 @@ func isValidPassword(password string) error {
|
||||
}
|
||||
|
||||
func (a *API) handleLogin(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/login login
|
||||
// swagger:operation POST /login login
|
||||
//
|
||||
// Login user
|
||||
//
|
||||
@ -220,7 +220,7 @@ func (a *API) handleLogin(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleLogout(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/logout logout
|
||||
// swagger:operation POST /logout logout
|
||||
//
|
||||
// Logout user
|
||||
//
|
||||
@ -271,7 +271,7 @@ func (a *API) handleLogout(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleRegister(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/register register
|
||||
// swagger:operation POST /register register
|
||||
//
|
||||
// Register new user
|
||||
//
|
||||
@ -369,7 +369,7 @@ func (a *API) handleRegister(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) handleChangePassword(w http.ResponseWriter, r *http.Request) {
|
||||
// swagger:operation POST /api/v1/users/{userID}/changepassword changePassword
|
||||
// swagger:operation POST /users/{userID}/changepassword changePassword
|
||||
//
|
||||
// Change a user's password
|
||||
//
|
||||
|
@ -15,7 +15,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
APIURLSuffix = "/api/v1"
|
||||
APIURLSuffix = "/api/v2"
|
||||
)
|
||||
|
||||
type RequestReaderError struct {
|
||||
|
@ -4,7 +4,7 @@
|
||||
//
|
||||
// Schemes: http, https
|
||||
// Host: localhost
|
||||
// BasePath: /api/v1
|
||||
// BasePath: /api/v2
|
||||
// Version: 1.0.0
|
||||
// License: Custom https://github.com/mattermost/focalboard/blob/main/LICENSE.txt
|
||||
// Contact: Focalboard<api@focalboard.com> https://www.focalboard.com
|
||||
|
@ -34,7 +34,7 @@ Refer to the [Mattermost API documentation here](https://api.mattermost.com/#tag
|
||||
Pass this token as a bearer token to the Boards APIs, e.g.
|
||||
|
||||
```
|
||||
curl -i -H "X-Requested-With: XMLHttpRequest" -H 'Authorization: Bearer abcdefghijklmnopqrstuvwxyz' https://community.mattermost.com/plugins/focalboard/api/v1/workspaces
|
||||
curl -i -H "X-Requested-With: XMLHttpRequest" -H 'Authorization: Bearer abcdefghijklmnopqrstuvwxyz' https://community.mattermost.com/plugins/focalboard/api/v2/workspaces
|
||||
```
|
||||
|
||||
Note that the `X-Requested-With: XMLHttpRequest` header is required to pass the CSRF check.
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@ import {UserConfigPatch} from '../../src/user'
|
||||
Cypress.Commands.add('apiRegisterUser', (data: Cypress.UserData, token?: string, failOnError?: boolean) => {
|
||||
return cy.request({
|
||||
method: 'POST',
|
||||
url: '/api/v1/register',
|
||||
url: '/api/v2/register',
|
||||
body: {
|
||||
...data,
|
||||
token,
|
||||
@ -22,7 +22,7 @@ Cypress.Commands.add('apiRegisterUser', (data: Cypress.UserData, token?: string,
|
||||
Cypress.Commands.add('apiLoginUser', (data: Cypress.LoginData) => {
|
||||
return cy.request({
|
||||
method: 'POST',
|
||||
url: '/api/v1/login',
|
||||
url: '/api/v2/login',
|
||||
body: {
|
||||
...data,
|
||||
type: 'normal',
|
||||
@ -55,7 +55,7 @@ Cypress.Commands.add('apiInitServer', () => {
|
||||
Cypress.Commands.add('apiDeleteBoard', (id: string) => {
|
||||
return cy.request({
|
||||
method: 'DELETE',
|
||||
url: `/api/v1/boards/${encodeURIComponent(id)}`,
|
||||
url: `/api/v2/boards/${encodeURIComponent(id)}`,
|
||||
...headers(),
|
||||
})
|
||||
})
|
||||
@ -71,7 +71,7 @@ const deleteBoards = (ids: string[]) => {
|
||||
Cypress.Commands.add('apiResetBoards', () => {
|
||||
return cy.request({
|
||||
method: 'GET',
|
||||
url: '/api/v1/teams/0/boards',
|
||||
url: '/api/v2/teams/0/boards',
|
||||
...headers(),
|
||||
}).then((response) => {
|
||||
if (Array.isArray(response.body)) {
|
||||
@ -91,7 +91,7 @@ Cypress.Commands.add('apiSkipTour', (userID: string) => {
|
||||
|
||||
return cy.request({
|
||||
method: 'PUT',
|
||||
url: `/api/v1/users/${encodeURIComponent(userID)}/config`,
|
||||
url: `/api/v2/users/${encodeURIComponent(userID)}/config`,
|
||||
...headers(),
|
||||
body,
|
||||
})
|
||||
@ -100,7 +100,7 @@ Cypress.Commands.add('apiSkipTour', (userID: string) => {
|
||||
Cypress.Commands.add('apiGetMe', () => {
|
||||
return cy.request({
|
||||
method: 'GET',
|
||||
url: '/api/v1/users/me',
|
||||
url: '/api/v2/users/me',
|
||||
...headers(),
|
||||
}).then((response) => response.body.id)
|
||||
})
|
||||
@ -109,7 +109,7 @@ Cypress.Commands.add('apiChangePassword', (userId: string, oldPassword: string,
|
||||
const body = {oldPassword, newPassword}
|
||||
return cy.request({
|
||||
method: 'POST',
|
||||
url: `/api/v1/users/${encodeURIComponent(userId)}/changepassword`,
|
||||
url: `/api/v2/users/${encodeURIComponent(userId)}/changepassword`,
|
||||
...headers(),
|
||||
body,
|
||||
})
|
||||
|
@ -61,7 +61,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async login(username: string, password: string): Promise<boolean> {
|
||||
const path = '/api/v1/login'
|
||||
const path = '/api/v2/login'
|
||||
const body = JSON.stringify({username, password, type: 'normal'})
|
||||
const response = await fetch(this.getBaseURL() + path, {
|
||||
method: 'POST',
|
||||
@ -81,7 +81,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async logout(): Promise<boolean> {
|
||||
const path = '/api/v1/logout'
|
||||
const path = '/api/v2/logout'
|
||||
const response = await fetch(this.getBaseURL() + path, {
|
||||
method: 'POST',
|
||||
headers: this.headers(),
|
||||
@ -95,7 +95,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async getClientConfig(): Promise<ClientConfig | null> {
|
||||
const path = '/api/v1/clientConfig'
|
||||
const path = '/api/v2/clientConfig'
|
||||
const response = await fetch(this.getBaseURL() + path, {
|
||||
method: 'GET',
|
||||
headers: this.headers(),
|
||||
@ -109,7 +109,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async register(email: string, username: string, password: string, token?: string): Promise<{code: number, json: {error?: string}}> {
|
||||
const path = '/api/v1/register'
|
||||
const path = '/api/v2/register'
|
||||
const body = JSON.stringify({email, username, password, token})
|
||||
const response = await fetch(this.getBaseURL() + path, {
|
||||
method: 'POST',
|
||||
@ -121,7 +121,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async changePassword(userId: string, oldPassword: string, newPassword: string): Promise<{code: number, json: {error?: string}}> {
|
||||
const path = `/api/v1/users/${encodeURIComponent(userId)}/changepassword`
|
||||
const path = `/api/v2/users/${encodeURIComponent(userId)}/changepassword`
|
||||
const body = JSON.stringify({oldPassword, newPassword})
|
||||
const response = await fetch(this.getBaseURL() + path, {
|
||||
method: 'POST',
|
||||
@ -148,15 +148,15 @@ class OctoClient {
|
||||
teamIdToUse = this.teamId === Constants.globalTeamId ? UserSettings.lastTeamId || this.teamId : this.teamId
|
||||
}
|
||||
|
||||
return `/api/v1/teams/${teamIdToUse}`
|
||||
return `/api/v2/teams/${teamIdToUse}`
|
||||
}
|
||||
|
||||
private teamsPath(): string {
|
||||
return '/api/v1/teams'
|
||||
return '/api/v2/teams'
|
||||
}
|
||||
|
||||
async getMe(): Promise<IUser | undefined> {
|
||||
const path = '/api/v1/users/me'
|
||||
const path = '/api/v2/users/me'
|
||||
const response = await fetch(this.getBaseURL() + path, {headers: this.headers()})
|
||||
if (response.status !== 200) {
|
||||
return undefined
|
||||
@ -166,7 +166,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async getMyBoardMemberships(): Promise<BoardMember[]> {
|
||||
const path = '/api/v1/users/me/memberships'
|
||||
const path = '/api/v2/users/me/memberships'
|
||||
const response = await fetch(this.getBaseURL() + path, {headers: this.headers()})
|
||||
if (response.status !== 200) {
|
||||
return []
|
||||
@ -176,7 +176,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async getUser(userId: string): Promise<IUser | undefined> {
|
||||
const path = `/api/v1/users/${encodeURIComponent(userId)}`
|
||||
const path = `/api/v2/users/${encodeURIComponent(userId)}`
|
||||
const response = await fetch(this.getBaseURL() + path, {headers: this.headers()})
|
||||
if (response.status !== 200) {
|
||||
return undefined
|
||||
@ -186,7 +186,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async patchUserConfig(userID: string, patch: UserConfigPatch): Promise<Record<string, string> | undefined> {
|
||||
const path = `/api/v1/users/${encodeURIComponent(userID)}/config`
|
||||
const path = `/api/v2/users/${encodeURIComponent(userID)}/config`
|
||||
const body = JSON.stringify(patch)
|
||||
const response = await fetch(this.getBaseURL() + path, {
|
||||
headers: this.headers(),
|
||||
@ -202,12 +202,12 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async exportBoardArchive(boardID: string): Promise<Response> {
|
||||
const path = `/api/v1/boards/${boardID}/archive/export`
|
||||
const path = `/api/v2/boards/${boardID}/archive/export`
|
||||
return fetch(this.getBaseURL() + path, {headers: this.headers()})
|
||||
}
|
||||
|
||||
async exportFullArchive(teamID: string): Promise<Response> {
|
||||
const path = `/api/v1/teams/${teamID}/archive/export`
|
||||
const path = `/api/v2/teams/${teamID}/archive/export`
|
||||
return fetch(this.getBaseURL() + path, {headers: this.headers()})
|
||||
}
|
||||
|
||||
@ -243,7 +243,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async getBlocksWithBlockID(blockID: string, boardID: string, optionalReadToken?: string): Promise<Block[]> {
|
||||
let path = `/api/v1/boards/${boardID}/blocks?block_id=${blockID}`
|
||||
let path = `/api/v2/boards/${boardID}/blocks?block_id=${blockID}`
|
||||
const readToken = optionalReadToken || Utils.getReadToken()
|
||||
if (readToken) {
|
||||
path += `&read_token=${readToken}`
|
||||
@ -252,7 +252,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async getAllBlocks(boardID: string): Promise<Block[]> {
|
||||
let path = `/api/v1/boards/${boardID}/blocks?all=true`
|
||||
let path = `/api/v2/boards/${boardID}/blocks?all=true`
|
||||
const readToken = Utils.getReadToken()
|
||||
if (readToken) {
|
||||
path += `&read_token=${readToken}`
|
||||
@ -301,7 +301,7 @@ class OctoClient {
|
||||
async patchBlock(boardId: string, blockId: string, blockPatch: BlockPatch): Promise<Response> {
|
||||
Utils.log(`patchBlock: ${blockId} block`)
|
||||
const body = JSON.stringify(blockPatch)
|
||||
return fetch(`${this.getBaseURL()}/api/v1/boards/${boardId}/blocks/${blockId}`, {
|
||||
return fetch(`${this.getBaseURL()}/api/v2/boards/${boardId}/blocks/${blockId}`, {
|
||||
method: 'PATCH',
|
||||
headers: this.headers(),
|
||||
body,
|
||||
@ -324,7 +324,7 @@ class OctoClient {
|
||||
|
||||
async deleteBlock(boardId: string, blockId: string): Promise<Response> {
|
||||
Utils.log(`deleteBlock: ${blockId} on board ${boardId}`)
|
||||
return fetch(`${this.getBaseURL()}/api/v1/boards/${boardId}/blocks/${encodeURIComponent(blockId)}`, {
|
||||
return fetch(`${this.getBaseURL()}/api/v2/boards/${boardId}/blocks/${encodeURIComponent(blockId)}`, {
|
||||
method: 'DELETE',
|
||||
headers: this.headers(),
|
||||
})
|
||||
@ -332,7 +332,7 @@ class OctoClient {
|
||||
|
||||
async undeleteBlock(boardId: string, blockId: string): Promise<Response> {
|
||||
Utils.log(`undeleteBlock: ${blockId}`)
|
||||
return fetch(`${this.getBaseURL()}/api/v1/boards/${encodeURIComponent(boardId)}/blocks/${encodeURIComponent(blockId)}/undelete`, {
|
||||
return fetch(`${this.getBaseURL()}/api/v2/boards/${encodeURIComponent(boardId)}/blocks/${encodeURIComponent(blockId)}/undelete`, {
|
||||
method: 'POST',
|
||||
headers: this.headers(),
|
||||
})
|
||||
@ -340,7 +340,7 @@ class OctoClient {
|
||||
|
||||
async undeleteBoard(boardId: string): Promise<Response> {
|
||||
Utils.log(`undeleteBoard: ${boardId}`)
|
||||
return fetch(`${this.getBaseURL()}/api/v1/boards/${boardId}/undelete`, {
|
||||
return fetch(`${this.getBaseURL()}/api/v2/boards/${boardId}/undelete`, {
|
||||
method: 'POST',
|
||||
headers: this.headers(),
|
||||
})
|
||||
@ -354,7 +354,7 @@ class OctoClient {
|
||||
subscriberId: userId,
|
||||
}
|
||||
|
||||
return fetch(this.getBaseURL() + '/api/v1/subscriptions', {
|
||||
return fetch(this.getBaseURL() + '/api/v2/subscriptions', {
|
||||
method: 'POST',
|
||||
headers: this.headers(),
|
||||
body: JSON.stringify(body),
|
||||
@ -362,7 +362,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async unfollowBlock(blockId: string, blockType: string, userId: string): Promise<Response> {
|
||||
return fetch(this.getBaseURL() + `/api/v1/subscriptions/${blockId}/${userId}`, {
|
||||
return fetch(this.getBaseURL() + `/api/v2/subscriptions/${blockId}/${userId}`, {
|
||||
method: 'DELETE',
|
||||
headers: this.headers(),
|
||||
})
|
||||
@ -378,7 +378,7 @@ class OctoClient {
|
||||
Utils.log(`\t ${block.type}, ${block.id}, ${block.title?.substr(0, 50) || ''}`)
|
||||
})
|
||||
const body = JSON.stringify(blocks)
|
||||
return fetch(`${this.getBaseURL()}/api/v1/boards/${boardId}/blocks` + (sourceBoardID ? `?sourceBoardID=${encodeURIComponent(sourceBoardID)}` : ''), {
|
||||
return fetch(`${this.getBaseURL()}/api/v2/boards/${boardId}/blocks` + (sourceBoardID ? `?sourceBoardID=${encodeURIComponent(sourceBoardID)}` : ''), {
|
||||
method: 'POST',
|
||||
headers: this.headers(),
|
||||
body,
|
||||
@ -395,7 +395,7 @@ class OctoClient {
|
||||
})
|
||||
|
||||
const body = JSON.stringify(bab)
|
||||
return fetch(this.getBaseURL() + '/api/v1/boards-and-blocks', {
|
||||
return fetch(this.getBaseURL() + '/api/v2/boards-and-blocks', {
|
||||
method: 'POST',
|
||||
headers: this.headers(),
|
||||
body,
|
||||
@ -408,7 +408,7 @@ class OctoClient {
|
||||
Utils.log(`\t Blocks ${blockIds.join(', ')}`)
|
||||
|
||||
const body = JSON.stringify({boards: boardIds, blocks: blockIds})
|
||||
return fetch(this.getBaseURL() + '/api/v1/boards-and-blocks', {
|
||||
return fetch(this.getBaseURL() + '/api/v2/boards-and-blocks', {
|
||||
method: 'DELETE',
|
||||
headers: this.headers(),
|
||||
body,
|
||||
@ -420,7 +420,7 @@ class OctoClient {
|
||||
Utils.log(`createBoardMember: user ${member.userId} and board ${member.boardId}`)
|
||||
|
||||
const body = JSON.stringify(member)
|
||||
const response = await fetch(this.getBaseURL() + `/api/v1/boards/${member.boardId}/members`, {
|
||||
const response = await fetch(this.getBaseURL() + `/api/v2/boards/${member.boardId}/members`, {
|
||||
method: 'POST',
|
||||
headers: this.headers(),
|
||||
body,
|
||||
@ -436,7 +436,7 @@ class OctoClient {
|
||||
async joinBoard(boardId: string): Promise<BoardMember|undefined> {
|
||||
Utils.log(`joinBoard: board ${boardId}`)
|
||||
|
||||
const response = await fetch(this.getBaseURL() + `/api/v1/boards/${boardId}/join`, {
|
||||
const response = await fetch(this.getBaseURL() + `/api/v2/boards/${boardId}/join`, {
|
||||
method: 'POST',
|
||||
headers: this.headers()
|
||||
})
|
||||
@ -452,7 +452,7 @@ class OctoClient {
|
||||
Utils.log(`udpateBoardMember: user ${member.userId} and board ${member.boardId}`)
|
||||
|
||||
const body = JSON.stringify(member)
|
||||
return fetch(this.getBaseURL() + `/api/v1/boards/${member.boardId}/members/${member.userId}`, {
|
||||
return fetch(this.getBaseURL() + `/api/v2/boards/${member.boardId}/members/${member.userId}`, {
|
||||
method: 'PUT',
|
||||
headers: this.headers(),
|
||||
body,
|
||||
@ -462,7 +462,7 @@ class OctoClient {
|
||||
async deleteBoardMember(member: BoardMember): Promise<Response> {
|
||||
Utils.log(`deleteBoardMember: user ${member.userId} and board ${member.boardId}`)
|
||||
|
||||
return fetch(this.getBaseURL() + `/api/v1/boards/${member.boardId}/members/${member.userId}`, {
|
||||
return fetch(this.getBaseURL() + `/api/v2/boards/${member.boardId}/members/${member.userId}`, {
|
||||
method: 'DELETE',
|
||||
headers: this.headers(),
|
||||
})
|
||||
@ -474,7 +474,7 @@ class OctoClient {
|
||||
Utils.log(`\t Blocks ${babp.blockIDs.join(', ')}`)
|
||||
|
||||
const body = JSON.stringify(babp)
|
||||
return fetch(this.getBaseURL() + '/api/v1/boards-and-blocks', {
|
||||
return fetch(this.getBaseURL() + '/api/v2/boards-and-blocks', {
|
||||
method: 'PATCH',
|
||||
headers: this.headers(),
|
||||
body,
|
||||
@ -483,7 +483,7 @@ class OctoClient {
|
||||
|
||||
// Sharing
|
||||
async getSharing(boardID: string): Promise<ISharing | undefined> {
|
||||
const path = `/api/v1/boards/${boardID}/sharing`
|
||||
const path = `/api/v2/boards/${boardID}/sharing`
|
||||
const response = await fetch(this.getBaseURL() + path, {headers: this.headers()})
|
||||
if (response.status !== 200) {
|
||||
return undefined
|
||||
@ -492,7 +492,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async setSharing(boardID: string, sharing: ISharing): Promise<boolean> {
|
||||
const path = `/api/v1/boards/${boardID}/sharing`
|
||||
const path = `/api/v2/boards/${boardID}/sharing`
|
||||
const body = JSON.stringify(sharing)
|
||||
const response = await fetch(
|
||||
this.getBaseURL() + path,
|
||||
@ -557,7 +557,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async getFileAsDataUrl(boardId: string, fileId: string): Promise<string> {
|
||||
let path = '/api/v1/files/teams/' + this.teamId + '/' + boardId + '/' + fileId
|
||||
let path = '/api/v2/files/teams/' + this.teamId + '/' + boardId + '/' + fileId
|
||||
const readToken = Utils.getReadToken()
|
||||
if (readToken) {
|
||||
path += `?read_token=${readToken}`
|
||||
@ -627,7 +627,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async getBoard(boardID: string): Promise<Board | undefined> {
|
||||
let path = `/api/v1/boards/${boardID}`
|
||||
let path = `/api/v2/boards/${boardID}`
|
||||
const readToken = Utils.getReadToken()
|
||||
if (readToken) {
|
||||
path += `?read_token=${readToken}`
|
||||
@ -653,7 +653,7 @@ class OctoClient {
|
||||
query += `&toTeam=${encodeURIComponent(toTeam)}`
|
||||
}
|
||||
|
||||
const path = `/api/v1/boards/${boardID}/duplicate${query}`
|
||||
const path = `/api/v2/boards/${boardID}/duplicate${query}`
|
||||
const response = await fetch(this.getBaseURL() + path, {
|
||||
method: 'POST',
|
||||
headers: this.headers(),
|
||||
@ -671,7 +671,7 @@ class OctoClient {
|
||||
if (asTemplate) {
|
||||
query = '?asTemplate=true'
|
||||
}
|
||||
const path = `/api/v1/boards/${boardID}/blocks/${blockID}/duplicate${query}`
|
||||
const path = `/api/v2/boards/${boardID}/blocks/${blockID}/duplicate${query}`
|
||||
const response = await fetch(this.getBaseURL() + path, {
|
||||
method: 'POST',
|
||||
headers: this.headers(),
|
||||
@ -690,7 +690,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async getBoardMembers(teamId: string, boardId: string): Promise<BoardMember[]> {
|
||||
const path = `/api/v1/boards/${boardId}/members`
|
||||
const path = `/api/v2/boards/${boardId}/members`
|
||||
return this.getBoardMembersWithPath(path)
|
||||
}
|
||||
|
||||
@ -706,7 +706,7 @@ class OctoClient {
|
||||
async patchBoard(boardId: string, boardPatch: BoardPatch): Promise<Response> {
|
||||
Utils.log(`patchBoard: ${boardId} board`)
|
||||
const body = JSON.stringify(boardPatch)
|
||||
return fetch(`${this.getBaseURL()}/api/v1/boards/${boardId}`, {
|
||||
return fetch(`${this.getBaseURL()}/api/v2/boards/${boardId}`, {
|
||||
method: 'PATCH',
|
||||
headers: this.headers(),
|
||||
body,
|
||||
@ -715,14 +715,14 @@ class OctoClient {
|
||||
|
||||
async deleteBoard(boardId: string): Promise<Response> {
|
||||
Utils.log(`deleteBoard: ${boardId}`)
|
||||
return fetch(`${this.getBaseURL()}/api/v1/boards/${boardId}`, {
|
||||
return fetch(`${this.getBaseURL()}/api/v2/boards/${boardId}`, {
|
||||
method: 'DELETE',
|
||||
headers: this.headers(),
|
||||
})
|
||||
}
|
||||
|
||||
async getSidebarCategories(teamID: string): Promise<Array<CategoryBlocks>> {
|
||||
const path = `/api/v1/teams/${teamID}/categories`
|
||||
const path = `/api/v2/teams/${teamID}/categories`
|
||||
const response = await fetch(this.getBaseURL() + path, {headers: this.headers()})
|
||||
if (response.status !== 200) {
|
||||
return []
|
||||
@ -732,7 +732,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async createSidebarCategory(category: Category): Promise<Response> {
|
||||
const path = `/api/v1/teams/${category.teamID}/categories`
|
||||
const path = `/api/v2/teams/${category.teamID}/categories`
|
||||
const body = JSON.stringify(category)
|
||||
return fetch(this.getBaseURL() + path, {
|
||||
method: 'POST',
|
||||
@ -742,7 +742,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async deleteSidebarCategory(teamID: string, categoryID: string): Promise<Response> {
|
||||
const url = `/api/v1/teams/${teamID}/categories/${categoryID}`
|
||||
const url = `/api/v2/teams/${teamID}/categories/${categoryID}`
|
||||
return fetch(this.getBaseURL() + url, {
|
||||
method: 'DELETE',
|
||||
headers: this.headers(),
|
||||
@ -750,7 +750,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async updateSidebarCategory(category: Category): Promise<Response> {
|
||||
const path = `/api/v1/teams/${category.teamID}/categories/${category.id}`
|
||||
const path = `/api/v2/teams/${category.teamID}/categories/${category.id}`
|
||||
const body = JSON.stringify(category)
|
||||
return fetch(this.getBaseURL() + path, {
|
||||
method: 'PUT',
|
||||
@ -760,7 +760,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async moveBlockToCategory(teamID: string, blockID: string, toCategoryID: string, fromCategoryID: string): Promise<Response> {
|
||||
const url = `/api/v1/teams/${teamID}/categories/${toCategoryID || '0'}/blocks/${blockID}`
|
||||
const url = `/api/v2/teams/${teamID}/categories/${toCategoryID || '0'}/blocks/${blockID}`
|
||||
const payload = {
|
||||
fromCategoryID,
|
||||
}
|
||||
@ -788,7 +788,7 @@ class OctoClient {
|
||||
}
|
||||
|
||||
async getUserBlockSubscriptions(userId: string): Promise<Array<Subscription>> {
|
||||
const path = `/api/v1/subscriptions/${userId}`
|
||||
const path = `/api/v2/subscriptions/${userId}`
|
||||
const response = await fetch(this.getBaseURL() + path, {headers: this.headers()})
|
||||
if (response.status !== 200) {
|
||||
return []
|
||||
@ -799,7 +799,7 @@ class OctoClient {
|
||||
|
||||
// onboarding
|
||||
async prepareOnboarding(teamId: string): Promise<PrepareOnboardingResponse | undefined> {
|
||||
const path = `/api/v1/teams/${teamId}/onboard`
|
||||
const path = `/api/v2/teams/${teamId}/onboard`
|
||||
const response = await fetch(this.getBaseURL() + path, {
|
||||
headers: this.headers(),
|
||||
method: 'POST',
|
||||
|
@ -40,7 +40,7 @@ if [[ $# < 2 ]] ; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
curl --unix-socket /var/tmp/focalboard_local.socket http://localhost/api/v1/admin/users/$1/password -X POST -H 'Content-Type: application/json' -d '{ "password": "'$2'" }'
|
||||
curl --unix-socket /var/tmp/focalboard_local.socket http://localhost/api/v2/admin/users/$1/password -X POST -H 'Content-Type: application/json' -d '{ "password": "'$2'" }'
|
||||
```
|
||||
|
||||
After resetting a user's password (e.g. if they forgot it), direct them to change it from the user menu, by clicking on their username at the top of the sidebar.
|
||||
|
Loading…
Reference in New Issue
Block a user