From 5e1bc08ef0d71bc84c437a66e3aa0ac30af2f8f5 Mon Sep 17 00:00:00 2001 From: Anthony Bocci Date: Sat, 5 Mar 2022 17:32:20 +0100 Subject: [PATCH] Parse a Signal group URL Signal group URL are used to send invitations via links. They are not supported yet, but when they will be it will be required to handle group URL. A method has been added, similarly to the Android application, to parse a URL. --- groupsv2/groupsv2.go | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/groupsv2/groupsv2.go b/groupsv2/groupsv2.go index 05500c2..358d443 100644 --- a/groupsv2/groupsv2.go +++ b/groupsv2/groupsv2.go @@ -6,6 +6,7 @@ import ( "encoding/hex" "fmt" "io/ioutil" + "net/url" "os" "path/filepath" @@ -33,7 +34,7 @@ const ( ) var ( - groupURLHost = "group.signal.org" + groupURLHost = "signal.group" groupURLPrefix = "https://" + groupURLHost + "/#" groupV2Dir string groupsV2 = map[string]*GroupV2{} @@ -58,6 +59,33 @@ func idToHex(id []byte) string { return hex.EncodeToString(id) } +// Parse an arbitrary string to a Signal group URL. +// If the URL is invalid, nil is returned. +func getGroupUrl(uriString string) *url.URL { + url, err := url.Parse(uriString) + if err != nil { + log.Errorln("[textsecure][groupsv2] GroupInviteLinkUrl error parsing URL", err) + return nil + } + if url.Scheme != "https" { + log.Errorln("[textsecure][groupsv2] GroupInviteLinkUrl URL invalid scheme ", url.Scheme) + return nil + } + if url.Host != groupURLHost { + log.Errorln("[textsecure][groupsv2] GroupInviteLinkUrl URL invalid host ", url.Host) + return nil + } + if url.Path != "" { + log.Errorln("[textsecure][groupsv2] GroupInviteLinkUrl URL path should be empty ", url.Path) + return nil + } + if url.Fragment == "" { + log.Errorln("[textsecure][groupsv2] GroupInviteLinkUrl URL fragment is empty ") + return nil + } + return url +} + func GroupInviteLinkUrl() { }