From 237d87efccb5d5eb71d362ba1c3818c44c9d5eb4 Mon Sep 17 00:00:00 2001 From: SUMUKHA-PK Date: Thu, 23 May 2019 19:43:58 +0530 Subject: [PATCH] Trying stuff out --- .../routing/room_tagging.go | 0 vendor/manifest | 499 ------------ .../github.com/matrix-org/gomatrix/client.go | 708 ------------------ .../github.com/matrix-org/gomatrix/events.go | 103 --- .../github.com/matrix-org/gomatrix/filter.go | 90 --- .../matrix-org/gomatrix/responses.go | 177 ----- .../github.com/matrix-org/gomatrix/tags.go | 26 - 7 files changed, 1603 deletions(-) rename {src/github.com/matrix-org/dendrite/clientapi => clientapi}/routing/room_tagging.go (100%) delete mode 100644 vendor/manifest delete mode 100644 vendor/src/github.com/matrix-org/gomatrix/client.go delete mode 100644 vendor/src/github.com/matrix-org/gomatrix/events.go delete mode 100644 vendor/src/github.com/matrix-org/gomatrix/filter.go delete mode 100644 vendor/src/github.com/matrix-org/gomatrix/responses.go delete mode 100644 vendor/src/github.com/matrix-org/gomatrix/tags.go diff --git a/src/github.com/matrix-org/dendrite/clientapi/routing/room_tagging.go b/clientapi/routing/room_tagging.go similarity index 100% rename from src/github.com/matrix-org/dendrite/clientapi/routing/room_tagging.go rename to clientapi/routing/room_tagging.go diff --git a/vendor/manifest b/vendor/manifest deleted file mode 100644 index 34185c51a..000000000 --- a/vendor/manifest +++ /dev/null @@ -1,499 +0,0 @@ -{ - "version": 0, - "dependencies": [ - { - "importpath": "github.com/Shopify/sarama", - "repository": "https://github.com/Shopify/sarama", - "revision": "574d3147eee384229bf96a5d12c207fe7b5234f3", - "branch": "master" - }, - { - "importpath": "github.com/alecthomas/gometalinter", - "repository": "https://github.com/alecthomas/gometalinter", - "revision": "b8b1f84ae8cb72e7870785840eab2d6c6355aa9f", - "branch": "master" - }, - { - "importpath": "github.com/alecthomas/units", - "repository": "https://github.com/alecthomas/units", - "revision": "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a", - "branch": "master" - }, - { - "importpath": "github.com/apache/thrift", - "repository": "https://github.com/apache/thrift", - "revision": "b2a4d4ae21c789b689dd162deb819665567f481c", - "branch": "HEAD" - }, - { - "importpath": "github.com/apache/thrift/lib/go/thrift", - "repository": "https://github.com/apache/thrift", - "revision": "b2a4d4ae21c789b689dd162deb819665567f481c", - "branch": "HEAD", - "path": "/lib/go/thrift" - }, - { - "importpath": "github.com/beorn7/perks/quantile", - "repository": "https://github.com/beorn7/perks", - "revision": "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9", - "branch": "master", - "path": "/quantile" - }, - { - "importpath": "github.com/codahale/hdrhistogram", - "repository": "https://github.com/codahale/hdrhistogram", - "revision": "3a0bb77429bd3a61596f5e8a3172445844342120", - "branch": "master" - }, - { - "importpath": "github.com/crossdock/crossdock-go", - "repository": "https://github.com/crossdock/crossdock-go", - "revision": "049aabb0122b03bc9bd30cab8f3f91fb60166361", - "branch": "master" - }, - { - "importpath": "github.com/davecgh/go-spew/spew", - "repository": "https://github.com/davecgh/go-spew", - "revision": "346938d642f2ec3594ed81d874461961cd0faa76", - "branch": "master", - "path": "/spew" - }, - { - "importpath": "github.com/eapache/go-resiliency/breaker", - "repository": "https://github.com/eapache/go-resiliency", - "revision": "b86b1ec0dd4209a588dc1285cdd471e73525c0b3", - "branch": "master", - "path": "/breaker" - }, - { - "importpath": "github.com/eapache/go-xerial-snappy", - "repository": "https://github.com/eapache/go-xerial-snappy", - "revision": "bb955e01b9346ac19dc29eb16586c90ded99a98c", - "branch": "master" - }, - { - "importpath": "github.com/eapache/queue", - "repository": "https://github.com/eapache/queue", - "revision": "44cc805cf13205b55f69e14bcb69867d1ae92f98", - "branch": "master" - }, - { - "importpath": "github.com/golang/protobuf/proto", - "repository": "https://github.com/golang/protobuf", - "revision": "8ee79997227bf9b34611aee7946ae64735e6fd93", - "branch": "master", - "path": "/proto" - }, - { - "importpath": "github.com/golang/snappy", - "repository": "https://github.com/golang/snappy", - "revision": "7db9049039a047d955fe8c19b83c8ff5abd765c7", - "branch": "master" - }, - { - "importpath": "github.com/google/shlex", - "repository": "https://github.com/google/shlex", - "revision": "6f45313302b9c56850fc17f99e40caebce98c716", - "branch": "master" - }, - { - "importpath": "github.com/gorilla/context", - "repository": "https://github.com/gorilla/context", - "revision": "08b5f424b9271eedf6f9f0ce86cb9396ed337a42", - "branch": "master" - }, - { - "importpath": "github.com/gorilla/mux", - "repository": "https://github.com/gorilla/mux", - "revision": "392c28fe23e1c45ddba891b0320b3b5df220beea", - "branch": "master" - }, - { - "importpath": "github.com/jaegertracing/jaeger-client-go", - "repository": "https://github.com/jaegertracing/jaeger-client-go", - "revision": "3ad49a1d839b517923a6fdac36d81cbf7b744f37", - "branch": "master" - }, - { - "importpath": "github.com/jaegertracing/jaeger-lib/metrics", - "repository": "https://github.com/jaegertracing/jaeger-lib", - "revision": "21a3da6d66fe0e278072676fdc84cd4c9ccb9b67", - "branch": "master", - "path": "/metrics" - }, - { - "importpath": "github.com/klauspost/crc32", - "repository": "https://github.com/klauspost/crc32", - "revision": "cb6bfca970f6908083f26f39a79009d608efd5cd", - "branch": "master" - }, - { - "importpath": "github.com/lib/pq", - "repository": "https://github.com/lib/pq", - "revision": "23da1db4f16d9658a86ae9b717c245fc078f10f1", - "branch": "master" - }, - { - "importpath": "github.com/matrix-org/dugong", - "repository": "https://github.com/matrix-org/dugong", - "revision": "ea0a4690a0d5b414a18dbb06cf6153309a2d0528", - "branch": "master" - }, - { - "importpath": "github.com/matrix-org/gomatrix", - "repository": "https://github.com/matrix-org/gomatrix", - "revision": "51f01ddc3d93b709449b011bfc67a72a611b1510", - "branch": "master" - }, - { - "importpath": "github.com/matrix-org/gomatrixserverlib", - "repository": "https://github.com/matrix-org/gomatrixserverlib", - "revision": "1c2cbc0872f0b2f19929dd70d22f77486078641e", - "branch": "HEAD" - }, - { - "importpath": "github.com/matrix-org/naffka", - "repository": "https://github.com/matrix-org/naffka", - "revision": "662bfd0841d0194bfe0a700d54226bb96eac574d", - "branch": "master" - }, - { - "importpath": "github.com/matrix-org/util", - "repository": "https://github.com/matrix-org/util", - "revision": "8b1c8ab81986c1ce7f06a52fce48f4a1156b66ee", - "branch": "master" - }, - { - "importpath": "github.com/matttproud/golang_protobuf_extensions/pbutil", - "repository": "https://github.com/matttproud/golang_protobuf_extensions", - "revision": "c12348ce28de40eed0136aa2b644d0ee0650e56c", - "branch": "master", - "path": "/pbutil" - }, - { - "importpath": "github.com/nfnt/resize", - "repository": "https://github.com/nfnt/resize", - "revision": "891127d8d1b52734debe1b3c3d7e747502b6c366", - "branch": "master" - }, - { - "importpath": "github.com/nicksnyder/go-i18n/i18n", - "repository": "https://github.com/nicksnyder/go-i18n", - "revision": "3e70a1a463008cea6726380c908b1a6a8bdf7b24", - "branch": "master", - "path": "/i18n" - }, - { - "importpath": "github.com/opentracing/opentracing-go", - "repository": "https://github.com/opentracing/opentracing-go", - "revision": "8ebe5d4e236eed9fd88e593c288bfb804d630b8c", - "branch": "master" - }, - { - "importpath": "github.com/pelletier/go-toml", - "repository": "https://github.com/pelletier/go-toml", - "revision": "1d6b12b7cb290426e27e6b4e38b89fcda3aeef03", - "branch": "master" - }, - { - "importpath": "github.com/pierrec/lz4", - "repository": "https://github.com/pierrec/lz4", - "revision": "5c9560bfa9ace2bf86080bf40d46b34ae44604df", - "branch": "master" - }, - { - "importpath": "github.com/pierrec/xxHash/xxHash32", - "repository": "https://github.com/pierrec/xxHash", - "revision": "5a004441f897722c627870a981d02b29924215fa", - "branch": "master", - "path": "/xxHash32" - }, - { - "importpath": "github.com/pkg/errors", - "repository": "https://github.com/pkg/errors", - "revision": "c605e284fe17294bda444b34710735b29d1a9d90", - "branch": "master" - }, - { - "importpath": "github.com/pmezard/go-difflib/difflib", - "repository": "https://github.com/pmezard/go-difflib", - "revision": "792786c7400a136282c1664665ae0a8db921c6c2", - "branch": "master", - "path": "/difflib" - }, - { - "importpath": "github.com/prometheus/client_golang/prometheus", - "repository": "https://github.com/prometheus/client_golang", - "revision": "c51dc758d4bb30acacbef9eaa2b774969a135086", - "branch": "master" - }, - { - "importpath": "github.com/prometheus/client_golang/prometheus/promhttp", - "repository": "https://github.com/prometheus/client_golang", - "revision": "c51dc758d4bb30acacbef9eaa2b774969a135086", - "branch": "master" - }, - { - "importpath": "github.com/prometheus/client_model/go", - "repository": "https://github.com/prometheus/client_model", - "revision": "fa8ad6fec33561be4280a8f0514318c79d7f6cb6", - "branch": "master", - "path": "/go" - }, - { - "importpath": "github.com/prometheus/common/expfmt", - "repository": "https://github.com/prometheus/common", - "revision": "dd2f054febf4a6c00f2343686efb775948a8bff4", - "branch": "master", - "path": "/expfmt" - }, - { - "importpath": "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg", - "repository": "https://github.com/prometheus/common", - "revision": "dd2f054febf4a6c00f2343686efb775948a8bff4", - "branch": "master", - "path": "/internal/bitbucket.org/ww/goautoneg" - }, - { - "importpath": "github.com/prometheus/common/model", - "repository": "https://github.com/prometheus/common", - "revision": "dd2f054febf4a6c00f2343686efb775948a8bff4", - "branch": "master", - "path": "/model" - }, - { - "importpath": "github.com/prometheus/procfs", - "repository": "https://github.com/prometheus/procfs", - "revision": "1878d9fbb537119d24b21ca07effd591627cd160", - "branch": "master" - }, - { - "importpath": "github.com/rcrowley/go-metrics", - "repository": "https://github.com/rcrowley/go-metrics", - "revision": "1f30fe9094a513ce4c700b9a54458bbb0c96996c", - "branch": "master" - }, - { - "importpath": "github.com/sirupsen/logrus", - "repository": "https://github.com/sirupsen/logrus", - "revision": "89742aefa4b206dcf400792f3bd35b542998eb3b", - "branch": "master" - }, - { - "importpath": "github.com/stretchr/testify/assert", - "repository": "https://github.com/stretchr/testify", - "revision": "890a5c3458b43e6104ff5da8dfa139d013d77544", - "branch": "master", - "path": "/assert" - }, - { - "importpath": "github.com/stretchr/testify/require", - "repository": "https://github.com/stretchr/testify", - "revision": "890a5c3458b43e6104ff5da8dfa139d013d77544", - "branch": "master", - "path": "/require" - }, - { - "importpath": "github.com/tidwall/gjson", - "repository": "https://github.com/tidwall/gjson", - "revision": "67e2a63ac70d273b6bc7589f12f07180bc9fc189", - "branch": "master" - }, - { - "importpath": "github.com/tidwall/match", - "repository": "https://github.com/tidwall/match", - "revision": "1731857f09b1f38450e2c12409748407822dc6be", - "branch": "master" - }, - { - "importpath": "github.com/tidwall/sjson", - "repository": "https://github.com/tidwall/sjson", - "revision": "6a22caf2fd45d5e2119bfc3717e984f15a7eb7ee", - "branch": "master" - }, - { - "importpath": "github.com/uber-go/atomic", - "repository": "https://github.com/uber-go/atomic", - "revision": "54f72d32435d760d5604f17a82e2435b28dc4ba5", - "branch": "master" - }, - { - "importpath": "github.com/uber/tchannel-go", - "repository": "https://github.com/uber/tchannel-go", - "revision": "b3e26487e291972fda9c7301864a2ee7a319fd35", - "branch": "dev" - }, - { - "importpath": "go.uber.org/atomic", - "repository": "https://github.com/uber-go/atomic", - "revision": "54f72d32435d760d5604f17a82e2435b28dc4ba5", - "branch": "master" - }, - { - "importpath": "go.uber.org/multierr", - "repository": "https://github.com/uber-go/multierr", - "revision": "fb7d312c2c04c34f0ad621048bbb953b168f9ff6", - "branch": "master" - }, - { - "importpath": "go.uber.org/zap", - "repository": "https://github.com/uber-go/zap", - "revision": "35aad584952c3e7020db7b839f6b102de6271f89", - "branch": "master" - }, - { - "importpath": "golang.org/x/crypto/bcrypt", - "repository": "https://go.googlesource.com/crypto", - "revision": "9419663f5a44be8b34ca85f08abc5fe1be11f8a3", - "branch": "master", - "path": "/bcrypt" - }, - { - "importpath": "golang.org/x/crypto/blowfish", - "repository": "https://go.googlesource.com/crypto", - "revision": "9419663f5a44be8b34ca85f08abc5fe1be11f8a3", - "branch": "master", - "path": "/blowfish" - }, - { - "importpath": "golang.org/x/crypto/curve25519", - "repository": "https://go.googlesource.com/crypto", - "revision": "9419663f5a44be8b34ca85f08abc5fe1be11f8a3", - "branch": "master", - "path": "/curve25519" - }, - { - "importpath": "golang.org/x/crypto/ed25519", - "repository": "https://go.googlesource.com/crypto", - "revision": "9419663f5a44be8b34ca85f08abc5fe1be11f8a3", - "branch": "master", - "path": "/ed25519" - }, - { - "importpath": "golang.org/x/crypto/internal/subtle", - "repository": "https://go.googlesource.com/crypto", - "revision": "e4dc69e5b2fd71dcaf8bd5d054eb936deb78d1fa", - "branch": "master", - "path": "/internal/subtle" - }, - { - "importpath": "golang.org/x/crypto/nacl/secretbox", - "repository": "https://go.googlesource.com/crypto", - "revision": "e4dc69e5b2fd71dcaf8bd5d054eb936deb78d1fa", - "branch": "master", - "path": "/nacl/secretbox" - }, - { - "importpath": "golang.org/x/crypto/poly1305", - "repository": "https://go.googlesource.com/crypto", - "revision": "e4dc69e5b2fd71dcaf8bd5d054eb936deb78d1fa", - "branch": "master", - "path": "/poly1305" - }, - { - "importpath": "golang.org/x/crypto/salsa20/salsa", - "repository": "https://go.googlesource.com/crypto", - "revision": "e4dc69e5b2fd71dcaf8bd5d054eb936deb78d1fa", - "branch": "master", - "path": "/salsa20/salsa" - }, - { - "importpath": "golang.org/x/crypto/ssh", - "repository": "https://go.googlesource.com/crypto", - "revision": "9419663f5a44be8b34ca85f08abc5fe1be11f8a3", - "branch": "master", - "path": "/ssh" - }, - { - "importpath": "golang.org/x/net/bpf", - "repository": "https://go.googlesource.com/net", - "revision": "0a9397675ba34b2845f758fe3cd68828369c6517", - "branch": "master", - "path": "/bpf" - }, - { - "importpath": "golang.org/x/net/context", - "repository": "https://go.googlesource.com/net", - "revision": "007e530097ad7f954752df63046b4036f98ba6a6", - "branch": "master", - "path": "/context" - }, - { - "importpath": "golang.org/x/net/internal/iana", - "repository": "https://go.googlesource.com/net", - "revision": "0a9397675ba34b2845f758fe3cd68828369c6517", - "branch": "master", - "path": "/internal/iana" - }, - { - "importpath": "golang.org/x/net/internal/socket", - "repository": "https://go.googlesource.com/net", - "revision": "0a9397675ba34b2845f758fe3cd68828369c6517", - "branch": "master", - "path": "/internal/socket" - }, - { - "importpath": "golang.org/x/net/ipv4", - "repository": "https://go.googlesource.com/net", - "revision": "0a9397675ba34b2845f758fe3cd68828369c6517", - "branch": "master", - "path": "/ipv4" - }, - { - "importpath": "golang.org/x/net/ipv6", - "repository": "https://go.googlesource.com/net", - "revision": "0a9397675ba34b2845f758fe3cd68828369c6517", - "branch": "master", - "path": "/ipv6" - }, - { - "importpath": "golang.org/x/sys/unix", - "repository": "https://go.googlesource.com/sys", - "revision": "43eea11bc92608addb41b8a406b0407495c106f6", - "branch": "master", - "path": "/unix" - }, - { - "importpath": "gopkg.in/Shopify/sarama.v1", - "repository": "https://gopkg.in/Shopify/sarama.v1", - "revision": "0fb560e5f7fbcaee2f75e3c34174320709f69944", - "branch": "master" - }, - { - "importpath": "gopkg.in/airbrake/gobrake.v2", - "repository": "https://gopkg.in/airbrake/gobrake.v2", - "revision": "668876711219e8b0206e2994bf0a59d889c775aa", - "branch": "master" - }, - { - "importpath": "gopkg.in/alecthomas/kingpin.v3-unstable", - "repository": "https://gopkg.in/alecthomas/kingpin.v3-unstable", - "revision": "23bcc3c4eae3c47e1384a1aef1d611e5603b8dfc", - "branch": "v3-unstable" - }, - { - "importpath": "gopkg.in/gemnasium/logrus-airbrake-hook.v2", - "repository": "https://gopkg.in/gemnasium/logrus-airbrake-hook.v2", - "revision": "e928b033a891c0175fb643d5aa0779e86325eb12", - "branch": "master" - }, - { - "importpath": "gopkg.in/h2non/bimg.v1", - "repository": "https://gopkg.in/h2non/bimg.v1", - "revision": "02e621739c77c791d8c153f240b7a1f75b07816f", - "branch": "master" - }, - { - "importpath": "gopkg.in/macaroon.v2", - "repository": "https://gopkg.in/macaroon.v2", - "revision": "bed2a428da6e56d950bed5b41fcbae3141e5b0d0", - "branch": "master" - }, - { - "importpath": "gopkg.in/yaml.v2", - "repository": "https://gopkg.in/yaml.v2", - "revision": "287cf08546ab5e7e37d55a84f7ed3fd1db036de5", - "branch": "v2" - } - ] -} diff --git a/vendor/src/github.com/matrix-org/gomatrix/client.go b/vendor/src/github.com/matrix-org/gomatrix/client.go deleted file mode 100644 index 728f23ffe..000000000 --- a/vendor/src/github.com/matrix-org/gomatrix/client.go +++ /dev/null @@ -1,708 +0,0 @@ -// Package gomatrix implements the Matrix Client-Server API. -// -// Specification can be found at http://matrix.org/docs/spec/client_server/r0.2.0.html -package gomatrix - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "net/http" - "net/url" - "path" - "strconv" - "strings" - "sync" - "time" -) - -// Client represents a Matrix client. -type Client struct { - HomeserverURL *url.URL // The base homeserver URL - Prefix string // The API prefix eg '/_matrix/client/r0' - UserID string // The user ID of the client. Used for forming HTTP paths which use the client's user ID. - AccessToken string // The access_token for the client. - Client *http.Client // The underlying HTTP client which will be used to make HTTP requests. - Syncer Syncer // The thing which can process /sync responses - Store Storer // The thing which can store rooms/tokens/ids - - // The ?user_id= query parameter for application services. This must be set *prior* to calling a method. If this is empty, - // no user_id parameter will be sent. - // See http://matrix.org/docs/spec/application_service/unstable.html#identity-assertion - AppServiceUserID string - - syncingMutex sync.Mutex // protects syncingID - syncingID uint32 // Identifies the current Sync. Only one Sync can be active at any given time. -} - -// HTTPError An HTTP Error response, which may wrap an underlying native Go Error. -type HTTPError struct { - WrappedError error - Message string - Code int -} - -func (e HTTPError) Error() string { - var wrappedErrMsg string - if e.WrappedError != nil { - wrappedErrMsg = e.WrappedError.Error() - } - return fmt.Sprintf("msg=%s code=%d wrapped=%s", e.Message, e.Code, wrappedErrMsg) -} - -// BuildURL builds a URL with the Client's homserver/prefix/access_token set already. -func (cli *Client) BuildURL(urlPath ...string) string { - ps := []string{cli.Prefix} - for _, p := range urlPath { - ps = append(ps, p) - } - return cli.BuildBaseURL(ps...) -} - -// BuildBaseURL builds a URL with the Client's homeserver/access_token set already. You must -// supply the prefix in the path. -func (cli *Client) BuildBaseURL(urlPath ...string) string { - // copy the URL. Purposefully ignore error as the input is from a valid URL already - hsURL, _ := url.Parse(cli.HomeserverURL.String()) - parts := []string{hsURL.Path} - parts = append(parts, urlPath...) - hsURL.Path = path.Join(parts...) - // Manually add the trailing slash back to the end of the path if it's explicitly needed - if strings.HasSuffix(urlPath[len(urlPath)-1], "/") { - hsURL.Path = hsURL.Path + "/" - } - query := hsURL.Query() - if cli.AccessToken != "" { - query.Set("access_token", cli.AccessToken) - } - if cli.AppServiceUserID != "" { - query.Set("user_id", cli.AppServiceUserID) - } - hsURL.RawQuery = query.Encode() - return hsURL.String() -} - -// BuildURLWithQuery builds a URL with query parameters in addition to the Client's homeserver/prefix/access_token set already. -func (cli *Client) BuildURLWithQuery(urlPath []string, urlQuery map[string]string) string { - u, _ := url.Parse(cli.BuildURL(urlPath...)) - q := u.Query() - for k, v := range urlQuery { - q.Set(k, v) - } - u.RawQuery = q.Encode() - return u.String() -} - -// SetCredentials sets the user ID and access token on this client instance. -func (cli *Client) SetCredentials(userID, accessToken string) { - cli.AccessToken = accessToken - cli.UserID = userID -} - -// ClearCredentials removes the user ID and access token on this client instance. -func (cli *Client) ClearCredentials() { - cli.AccessToken = "" - cli.UserID = "" -} - -// Sync starts syncing with the provided Homeserver. If Sync() is called twice then the first sync will be stopped and the -// error will be nil. -// -// This function will block until a fatal /sync error occurs, so it should almost always be started as a new goroutine. -// Fatal sync errors can be caused by: -// - The failure to create a filter. -// - Client.Syncer.OnFailedSync returning an error in response to a failed sync. -// - Client.Syncer.ProcessResponse returning an error. -// If you wish to continue retrying in spite of these fatal errors, call Sync() again. -func (cli *Client) Sync() error { - // Mark the client as syncing. - // We will keep syncing until the syncing state changes. Either because - // Sync is called or StopSync is called. - syncingID := cli.incrementSyncingID() - nextBatch := cli.Store.LoadNextBatch(cli.UserID) - filterID := cli.Store.LoadFilterID(cli.UserID) - if filterID == "" { - filterJSON := cli.Syncer.GetFilterJSON(cli.UserID) - resFilter, err := cli.CreateFilter(filterJSON) - if err != nil { - return err - } - filterID = resFilter.FilterID - cli.Store.SaveFilterID(cli.UserID, filterID) - } - - for { - resSync, err := cli.SyncRequest(30000, nextBatch, filterID, false, "") - if err != nil { - duration, err2 := cli.Syncer.OnFailedSync(resSync, err) - if err2 != nil { - return err2 - } - time.Sleep(duration) - continue - } - - // Check that the syncing state hasn't changed - // Either because we've stopped syncing or another sync has been started. - // We discard the response from our sync. - if cli.getSyncingID() != syncingID { - return nil - } - - // Save the token now *before* processing it. This means it's possible - // to not process some events, but it means that we won't get constantly stuck processing - // a malformed/buggy event which keeps making us panic. - cli.Store.SaveNextBatch(cli.UserID, resSync.NextBatch) - if err = cli.Syncer.ProcessResponse(resSync, nextBatch); err != nil { - return err - } - - nextBatch = resSync.NextBatch - } -} - -func (cli *Client) incrementSyncingID() uint32 { - cli.syncingMutex.Lock() - defer cli.syncingMutex.Unlock() - cli.syncingID++ - return cli.syncingID -} - -func (cli *Client) getSyncingID() uint32 { - cli.syncingMutex.Lock() - defer cli.syncingMutex.Unlock() - return cli.syncingID -} - -// StopSync stops the ongoing sync started by Sync. -func (cli *Client) StopSync() { - // Advance the syncing state so that any running Syncs will terminate. - cli.incrementSyncingID() -} - -// MakeRequest makes a JSON HTTP request to the given URL. -// If "resBody" is not nil, the response body will be json.Unmarshalled into it. -// -// Returns the HTTP body as bytes on 2xx with a nil error. Returns an error if the response is not 2xx along -// with the HTTP body bytes if it got that far. This error is an HTTPError which includes the returned -// HTTP status code and possibly a RespError as the WrappedError, if the HTTP body could be decoded as a RespError. -func (cli *Client) MakeRequest(method string, httpURL string, reqBody interface{}, resBody interface{}) ([]byte, error) { - var req *http.Request - var err error - if reqBody != nil { - var jsonStr []byte - jsonStr, err = json.Marshal(reqBody) - if err != nil { - return nil, err - } - req, err = http.NewRequest(method, httpURL, bytes.NewBuffer(jsonStr)) - } else { - req, err = http.NewRequest(method, httpURL, nil) - } - - if err != nil { - return nil, err - } - req.Header.Set("Content-Type", "application/json") - res, err := cli.Client.Do(req) - if res != nil { - defer res.Body.Close() - } - if err != nil { - return nil, err - } - contents, err := ioutil.ReadAll(res.Body) - if res.StatusCode/100 != 2 { // not 2xx - var wrap error - var respErr RespError - if _ = json.Unmarshal(contents, &respErr); respErr.ErrCode != "" { - wrap = respErr - } - - // If we failed to decode as RespError, don't just drop the HTTP body, include it in the - // HTTP error instead (e.g proxy errors which return HTML). - msg := "Failed to " + method + " JSON to " + req.URL.Path - if wrap == nil { - msg = msg + ": " + string(contents) - } - - return contents, HTTPError{ - Code: res.StatusCode, - Message: msg, - WrappedError: wrap, - } - } - if err != nil { - return nil, err - } - - if resBody != nil { - if err = json.Unmarshal(contents, &resBody); err != nil { - return nil, err - } - } - - return contents, nil -} - -// CreateFilter makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-user-userid-filter -func (cli *Client) CreateFilter(filter json.RawMessage) (resp *RespCreateFilter, err error) { - urlPath := cli.BuildURL("user", cli.UserID, "filter") - _, err = cli.MakeRequest("POST", urlPath, &filter, &resp) - return -} - -// SyncRequest makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-sync -func (cli *Client) SyncRequest(timeout int, since, filterID string, fullState bool, setPresence string) (resp *RespSync, err error) { - query := map[string]string{ - "timeout": strconv.Itoa(timeout), - } - if since != "" { - query["since"] = since - } - if filterID != "" { - query["filter"] = filterID - } - if setPresence != "" { - query["set_presence"] = setPresence - } - if fullState { - query["full_state"] = "true" - } - urlPath := cli.BuildURLWithQuery([]string{"sync"}, query) - _, err = cli.MakeRequest("GET", urlPath, nil, &resp) - return -} - -func (cli *Client) register(u string, req *ReqRegister) (resp *RespRegister, uiaResp *RespUserInteractive, err error) { - var bodyBytes []byte - bodyBytes, err = cli.MakeRequest("POST", u, req, nil) - if err != nil { - httpErr, ok := err.(HTTPError) - if !ok { // network error - return - } - if httpErr.Code == 401 { - // body should be RespUserInteractive, if it isn't, fail with the error - err = json.Unmarshal(bodyBytes, &uiaResp) - return - } - return - } - // body should be RespRegister - err = json.Unmarshal(bodyBytes, &resp) - return -} - -// Register makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register -// -// Registers with kind=user. For kind=guest, see RegisterGuest. -func (cli *Client) Register(req *ReqRegister) (*RespRegister, *RespUserInteractive, error) { - u := cli.BuildURL("register") - return cli.register(u, req) -} - -// RegisterGuest makes an HTTP request according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register -// with kind=guest. -// -// For kind=user, see Register. -func (cli *Client) RegisterGuest(req *ReqRegister) (*RespRegister, *RespUserInteractive, error) { - query := map[string]string{ - "kind": "guest", - } - u := cli.BuildURLWithQuery([]string{"register"}, query) - return cli.register(u, req) -} - -// RegisterDummy performs m.login.dummy registration according to https://matrix.org/docs/spec/client_server/r0.2.0.html#dummy-auth -// -// Only a username and password need to be provided on the ReqRegister struct. Most local/developer homeservers will allow registration -// this way. If the homeserver does not, an error is returned. -// -// This does not set credentials on the client instance. See SetCredentials() instead. -// -// res, err := cli.RegisterDummy(&gomatrix.ReqRegister{ -// Username: "alice", -// Password: "wonderland", -// }) -// if err != nil { -// panic(err) -// } -// token := res.AccessToken -func (cli *Client) RegisterDummy(req *ReqRegister) (*RespRegister, error) { - res, uia, err := cli.Register(req) - if err != nil && uia == nil { - return nil, err - } - if uia != nil && uia.HasSingleStageFlow("m.login.dummy") { - req.Auth = struct { - Type string `json:"type"` - Session string `json:"session,omitempty"` - }{"m.login.dummy", uia.Session} - res, _, err = cli.Register(req) - if err != nil { - return nil, err - } - } - if res == nil { - return nil, fmt.Errorf("registration failed: does this server support m.login.dummy?") - } - return res, nil -} - -// Login a user to the homeserver according to http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-login -// This does not set credentials on this client instance. See SetCredentials() instead. -func (cli *Client) Login(req *ReqLogin) (resp *RespLogin, err error) { - urlPath := cli.BuildURL("login") - _, err = cli.MakeRequest("POST", urlPath, req, &resp) - return -} - -// Logout the current user. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-logout -// This does not clear the credentials from the client instance. See ClearCredentials() instead. -func (cli *Client) Logout() (resp *RespLogout, err error) { - urlPath := cli.BuildURL("logout") - _, err = cli.MakeRequest("POST", urlPath, nil, &resp) - 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 -} - -// JoinRoom joins the client to a room ID or alias. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-join-roomidoralias -// -// If serverName is specified, this will be added as a query param to instruct the homeserver to join via that server. If content is specified, it will -// be JSON encoded and used as the request body. -func (cli *Client) JoinRoom(roomIDorAlias, serverName string, content interface{}) (resp *RespJoinRoom, err error) { - var urlPath string - if serverName != "" { - urlPath = cli.BuildURLWithQuery([]string{"join", roomIDorAlias}, map[string]string{ - "server_name": serverName, - }) - } else { - urlPath = cli.BuildURL("join", roomIDorAlias) - } - _, err = cli.MakeRequest("POST", urlPath, content, &resp) - return -} - -// GetDisplayName returns the display name of the user from the specified MXID. See https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-displayname -func (cli *Client) GetDisplayName(mxid string) (resp *RespUserDisplayName, err error) { - urlPath := cli.BuildURL("profile", mxid, "displayname") - _, err = cli.MakeRequest("GET", urlPath, nil, &resp) - return -} - -// GetOwnDisplayName returns the user's display name. See https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-displayname -func (cli *Client) GetOwnDisplayName() (resp *RespUserDisplayName, err error) { - urlPath := cli.BuildURL("profile", cli.UserID, "displayname") - _, err = cli.MakeRequest("GET", urlPath, nil, &resp) - return -} - -// SetDisplayName sets the user's profile display name. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-profile-userid-displayname -func (cli *Client) SetDisplayName(displayName string) (err error) { - urlPath := cli.BuildURL("profile", cli.UserID, "displayname") - s := struct { - DisplayName string `json:"displayname"` - }{displayName} - _, err = cli.MakeRequest("PUT", urlPath, &s, nil) - return -} - -// GetAvatarURL gets the user's avatar URL. See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-avatar-url -func (cli *Client) GetAvatarURL() (url string, err error) { - urlPath := cli.BuildURL("profile", cli.UserID, "avatar_url") - s := struct { - AvatarURL string `json:"avatar_url"` - }{} - - _, err = cli.MakeRequest("GET", urlPath, nil, &s) - if err != nil { - return "", err - } - - return s.AvatarURL, nil -} - -// SetAvatarURL sets the user's avatar URL. See http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-profile-userid-avatar-url -func (cli *Client) SetAvatarURL(url string) (err error) { - urlPath := cli.BuildURL("profile", cli.UserID, "avatar_url") - s := struct { - AvatarURL string `json:"avatar_url"` - }{url} - _, err = cli.MakeRequest("PUT", urlPath, &s, nil) - if err != nil { - return err - } - - return nil -} - -// 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. -func (cli *Client) SendMessageEvent(roomID string, eventType string, contentJSON interface{}) (resp *RespSendEvent, err error) { - txnID := txnID() - urlPath := cli.BuildURL("rooms", roomID, "send", eventType, txnID) - _, err = cli.MakeRequest("PUT", urlPath, contentJSON, &resp) - 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 -// See http://matrix.org/docs/spec/client_server/r0.2.0.html#m-text -func (cli *Client) SendText(roomID, text string) (*RespSendEvent, error) { - return cli.SendMessageEvent(roomID, "m.room.message", - TextMessage{"m.text", text}) -} - -// SendImage sends an m.room.message event into the given room with a msgtype of m.image -// See https://matrix.org/docs/spec/client_server/r0.2.0.html#m-image -func (cli *Client) SendImage(roomID, body, url string) (*RespSendEvent, error) { - return cli.SendMessageEvent(roomID, "m.room.message", - ImageMessage{ - MsgType: "m.image", - Body: body, - URL: url, - }) -} - -// SendVideo sends an m.room.message event into the given room with a msgtype of m.video -// See https://matrix.org/docs/spec/client_server/r0.2.0.html#m-video -func (cli *Client) SendVideo(roomID, body, url string) (*RespSendEvent, error) { - return cli.SendMessageEvent(roomID, "m.room.message", - VideoMessage{ - MsgType: "m.video", - Body: body, - URL: url, - }) -} - -// SendNotice sends an m.room.message event into the given room with a msgtype of m.notice -// See http://matrix.org/docs/spec/client_server/r0.2.0.html#m-notice -func (cli *Client) SendNotice(roomID, text string) (*RespSendEvent, error) { - return cli.SendMessageEvent(roomID, "m.room.message", - TextMessage{"m.notice", 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 -// resp, err := cli.CreateRoom(&gomatrix.ReqCreateRoom{ -// Preset: "public_chat", -// }) -// fmt.Println("Room:", resp.RoomID) -func (cli *Client) CreateRoom(req *ReqCreateRoom) (resp *RespCreateRoom, err error) { - urlPath := cli.BuildURL("createRoom") - _, err = cli.MakeRequest("POST", urlPath, req, &resp) - return -} - -// LeaveRoom leaves the given room. See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-rooms-roomid-leave -func (cli *Client) LeaveRoom(roomID string) (resp *RespLeaveRoom, err error) { - u := cli.BuildURL("rooms", roomID, "leave") - _, err = cli.MakeRequest("POST", u, struct{}{}, &resp) - 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, req, &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 -} - -// UserTyping sets the typing status of the user. See https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-typing-userid -func (cli *Client) UserTyping(roomID string, typing bool, timeout int64) (resp *RespTyping, err error) { - req := ReqTyping{Typing: typing, Timeout: timeout} - u := cli.BuildURL("rooms", roomID, "typing", cli.UserID) - _, err = cli.MakeRequest("PUT", 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 -// 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 -func (cli *Client) StateEvent(roomID, eventType, stateKey string, outContent interface{}) (err error) { - u := cli.BuildURL("rooms", roomID, "state", eventType, stateKey) - _, err = cli.MakeRequest("GET", u, nil, outContent) - return -} - -// UploadLink uploads an HTTP URL and then returns an MXC URI. -func (cli *Client) UploadLink(link string) (*RespMediaUpload, error) { - res, err := cli.Client.Get(link) - if res != nil { - defer res.Body.Close() - } - if err != nil { - return nil, err - } - return cli.UploadToContentRepo(res.Body, res.Header.Get("Content-Type"), res.ContentLength) -} - -// UploadToContentRepo uploads the given bytes to the content repository and returns an MXC URI. -// See http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-media-r0-upload -func (cli *Client) UploadToContentRepo(content io.Reader, contentType string, contentLength int64) (*RespMediaUpload, error) { - req, err := http.NewRequest("POST", cli.BuildBaseURL("_matrix/media/r0/upload"), content) - if err != nil { - return nil, err - } - req.Header.Set("Content-Type", contentType) - req.ContentLength = contentLength - res, err := cli.Client.Do(req) - if res != nil { - defer res.Body.Close() - } - if err != nil { - return nil, err - } - if res.StatusCode != 200 { - contents, err := ioutil.ReadAll(res.Body) - if err != nil { - return nil, HTTPError{ - Message: "Upload request failed - Failed to read response body: " + err.Error(), - Code: res.StatusCode, - } - } - return nil, HTTPError{ - Message: "Upload request failed: " + string(contents), - Code: res.StatusCode, - } - } - var m RespMediaUpload - if err := json.NewDecoder(res.Body).Decode(&m); err != nil { - return nil, err - } - return &m, nil -} - -// JoinedMembers returns a map of joined room members. See TODO-SPEC. https://github.com/matrix-org/synapse/pull/1680 -// -// In general, usage of this API is discouraged in favour of /sync, as calling this API can race with incoming membership changes. -// This API is primarily designed for application services which may want to efficiently look up joined members in a room. -func (cli *Client) JoinedMembers(roomID string) (resp *RespJoinedMembers, err error) { - u := cli.BuildURL("rooms", roomID, "joined_members") - _, err = cli.MakeRequest("GET", u, nil, &resp) - return -} - -// JoinedRooms returns a list of rooms which the client is joined to. See TODO-SPEC. https://github.com/matrix-org/synapse/pull/1680 -// -// In general, usage of this API is discouraged in favour of /sync, as calling this API can race with incoming membership changes. -// This API is primarily designed for application services which may want to efficiently look up joined rooms. -func (cli *Client) JoinedRooms() (resp *RespJoinedRooms, err error) { - u := cli.BuildURL("joined_rooms") - _, err = cli.MakeRequest("GET", u, nil, &resp) - return -} - -// Messages returns a list of message and state events for a room. It uses -// pagination query parameters to paginate history in the room. -// See https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-messages -func (cli *Client) Messages(roomID, from, to string, dir rune, limit int) (resp *RespMessages, err error) { - query := map[string]string{ - "from": from, - "dir": string(dir), - } - if to != "" { - query["to"] = to - } - if limit != 0 { - query["limit"] = strconv.Itoa(limit) - } - - urlPath := cli.BuildURLWithQuery([]string{"rooms", roomID, "messages"}, query) - _, err = cli.MakeRequest("GET", urlPath, nil, &resp) - return -} - -// TurnServer returns turn server details and credentials for the client to use when initiating calls. -// See http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-voip-turnserver -func (cli *Client) TurnServer() (resp *RespTurnServer, err error) { - urlPath := cli.BuildURL("voip", "turnServer") - _, err = cli.MakeRequest("GET", urlPath, nil, &resp) - return -} - -func txnID() string { - return "go" + strconv.FormatInt(time.Now().UnixNano(), 10) -} - -// NewClient creates a new Matrix Client ready for syncing -func NewClient(homeserverURL, userID, accessToken string) (*Client, error) { - hsURL, err := url.Parse(homeserverURL) - if err != nil { - return nil, err - } - // By default, use an in-memory store which will never save filter ids / next batch tokens to disk. - // The client will work with this storer: it just won't remember across restarts. - // In practice, a database backend should be used. - store := NewInMemoryStore() - cli := Client{ - AccessToken: accessToken, - HomeserverURL: hsURL, - UserID: userID, - Prefix: "/_matrix/client/r0", - Syncer: NewDefaultSyncer(userID, store), - Store: store, - } - // By default, use the default HTTP client. - cli.Client = http.DefaultClient - - return &cli, nil -} diff --git a/vendor/src/github.com/matrix-org/gomatrix/events.go b/vendor/src/github.com/matrix-org/gomatrix/events.go deleted file mode 100644 index 1a828037e..000000000 --- a/vendor/src/github.com/matrix-org/gomatrix/events.go +++ /dev/null @@ -1,103 +0,0 @@ -package gomatrix - -import ( - "html" - "regexp" -) - -// Event represents a single Matrix event. -type Event struct { - StateKey *string `json:"state_key,omitempty"` // The state key for the event. Only present on State Events. - Sender string `json:"sender"` // The user ID of the sender of the event - Type string `json:"type"` // The event type - Timestamp int64 `json:"origin_server_ts"` // The unix timestamp when this message was sent by the origin server - ID string `json:"event_id"` // The unique ID of this event - RoomID string `json:"room_id"` // The room the event was sent to. May be nil (e.g. for presence) - Content map[string]interface{} `json:"content"` // The JSON content of the event. - Redacts string `json:"redacts,omitempty"` // The event ID that was redacted if a m.room.redaction event - Unsigned map[string]interface{} `json:"unsigned"` // The unsigned portions of the event, such as age and prev_content -} - -// Body returns the value of the "body" key in the event content if it is -// present and is a string. -func (event *Event) Body() (body string, ok bool) { - value, exists := event.Content["body"] - if !exists { - return - } - body, ok = value.(string) - return -} - -// MessageType returns the value of the "msgtype" key in the event content if -// it is present and is a string. -func (event *Event) MessageType() (msgtype string, ok bool) { - value, exists := event.Content["msgtype"] - if !exists { - return - } - msgtype, ok = value.(string) - return -} - -// TextMessage is the contents of a Matrix formated message event. -type TextMessage struct { - MsgType string `json:"msgtype"` - Body string `json:"body"` -} - -// ImageInfo contains info about an image - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-image -type ImageInfo struct { - Height uint `json:"h,omitempty"` - Width uint `json:"w,omitempty"` - Mimetype string `json:"mimetype,omitempty"` - Size uint `json:"size,omitempty"` -} - -// VideoInfo contains info about a video - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-video -type VideoInfo struct { - Mimetype string `json:"mimetype,omitempty"` - ThumbnailInfo ImageInfo `json:"thumbnail_info"` - ThumbnailURL string `json:"thumbnail_url,omitempty"` - Height uint `json:"h,omitempty"` - Width uint `json:"w,omitempty"` - Duration uint `json:"duration,omitempty"` - Size uint `json:"size,omitempty"` -} - -// VideoMessage is an m.video - http://matrix.org/docs/spec/client_server/r0.2.0.html#m-video -type VideoMessage struct { - MsgType string `json:"msgtype"` - Body string `json:"body"` - URL string `json:"url"` - Info VideoInfo `json:"info"` -} - -// ImageMessage is an m.image event -type ImageMessage struct { - MsgType string `json:"msgtype"` - Body string `json:"body"` - URL string `json:"url"` - Info ImageInfo `json:"info"` -} - -// An HTMLMessage is the contents of a Matrix HTML formated message event. -type HTMLMessage struct { - Body string `json:"body"` - MsgType string `json:"msgtype"` - Format string `json:"format"` - FormattedBody string `json:"formatted_body"` -} - -var htmlRegex = regexp.MustCompile("<[^<]+?>") - -// GetHTMLMessage returns an HTMLMessage with the body set to a stripped version of the provided HTML, in addition -// to the provided HTML. -func GetHTMLMessage(msgtype, htmlText string) HTMLMessage { - return HTMLMessage{ - Body: html.UnescapeString(htmlRegex.ReplaceAllLiteralString(htmlText, "")), - MsgType: msgtype, - Format: "org.matrix.custom.html", - FormattedBody: htmlText, - } -} diff --git a/vendor/src/github.com/matrix-org/gomatrix/filter.go b/vendor/src/github.com/matrix-org/gomatrix/filter.go deleted file mode 100644 index 2a0c37fac..000000000 --- a/vendor/src/github.com/matrix-org/gomatrix/filter.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2017 Jan Christian Grünhage -// -// 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 gomatrix - -import "errors" - -//Filter is used by clients to specify how the server should filter responses to e.g. sync requests -//Specified by: https://matrix.org/docs/spec/client_server/r0.2.0.html#filtering -type Filter struct { - AccountData FilterPart `json:"account_data,omitempty"` - EventFields []string `json:"event_fields,omitempty"` - EventFormat string `json:"event_format,omitempty"` - Presence FilterPart `json:"presence,omitempty"` - Room RoomFilter `json:"room,omitempty"` -} - -// RoomFilter is used to define filtering rules for room events -type RoomFilter struct { - AccountData FilterPart `json:"account_data,omitempty"` - Ephemeral FilterPart `json:"ephemeral,omitempty"` - IncludeLeave bool `json:"include_leave,omitempty"` - NotRooms []string `json:"not_rooms,omitempty"` - Rooms []string `json:"rooms,omitempty"` - State FilterPart `json:"state,omitempty"` - Timeline FilterPart `json:"timeline,omitempty"` -} - -// FilterPart is used to define filtering rules for specific categories of events -type FilterPart struct { - NotRooms []string `json:"not_rooms,omitempty"` - Rooms []string `json:"rooms,omitempty"` - Limit int `json:"limit,omitempty"` - NotSenders []string `json:"not_senders,omitempty"` - NotTypes []string `json:"not_types,omitempty"` - Senders []string `json:"senders,omitempty"` - Types []string `json:"types,omitempty"` - ContainsURL *bool `json:"contains_url,omitempty"` -} - -// Validate checks if the filter contains valid property values -func (filter *Filter) Validate() error { - if filter.EventFormat != "client" && filter.EventFormat != "federation" { - return errors.New("Bad event_format value. Must be one of [\"client\", \"federation\"]") - } - return nil -} - -// DefaultFilter returns the default filter used by the Matrix server if no filter is provided in the request -func DefaultFilter() Filter { - return Filter{ - AccountData: DefaultFilterPart(), - EventFields: nil, - EventFormat: "client", - Presence: DefaultFilterPart(), - Room: RoomFilter{ - AccountData: DefaultFilterPart(), - Ephemeral: DefaultFilterPart(), - IncludeLeave: false, - NotRooms: nil, - Rooms: nil, - State: DefaultFilterPart(), - Timeline: DefaultFilterPart(), - }, - } -} - -// DefaultFilterPart returns the default filter part used by the Matrix server if no filter is provided in the request -func DefaultFilterPart() FilterPart { - return FilterPart{ - NotRooms: nil, - Rooms: nil, - Limit: 20, - NotSenders: nil, - NotTypes: nil, - Senders: nil, - Types: nil, - } -} diff --git a/vendor/src/github.com/matrix-org/gomatrix/responses.go b/vendor/src/github.com/matrix-org/gomatrix/responses.go deleted file mode 100644 index 7a3a4ce39..000000000 --- a/vendor/src/github.com/matrix-org/gomatrix/responses.go +++ /dev/null @@ -1,177 +0,0 @@ -package gomatrix - -// RespError is the standard JSON error response from Homeservers. It also implements the Golang "error" interface. -// See http://matrix.org/docs/spec/client_server/r0.2.0.html#api-standards -type RespError struct { - ErrCode string `json:"errcode"` - Err string `json:"error"` -} - -// Error returns the errcode and error message. -func (e RespError) Error() string { - return e.ErrCode + ": " + e.Err -} - -// RespCreateFilter is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-user-userid-filter -type RespCreateFilter struct { - 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 -type RespJoinRoom struct { - RoomID string `json:"room_id"` -} - -// 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{} - -// 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{} - -// RespTyping is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-typing-userid -type RespTyping struct{} - -// RespJoinedRooms is the JSON response for TODO-SPEC https://github.com/matrix-org/synapse/pull/1680 -type RespJoinedRooms struct { - JoinedRooms []string `json:"joined_rooms"` -} - -// RespJoinedMembers is the JSON response for TODO-SPEC https://github.com/matrix-org/synapse/pull/1680 -type RespJoinedMembers struct { - Joined map[string]struct { - DisplayName *string `json:"display_name"` - AvatarURL *string `json:"avatar_url"` - } `json:"joined"` -} - -// RespMessages is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-rooms-roomid-messages -type RespMessages struct { - Start string `json:"start"` - Chunk []Event `json:"chunk"` - End string `json:"end"` -} - -// 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 { - EventID string `json:"event_id"` -} - -// RespMediaUpload is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-media-r0-upload -type RespMediaUpload struct { - ContentURI string `json:"content_uri"` -} - -// RespUserInteractive is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#user-interactive-authentication-api -type RespUserInteractive struct { - Flows []struct { - Stages []string `json:"stages"` - } `json:"flows"` - Params map[string]interface{} `json:"params"` - Session string `json:"session"` - Completed []string `json:"completed"` - ErrCode string `json:"errcode"` - Error string `json:"error"` -} - -// HasSingleStageFlow returns true if there exists at least 1 Flow with a single stage of stageName. -func (r RespUserInteractive) HasSingleStageFlow(stageName string) bool { - for _, f := range r.Flows { - if len(f.Stages) == 1 && f.Stages[0] == stageName { - return true - } - } - return false -} - -// RespUserDisplayName is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-profile-userid-displayname -type RespUserDisplayName struct { - DisplayName string `json:"displayname"` -} - -// RespRegister is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-register -type RespRegister struct { - AccessToken string `json:"access_token"` - DeviceID string `json:"device_id"` - HomeServer string `json:"home_server"` - RefreshToken string `json:"refresh_token"` - UserID string `json:"user_id"` -} - -// RespLogin is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-login -type RespLogin struct { - AccessToken string `json:"access_token"` - DeviceID string `json:"device_id"` - HomeServer string `json:"home_server"` - UserID string `json:"user_id"` -} - -// RespLogout is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-logout -type RespLogout struct{} - -// RespCreateRoom is the JSON response for https://matrix.org/docs/spec/client_server/r0.2.0.html#post-matrix-client-r0-createroom -type RespCreateRoom struct { - RoomID string `json:"room_id"` -} - -// RespSync is the JSON response for http://matrix.org/docs/spec/client_server/r0.2.0.html#get-matrix-client-r0-sync -type RespSync struct { - NextBatch string `json:"next_batch"` - AccountData struct { - Events []Event `json:"events"` - } `json:"account_data"` - Presence struct { - Events []Event `json:"events"` - } `json:"presence"` - Rooms struct { - Leave map[string]struct { - State struct { - Events []Event `json:"events"` - } `json:"state"` - Timeline struct { - Events []Event `json:"events"` - Limited bool `json:"limited"` - PrevBatch string `json:"prev_batch"` - } `json:"timeline"` - } `json:"leave"` - Join map[string]struct { - State struct { - Events []Event `json:"events"` - } `json:"state"` - Timeline struct { - Events []Event `json:"events"` - Limited bool `json:"limited"` - PrevBatch string `json:"prev_batch"` - } `json:"timeline"` - } `json:"join"` - Invite map[string]struct { - State struct { - Events []Event - } `json:"invite_state"` - } `json:"invite"` - } `json:"rooms"` -} - -// RespTurnServer is the JSON response from a Turn Server -type RespTurnServer struct { - Username string `json:"username"` - Password string `json:"password"` - TTL int `json:"ttl"` - URIs []string `json:"uris"` -} diff --git a/vendor/src/github.com/matrix-org/gomatrix/tags.go b/vendor/src/github.com/matrix-org/gomatrix/tags.go deleted file mode 100644 index 956fb11e9..000000000 --- a/vendor/src/github.com/matrix-org/gomatrix/tags.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2019 Sumukha PK -// -// 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 gomatrix - -// TagContent contains the data for an m.tag message type -// https://matrix.org/docs/spec/client_server/r0.4.0.html#m-tag -type TagContent struct { - Tags map[string]TagProperties `json:"tags"` -} - -// TagProperties contains the properties of a Tag -type TagProperties struct { - Order float32 `json:"order,omitempty"` // Empty values must be neglected -}