mirror of
https://mau.dev/mautrix/go.git
synced 2026-03-14 14:25:53 +01:00
id: don't panic if URI methods are called with empty/nil values
This commit is contained in:
parent
7e7cb57ee7
commit
720648ffdf
3 changed files with 32 additions and 5 deletions
|
|
@ -65,6 +65,9 @@ func (uri *MatrixURI) getQuery() url.Values {
|
|||
|
||||
// String converts the parsed matrix: URI back into the string representation.
|
||||
func (uri *MatrixURI) String() string {
|
||||
if uri == nil {
|
||||
return ""
|
||||
}
|
||||
parts := []string{
|
||||
SigilToPathSegment[uri.Sigil1],
|
||||
url.PathEscape(uri.MXID1),
|
||||
|
|
@ -81,6 +84,9 @@ func (uri *MatrixURI) String() string {
|
|||
|
||||
// MatrixToURL converts to parsed matrix: URI into a matrix.to URL
|
||||
func (uri *MatrixURI) MatrixToURL() string {
|
||||
if uri == nil {
|
||||
return ""
|
||||
}
|
||||
fragment := fmt.Sprintf("#/%s", url.PathEscape(uri.PrimaryIdentifier()))
|
||||
if uri.Sigil2 != 0 {
|
||||
fragment = fmt.Sprintf("%s/%s", fragment, url.PathEscape(uri.SecondaryIdentifier()))
|
||||
|
|
@ -96,13 +102,16 @@ func (uri *MatrixURI) MatrixToURL() string {
|
|||
// 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 (uri *MatrixURI) PrimaryIdentifier() string {
|
||||
if uri == nil {
|
||||
return ""
|
||||
}
|
||||
return fmt.Sprintf("%c%s", uri.Sigil1, uri.MXID1)
|
||||
}
|
||||
|
||||
// SecondaryIdentifier returns the second Matrix identifier in the URI.
|
||||
// Currently only event IDs can be in the secondary identifier slot.
|
||||
func (uri *MatrixURI) SecondaryIdentifier() string {
|
||||
if uri.Sigil2 == 0 {
|
||||
if uri == nil || uri.Sigil2 == 0 {
|
||||
return ""
|
||||
}
|
||||
return fmt.Sprintf("%c%s", uri.Sigil2, uri.MXID2)
|
||||
|
|
@ -110,7 +119,7 @@ func (uri *MatrixURI) SecondaryIdentifier() string {
|
|||
|
||||
// UserID returns the user ID from the URI if the primary identifier is a user ID.
|
||||
func (uri *MatrixURI) UserID() UserID {
|
||||
if uri.Sigil1 == '@' {
|
||||
if uri != nil && uri.Sigil1 == '@' {
|
||||
return UserID(uri.PrimaryIdentifier())
|
||||
}
|
||||
return ""
|
||||
|
|
@ -118,7 +127,7 @@ func (uri *MatrixURI) UserID() UserID {
|
|||
|
||||
// RoomID returns the room ID from the URI if the primary identifier is a room ID.
|
||||
func (uri *MatrixURI) RoomID() RoomID {
|
||||
if uri.Sigil1 == '!' {
|
||||
if uri != nil && uri.Sigil1 == '!' {
|
||||
return RoomID(uri.PrimaryIdentifier())
|
||||
}
|
||||
return ""
|
||||
|
|
@ -126,7 +135,7 @@ func (uri *MatrixURI) RoomID() RoomID {
|
|||
|
||||
// RoomAlias returns the room alias from the URI if the primary identifier is a room alias.
|
||||
func (uri *MatrixURI) RoomAlias() RoomAlias {
|
||||
if uri.Sigil1 == '#' {
|
||||
if uri != nil && uri.Sigil1 == '#' {
|
||||
return RoomAlias(uri.PrimaryIdentifier())
|
||||
}
|
||||
return ""
|
||||
|
|
@ -134,7 +143,7 @@ func (uri *MatrixURI) RoomAlias() RoomAlias {
|
|||
|
||||
// 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 (uri *MatrixURI) EventID() EventID {
|
||||
if (uri.Sigil1 == '!' || uri.Sigil1 == '#') && uri.Sigil2 == '$' {
|
||||
if uri != nil && (uri.Sigil1 == '!' || uri.Sigil1 == '#') && uri.Sigil2 == '$' {
|
||||
return EventID(uri.SecondaryIdentifier())
|
||||
}
|
||||
return ""
|
||||
|
|
|
|||
15
id/opaque.go
15
id/opaque.go
|
|
@ -37,6 +37,9 @@ func (roomID RoomID) String() string {
|
|||
}
|
||||
|
||||
func (roomID RoomID) URI(via ...string) *MatrixURI {
|
||||
if roomID == "" {
|
||||
return nil
|
||||
}
|
||||
return &MatrixURI{
|
||||
Sigil1: '!',
|
||||
MXID1: string(roomID)[1:],
|
||||
|
|
@ -45,6 +48,11 @@ func (roomID RoomID) URI(via ...string) *MatrixURI {
|
|||
}
|
||||
|
||||
func (roomID RoomID) EventURI(eventID EventID, via ...string) *MatrixURI {
|
||||
if roomID == "" {
|
||||
return nil
|
||||
} else if eventID == "" {
|
||||
return roomID.URI(via...)
|
||||
}
|
||||
return &MatrixURI{
|
||||
Sigil1: '!',
|
||||
MXID1: string(roomID)[1:],
|
||||
|
|
@ -59,13 +67,20 @@ func (roomAlias RoomAlias) String() string {
|
|||
}
|
||||
|
||||
func (roomAlias RoomAlias) URI() *MatrixURI {
|
||||
if roomAlias == "" {
|
||||
return nil
|
||||
}
|
||||
return &MatrixURI{
|
||||
Sigil1: '#',
|
||||
MXID1: string(roomAlias)[1:],
|
||||
}
|
||||
}
|
||||
|
||||
// Deprecated: room alias event links should not be used. Use room IDs instead.
|
||||
func (roomAlias RoomAlias) EventURI(eventID EventID) *MatrixURI {
|
||||
if roomAlias == "" {
|
||||
return nil
|
||||
}
|
||||
return &MatrixURI{
|
||||
Sigil1: '#',
|
||||
MXID1: string(roomAlias)[1:],
|
||||
|
|
|
|||
|
|
@ -81,6 +81,9 @@ func (userID UserID) Homeserver() string {
|
|||
//
|
||||
// This does not parse or validate the user ID. Use the ParseAndValidate method if you want to ensure the user ID is valid first.
|
||||
func (userID UserID) URI() *MatrixURI {
|
||||
if userID == "" {
|
||||
return nil
|
||||
}
|
||||
return &MatrixURI{
|
||||
Sigil1: '@',
|
||||
MXID1: string(userID)[1:],
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue