Implement the client API routes

This commit is contained in:
Brendan Abolivier 2017-08-09 13:57:42 +01:00
parent 93a50afaf5
commit 4e4dc8a9c2
No known key found for this signature in database
GPG key ID: 8EF1500759F70623
4 changed files with 60 additions and 22 deletions

View file

@ -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)
}),
)

View file

@ -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,
}
}

View file

@ -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)

View file

@ -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(