mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-18 12:23:09 -06:00
Set up routes using api
This commit is contained in:
parent
87e727f817
commit
cebef9bf09
185
roomserver/api/canonical_alias.go
Normal file
185
roomserver/api/canonical_alias.go
Normal file
|
|
@ -0,0 +1,185 @@
|
||||||
|
// Copyright 2020 The Matrix.org Foundation C.I.C.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
commonHTTP "github.com/matrix-org/dendrite/common/http"
|
||||||
|
opentracing "github.com/opentracing/opentracing-go"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetRoomCanonicalAliasRequest is a request to SetRoomCanonicalAlias
|
||||||
|
type SetRoomCanonicalAliasRequest struct {
|
||||||
|
// ID of the user setting the alias
|
||||||
|
UserID string `json:"user_id"`
|
||||||
|
// New alias for the room
|
||||||
|
CanonicalAlias string `json:"alias"`
|
||||||
|
// The room ID the alias is referring to
|
||||||
|
RoomID string `json:"room_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRoomCanonicalAliasResponse is a response to SetRoomCanonicalAlias
|
||||||
|
type SetRoomCanonicalAliasResponse struct {
|
||||||
|
// Does the alias already refer to a room?
|
||||||
|
AliasExists bool `json:"alias_exists"`
|
||||||
|
// Does the alias refer to a different room?
|
||||||
|
DifferentRoom bool `json:"different_room"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRoomIDForCanonicalAliasRequest is a request to GetRoomIDForCanonicalAlias
|
||||||
|
type GetRoomIDForCanonicalAliasRequest struct {
|
||||||
|
// Canonical Alias we want to lookup
|
||||||
|
CanonicalAlias string `json:"alias"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRoomIDForCanonicalAliasResponse is a response to GetRoomIDForCanonicalAlias
|
||||||
|
type GetRoomIDForCanonicalAliasResponse struct {
|
||||||
|
// The room ID the canonical alias refers to
|
||||||
|
RoomID string `json:"room_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCanonicalAliasForRoomIDRequest is a request to GetCanonicalAliasForRoomID
|
||||||
|
type GetCanonicalAliasForRoomIDRequest struct {
|
||||||
|
// The room ID we want to find the canonical for
|
||||||
|
RoomID string `json:"room_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCanonicalForRoomIDResponse is a response to GetCanonicalAliasForRoomID
|
||||||
|
type GetCanonicalAliasForRoomIDResponse struct {
|
||||||
|
CanonicalAlias string `json:"alias"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCreatorIDForCanonicalAliasRequest is a request to GetCreatorIDForCanonicalAlias
|
||||||
|
type GetCreatorIDForCanonicalAliasRequest struct {
|
||||||
|
// The alias we want to find the creator of
|
||||||
|
CanonicalAlias string `json:"alias"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCreatorIDForCanonicalAliasResponse is a response to GetCreatorIDForCanonicalAlias
|
||||||
|
type GetCreatorIDForAliasResponse struct {
|
||||||
|
// The user ID of the canonical alias creator
|
||||||
|
UserID string `json:"user_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RoomserverCanonicalAliasAPI is used to save, lookup or remove a room alias
|
||||||
|
type RoomserverCanonicalAliasAPI interface {
|
||||||
|
// Set the room canonical alias
|
||||||
|
SetRoomCanonicalAlias(
|
||||||
|
ctx context.Context,
|
||||||
|
req *SetRoomCanonicalAliasRequest,
|
||||||
|
response *SetRoomCanonicalAliasResponse,
|
||||||
|
) error
|
||||||
|
|
||||||
|
// Get the room ID for an alias
|
||||||
|
GetRoomIDForCanonicalAlias(
|
||||||
|
ctx context.Context,
|
||||||
|
req *GetRoomIDForCanonicalAliasRequest,
|
||||||
|
response *GetRoomIDForCanonicalAliasResponse,
|
||||||
|
) error
|
||||||
|
|
||||||
|
// Get the canonical alias for a room ID
|
||||||
|
GetCanonicalAliasForRoomID(
|
||||||
|
ctx context.Context,
|
||||||
|
req *GetCanonicalAliasForRoomIDRequest,
|
||||||
|
response *GetCanonicalAliasForRoomIDResponse,
|
||||||
|
) error
|
||||||
|
|
||||||
|
// Get the user ID of the creator of a canonical alias
|
||||||
|
GetCreatorIDForCanonicalAlias(
|
||||||
|
ctx context.Context,
|
||||||
|
req *GetCreatorIDForCanonicalAliasRequest,
|
||||||
|
response *GetCreatorIDForCanonicalAliasAliasResponse,
|
||||||
|
) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// RoomserverSetRoomCanonicalAliasPath is the HTTP path for the SetRoomCanonicalAlias API.
|
||||||
|
const RoomserverSetRoomCanonicalAliasPath = "/api/roomserver/setRoomCanonicalAlias"
|
||||||
|
|
||||||
|
// RoomserverGetRoomIDForCanonicalAliasPath is the HTTP path for the GetRoomIDForCanonicalAlias API.
|
||||||
|
const RoomserverGetRoomIDForCanonicalAliasPath = "/api/roomserver/GetRoomIDForCanonicalAlias"
|
||||||
|
|
||||||
|
// RoomserverGetCanonicalAliasForRoomIDPath is the HTTP path for the GetCanonicalAliasForRoomID API.
|
||||||
|
const RoomserverGetCanonicalAliasForRoomIDPath = "/api/roomserver/GetCanonicalAliasForRoomID"
|
||||||
|
|
||||||
|
// RoomserverGetCreatorIDForCanonicalAliasPath is the HTTP path for the GetCreatorIDForCanonicalAlias API.
|
||||||
|
const RoomserverGetCreatorIDForCanonicalAliasPath = "/api/roomserver/GetCreatorIDForCanonicalAlias"
|
||||||
|
|
||||||
|
// NewRoomserverCanonicalAliasAPIHTTP creates a RoomserverCanonicalAliasAPI implemented by talking to a HTTP POST API.
|
||||||
|
// If httpClient is nil then it uses the http.DefaultClient
|
||||||
|
func NewRoomserverCanonicalAliasAPIHTTP(roomserverURL string, httpClient *http.Client) RoomserverCanonicalAliasAPI {
|
||||||
|
if httpClient == nil {
|
||||||
|
httpClient = http.DefaultClient
|
||||||
|
}
|
||||||
|
return &httpRoomserverCanonicalAliasAPI{roomserverURL, httpClient}
|
||||||
|
}
|
||||||
|
|
||||||
|
type httpRoomserverCanonicalAliasAPI struct {
|
||||||
|
roomserverURL string
|
||||||
|
httpClient *http.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRoomCanonicalAlias implements RoomserverCanonicalAliasAPI
|
||||||
|
func (h *httpRoomserverCanonicalAliasAPI) SetRoomCanonicalAlias(
|
||||||
|
ctx context.Context,
|
||||||
|
request *SetRoomCanonicalAliasRequest,
|
||||||
|
response *SetRoomCanonicalAliasResponse,
|
||||||
|
) error {
|
||||||
|
span, ctx := opentracing.StartSpanFromContext(ctx, "SetRoomCanonicalAlias")
|
||||||
|
defer span.Finish()
|
||||||
|
|
||||||
|
apiURL := h.roomserverURL + RoomserverSetRoomCanonicalAliasPath
|
||||||
|
return commonHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRoomIDForCanonicalAlias implements RoomserverCanonicalAliasAPI
|
||||||
|
func (h *httpRoomserverCanonicalAliasAPI) GetRoomIDForCanonicalAlias(
|
||||||
|
ctx context.Context,
|
||||||
|
request *GetRoomIDForCanonicalAliasRequest,
|
||||||
|
response *GetRoomIDForCanonicalAliasResponse,
|
||||||
|
) error {
|
||||||
|
span, ctx := opentracing.StartSpanFromContext(ctx, "GetRoomIDForCanonicalAlias")
|
||||||
|
defer span.Finish()
|
||||||
|
|
||||||
|
apiURL := h.roomserverURL + RoomserverGetRoomIDForCanonicalAliasPath
|
||||||
|
return commonHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCanonicalAliasForRoomID implements RoomserverCanonicalAliasAPI
|
||||||
|
func (h *httpRoomserverCanonicalAliasAPI) GetCanonicalAliasForRoomID(
|
||||||
|
ctx context.Context,
|
||||||
|
request *GetCanonicalAliasForRoomIDRequest,
|
||||||
|
response *GetCanonicalAliasForRoomIDResponse,
|
||||||
|
) error {
|
||||||
|
span, ctx := opentracing.StartSpanFromContext(ctx, "GetCanonicalAliasForRoomID")
|
||||||
|
defer span.Finish()
|
||||||
|
|
||||||
|
apiURL := h.roomserverURL + RoomserverGetCanonicalAliasForRoomIDPath
|
||||||
|
return commonHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCreatorIDForAlias implements RoomserverCanonicalAliasAPI
|
||||||
|
func (h *httpRoomserverCanonicalAliasAPI) GetCreatorIDForCanonicalAlias(
|
||||||
|
ctx context.Context,
|
||||||
|
request *GetCreatorIDForCanonicalAliasRequest,
|
||||||
|
response *GetCreatorIDForCanonicalAliasResponse,
|
||||||
|
) error {
|
||||||
|
span, ctx := opentracing.StartSpanFromContext(ctx, "GetCreatorIDForCanonicalAlias")
|
||||||
|
defer span.Finish()
|
||||||
|
|
||||||
|
apiURL := h.roomserverURL + RoomserverGetCreatorIDForCanonicalAliasPath
|
||||||
|
return commonHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
|
||||||
|
}
|
||||||
|
|
@ -84,11 +84,11 @@ func (r *RoomserverCanonicalAliasAPI) SetRoomAlias(
|
||||||
// The alias belongs to a different room
|
// The alias belongs to a different room
|
||||||
if roomID != request.roomID {
|
if roomID != request.roomID {
|
||||||
// RFC: Is there a standard bool for wrong room?
|
// RFC: Is there a standard bool for wrong room?
|
||||||
response.CorrectRoom = false
|
response.DifferentRoom = true
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
response.CorrectRoom = true
|
response.DifferentRoom = false
|
||||||
|
|
||||||
// Save the new canonical alias
|
// Save the new canonical alias
|
||||||
if err := r.DB.SetRoomCanonicalAlias(ctx, request.CanonicalAlias, request.RoomID, request.UserID); err != nil {
|
if err := r.DB.SetRoomCanonicalAlias(ctx, request.CanonicalAlias, request.RoomID, request.UserID); err != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue