2020-06-15 10:54:11 +02:00
|
|
|
// 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
|
|
|
|
|
2020-06-16 18:05:38 +02:00
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"github.com/matrix-org/gomatrixserverlib"
|
|
|
|
)
|
2020-06-15 10:54:11 +02:00
|
|
|
|
|
|
|
// UserInternalAPI is the internal API for information about users and devices.
|
|
|
|
type UserInternalAPI interface {
|
|
|
|
QueryProfile(ctx context.Context, req *QueryProfileRequest, res *QueryProfileResponse) error
|
2020-06-16 15:10:55 +02:00
|
|
|
QueryAccessToken(ctx context.Context, req *QueryAccessTokenRequest, res *QueryAccessTokenResponse) error
|
2020-06-16 15:53:19 +02:00
|
|
|
QueryDevices(ctx context.Context, req *QueryDevicesRequest, res *QueryDevicesResponse) error
|
2020-06-16 18:05:38 +02:00
|
|
|
QueryAccountData(ctx context.Context, req *QueryAccountDataRequest, res *QueryAccountDataResponse) error
|
2020-06-16 15:10:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// QueryAccessTokenRequest is the request for QueryAccessToken
|
|
|
|
type QueryAccessTokenRequest struct {
|
|
|
|
AccessToken string
|
|
|
|
// optional user ID, valid only if the token is an appservice.
|
|
|
|
// https://matrix.org/docs/spec/application_service/r0.1.2#using-sync-and-events
|
|
|
|
AppServiceUserID string
|
|
|
|
}
|
|
|
|
|
|
|
|
// QueryAccessTokenResponse is the response for QueryAccessToken
|
|
|
|
type QueryAccessTokenResponse struct {
|
|
|
|
Device *Device
|
|
|
|
Err error // e.g ErrorForbidden
|
2020-06-15 10:54:11 +02:00
|
|
|
}
|
|
|
|
|
2020-06-16 18:05:38 +02:00
|
|
|
// QueryAccountDataRequest is the request for QueryAccountData
|
|
|
|
type QueryAccountDataRequest struct {
|
|
|
|
UserID string // required: the user to get account data for.
|
|
|
|
// TODO: This is a terribly confusing API shape :/
|
|
|
|
DataType string // optional: if specified returns only a single event matching this data type.
|
|
|
|
// optional: Only used if DataType is set. If blank returns global account data matching the data type.
|
|
|
|
// If set, returns only room account data matching this data type.
|
|
|
|
RoomID string
|
|
|
|
}
|
|
|
|
|
|
|
|
// QueryAccountDataResponse is the response for QueryAccountData
|
|
|
|
type QueryAccountDataResponse struct {
|
|
|
|
GlobalAccountData []gomatrixserverlib.ClientEvent
|
|
|
|
RoomAccountData map[string][]gomatrixserverlib.ClientEvent
|
|
|
|
}
|
|
|
|
|
2020-06-16 15:53:19 +02:00
|
|
|
// QueryDevicesRequest is the request for QueryDevices
|
|
|
|
type QueryDevicesRequest struct {
|
|
|
|
UserID string
|
|
|
|
}
|
|
|
|
|
|
|
|
// QueryDevicesResponse is the response for QueryDevices
|
|
|
|
type QueryDevicesResponse struct {
|
|
|
|
UserExists bool
|
|
|
|
Devices []Device
|
|
|
|
}
|
|
|
|
|
2020-06-15 10:54:11 +02:00
|
|
|
// QueryProfileRequest is the request for QueryProfile
|
|
|
|
type QueryProfileRequest struct {
|
|
|
|
// The user ID to query
|
|
|
|
UserID string
|
|
|
|
}
|
|
|
|
|
|
|
|
// QueryProfileResponse is the response for QueryProfile
|
|
|
|
type QueryProfileResponse struct {
|
2020-06-16 15:10:55 +02:00
|
|
|
// True if the user exists. Querying for a profile does not create them.
|
2020-06-15 10:54:11 +02:00
|
|
|
UserExists bool
|
|
|
|
// The current display name if set.
|
|
|
|
DisplayName string
|
|
|
|
// The current avatar URL if set.
|
|
|
|
AvatarURL string
|
|
|
|
}
|
2020-06-16 15:10:55 +02:00
|
|
|
|
|
|
|
// Device represents a client's device (mobile, web, etc)
|
|
|
|
type Device struct {
|
|
|
|
ID string
|
|
|
|
UserID string
|
|
|
|
// The access_token granted to this device.
|
|
|
|
// This uniquely identifies the device from all other devices and clients.
|
|
|
|
AccessToken string
|
|
|
|
// The unique ID of the session identified by the access token.
|
|
|
|
// Can be used as a secure substitution in places where data needs to be
|
|
|
|
// associated with access tokens.
|
|
|
|
SessionID int64
|
|
|
|
// TODO: display name, last used timestamp, keys, etc
|
|
|
|
DisplayName string
|
|
|
|
}
|
|
|
|
|
|
|
|
// ErrorForbidden is an error indicating that the supplied access token is forbidden
|
|
|
|
type ErrorForbidden struct {
|
|
|
|
Message string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (e *ErrorForbidden) Error() string {
|
|
|
|
return "Forbidden: " + e.Message
|
|
|
|
}
|