Documentation ¶
Index ¶
- Constants
- Variables
- func DecodeUserLocalpart(str string) (string, error)
- func EncodeUserLocalpart(str string) string
- func ValidateUserLocalpart(localpart string) error
- type Algorithm
- type BatchID
- type ContentURI
- func (uri ContentURI) CUString() ContentURIString
- func (uri ContentURI) IsEmpty() bool
- func (uri *ContentURI) MarshalJSON() ([]byte, error)
- func (uri ContentURI) MarshalText() ([]byte, error)
- func (uri *ContentURI) Scan(i interface{}) error
- func (uri ContentURI) String() string
- func (uri *ContentURI) UnmarshalJSON(raw []byte) (err error)
- func (uri *ContentURI) UnmarshalText(raw []byte) (err error)
- func (uri *ContentURI) Value() (driver.Value, error)
- type ContentURIString
- type CrossSigningKey
- type CrossSigningUsage
- type Curve25519
- type Device
- type DeviceID
- type DeviceKeyID
- type Ed25519
- type EventID
- type IdentityKey
- type KeyAlgorithm
- type KeyID
- type MatrixURI
- func (uri *MatrixURI) EventID() EventID
- func (uri *MatrixURI) MatrixToURL() string
- func (uri *MatrixURI) PrimaryIdentifier() string
- func (uri *MatrixURI) RoomAlias() RoomAlias
- func (uri *MatrixURI) RoomID() RoomID
- func (uri *MatrixURI) SecondaryIdentifier() string
- func (uri *MatrixURI) String() string
- func (uri *MatrixURI) UserID() UserID
- type OlmMsgType
- type RoomAlias
- type RoomID
- type SenderKey
- type SessionID
- type SigningKey
- type TrustState
- type UserID
- func (userID UserID) Homeserver() string
- func (userID UserID) Localpart() string
- func (userID UserID) Parse() (localpart, homeserver string, err error)
- func (userID UserID) ParseAndDecode() (localpart, homeserver string, err error)
- func (userID UserID) ParseAndValidate() (localpart, homeserver string, err error)
- func (userID UserID) String() string
- func (userID UserID) URI() *MatrixURI
Constants ¶
const UserIDMaxLength = 255
Variables ¶
var ( InvalidContentURI = errors.New("invalid Matrix content URI") InputNotJSONString = errors.New("input doesn't look like a JSON string") )
var ( ErrInvalidScheme = errors.New("matrix URI scheme must be exactly 'matrix'") ErrInvalidPartCount = errors.New("matrix URIs must have exactly 2 or 4 segments") ErrInvalidFirstSegment = errors.New("invalid identifier in first segment of matrix URI") ErrEmptySecondSegment = errors.New("the second segment of the matrix URI must not be empty") ErrInvalidThirdSegment = errors.New("invalid identifier in third segment of matrix URI") ErrEmptyFourthSegment = errors.New("the fourth segment of the matrix URI must not be empty when the third segment is present") )
Errors that can happen when parsing matrix: URIs
var ( ErrNotMatrixTo = errors.New("that URL is not a matrix.to URL") ErrInvalidMatrixToPartCount = errors.New("matrix.to URLs must have exactly 1 or 2 segments") ErrEmptyMatrixToPrimaryIdentifier = errors.New("the primary identifier in the matrix.to URL is empty") ErrInvalidMatrixToPrimaryIdentifier = errors.New("the primary identifier in the matrix.to URL has an invalid sigil") ErrInvalidMatrixToSecondaryIdentifier = errors.New("the secondary identifier in the matrix.to URL has an invalid sigil") )
Errors that can happen when parsing matrix.to URLs
var ( ErrInvalidUserID = errors.New("is not a valid user ID") ErrNoncompliantLocalpart = errors.New("contains characters that are not allowed") ErrUserIDTooLong = errors.New("the given user ID is longer than 255 characters") ErrEmptyLocalpart = errors.New("empty localparts are not allowed") )
var ErrNotMatrixToOrMatrixURI = errors.New("that URL is not a matrix.to URL nor matrix: URI")
var SigilToPathSegment = map[rune]string{
'$': "e",
'#': "r",
'!': "roomid",
'@': "u",
}
SigilToPathSegment contains a mapping from Matrix identifier sigils to matrix: URI path segments.
var ValidLocalpartRegex = regexp.MustCompile("^[0-9a-z-.=_/]+$")
Functions ¶
func DecodeUserLocalpart ¶
DecodeUserLocalpart decodes the given string back into the original input string. Returns an error if the given string is not a valid user ID localpart encoding. See https://spec.matrix.org/v1.2/appendices/#mapping-from-other-character-sets
This decodes quoted-printable bytes back into UTF8, and unescapes casing. For example:
_alph=40_bet=5f50up => Alph@Bet_50up
Returns an error if the input string contains characters outside the range "a-z0-9._=-", has an invalid quote-printable byte (e.g. not hex), or has an invalid _ escaped byte (e.g. "_5").
func EncodeUserLocalpart ¶
EncodeUserLocalpart encodes the given string into Matrix-compliant user ID localpart form. See https://spec.matrix.org/v1.2/appendices/#mapping-from-other-character-sets
This returns a string with only the characters "a-z0-9._=-". The uppercase range A-Z are encoded using leading underscores ("_"). Characters outside the aforementioned ranges (including literal underscores ("_") and equals ("=")) are encoded as UTF8 code points (NOT NCRs) and converted to lower-case hex with a leading "=". For example:
Alph@Bet_50up => _alph=40_bet=5f50up
func ValidateUserLocalpart ¶
ValidateUserLocalpart validates a Matrix user ID localpart using the grammar in https://matrix.org/docs/spec/appendices#user-identifier
Types ¶
type Algorithm ¶
type Algorithm string
Algorithm is a Matrix message encryption algorithm. https://spec.matrix.org/v1.2/client-server-api/#messaging-algorithm-names
type BatchID ¶
type BatchID string
A BatchID is a string identifying a batch of events being backfilled to a room. https://github.com/matrix-org/matrix-doc/pull/2716
type ContentURI ¶
ContentURI represents a Matrix content URI. https://spec.matrix.org/v1.2/client-server-api/#matrix-content-mxc-uris
func MustParseContentURI ¶
func MustParseContentURI(uri string) ContentURI
func ParseContentURI ¶
func ParseContentURI(uri string) (parsed ContentURI, err error)
ParseContentURI parses a Matrix content URI.
func ParseContentURIBytes ¶
func ParseContentURIBytes(uri []byte) (parsed ContentURI, err error)
func (ContentURI) CUString ¶
func (uri ContentURI) CUString() ContentURIString
func (ContentURI) IsEmpty ¶
func (uri ContentURI) IsEmpty() bool
func (*ContentURI) MarshalJSON ¶
func (uri *ContentURI) MarshalJSON() ([]byte, error)
func (ContentURI) MarshalText ¶
func (uri ContentURI) MarshalText() ([]byte, error)
func (*ContentURI) Scan ¶
func (uri *ContentURI) Scan(i interface{}) error
func (ContentURI) String ¶
func (uri ContentURI) String() string
func (*ContentURI) UnmarshalJSON ¶
func (uri *ContentURI) UnmarshalJSON(raw []byte) (err error)
func (*ContentURI) UnmarshalText ¶
func (uri *ContentURI) UnmarshalText(raw []byte) (err error)
type ContentURIString ¶
type ContentURIString string
ContentURIString is a string that's expected to be a Matrix content URI. It's useful for delaying the parsing of the content URI to move errors from the event content JSON parsing step to a later step where more appropriate errors can be produced.
func (ContentURIString) Parse ¶
func (uriString ContentURIString) Parse() (ContentURI, error)
func (ContentURIString) ParseOrIgnore ¶
func (uriString ContentURIString) ParseOrIgnore() ContentURI
type CrossSigningKey ¶
type CrossSigningUsage ¶
type CrossSigningUsage string
const ( XSUsageMaster CrossSigningUsage = "master" XSUsageSelfSigning CrossSigningUsage = "self_signing" XSUsageUserSigning CrossSigningUsage = "user_signing" )
type Curve25519 ¶
type Curve25519 string
Curve25519 is the base64 representation of an Curve25519 public key
func (Curve25519) String ¶
func (curve25519 Curve25519) String() string
type Device ¶
type Device struct { UserID UserID DeviceID DeviceID IdentityKey Curve25519 SigningKey Ed25519 Trust TrustState Deleted bool Name string }
Device contains the identity details of a device and some additional info.
func (*Device) Fingerprint ¶
type DeviceID ¶
type DeviceID string
A DeviceID is an arbitrary string that references a specific device.
type DeviceKeyID ¶
type DeviceKeyID string
A DeviceKeyID is a string formatted as <algorithm>:<device_id> that is used as the key in deviceid-key mappings.
func NewDeviceKeyID ¶
func NewDeviceKeyID(algorithm KeyAlgorithm, deviceID DeviceID) DeviceKeyID
func (DeviceKeyID) Parse ¶
func (deviceKeyID DeviceKeyID) Parse() (Algorithm, DeviceID)
func (DeviceKeyID) String ¶
func (deviceKeyID DeviceKeyID) String() string
type Ed25519 ¶
type Ed25519 string
Ed25519 is the base64 representation of an Ed25519 public key
func (Ed25519) Fingerprint ¶
type EventID ¶
type EventID string
An EventID is a string starting with $ that references a specific event.
https://matrix.org/docs/spec/appendices#room-ids-and-event-ids https://matrix.org/docs/spec/rooms/v4#event-ids
type IdentityKey ¶
type IdentityKey = Curve25519
type KeyAlgorithm ¶
type KeyAlgorithm string
const ( KeyAlgorithmCurve25519 KeyAlgorithm = "curve25519" KeyAlgorithmEd25519 KeyAlgorithm = "ed25519" KeyAlgorithmSignedCurve25519 KeyAlgorithm = "signed_curve25519" )
type KeyID ¶
type KeyID string
A KeyID a string formatted as <keyalgorithm>:<key_id> that is used as the key in one-time-key mappings.
func NewKeyID ¶
func NewKeyID(algorithm KeyAlgorithm, keyID string) KeyID
func (KeyID) Parse ¶
func (keyID KeyID) Parse() (KeyAlgorithm, string)
type MatrixURI ¶
type MatrixURI struct { Sigil1 rune Sigil2 rune MXID1 string MXID2 string Via []string Action string }
MatrixURI contains the result of parsing a matrix: URI using ParseMatrixURI
func ParseMatrixToURL ¶
ParseMatrixToURL parses a matrix.to URL into the same container as ParseMatrixURI parses matrix: URIs.
func ParseMatrixURI ¶
ParseMatrixURI implements the matrix: URI parsing algorithm.
Currently specified in https://github.com/matrix-org/matrix-doc/blob/master/proposals/2312-matrix-uri.md#uri-parsing-algorithm
func ParseMatrixURIOrMatrixToURL ¶
ParseMatrixURIOrMatrixToURL parses the given matrix.to URL or matrix: URI into a unified representation.
func ProcessMatrixToURL ¶
ProcessMatrixToURL is the equivalent of ProcessMatrixURI for matrix.to URLs.
func ProcessMatrixURI ¶
ProcessMatrixURI implements steps 2-7 of the matrix: URI parsing algorithm (i.e. everything except parsing the URI itself, which is done with url.Parse or ParseMatrixURI)
func (*MatrixURI) EventID ¶
EventID returns the event ID from the URI if the primary identifier is a room ID or alias and the secondary identifier is an event ID.
func (*MatrixURI) MatrixToURL ¶
MatrixToURL converts to parsed matrix: URI into a matrix.to URL
func (*MatrixURI) PrimaryIdentifier ¶
PrimaryIdentifier returns the first Matrix identifier in the URI. Currently room IDs, room aliases and user IDs can be in the primary identifier slot.
func (*MatrixURI) RoomAlias ¶
RoomAlias returns the room alias from the URI if the primary identifier is a room alias.
func (*MatrixURI) RoomID ¶
RoomID returns the room ID from the URI if the primary identifier is a room ID.
func (*MatrixURI) SecondaryIdentifier ¶
SecondaryIdentifier returns the second Matrix identifier in the URI. Currently only event IDs can be in the secondary identifier slot.
type OlmMsgType ¶
type OlmMsgType int
OlmMsgType is an Olm message type
const ( OlmMsgTypePreKey OlmMsgType = 0 OlmMsgTypeMsg OlmMsgType = 1 )
type RoomAlias ¶
type RoomAlias string
A RoomAlias is a string starting with # that can be resolved into. https://matrix.org/docs/spec/appendices#room-aliases
func NewRoomAlias ¶
type RoomID ¶
type RoomID string
A RoomID is a string starting with ! that references a specific room. https://matrix.org/docs/spec/appendices#room-ids-and-event-ids
type SenderKey ¶
type SenderKey = Curve25519
type SessionID ¶
type SessionID string
A SessionID is an arbitrary string that identifies an Olm or Megolm session.
type SigningKey ¶
type SigningKey = Ed25519
type TrustState ¶
type TrustState int
TrustState determines how trusted a device is.
const ( TrustStateBlacklisted TrustState = -100 TrustStateUnset TrustState = 0 TrustStateUnknownDevice TrustState = 10 TrustStateForwarded TrustState = 20 TrustStateCrossSignedUntrusted TrustState = 50 TrustStateCrossSignedTOFU TrustState = 100 TrustStateCrossSignedVerified TrustState = 200 TrustStateVerified TrustState = 300 TrustStateInvalid TrustState = (1 << 31) - 1 )
func ParseTrustState ¶
func ParseTrustState(val string) TrustState
func (*TrustState) MarshalText ¶
func (ts *TrustState) MarshalText() ([]byte, error)
func (TrustState) String ¶
func (ts TrustState) String() string
func (*TrustState) UnmarshalText ¶
func (ts *TrustState) UnmarshalText(data []byte) error
type UserID ¶
type UserID string
UserID represents a Matrix user ID. https://matrix.org/docs/spec/appendices#user-identifiers
func NewEncodedUserID ¶
func (UserID) Homeserver ¶
func (UserID) Parse ¶
Parse parses the user ID into the localpart and server name.
Note that this only enforces very basic user ID formatting requirements: user IDs start with a @, and contain a : after the @. If you want to enforce localpart validity, see the ParseAndValidate and ValidateUserLocalpart functions.
func (UserID) ParseAndDecode ¶
func (UserID) ParseAndValidate ¶
ParseAndValidate parses the user ID into the localpart and server name like Parse, and also validates that the localpart is allowed according to the user identifiers spec.