mirror of https://github.com/matrix-org/gomatrix
Merge branch 'master' into kegan/api-logout
This commit is contained in:
commit
b6093bbf56
71
client.go
71
client.go
|
@ -359,6 +359,13 @@ func (cli *Client) Logout(removeCredentials bool) (resp *RespLogout, err error)
|
||||||
cli.UserID = ""
|
cli.UserID = ""
|
||||||
cli.AccessToken = ""
|
cli.AccessToken = ""
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Versions returns the list of supported Matrix versions on this homeserver. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-versions
|
||||||
|
func (cli *Client) Versions() (resp *RespVersions, err error) {
|
||||||
|
urlPath := cli.BuildBaseURL("_matrix", "client", "versions")
|
||||||
|
_, err = cli.MakeRequest("GET", urlPath, nil, &resp)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,12 +399,20 @@ func (cli *Client) SetDisplayName(displayName string) (err error) {
|
||||||
// SendMessageEvent sends a message event into a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid
|
// SendMessageEvent sends a message event into a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid
|
||||||
// contentJSON should be a pointer to something that can be encoded as JSON using json.Marshal.
|
// contentJSON should be a pointer to something that can be encoded as JSON using json.Marshal.
|
||||||
func (cli *Client) SendMessageEvent(roomID string, eventType string, contentJSON interface{}) (resp *RespSendEvent, err error) {
|
func (cli *Client) SendMessageEvent(roomID string, eventType string, contentJSON interface{}) (resp *RespSendEvent, err error) {
|
||||||
txnID := "go" + strconv.FormatInt(time.Now().UnixNano(), 10)
|
txnID := txnID()
|
||||||
urlPath := cli.BuildURL("rooms", roomID, "send", eventType, txnID)
|
urlPath := cli.BuildURL("rooms", roomID, "send", eventType, txnID)
|
||||||
_, err = cli.MakeRequest("PUT", urlPath, contentJSON, &resp)
|
_, err = cli.MakeRequest("PUT", urlPath, contentJSON, &resp)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SendStateEvent sends a state event into a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-state-eventtype-statekey
|
||||||
|
// contentJSON should be a pointer to something that can be encoded as JSON using json.Marshal.
|
||||||
|
func (cli *Client) SendStateEvent(roomID, eventType, stateKey string, contentJSON interface{}) (resp *RespSendEvent, err error) {
|
||||||
|
urlPath := cli.BuildURL("rooms", roomID, "state", eventType, stateKey)
|
||||||
|
_, err = cli.MakeRequest("PUT", urlPath, contentJSON, &resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// SendText sends an m.room.message event into the given room with a msgtype of m.text
|
// SendText sends an m.room.message event into the given room with a msgtype of m.text
|
||||||
// See http://matrix.org/docs/spec/client_server/r0.2.0.html#m-text
|
// See http://matrix.org/docs/spec/client_server/r0.2.0.html#m-text
|
||||||
func (cli *Client) SendText(roomID, text string) (*RespSendEvent, error) {
|
func (cli *Client) SendText(roomID, text string) (*RespSendEvent, error) {
|
||||||
|
@ -405,6 +420,14 @@ func (cli *Client) SendText(roomID, text string) (*RespSendEvent, error) {
|
||||||
TextMessage{"m.text", text})
|
TextMessage{"m.text", text})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RedactEvent redacts the given event. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-redact-eventid-txnid
|
||||||
|
func (cli *Client) RedactEvent(roomID, eventID string, req *ReqRedact) (resp *RespSendEvent, err error) {
|
||||||
|
txnID := txnID()
|
||||||
|
urlPath := cli.BuildURL("rooms", roomID, "redact", eventID, txnID)
|
||||||
|
_, err = cli.MakeRequest("PUT", urlPath, req, &resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// CreateRoom creates a new Matrix room. See https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom
|
// CreateRoom creates a new Matrix room. See https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom
|
||||||
// resp, err := cli.CreateRoom(&gomatrix.ReqCreateRoom{
|
// resp, err := cli.CreateRoom(&gomatrix.ReqCreateRoom{
|
||||||
// Preset: "public_chat",
|
// Preset: "public_chat",
|
||||||
|
@ -423,6 +446,48 @@ func (cli *Client) LeaveRoom(roomID string) (resp *RespLeaveRoom, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ForgetRoom forgets a room entirely. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-forget
|
||||||
|
func (cli *Client) ForgetRoom(roomID string) (resp *RespForgetRoom, err error) {
|
||||||
|
u := cli.BuildURL("rooms", roomID, "forget")
|
||||||
|
_, err = cli.MakeRequest("POST", u, struct{}{}, &resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// InviteUser invites a user to a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-invite
|
||||||
|
func (cli *Client) InviteUser(roomID string, req *ReqInviteUser) (resp *RespInviteUser, err error) {
|
||||||
|
u := cli.BuildURL("rooms", roomID, "invite")
|
||||||
|
_, err = cli.MakeRequest("POST", u, struct{}{}, &resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// InviteUserByThirdParty invites a third-party identifier to a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#invite-by-third-party-id-endpoint
|
||||||
|
func (cli *Client) InviteUserByThirdParty(roomID string, req *ReqInvite3PID) (resp *RespInviteUser, err error) {
|
||||||
|
u := cli.BuildURL("rooms", roomID, "invite")
|
||||||
|
_, err = cli.MakeRequest("POST", u, req, &resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// KickUser kicks a user from a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-kick
|
||||||
|
func (cli *Client) KickUser(roomID string, req *ReqKickUser) (resp *RespKickUser, err error) {
|
||||||
|
u := cli.BuildURL("rooms", roomID, "kick")
|
||||||
|
_, err = cli.MakeRequest("POST", u, req, &resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// BanUser bans a user from a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-ban
|
||||||
|
func (cli *Client) BanUser(roomID string, req *ReqBanUser) (resp *RespBanUser, err error) {
|
||||||
|
u := cli.BuildURL("rooms", roomID, "ban")
|
||||||
|
_, err = cli.MakeRequest("POST", u, req, &resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnbanUser unbans a user from a room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban
|
||||||
|
func (cli *Client) UnbanUser(roomID string, req *ReqUnbanUser) (resp *RespUnbanUser, err error) {
|
||||||
|
u := cli.BuildURL("rooms", roomID, "unban")
|
||||||
|
_, err = cli.MakeRequest("POST", u, req, &resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// StateEvent gets a single state event in a room. It will attempt to JSON unmarshal into the given "outContent" struct with
|
// StateEvent gets a single state event in a room. It will attempt to JSON unmarshal into the given "outContent" struct with
|
||||||
// the HTTP response body, or return an error.
|
// the HTTP response body, or return an error.
|
||||||
// See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-state-eventtype-statekey
|
// See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-state-eventtype-statekey
|
||||||
|
@ -473,6 +538,10 @@ func (cli *Client) UploadToContentRepo(content io.Reader, contentType string, co
|
||||||
return &m, nil
|
return &m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func txnID() string {
|
||||||
|
return "go" + strconv.FormatInt(time.Now().UnixNano(), 10)
|
||||||
|
}
|
||||||
|
|
||||||
// NewClient creates a new Matrix Client ready for syncing
|
// NewClient creates a new Matrix Client ready for syncing
|
||||||
func NewClient(homeserverURL, userID, accessToken string) (*Client, error) {
|
func NewClient(homeserverURL, userID, accessToken string) (*Client, error) {
|
||||||
hsURL, err := url.Parse(homeserverURL)
|
hsURL, err := url.Parse(homeserverURL)
|
||||||
|
|
27
requests.go
27
requests.go
|
@ -36,6 +36,11 @@ type ReqCreateRoom struct {
|
||||||
IsDirect bool `json:"is_direct,omitempty"`
|
IsDirect bool `json:"is_direct,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReqRedact is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-redact-eventid-txnid
|
||||||
|
type ReqRedact struct {
|
||||||
|
Reason string `json:"reason,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
// ReqInvite3PID is the JSON request for https://matrix.org/docs/spec/client_server/r0.2.0.html#id57
|
// ReqInvite3PID is the JSON request for https://matrix.org/docs/spec/client_server/r0.2.0.html#id57
|
||||||
// It is also a JSON object used in https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom
|
// It is also a JSON object used in https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom
|
||||||
type ReqInvite3PID struct {
|
type ReqInvite3PID struct {
|
||||||
|
@ -43,3 +48,25 @@ type ReqInvite3PID struct {
|
||||||
Medium string `json:"medium"`
|
Medium string `json:"medium"`
|
||||||
Address string `json:"address"`
|
Address string `json:"address"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReqInviteUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-invite
|
||||||
|
type ReqInviteUser struct {
|
||||||
|
UserID string `json:"user_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReqKickUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-kick
|
||||||
|
type ReqKickUser struct {
|
||||||
|
Reason string `json:"reason,omitempty"`
|
||||||
|
UserID string `json:"user_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReqBanUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-ban
|
||||||
|
type ReqBanUser struct {
|
||||||
|
Reason string `json:"reason,omitempty"`
|
||||||
|
UserID string `json:"user_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReqUnbanUser is the JSON request for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban
|
||||||
|
type ReqUnbanUser struct {
|
||||||
|
UserID string `json:"user_id"`
|
||||||
|
}
|
||||||
|
|
20
responses.go
20
responses.go
|
@ -17,6 +17,11 @@ type RespCreateFilter struct {
|
||||||
FilterID string `json:"filter_id"`
|
FilterID string `json:"filter_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RespVersions is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-versions
|
||||||
|
type RespVersions struct {
|
||||||
|
Versions []string `json:"versions"`
|
||||||
|
}
|
||||||
|
|
||||||
// RespJoinRoom is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-join
|
// RespJoinRoom is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-join
|
||||||
type RespJoinRoom struct {
|
type RespJoinRoom struct {
|
||||||
RoomID string `json:"room_id"`
|
RoomID string `json:"room_id"`
|
||||||
|
@ -25,6 +30,21 @@ type RespJoinRoom struct {
|
||||||
// RespLeaveRoom is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-leave
|
// RespLeaveRoom is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-leave
|
||||||
type RespLeaveRoom struct{}
|
type RespLeaveRoom struct{}
|
||||||
|
|
||||||
|
// RespForgetRoom is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-forget
|
||||||
|
type RespForgetRoom struct{}
|
||||||
|
|
||||||
|
// RespInviteUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-invite
|
||||||
|
type RespInviteUser struct{}
|
||||||
|
|
||||||
|
// RespKickUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-kick
|
||||||
|
type RespKickUser struct{}
|
||||||
|
|
||||||
|
// RespBanUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-ban
|
||||||
|
type RespBanUser struct{}
|
||||||
|
|
||||||
|
// RespUnbanUser is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-unban
|
||||||
|
type RespUnbanUser struct{}
|
||||||
|
|
||||||
// RespSendEvent is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid
|
// RespSendEvent is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid
|
||||||
type RespSendEvent struct {
|
type RespSendEvent struct {
|
||||||
EventID string `json:"event_id"`
|
EventID string `json:"event_id"`
|
||||||
|
|
Loading…
Reference in New Issue