mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-11 08:53:11 -06:00
Implement the client API routes
This commit is contained in:
parent
93a50afaf5
commit
4e4dc8a9c2
|
|
@ -41,7 +41,7 @@ const pathPrefixUnstable = "/_matrix/client/unstable"
|
|||
func Setup(
|
||||
apiMux *mux.Router, httpClient *http.Client, cfg config.Dendrite,
|
||||
producer *producers.RoomserverProducer, queryAPI api.RoomserverQueryAPI,
|
||||
aliasAPI api.RoomserverAliasAPI,
|
||||
aliasAPI api.RoomserverAliasAPI, publicRoomAPI api.RoomserverPublicRoomAPI,
|
||||
accountDB *accounts.Database,
|
||||
deviceDB *devices.Database,
|
||||
federation *gomatrixserverlib.FederationClient,
|
||||
|
|
@ -136,14 +136,14 @@ func Setup(
|
|||
r0mux.Handle("/directory/list/room/{roomID}",
|
||||
common.MakeAPI("directory_list", func(req *http.Request) util.JSONResponse {
|
||||
vars := mux.Vars(req)
|
||||
return writers.GetVisibility(req, vars["roomID"])
|
||||
return writers.GetVisibility(req, vars["roomID"], publicRoomAPI)
|
||||
}),
|
||||
).Methods("GET")
|
||||
|
||||
r0mux.Handle("/directory/list/room/{roomID}",
|
||||
common.MakeAuthAPI("directory_list", deviceDB, func(req *http.Request, device *authtypes.Device) util.JSONResponse {
|
||||
vars := mux.Vars(req)
|
||||
return writers.SetVisibility(req, *device, vars["roomID"], cfg)
|
||||
return writers.SetVisibility(req, *device, vars["roomID"], publicRoomAPI)
|
||||
}),
|
||||
).Methods("PUT", "OPTIONS")
|
||||
|
||||
|
|
@ -276,14 +276,7 @@ func Setup(
|
|||
r0mux.Handle("/publicRooms",
|
||||
common.MakeAPI("public_rooms", func(req *http.Request) util.JSONResponse {
|
||||
// TODO: Return a list of public rooms
|
||||
return util.JSONResponse{
|
||||
Code: 200,
|
||||
JSON: struct {
|
||||
Chunk []struct{} `json:"chunk"`
|
||||
Start string `json:"start"`
|
||||
End string `json:"end"`
|
||||
}{[]struct{}{}, "", ""},
|
||||
}
|
||||
return writers.GetPublicRooms(req, publicRoomAPI)
|
||||
}),
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@ import (
|
|||
"net/http"
|
||||
|
||||
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
|
||||
"github.com/matrix-org/dendrite/common/config"
|
||||
"github.com/matrix-org/dendrite/clientapi/httputil"
|
||||
"github.com/matrix-org/dendrite/roomserver/api"
|
||||
"github.com/matrix-org/util"
|
||||
)
|
||||
|
||||
|
|
@ -28,21 +29,58 @@ type roomDirectoryVisibility struct {
|
|||
|
||||
// GetVisibility implements GET /directory/list/room/{roomID}
|
||||
func GetVisibility(
|
||||
req *http.Request, roomID string,
|
||||
req *http.Request, roomID string, publicRoomAPI api.RoomserverPublicRoomAPI,
|
||||
) util.JSONResponse {
|
||||
queryReq := api.GetRoomVisibilityRequest{roomID}
|
||||
var queryRes api.GetRoomVisibilityResponse
|
||||
if err := publicRoomAPI.GetRoomVisibility(&queryReq, &queryRes); err != nil {
|
||||
return httputil.LogThenError(req, err)
|
||||
}
|
||||
|
||||
return util.JSONResponse{
|
||||
Code: 200,
|
||||
JSON: roomDirectoryVisibility{"public"},
|
||||
JSON: roomDirectoryVisibility{queryRes.Visibility},
|
||||
}
|
||||
}
|
||||
|
||||
// SetVisibility implements PUT /directory/list/room/{roomID}
|
||||
// TODO: Check if user has the power leven to edit the room visibility
|
||||
func SetVisibility(
|
||||
req *http.Request, device authtypes.Device, roomID string,
|
||||
cfg config.Dendrite,
|
||||
publicRoomAPI api.RoomserverPublicRoomAPI,
|
||||
) util.JSONResponse {
|
||||
var r roomDirectoryVisibility
|
||||
if resErr := httputil.UnmarshalJSONRequest(req, &r); resErr != nil {
|
||||
return *resErr
|
||||
}
|
||||
|
||||
queryReq := api.SetRoomVisibilityRequest{
|
||||
RoomID: roomID,
|
||||
Visibility: r.Visibility,
|
||||
}
|
||||
var queryRes api.SetRoomVisibilityResponse
|
||||
if err := publicRoomAPI.SetRoomVisibility(&queryReq, &queryRes); err != nil {
|
||||
return httputil.LogThenError(req, err)
|
||||
}
|
||||
|
||||
return util.JSONResponse{
|
||||
Code: 200,
|
||||
JSON: struct{}{},
|
||||
}
|
||||
}
|
||||
|
||||
// GetPublicRooms implements GET /publicRooms
|
||||
func GetPublicRooms(
|
||||
req *http.Request, publicRoomAPI api.RoomserverPublicRoomAPI,
|
||||
) util.JSONResponse {
|
||||
queryReq := api.GetPublicRoomsRequest{}
|
||||
var queryRes api.GetPublicRoomsResponse
|
||||
if err := publicRoomAPI.GetPublicRooms(&queryReq, &queryRes); err != nil {
|
||||
return httputil.LogThenError(req, err)
|
||||
}
|
||||
|
||||
return util.JSONResponse{
|
||||
Code: 200,
|
||||
JSON: queryRes,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ func main() {
|
|||
|
||||
queryAPI := api.NewRoomserverQueryAPIHTTP(cfg.RoomServerURL(), nil)
|
||||
aliasAPI := api.NewRoomserverAliasAPIHTTP(cfg.RoomServerURL(), nil)
|
||||
publicRoomAPI := api.NewRoomserverPublicRoomAPIHTTP(cfg.RoomServerURL(), nil)
|
||||
inputAPI := api.NewRoomserverInputAPIHTTP(cfg.RoomServerURL(), nil)
|
||||
|
||||
roomserverProducer := producers.NewRoomserverProducer(inputAPI)
|
||||
|
|
@ -108,8 +109,8 @@ func main() {
|
|||
api := mux.NewRouter()
|
||||
routing.Setup(
|
||||
api, http.DefaultClient, *cfg, roomserverProducer,
|
||||
queryAPI, aliasAPI, accountDB, deviceDB, federation, keyRing,
|
||||
userUpdateProducer, syncProducer,
|
||||
queryAPI, aliasAPI, publicRoomAPI, accountDB, deviceDB, federation,
|
||||
keyRing, userUpdateProducer, syncProducer,
|
||||
)
|
||||
common.SetupHTTPAPI(http.DefaultServeMux, api)
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import (
|
|||
|
||||
roomserver_alias "github.com/matrix-org/dendrite/roomserver/alias"
|
||||
roomserver_input "github.com/matrix-org/dendrite/roomserver/input"
|
||||
roomserver_publicroom "github.com/matrix-org/dendrite/roomserver/publicroom"
|
||||
roomserver_query "github.com/matrix-org/dendrite/roomserver/query"
|
||||
roomserver_storage "github.com/matrix-org/dendrite/roomserver/storage"
|
||||
|
||||
|
|
@ -121,9 +122,10 @@ type monolith struct {
|
|||
federation *gomatrixserverlib.FederationClient
|
||||
keyRing gomatrixserverlib.KeyRing
|
||||
|
||||
inputAPI *roomserver_input.RoomserverInputAPI
|
||||
queryAPI *roomserver_query.RoomserverQueryAPI
|
||||
aliasAPI *roomserver_alias.RoomserverAliasAPI
|
||||
inputAPI *roomserver_input.RoomserverInputAPI
|
||||
queryAPI *roomserver_query.RoomserverQueryAPI
|
||||
aliasAPI *roomserver_alias.RoomserverAliasAPI
|
||||
publicRoomAPI *roomserver_publicroom.RoomserverPublicRoomAPI
|
||||
|
||||
roomServerProducer *producers.RoomserverProducer
|
||||
userUpdateProducer *producers.UserUpdateProducer
|
||||
|
|
@ -204,6 +206,10 @@ func (m *monolith) setupRoomServer() {
|
|||
InputAPI: m.inputAPI,
|
||||
QueryAPI: m.queryAPI,
|
||||
}
|
||||
|
||||
m.publicRoomAPI = &roomserver_publicroom.RoomserverPublicRoomAPI{
|
||||
DB: m.roomServerDB,
|
||||
}
|
||||
}
|
||||
|
||||
func (m *monolith) setupProducers() {
|
||||
|
|
@ -280,8 +286,8 @@ func (m *monolith) setupConsumers() {
|
|||
func (m *monolith) setupAPIs() {
|
||||
clientapi_routing.Setup(
|
||||
m.api, http.DefaultClient, *m.cfg, m.roomServerProducer,
|
||||
m.queryAPI, m.aliasAPI, m.accountDB, m.deviceDB, m.federation, m.keyRing,
|
||||
m.userUpdateProducer, m.syncProducer,
|
||||
m.queryAPI, m.aliasAPI, m.publicRoomAPI, m.accountDB, m.deviceDB,
|
||||
m.federation, m.keyRing, m.userUpdateProducer, m.syncProducer,
|
||||
)
|
||||
|
||||
mediaapi_routing.Setup(
|
||||
|
|
|
|||
Loading…
Reference in a new issue