mirror of
				https://github.com/matrix-org/gomatrix
				synced 2025-11-03 22:08:04 +00:00 
			
		
		
		
	Implement missing endpoints
- GET /whoami,
- GET /room/{room alias},
- POST /account/3pid/email/requestToken,
- GET, PUT /account_data/{type},
- GET /devices
- GET /account/3pid
- GET /available
- Send m.room.power_levels
- Get latest m.room.power_levels
			
			
This commit is contained in:
		
							parent
							
								
									be2af5ef2e
								
							
						
					
					
						commit
						38bc742aab
					
				
					 4 changed files with 171 additions and 0 deletions
				
			
		
							
								
								
									
										83
									
								
								client.go
									
										
									
									
									
								
							
							
						
						
									
										83
									
								
								client.go
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -776,6 +776,89 @@ func (cli *Client) TurnServer() (resp *RespTurnServer, err error) {
 | 
			
		|||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WhoAmI Gets information about the owner of a given access token.
 | 
			
		||||
// See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-whoami
 | 
			
		||||
func (cli *Client) WhoAmI() (resp *RespWhoAmI, err error) {
 | 
			
		||||
	u := cli.BuildURL("account", "whoami")
 | 
			
		||||
	err = cli.MakeRequest("GET", u, struct{}{}, &resp)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RoomAlias requests that the server resolve a room alias to a room ID.
 | 
			
		||||
// See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-directory-room-roomalias
 | 
			
		||||
func (cli *Client) RoomAlias(roomAlias string) (resp *RespRoomAlias, err error) {
 | 
			
		||||
	u := cli.BuildURL("directory", "room", roomAlias)
 | 
			
		||||
	err = cli.MakeRequest("GET", u, struct{}{}, &resp)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// EmailRequestToken requests email from homeserver so that it email be bound to existing account after validation.
 | 
			
		||||
// See https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-3pid-email-requesttoken
 | 
			
		||||
func (cli *Client) Account3PidEmailRequestToken(req ReqEmailRequestToken) (resp *RespEmailRequestToken, err error) {
 | 
			
		||||
	u := cli.BuildURL("account", "3pid", "email", "requestToken")
 | 
			
		||||
	err = cli.MakeRequest("POST", u, req, &resp)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetAccountData gets some account_data for the client.
 | 
			
		||||
// See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-user-userid-account-data-type
 | 
			
		||||
func (cli *Client) GetAccountData(req ReqGetAccountData) (resp RespAccountData, err error) {
 | 
			
		||||
	resp = make(RespAccountData)
 | 
			
		||||
	u := cli.BuildURL("user", cli.UserID, "account_data", req.Type)
 | 
			
		||||
	err = cli.MakeRequest("GET", u, nil, &resp)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// PutAccountData sets some account_data for the client.
 | 
			
		||||
// See https://matrix.org/docs/spec/client_server/r0.6.1#put-matrix-client-r0-user-userid-account-data-type
 | 
			
		||||
func (cli *Client) PutAccountData(req ReqPutAccountData) (err error) {
 | 
			
		||||
	u := cli.BuildURL("user", cli.UserID, "account_data", req.Type)
 | 
			
		||||
	err = cli.MakeRequest("PUT", u, req.Data, nil)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetDevices gets information about all devices for the current user.
 | 
			
		||||
// See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-devices
 | 
			
		||||
func (cli *Client) GetDevices() (resp RespGetDevices, err error) {
 | 
			
		||||
	resp.Devices = make([]Device, 0)
 | 
			
		||||
	u := cli.BuildURL("devices")
 | 
			
		||||
	err = cli.MakeRequest("GET", u, nil, &resp)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetThreePID gets a list of the third party identifiers that the homeserver has associated with the user's account.
 | 
			
		||||
// See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-3pid
 | 
			
		||||
func (cli *Client) GetThreePID() (resp RespGetThreePID, err error) {
 | 
			
		||||
	u := cli.BuildURL("account", "3pid")
 | 
			
		||||
	err = cli.MakeRequest("GET", u, nil, &resp)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Available checks to see if a username is available, and valid, for the server.
 | 
			
		||||
// See https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-register-available
 | 
			
		||||
func (cli *Client) Available(username string) (err error) {
 | 
			
		||||
	u := cli.BuildURLWithQuery(
 | 
			
		||||
		[]string{"register", "available"},
 | 
			
		||||
		map[string]string{
 | 
			
		||||
			"username": username,
 | 
			
		||||
		})
 | 
			
		||||
	err = cli.MakeRequest("GET", u, nil, nil)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// PowerLevels gets most recent m.room.power_levels event.
 | 
			
		||||
// See https://matrix.org/docs/spec/client_server/r0.6.1#m-room-power-levels
 | 
			
		||||
func (cli *Client) PowerLevels(roomID string) (resp PowerLevels, err error) {
 | 
			
		||||
	err = cli.StateEvent(roomID, "m.room.power_levels", "", &resp)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SendPowerLevels sends m.room.power_levels event.
 | 
			
		||||
// See https://matrix.org/docs/spec/client_server/r0.6.1#m-room-power-levels
 | 
			
		||||
func (cli *Client) SendPowerLevels(roomID string, pl PowerLevels) (*RespSendEvent, error) {
 | 
			
		||||
	return cli.SendStateEvent(roomID, "m.room.power_levels", "", pl)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func txnID() string {
 | 
			
		||||
	return "go" + strconv.FormatInt(time.Now().UnixNano(), 10)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								events.go
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								events.go
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -143,6 +143,24 @@ type AudioMessage struct {
 | 
			
		|||
	Info    AudioInfo `json:"info,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// PowerLevels is and m.room.power_levels event - https://matrix.org/docs/spec/client_server/r0.6.1#m-room-power-levels
 | 
			
		||||
type PowerLevels struct {
 | 
			
		||||
	Ban           int                    `json:"ban"`
 | 
			
		||||
	Invite        int                    `json:"invite"`
 | 
			
		||||
	Kick          int                    `json:"kick"`
 | 
			
		||||
	Redact        int                    `json:"redact"`
 | 
			
		||||
	Events        map[string]int         `json:"events"`
 | 
			
		||||
	Users         map[string]int         `json:"users"`
 | 
			
		||||
	Notifications NotificationPowerLevel `json:"notifications"`
 | 
			
		||||
	EventsDefault int                    `json:"events_default"`
 | 
			
		||||
	StateDefault  int                    `json:"state_default"`
 | 
			
		||||
	UsersDefault  int                    `json:"users_default"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type NotificationPowerLevel struct {
 | 
			
		||||
	Room int `json:"room"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var htmlRegex = regexp.MustCompile("<[^<]+?>")
 | 
			
		||||
 | 
			
		||||
// GetHTMLMessage returns an HTMLMessage with the body set to a stripped version of the provided HTML, in addition
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								requests.go
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								requests.go
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -77,3 +77,27 @@ type ReqTyping struct {
 | 
			
		|||
	Typing  bool  `json:"typing"`
 | 
			
		||||
	Timeout int64 `json:"timeout"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ReqGetAccountData is the JSON request for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-user-userid-account-data-type
 | 
			
		||||
type ReqGetAccountData struct {
 | 
			
		||||
	Type string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ReqPutAccountData is the JSON request for https://matrix.org/docs/spec/client_server/r0.6.1#put-matrix-client-r0-user-userid-account-data-type
 | 
			
		||||
type ReqPutAccountData struct {
 | 
			
		||||
	ReqGetAccountData
 | 
			
		||||
	Data map[string]interface{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ReqEmailRequestToken is the JSON request for
 | 
			
		||||
// 		https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-register-email-requesttoken
 | 
			
		||||
//		https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-password-email-requesttoken
 | 
			
		||||
//		https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-3pid-email-requesttoken
 | 
			
		||||
type ReqEmailRequestToken struct {
 | 
			
		||||
	IdServer      string `json:"id_server,omitempty"`
 | 
			
		||||
	IdAccessToken string `json:"id_access_token,omitempty"`
 | 
			
		||||
	Secret        string `json:"client_secret"`
 | 
			
		||||
	Email         string `json:"email"`
 | 
			
		||||
	SendAttempt   int    `json:"send_attempt"`
 | 
			
		||||
	NextLink      string `json:"next_link,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										46
									
								
								responses.go
									
										
									
									
									
								
							
							
						
						
									
										46
									
								
								responses.go
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -208,3 +208,49 @@ type RespTurnServer struct {
 | 
			
		|||
	TTL      int      `json:"ttl"`
 | 
			
		||||
	URIs     []string `json:"uris"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RespWhoAmI is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-whoami
 | 
			
		||||
type RespWhoAmI struct {
 | 
			
		||||
	UserId string `json:"user_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RespRoomAlias is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-directory-room-roomalias
 | 
			
		||||
type RespRoomAlias struct {
 | 
			
		||||
	RoomID  string   `json:"room_id"`
 | 
			
		||||
	Servers []string `json:"servers"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RespGetDevices is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-devices
 | 
			
		||||
type RespGetDevices struct {
 | 
			
		||||
	Devices []Device `json:"devices"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Device struct {
 | 
			
		||||
	DeviceId    string `json:"device_id" example:"l4kRnv3u"`
 | 
			
		||||
	DisplayName string `json:"display_name" example:"web"`
 | 
			
		||||
	LastSeenTs  int    `json:"last_seen_ts" example:"1620644706232"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RespGetThreePID is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-account-3pid
 | 
			
		||||
type RespGetThreePID struct {
 | 
			
		||||
	ThreePIDs []ThreePID `json:"threepids"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ThreePID struct {
 | 
			
		||||
	AddedAt     int    `json:"added_at"`
 | 
			
		||||
	Address     string `json:"address"`
 | 
			
		||||
	Medium      string `json:"medium"`
 | 
			
		||||
	ValidatedAt int    `json:"validated_at"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RespAccountData is JSON response for https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-user-userid-account-data-type
 | 
			
		||||
type RespAccountData map[string]interface{}
 | 
			
		||||
 | 
			
		||||
// RespEmailRequestToken is JSON response for
 | 
			
		||||
//		https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-register-email-requesttoken
 | 
			
		||||
//		https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-password-email-requesttoken
 | 
			
		||||
//		https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-account-3pid-email-requesttoken
 | 
			
		||||
type RespEmailRequestToken struct {
 | 
			
		||||
	Sid       string `json:"sid"`
 | 
			
		||||
	SumbitURL string `json:"submit_url"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue