From f6c3f263e8a17aa41bf7254111b27ea7210a3402 Mon Sep 17 00:00:00 2001 From: Matthew Rider Date: Mon, 21 Oct 2024 11:35:39 +0200 Subject: [PATCH 1/5] Add ability to update about text in UpdateProfileRequest --- src/api/api.go | 3 ++- src/client/client.go | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/api/api.go b/src/api/api.go index addc9e3..812836d 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -146,6 +146,7 @@ type CreateGroupResponse struct { type UpdateProfileRequest struct { Name string `json:"name"` Base64Avatar string `json:"base64_avatar"` + About string `json:"about"` } type TrustIdentityRequest struct { @@ -1115,7 +1116,7 @@ func (a *Api) UpdateProfile(c *gin.Context) { return } - err = a.signalClient.UpdateProfile(number, req.Name, req.Base64Avatar) + err = a.signalClient.UpdateProfile(number, req.Name, req.Base64Avatar, req.About) if err != nil { c.JSON(400, Error{Msg: err.Error()}) return diff --git a/src/client/client.go b/src/client/client.go index ef6bc66..7a1fbb6 100644 --- a/src/client/client.go +++ b/src/client/client.go @@ -1356,7 +1356,7 @@ func (s *SignalClient) GetAttachment(attachment string) ([]byte, error) { return attachmentBytes, nil } -func (s *SignalClient) UpdateProfile(number string, profileName string, base64Avatar string) error { +func (s *SignalClient) UpdateProfile(number string, profileName string, base64Avatar string, about string) error { var err error var avatarTmpPath string if base64Avatar != "" { @@ -1399,6 +1399,7 @@ func (s *SignalClient) UpdateProfile(number string, profileName string, base64Av Name string `json:"given-name"` Avatar string `json:"avatar,omitempty"` RemoveAvatar bool `json:"remove-avatar"` + About string `json:"about"` } request := Request{Name: profileName} if base64Avatar == "" { @@ -1413,7 +1414,7 @@ func (s *SignalClient) UpdateProfile(number string, profileName string, base64Av } _, err = jsonRpc2Client.getRaw("updateProfile", &number, request) } else { - cmd := []string{"--config", s.signalCliConfig, "-a", number, "updateProfile", "--given-name", profileName} + cmd := []string{"--config", s.signalCliConfig, "-a", number, "updateProfile", "--given-name", profileName, "--about", about} if base64Avatar == "" { cmd = append(cmd, "--remove-avatar") } else { From 57dcb2f28111d0c387d5e81a95e3da1e2c901c6b Mon Sep 17 00:00:00 2001 From: Matthew Rider Date: Tue, 22 Oct 2024 10:27:32 +0200 Subject: [PATCH 2/5] Add a pointer to conditionally send about string to signal-cli --- src/api/api.go | 2 +- src/client/client.go | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/api/api.go b/src/api/api.go index 812836d..c155518 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -146,7 +146,7 @@ type CreateGroupResponse struct { type UpdateProfileRequest struct { Name string `json:"name"` Base64Avatar string `json:"base64_avatar"` - About string `json:"about"` + About *string `json:"about"` } type TrustIdentityRequest struct { diff --git a/src/client/client.go b/src/client/client.go index 7a1fbb6..777d280 100644 --- a/src/client/client.go +++ b/src/client/client.go @@ -1356,7 +1356,7 @@ func (s *SignalClient) GetAttachment(attachment string) ([]byte, error) { return attachmentBytes, nil } -func (s *SignalClient) UpdateProfile(number string, profileName string, base64Avatar string, about string) error { +func (s *SignalClient) UpdateProfile(number string, profileName string, base64Avatar string, about *string) error { var err error var avatarTmpPath string if base64Avatar != "" { @@ -1399,28 +1399,34 @@ func (s *SignalClient) UpdateProfile(number string, profileName string, base64Av Name string `json:"given-name"` Avatar string `json:"avatar,omitempty"` RemoveAvatar bool `json:"remove-avatar"` - About string `json:"about"` + About *string `json:"about,omitempty"` } request := Request{Name: profileName} + request.About = about if base64Avatar == "" { request.RemoveAvatar = true } else { request.Avatar = avatarTmpPath request.RemoveAvatar = false } + jsonRpc2Client, err := s.getJsonRpc2Client() if err != nil { return err } _, err = jsonRpc2Client.getRaw("updateProfile", &number, request) } else { - cmd := []string{"--config", s.signalCliConfig, "-a", number, "updateProfile", "--given-name", profileName, "--about", about} + cmd := []string{"--config", s.signalCliConfig, "-a", number, "updateProfile", "--given-name", profileName} if base64Avatar == "" { cmd = append(cmd, "--remove-avatar") } else { cmd = append(cmd, []string{"--avatar", avatarTmpPath}...) } + if about != nil { + cmd = append(cmd, []string{"--about", *about}...) + } + _, err = s.cliClient.Execute(true, cmd, "") } From d17e3d7eb9c94e741bcfd27b58c9938dab7f1d84 Mon Sep 17 00:00:00 2001 From: crummy Date: Mon, 28 Oct 2024 20:49:29 +1300 Subject: [PATCH 3/5] Handle phone numbers that start with "%25" (as + is commonly escaped with) --- src/api/api.go | 87 +++++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/src/api/api.go b/src/api/api.go index c155518..0bbdecd 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -144,9 +144,9 @@ type CreateGroupResponse struct { } type UpdateProfileRequest struct { - Name string `json:"name"` - Base64Avatar string `json:"base64_avatar"` - About *string `json:"about"` + Name string `json:"name"` + Base64Avatar string `json:"base64_avatar"` + About *string `json:"about"` } type TrustIdentityRequest struct { @@ -232,7 +232,7 @@ func (a *Api) About(c *gin.Context) { // @Param data body RegisterNumberRequest false "Additional Settings" // @Router /v1/register/{number} [post] func (a *Api) RegisterNumber(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) var req RegisterNumberRequest @@ -274,7 +274,7 @@ func (a *Api) RegisterNumber(c *gin.Context) { // @Param data body UnregisterNumberRequest false "Additional Settings" // @Router /v1/unregister/{number} [post] func (a *Api) UnregisterNumber(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) deleteAccount := false deleteLocalData := false @@ -312,7 +312,7 @@ func (a *Api) UnregisterNumber(c *gin.Context) { // @Param token path string true "Verification Code" // @Router /v1/register/{number}/verify/{token} [post] func (a *Api) VerifyRegisteredNumber(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) token := c.Param("token") pin := "" @@ -566,7 +566,7 @@ func StringToBool(input string) bool { // @Param send_read_receipts query string false "Specify whether read receipts should be sent when receiving messages" (default: false)" // @Router /v1/receive/{number} [get] func (a *Api) Receive(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if a.signalClient.GetSignalCliMode() == client.JsonRpc { ws, err := connectionUpgrader.Upgrade(c.Writer, c.Request, nil) @@ -633,7 +633,7 @@ func (a *Api) Receive(c *gin.Context) { // @Param number path string true "Registered Phone Number" // @Router /v1/groups/{number} [post] func (a *Api) CreateGroup(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) var req CreateGroupRequest err := c.BindJSON(&req) @@ -691,7 +691,7 @@ func (a *Api) CreateGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/members [post] func (a *Api) AddMembersToGroup(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -736,7 +736,7 @@ func (a *Api) AddMembersToGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/members [delete] func (a *Api) RemoveMembersFromGroup(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -781,7 +781,7 @@ func (a *Api) RemoveMembersFromGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/admins [post] func (a *Api) AddAdminsToGroup(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -826,7 +826,7 @@ func (a *Api) AddAdminsToGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/admins [delete] func (a *Api) RemoveAdminsFromGroup(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -869,7 +869,8 @@ func (a *Api) RemoveAdminsFromGroup(c *gin.Context) { // @Param number path string true "Registered Phone Number" // @Router /v1/groups/{number} [get] func (a *Api) GetGroups(c *gin.Context) { - number := c.Param("number") + raw := c.Param("number") + number := strings.Replace(raw, "%2B", "+", 1) groups, err := a.signalClient.GetGroups(number) if err != nil { @@ -891,7 +892,7 @@ func (a *Api) GetGroups(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid} [get] func (a *Api) GetGroup(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) groupId := c.Param("groupid") groupEntry, err := a.signalClient.GetGroup(number, groupId) @@ -919,7 +920,7 @@ func (a *Api) GetGroup(c *gin.Context) { // @Router /v1/groups/{number}/{groupid} [delete] func (a *Api) DeleteGroup(c *gin.Context) { base64EncodedGroupId := c.Param("groupid") - number := c.Param("number") + number := parseNumber(c) if base64EncodedGroupId == "" { c.JSON(400, Error{Msg: "Please specify a group id"}) @@ -1096,7 +1097,7 @@ func (a *Api) ServeAttachment(c *gin.Context) { // @Param number path string true "Registered Phone Number" // @Router /v1/profiles/{number} [put] func (a *Api) UpdateProfile(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1143,7 +1144,7 @@ func (a *Api) Health(c *gin.Context) { // @Param number path string true "Registered Phone Number" // @Router /v1/identities/{number} [get] func (a *Api) ListIdentities(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1169,7 +1170,7 @@ func (a *Api) ListIdentities(c *gin.Context) { // @Param numberToTrust path string true "Number To Trust" // @Router /v1/identities/{number}/trust/{numberToTrust} [put] func (a *Api) TrustIdentity(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1280,7 +1281,7 @@ func (a *Api) GetConfiguration(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/block [post] func (a *Api) BlockGroup(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1313,7 +1314,7 @@ func (a *Api) BlockGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/join [post] func (a *Api) JoinGroup(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1346,7 +1347,7 @@ func (a *Api) JoinGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/quit [post] func (a *Api) QuitGroup(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1379,7 +1380,7 @@ func (a *Api) QuitGroup(c *gin.Context) { // @Param data body UpdateGroupRequest true "Input Data" // @Router /v1/groups/{number}/{groupid} [put] func (a *Api) UpdateGroup(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1426,7 +1427,7 @@ func (a *Api) SendReaction(c *gin.Context) { return } - number := c.Param("number") + number := parseNumber(c) if req.Recipient == "" { c.JSON(400, Error{Msg: "Couldn't process request - recipient missing"}) @@ -1474,7 +1475,7 @@ func (a *Api) RemoveReaction(c *gin.Context) { return } - number := c.Param("number") + number := parseNumber(c) if req.Recipient == "" { c.JSON(400, Error{Msg: "Couldn't process request - recipient missing"}) @@ -1517,7 +1518,7 @@ func (a *Api) SendReceipt(c *gin.Context) { return } - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1567,7 +1568,7 @@ func (a *Api) SendStartTyping(c *gin.Context) { return } - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1600,7 +1601,7 @@ func (a *Api) SendStopTyping(c *gin.Context) { return } - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1631,7 +1632,7 @@ func (a *Api) SearchForNumbers(c *gin.Context) { return } - number := c.Param("number") + number := parseNumber(c) searchResults, err := a.signalClient.SearchForNumbers(number, query["numbers"]) if err != nil { @@ -1659,7 +1660,7 @@ func (a *Api) SearchForNumbers(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/contacts/{number} [put] func (a *Api) UpdateContact(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1696,7 +1697,7 @@ func (a *Api) UpdateContact(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/devices/{number} [post] func (a *Api) AddDevice(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1728,7 +1729,7 @@ func (a *Api) AddDevice(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/configuration/{number}/settings [post] func (a *Api) SetTrustMode(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1767,7 +1768,7 @@ func (a *Api) SetTrustMode(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/configuration/{number}/settings [get] func (a *Api) GetTrustMode(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1795,7 +1796,7 @@ func (a *Api) GetTrustMode(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/contacts/{number}/sync [post] func (a *Api) SendContacts(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1820,7 +1821,7 @@ func (a *Api) SendContacts(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/accounts/{number}/rate-limit-challenge [post] func (a *Api) SubmitRateLimitChallenge(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1852,7 +1853,7 @@ func (a *Api) SubmitRateLimitChallenge(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/accounts/{number}/settings [put] func (a *Api) UpdateAccountSettings(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1886,7 +1887,7 @@ func (a *Api) UpdateAccountSettings(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/accounts/{number}/username [post] func (a *Api) SetUsername(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1917,7 +1918,7 @@ func (a *Api) SetUsername(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/accounts/{number}/username [delete] func (a *Api) RemoveUsername(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1942,7 +1943,7 @@ func (a *Api) RemoveUsername(c *gin.Context) { // @Success 200 {object} []client.ListInstalledStickerPacksResponse // @Router /v1/sticker-packs/{number} [get] func (a *Api) ListInstalledStickerPacks(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1968,7 +1969,7 @@ func (a *Api) ListInstalledStickerPacks(c *gin.Context) { // @Param data body AddStickerPackRequest true "Request" // @Router /v1/sticker-packs/{number} [post] func (a *Api) AddStickerPack(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1998,7 +1999,7 @@ func (a *Api) AddStickerPack(c *gin.Context) { // @Param number path string true "Registered Phone Number" // @Router /v1/contacts/{number} [get] func (a *Api) ListContacts(c *gin.Context) { - number := c.Param("number") + number := parseNumber(c) if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -2014,3 +2015,9 @@ func (a *Api) ListContacts(c *gin.Context) { c.JSON(200, contacts) } + +func parseNumber(c *gin.Context) string { + raw := c.Param("number") + number := strings.Replace(raw, "%2B", "+", 1) + return number +} From 1237c528f55a49b6d3b546e7034f53f180f52646 Mon Sep 17 00:00:00 2001 From: crummy Date: Mon, 28 Oct 2024 21:00:52 +1300 Subject: [PATCH 4/5] Found a proper way to escape it --- src/api/api.go | 232 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 168 insertions(+), 64 deletions(-) diff --git a/src/api/api.go b/src/api/api.go index 0bbdecd..73a7bb9 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "net/http" + "net/url" "strconv" "strings" "sync" @@ -232,7 +233,10 @@ func (a *Api) About(c *gin.Context) { // @Param data body RegisterNumberRequest false "Additional Settings" // @Router /v1/register/{number} [post] func (a *Api) RegisterNumber(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } var req RegisterNumberRequest @@ -255,7 +259,7 @@ func (a *Api) RegisterNumber(c *gin.Context) { return } - err := a.signalClient.RegisterNumber(number, req.UseVoice, req.Captcha) + err = a.signalClient.RegisterNumber(number, req.UseVoice, req.Captcha) if err != nil { c.JSON(400, gin.H{"error": err.Error()}) return @@ -274,7 +278,10 @@ func (a *Api) RegisterNumber(c *gin.Context) { // @Param data body UnregisterNumberRequest false "Additional Settings" // @Router /v1/unregister/{number} [post] func (a *Api) UnregisterNumber(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } deleteAccount := false deleteLocalData := false @@ -292,7 +299,7 @@ func (a *Api) UnregisterNumber(c *gin.Context) { deleteLocalData = req.DeleteLocalData } - err := a.signalClient.UnregisterNumber(number, deleteAccount, deleteLocalData) + err = a.signalClient.UnregisterNumber(number, deleteAccount, deleteLocalData) if err != nil { c.JSON(400, gin.H{"error": err.Error()}) return @@ -312,7 +319,10 @@ func (a *Api) UnregisterNumber(c *gin.Context) { // @Param token path string true "Verification Code" // @Router /v1/register/{number}/verify/{token} [post] func (a *Api) VerifyRegisteredNumber(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } token := c.Param("token") pin := "" @@ -339,7 +349,7 @@ func (a *Api) VerifyRegisteredNumber(c *gin.Context) { return } - err := a.signalClient.VerifyRegisteredNumber(number, token, pin) + err = a.signalClient.VerifyRegisteredNumber(number, token, pin) if err != nil { c.JSON(400, gin.H{"error": err.Error()}) return @@ -566,7 +576,10 @@ func StringToBool(input string) bool { // @Param send_read_receipts query string false "Specify whether read receipts should be sent when receiving messages" (default: false)" // @Router /v1/receive/{number} [get] func (a *Api) Receive(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if a.signalClient.GetSignalCliMode() == client.JsonRpc { ws, err := connectionUpgrader.Upgrade(c.Writer, c.Request, nil) @@ -633,10 +646,13 @@ func (a *Api) Receive(c *gin.Context) { // @Param number path string true "Registered Phone Number" // @Router /v1/groups/{number} [post] func (a *Api) CreateGroup(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } var req CreateGroupRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -691,7 +707,10 @@ func (a *Api) CreateGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/members [post] func (a *Api) AddMembersToGroup(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -704,7 +723,7 @@ func (a *Api) AddMembersToGroup(c *gin.Context) { } var req ChangeGroupMembersRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -736,7 +755,10 @@ func (a *Api) AddMembersToGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/members [delete] func (a *Api) RemoveMembersFromGroup(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -749,7 +771,7 @@ func (a *Api) RemoveMembersFromGroup(c *gin.Context) { } var req ChangeGroupMembersRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -781,7 +803,10 @@ func (a *Api) RemoveMembersFromGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/admins [post] func (a *Api) AddAdminsToGroup(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -794,7 +819,7 @@ func (a *Api) AddAdminsToGroup(c *gin.Context) { } var req ChangeGroupAdminsRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -826,7 +851,10 @@ func (a *Api) AddAdminsToGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/admins [delete] func (a *Api) RemoveAdminsFromGroup(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -839,7 +867,7 @@ func (a *Api) RemoveAdminsFromGroup(c *gin.Context) { } var req ChangeGroupAdminsRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -869,8 +897,10 @@ func (a *Api) RemoveAdminsFromGroup(c *gin.Context) { // @Param number path string true "Registered Phone Number" // @Router /v1/groups/{number} [get] func (a *Api) GetGroups(c *gin.Context) { - raw := c.Param("number") - number := strings.Replace(raw, "%2B", "+", 1) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } groups, err := a.signalClient.GetGroups(number) if err != nil { @@ -892,7 +922,10 @@ func (a *Api) GetGroups(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid} [get] func (a *Api) GetGroup(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } groupId := c.Param("groupid") groupEntry, err := a.signalClient.GetGroup(number, groupId) @@ -920,7 +953,10 @@ func (a *Api) GetGroup(c *gin.Context) { // @Router /v1/groups/{number}/{groupid} [delete] func (a *Api) DeleteGroup(c *gin.Context) { base64EncodedGroupId := c.Param("groupid") - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if base64EncodedGroupId == "" { c.JSON(400, Error{Msg: "Please specify a group id"}) @@ -1097,7 +1133,10 @@ func (a *Api) ServeAttachment(c *gin.Context) { // @Param number path string true "Registered Phone Number" // @Router /v1/profiles/{number} [put] func (a *Api) UpdateProfile(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1105,7 +1144,7 @@ func (a *Api) UpdateProfile(c *gin.Context) { } var req UpdateProfileRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) log.Error(err.Error()) @@ -1144,7 +1183,10 @@ func (a *Api) Health(c *gin.Context) { // @Param number path string true "Registered Phone Number" // @Router /v1/identities/{number} [get] func (a *Api) ListIdentities(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1170,7 +1212,10 @@ func (a *Api) ListIdentities(c *gin.Context) { // @Param numberToTrust path string true "Number To Trust" // @Router /v1/identities/{number}/trust/{numberToTrust} [put] func (a *Api) TrustIdentity(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1184,7 +1229,7 @@ func (a *Api) TrustIdentity(c *gin.Context) { } var req TrustIdentityRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) log.Error(err.Error()) @@ -1281,7 +1326,10 @@ func (a *Api) GetConfiguration(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/block [post] func (a *Api) BlockGroup(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1314,7 +1362,10 @@ func (a *Api) BlockGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/join [post] func (a *Api) JoinGroup(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1347,7 +1398,10 @@ func (a *Api) JoinGroup(c *gin.Context) { // @Param groupid path string true "Group ID" // @Router /v1/groups/{number}/{groupid}/quit [post] func (a *Api) QuitGroup(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1380,7 +1434,10 @@ func (a *Api) QuitGroup(c *gin.Context) { // @Param data body UpdateGroupRequest true "Input Data" // @Router /v1/groups/{number}/{groupid} [put] func (a *Api) UpdateGroup(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1427,7 +1484,10 @@ func (a *Api) SendReaction(c *gin.Context) { return } - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if req.Recipient == "" { c.JSON(400, Error{Msg: "Couldn't process request - recipient missing"}) @@ -1475,7 +1535,10 @@ func (a *Api) RemoveReaction(c *gin.Context) { return } - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if req.Recipient == "" { c.JSON(400, Error{Msg: "Couldn't process request - recipient missing"}) @@ -1518,7 +1581,10 @@ func (a *Api) SendReceipt(c *gin.Context) { return } - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1568,7 +1634,10 @@ func (a *Api) SendStartTyping(c *gin.Context) { return } - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1601,7 +1670,10 @@ func (a *Api) SendStopTyping(c *gin.Context) { return } - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1632,7 +1704,10 @@ func (a *Api) SearchForNumbers(c *gin.Context) { return } - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } searchResults, err := a.signalClient.SearchForNumbers(number, query["numbers"]) if err != nil { @@ -1660,14 +1735,17 @@ func (a *Api) SearchForNumbers(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/contacts/{number} [put] func (a *Api) UpdateContact(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return } var req UpdateContactRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -1697,14 +1775,17 @@ func (a *Api) UpdateContact(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/devices/{number} [post] func (a *Api) AddDevice(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return } var req AddDeviceRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -1729,14 +1810,17 @@ func (a *Api) AddDevice(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/configuration/{number}/settings [post] func (a *Api) SetTrustMode(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return } var req TrustModeRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -1768,13 +1852,15 @@ func (a *Api) SetTrustMode(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/configuration/{number}/settings [get] func (a *Api) GetTrustMode(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return } - var err error trustMode := TrustModeResponse{} trustMode.TrustMode, err = utils.TrustModeToString(a.signalClient.GetTrustMode(number)) if err != nil { @@ -1796,13 +1882,16 @@ func (a *Api) GetTrustMode(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/contacts/{number}/sync [post] func (a *Api) SendContacts(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return } - err := a.signalClient.SendContacts(number) + err = a.signalClient.SendContacts(number) if err != nil { c.JSON(400, Error{Msg: err.Error()}) return @@ -1821,14 +1910,17 @@ func (a *Api) SendContacts(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/accounts/{number}/rate-limit-challenge [post] func (a *Api) SubmitRateLimitChallenge(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return } var req RateLimitChallengeRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -1853,14 +1945,17 @@ func (a *Api) SubmitRateLimitChallenge(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/accounts/{number}/settings [put] func (a *Api) UpdateAccountSettings(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return } var req UpdateAccountSettingsRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -1887,14 +1982,17 @@ func (a *Api) UpdateAccountSettings(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/accounts/{number}/username [post] func (a *Api) SetUsername(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return } var req SetUsernameRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -1918,13 +2016,16 @@ func (a *Api) SetUsername(c *gin.Context) { // @Failure 400 {object} Error // @Router /v1/accounts/{number}/username [delete] func (a *Api) RemoveUsername(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return } - err := a.signalClient.RemoveUsername(number) + err = a.signalClient.RemoveUsername(number) if err != nil { c.JSON(400, Error{Msg: err.Error()}) return @@ -1943,7 +2044,10 @@ func (a *Api) RemoveUsername(c *gin.Context) { // @Success 200 {object} []client.ListInstalledStickerPacksResponse // @Router /v1/sticker-packs/{number} [get] func (a *Api) ListInstalledStickerPacks(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return @@ -1969,14 +2073,17 @@ func (a *Api) ListInstalledStickerPacks(c *gin.Context) { // @Param data body AddStickerPackRequest true "Request" // @Router /v1/sticker-packs/{number} [post] func (a *Api) AddStickerPack(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) return } var req AddStickerPackRequest - err := c.BindJSON(&req) + err = c.BindJSON(&req) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) return @@ -1999,7 +2106,10 @@ func (a *Api) AddStickerPack(c *gin.Context) { // @Param number path string true "Registered Phone Number" // @Router /v1/contacts/{number} [get] func (a *Api) ListContacts(c *gin.Context) { - number := parseNumber(c) + number, err := url.PathUnescape(c.Param("number")) + if err != nil { + c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -2015,9 +2125,3 @@ func (a *Api) ListContacts(c *gin.Context) { c.JSON(200, contacts) } - -func parseNumber(c *gin.Context) string { - raw := c.Param("number") - number := strings.Replace(raw, "%2B", "+", 1) - return number -} From d652d418d3b36b160b0fb1deaf7871a18d234c8c Mon Sep 17 00:00:00 2001 From: crummy Date: Fri, 1 Nov 2024 21:15:23 +1300 Subject: [PATCH 5/5] Return upon failure --- src/api/api.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/api/api.go b/src/api/api.go index 73a7bb9..d758805 100644 --- a/src/api/api.go +++ b/src/api/api.go @@ -236,6 +236,7 @@ func (a *Api) RegisterNumber(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } var req RegisterNumberRequest @@ -281,6 +282,7 @@ func (a *Api) UnregisterNumber(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } deleteAccount := false @@ -322,6 +324,7 @@ func (a *Api) VerifyRegisteredNumber(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } token := c.Param("token") @@ -579,6 +582,7 @@ func (a *Api) Receive(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if a.signalClient.GetSignalCliMode() == client.JsonRpc { @@ -649,6 +653,7 @@ func (a *Api) CreateGroup(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } var req CreateGroupRequest @@ -710,6 +715,7 @@ func (a *Api) AddMembersToGroup(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -758,6 +764,7 @@ func (a *Api) RemoveMembersFromGroup(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -806,6 +813,7 @@ func (a *Api) AddAdminsToGroup(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -854,6 +862,7 @@ func (a *Api) RemoveAdminsFromGroup(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -900,6 +909,7 @@ func (a *Api) GetGroups(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } groups, err := a.signalClient.GetGroups(number) @@ -925,6 +935,7 @@ func (a *Api) GetGroup(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } groupId := c.Param("groupid") @@ -956,6 +967,7 @@ func (a *Api) DeleteGroup(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if base64EncodedGroupId == "" { @@ -1136,6 +1148,7 @@ func (a *Api) UpdateProfile(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { @@ -1186,6 +1199,7 @@ func (a *Api) ListIdentities(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { @@ -1215,6 +1229,7 @@ func (a *Api) TrustIdentity(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { @@ -1329,6 +1344,7 @@ func (a *Api) BlockGroup(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1365,6 +1381,7 @@ func (a *Api) JoinGroup(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1401,6 +1418,7 @@ func (a *Api) QuitGroup(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1437,6 +1455,7 @@ func (a *Api) UpdateGroup(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1487,6 +1506,7 @@ func (a *Api) SendReaction(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if req.Recipient == "" { @@ -1538,6 +1558,7 @@ func (a *Api) RemoveReaction(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if req.Recipient == "" { @@ -1584,6 +1605,7 @@ func (a *Api) SendReceipt(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { @@ -1637,6 +1659,7 @@ func (a *Api) SendStartTyping(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1673,6 +1696,7 @@ func (a *Api) SendStopTyping(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1707,6 +1731,7 @@ func (a *Api) SearchForNumbers(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } searchResults, err := a.signalClient.SearchForNumbers(number, query["numbers"]) @@ -1738,6 +1763,7 @@ func (a *Api) UpdateContact(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1778,6 +1804,7 @@ func (a *Api) AddDevice(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1813,6 +1840,7 @@ func (a *Api) SetTrustMode(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1855,6 +1883,7 @@ func (a *Api) GetTrustMode(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1885,6 +1914,7 @@ func (a *Api) SendContacts(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1913,6 +1943,7 @@ func (a *Api) SubmitRateLimitChallenge(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1948,6 +1979,7 @@ func (a *Api) UpdateAccountSettings(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -1985,6 +2017,7 @@ func (a *Api) SetUsername(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -2019,6 +2052,7 @@ func (a *Api) RemoveUsername(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -2047,6 +2081,7 @@ func (a *Api) ListInstalledStickerPacks(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -2076,6 +2111,7 @@ func (a *Api) AddStickerPack(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" { c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) @@ -2109,6 +2145,7 @@ func (a *Api) ListContacts(c *gin.Context) { number, err := url.PathUnescape(c.Param("number")) if err != nil { c.JSON(400, Error{Msg: "Couldn't process request - malformed number"}) + return } if number == "" {