aboutsummaryrefslogtreecommitdiff
path: root/userapi/internal/api.go
diff options
context:
space:
mode:
authorKegsay <kegan@matrix.org>2020-06-16 17:05:38 +0100
committerGitHub <noreply@github.com>2020-06-16 17:05:38 +0100
commit83391da0e04dda7a52589ee7ec6df2b615571894 (patch)
tree0a0ffcc5b7209600eaf042ee317a0681e0bd7f59 /userapi/internal/api.go
parent1942928ee5e0398beed45c8b1c63d7b13e89b646 (diff)
Make syncapi use userapi (#1136)
* Make syncapi use userapi * Unbreak things * Fix tests * Lint
Diffstat (limited to 'userapi/internal/api.go')
-rw-r--r--userapi/internal/api.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/userapi/internal/api.go b/userapi/internal/api.go
index d8dec11a..6e737b81 100644
--- a/userapi/internal/api.go
+++ b/userapi/internal/api.go
@@ -73,6 +73,39 @@ func (a *UserInternalAPI) QueryDevices(ctx context.Context, req *api.QueryDevice
return nil
}
+func (a *UserInternalAPI) QueryAccountData(ctx context.Context, req *api.QueryAccountDataRequest, res *api.QueryAccountDataResponse) error {
+ local, domain, err := gomatrixserverlib.SplitID('@', req.UserID)
+ if err != nil {
+ return err
+ }
+ if domain != a.ServerName {
+ return fmt.Errorf("cannot query account data of remote users: got %s want %s", domain, a.ServerName)
+ }
+ if req.DataType != "" {
+ var event *gomatrixserverlib.ClientEvent
+ event, err = a.AccountDB.GetAccountDataByType(ctx, local, req.RoomID, req.DataType)
+ if err != nil {
+ return err
+ }
+ if event != nil {
+ if req.RoomID != "" {
+ res.RoomAccountData = make(map[string][]gomatrixserverlib.ClientEvent)
+ res.RoomAccountData[req.RoomID] = []gomatrixserverlib.ClientEvent{*event}
+ } else {
+ res.GlobalAccountData = append(res.GlobalAccountData, *event)
+ }
+ }
+ return nil
+ }
+ global, rooms, err := a.AccountDB.GetAccountData(ctx, local)
+ if err != nil {
+ return err
+ }
+ res.RoomAccountData = rooms
+ res.GlobalAccountData = global
+ return nil
+}
+
func (a *UserInternalAPI) QueryAccessToken(ctx context.Context, req *api.QueryAccessTokenRequest, res *api.QueryAccessTokenResponse) error {
if req.AppServiceUserID != "" {
appServiceDevice, err := a.queryAppServiceToken(ctx, req.AccessToken, req.AppServiceUserID)