Merge branch 'master' of github.com:bbernhard/signal-cli-rest-api

This commit is contained in:
Bernhard B
2024-11-02 22:02:40 +01:00
2 changed files with 217 additions and 61 deletions

View File

@@ -5,6 +5,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"net/http" "net/http"
"net/url"
"strconv" "strconv"
"strings" "strings"
"sync" "sync"
@@ -146,6 +147,7 @@ type CreateGroupResponse struct {
type UpdateProfileRequest struct { type UpdateProfileRequest struct {
Name string `json:"name"` Name string `json:"name"`
Base64Avatar string `json:"base64_avatar"` Base64Avatar string `json:"base64_avatar"`
About *string `json:"about"`
} }
type TrustIdentityRequest struct { type TrustIdentityRequest struct {
@@ -231,7 +233,11 @@ func (a *Api) About(c *gin.Context) {
// @Param data body RegisterNumberRequest false "Additional Settings" // @Param data body RegisterNumberRequest false "Additional Settings"
// @Router /v1/register/{number} [post] // @Router /v1/register/{number} [post]
func (a *Api) RegisterNumber(c *gin.Context) { func (a *Api) RegisterNumber(c *gin.Context) {
number := c.Param("number") 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 var req RegisterNumberRequest
@@ -254,7 +260,7 @@ func (a *Api) RegisterNumber(c *gin.Context) {
return return
} }
err := a.signalClient.RegisterNumber(number, req.UseVoice, req.Captcha) err = a.signalClient.RegisterNumber(number, req.UseVoice, req.Captcha)
if err != nil { if err != nil {
c.JSON(400, gin.H{"error": err.Error()}) c.JSON(400, gin.H{"error": err.Error()})
return return
@@ -273,7 +279,11 @@ func (a *Api) RegisterNumber(c *gin.Context) {
// @Param data body UnregisterNumberRequest false "Additional Settings" // @Param data body UnregisterNumberRequest false "Additional Settings"
// @Router /v1/unregister/{number} [post] // @Router /v1/unregister/{number} [post]
func (a *Api) UnregisterNumber(c *gin.Context) { func (a *Api) UnregisterNumber(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
deleteAccount := false deleteAccount := false
deleteLocalData := false deleteLocalData := false
@@ -291,7 +301,7 @@ func (a *Api) UnregisterNumber(c *gin.Context) {
deleteLocalData = req.DeleteLocalData deleteLocalData = req.DeleteLocalData
} }
err := a.signalClient.UnregisterNumber(number, deleteAccount, deleteLocalData) err = a.signalClient.UnregisterNumber(number, deleteAccount, deleteLocalData)
if err != nil { if err != nil {
c.JSON(400, gin.H{"error": err.Error()}) c.JSON(400, gin.H{"error": err.Error()})
return return
@@ -311,7 +321,11 @@ func (a *Api) UnregisterNumber(c *gin.Context) {
// @Param token path string true "Verification Code" // @Param token path string true "Verification Code"
// @Router /v1/register/{number}/verify/{token} [post] // @Router /v1/register/{number}/verify/{token} [post]
func (a *Api) VerifyRegisteredNumber(c *gin.Context) { func (a *Api) VerifyRegisteredNumber(c *gin.Context) {
number := c.Param("number") 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") token := c.Param("token")
pin := "" pin := ""
@@ -338,7 +352,7 @@ func (a *Api) VerifyRegisteredNumber(c *gin.Context) {
return return
} }
err := a.signalClient.VerifyRegisteredNumber(number, token, pin) err = a.signalClient.VerifyRegisteredNumber(number, token, pin)
if err != nil { if err != nil {
c.JSON(400, gin.H{"error": err.Error()}) c.JSON(400, gin.H{"error": err.Error()})
return return
@@ -565,7 +579,11 @@ func StringToBool(input string) bool {
// @Param send_read_receipts query string false "Specify whether read receipts should be sent when receiving messages" (default: false)" // @Param send_read_receipts query string false "Specify whether read receipts should be sent when receiving messages" (default: false)"
// @Router /v1/receive/{number} [get] // @Router /v1/receive/{number} [get]
func (a *Api) Receive(c *gin.Context) { func (a *Api) Receive(c *gin.Context) {
number := c.Param("number") 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 { if a.signalClient.GetSignalCliMode() == client.JsonRpc {
ws, err := connectionUpgrader.Upgrade(c.Writer, c.Request, nil) ws, err := connectionUpgrader.Upgrade(c.Writer, c.Request, nil)
@@ -632,10 +650,14 @@ func (a *Api) Receive(c *gin.Context) {
// @Param number path string true "Registered Phone Number" // @Param number path string true "Registered Phone Number"
// @Router /v1/groups/{number} [post] // @Router /v1/groups/{number} [post]
func (a *Api) CreateGroup(c *gin.Context) { func (a *Api) CreateGroup(c *gin.Context) {
number := c.Param("number") 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 var req CreateGroupRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -690,7 +712,11 @@ func (a *Api) CreateGroup(c *gin.Context) {
// @Param groupid path string true "Group ID" // @Param groupid path string true "Group ID"
// @Router /v1/groups/{number}/{groupid}/members [post] // @Router /v1/groups/{number}/{groupid}/members [post]
func (a *Api) AddMembersToGroup(c *gin.Context) { func (a *Api) AddMembersToGroup(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
@@ -703,7 +729,7 @@ func (a *Api) AddMembersToGroup(c *gin.Context) {
} }
var req ChangeGroupMembersRequest var req ChangeGroupMembersRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -735,7 +761,11 @@ func (a *Api) AddMembersToGroup(c *gin.Context) {
// @Param groupid path string true "Group ID" // @Param groupid path string true "Group ID"
// @Router /v1/groups/{number}/{groupid}/members [delete] // @Router /v1/groups/{number}/{groupid}/members [delete]
func (a *Api) RemoveMembersFromGroup(c *gin.Context) { func (a *Api) RemoveMembersFromGroup(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
@@ -748,7 +778,7 @@ func (a *Api) RemoveMembersFromGroup(c *gin.Context) {
} }
var req ChangeGroupMembersRequest var req ChangeGroupMembersRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -780,7 +810,11 @@ func (a *Api) RemoveMembersFromGroup(c *gin.Context) {
// @Param groupid path string true "Group ID" // @Param groupid path string true "Group ID"
// @Router /v1/groups/{number}/{groupid}/admins [post] // @Router /v1/groups/{number}/{groupid}/admins [post]
func (a *Api) AddAdminsToGroup(c *gin.Context) { func (a *Api) AddAdminsToGroup(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
@@ -793,7 +827,7 @@ func (a *Api) AddAdminsToGroup(c *gin.Context) {
} }
var req ChangeGroupAdminsRequest var req ChangeGroupAdminsRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -825,7 +859,11 @@ func (a *Api) AddAdminsToGroup(c *gin.Context) {
// @Param groupid path string true "Group ID" // @Param groupid path string true "Group ID"
// @Router /v1/groups/{number}/{groupid}/admins [delete] // @Router /v1/groups/{number}/{groupid}/admins [delete]
func (a *Api) RemoveAdminsFromGroup(c *gin.Context) { func (a *Api) RemoveAdminsFromGroup(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
@@ -838,7 +876,7 @@ func (a *Api) RemoveAdminsFromGroup(c *gin.Context) {
} }
var req ChangeGroupAdminsRequest var req ChangeGroupAdminsRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -868,7 +906,11 @@ func (a *Api) RemoveAdminsFromGroup(c *gin.Context) {
// @Param number path string true "Registered Phone Number" // @Param number path string true "Registered Phone Number"
// @Router /v1/groups/{number} [get] // @Router /v1/groups/{number} [get]
func (a *Api) GetGroups(c *gin.Context) { func (a *Api) GetGroups(c *gin.Context) {
number := c.Param("number") 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) groups, err := a.signalClient.GetGroups(number)
if err != nil { if err != nil {
@@ -890,7 +932,11 @@ func (a *Api) GetGroups(c *gin.Context) {
// @Param groupid path string true "Group ID" // @Param groupid path string true "Group ID"
// @Router /v1/groups/{number}/{groupid} [get] // @Router /v1/groups/{number}/{groupid} [get]
func (a *Api) GetGroup(c *gin.Context) { func (a *Api) GetGroup(c *gin.Context) {
number := c.Param("number") 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") groupId := c.Param("groupid")
groupEntry, err := a.signalClient.GetGroup(number, groupId) groupEntry, err := a.signalClient.GetGroup(number, groupId)
@@ -918,7 +964,11 @@ func (a *Api) GetGroup(c *gin.Context) {
// @Router /v1/groups/{number}/{groupid} [delete] // @Router /v1/groups/{number}/{groupid} [delete]
func (a *Api) DeleteGroup(c *gin.Context) { func (a *Api) DeleteGroup(c *gin.Context) {
base64EncodedGroupId := c.Param("groupid") base64EncodedGroupId := c.Param("groupid")
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if base64EncodedGroupId == "" { if base64EncodedGroupId == "" {
c.JSON(400, Error{Msg: "Please specify a group id"}) c.JSON(400, Error{Msg: "Please specify a group id"})
@@ -1095,7 +1145,11 @@ func (a *Api) ServeAttachment(c *gin.Context) {
// @Param number path string true "Registered Phone Number" // @Param number path string true "Registered Phone Number"
// @Router /v1/profiles/{number} [put] // @Router /v1/profiles/{number} [put]
func (a *Api) UpdateProfile(c *gin.Context) { func (a *Api) UpdateProfile(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
@@ -1103,7 +1157,7 @@ func (a *Api) UpdateProfile(c *gin.Context) {
} }
var req UpdateProfileRequest var req UpdateProfileRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
log.Error(err.Error()) log.Error(err.Error())
@@ -1115,7 +1169,7 @@ func (a *Api) UpdateProfile(c *gin.Context) {
return return
} }
err = a.signalClient.UpdateProfile(number, req.Name, req.Base64Avatar) err = a.signalClient.UpdateProfile(number, req.Name, req.Base64Avatar, req.About)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: err.Error()}) c.JSON(400, Error{Msg: err.Error()})
return return
@@ -1142,7 +1196,11 @@ func (a *Api) Health(c *gin.Context) {
// @Param number path string true "Registered Phone Number" // @Param number path string true "Registered Phone Number"
// @Router /v1/identities/{number} [get] // @Router /v1/identities/{number} [get]
func (a *Api) ListIdentities(c *gin.Context) { func (a *Api) ListIdentities(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
@@ -1168,7 +1226,11 @@ func (a *Api) ListIdentities(c *gin.Context) {
// @Param numberToTrust path string true "Number To Trust" // @Param numberToTrust path string true "Number To Trust"
// @Router /v1/identities/{number}/trust/{numberToTrust} [put] // @Router /v1/identities/{number}/trust/{numberToTrust} [put]
func (a *Api) TrustIdentity(c *gin.Context) { func (a *Api) TrustIdentity(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
@@ -1182,7 +1244,7 @@ func (a *Api) TrustIdentity(c *gin.Context) {
} }
var req TrustIdentityRequest var req TrustIdentityRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
log.Error(err.Error()) log.Error(err.Error())
@@ -1279,7 +1341,11 @@ func (a *Api) GetConfiguration(c *gin.Context) {
// @Param groupid path string true "Group ID" // @Param groupid path string true "Group ID"
// @Router /v1/groups/{number}/{groupid}/block [post] // @Router /v1/groups/{number}/{groupid}/block [post]
func (a *Api) BlockGroup(c *gin.Context) { func (a *Api) BlockGroup(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
@@ -1312,7 +1378,11 @@ func (a *Api) BlockGroup(c *gin.Context) {
// @Param groupid path string true "Group ID" // @Param groupid path string true "Group ID"
// @Router /v1/groups/{number}/{groupid}/join [post] // @Router /v1/groups/{number}/{groupid}/join [post]
func (a *Api) JoinGroup(c *gin.Context) { func (a *Api) JoinGroup(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
@@ -1345,7 +1415,11 @@ func (a *Api) JoinGroup(c *gin.Context) {
// @Param groupid path string true "Group ID" // @Param groupid path string true "Group ID"
// @Router /v1/groups/{number}/{groupid}/quit [post] // @Router /v1/groups/{number}/{groupid}/quit [post]
func (a *Api) QuitGroup(c *gin.Context) { func (a *Api) QuitGroup(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
@@ -1378,7 +1452,11 @@ func (a *Api) QuitGroup(c *gin.Context) {
// @Param data body UpdateGroupRequest true "Input Data" // @Param data body UpdateGroupRequest true "Input Data"
// @Router /v1/groups/{number}/{groupid} [put] // @Router /v1/groups/{number}/{groupid} [put]
func (a *Api) UpdateGroup(c *gin.Context) { func (a *Api) UpdateGroup(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
@@ -1425,7 +1503,11 @@ func (a *Api) SendReaction(c *gin.Context) {
return return
} }
number := c.Param("number") 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 == "" { if req.Recipient == "" {
c.JSON(400, Error{Msg: "Couldn't process request - recipient missing"}) c.JSON(400, Error{Msg: "Couldn't process request - recipient missing"})
@@ -1473,7 +1555,11 @@ func (a *Api) RemoveReaction(c *gin.Context) {
return return
} }
number := c.Param("number") 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 == "" { if req.Recipient == "" {
c.JSON(400, Error{Msg: "Couldn't process request - recipient missing"}) c.JSON(400, Error{Msg: "Couldn't process request - recipient missing"})
@@ -1516,7 +1602,11 @@ func (a *Api) SendReceipt(c *gin.Context) {
return return
} }
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
@@ -1566,7 +1656,11 @@ func (a *Api) SendStartTyping(c *gin.Context) {
return return
} }
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
@@ -1599,7 +1693,11 @@ func (a *Api) SendStopTyping(c *gin.Context) {
return return
} }
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
@@ -1630,7 +1728,11 @@ func (a *Api) SearchForNumbers(c *gin.Context) {
return return
} }
number := c.Param("number") 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"]) searchResults, err := a.signalClient.SearchForNumbers(number, query["numbers"])
if err != nil { if err != nil {
@@ -1658,14 +1760,18 @@ func (a *Api) SearchForNumbers(c *gin.Context) {
// @Failure 400 {object} Error // @Failure 400 {object} Error
// @Router /v1/contacts/{number} [put] // @Router /v1/contacts/{number} [put]
func (a *Api) UpdateContact(c *gin.Context) { func (a *Api) UpdateContact(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
} }
var req UpdateContactRequest var req UpdateContactRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -1695,14 +1801,18 @@ func (a *Api) UpdateContact(c *gin.Context) {
// @Failure 400 {object} Error // @Failure 400 {object} Error
// @Router /v1/devices/{number} [post] // @Router /v1/devices/{number} [post]
func (a *Api) AddDevice(c *gin.Context) { func (a *Api) AddDevice(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
} }
var req AddDeviceRequest var req AddDeviceRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -1727,14 +1837,18 @@ func (a *Api) AddDevice(c *gin.Context) {
// @Failure 400 {object} Error // @Failure 400 {object} Error
// @Router /v1/configuration/{number}/settings [post] // @Router /v1/configuration/{number}/settings [post]
func (a *Api) SetTrustMode(c *gin.Context) { func (a *Api) SetTrustMode(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
} }
var req TrustModeRequest var req TrustModeRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -1766,13 +1880,16 @@ func (a *Api) SetTrustMode(c *gin.Context) {
// @Failure 400 {object} Error // @Failure 400 {object} Error
// @Router /v1/configuration/{number}/settings [get] // @Router /v1/configuration/{number}/settings [get]
func (a *Api) GetTrustMode(c *gin.Context) { func (a *Api) GetTrustMode(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
} }
var err error
trustMode := TrustModeResponse{} trustMode := TrustModeResponse{}
trustMode.TrustMode, err = utils.TrustModeToString(a.signalClient.GetTrustMode(number)) trustMode.TrustMode, err = utils.TrustModeToString(a.signalClient.GetTrustMode(number))
if err != nil { if err != nil {
@@ -1794,13 +1911,17 @@ func (a *Api) GetTrustMode(c *gin.Context) {
// @Failure 400 {object} Error // @Failure 400 {object} Error
// @Router /v1/contacts/{number}/sync [post] // @Router /v1/contacts/{number}/sync [post]
func (a *Api) SendContacts(c *gin.Context) { func (a *Api) SendContacts(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
} }
err := a.signalClient.SendContacts(number) err = a.signalClient.SendContacts(number)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: err.Error()}) c.JSON(400, Error{Msg: err.Error()})
return return
@@ -1819,14 +1940,18 @@ func (a *Api) SendContacts(c *gin.Context) {
// @Failure 400 {object} Error // @Failure 400 {object} Error
// @Router /v1/accounts/{number}/rate-limit-challenge [post] // @Router /v1/accounts/{number}/rate-limit-challenge [post]
func (a *Api) SubmitRateLimitChallenge(c *gin.Context) { func (a *Api) SubmitRateLimitChallenge(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
} }
var req RateLimitChallengeRequest var req RateLimitChallengeRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -1851,14 +1976,18 @@ func (a *Api) SubmitRateLimitChallenge(c *gin.Context) {
// @Failure 400 {object} Error // @Failure 400 {object} Error
// @Router /v1/accounts/{number}/settings [put] // @Router /v1/accounts/{number}/settings [put]
func (a *Api) UpdateAccountSettings(c *gin.Context) { func (a *Api) UpdateAccountSettings(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
} }
var req UpdateAccountSettingsRequest var req UpdateAccountSettingsRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -1885,14 +2014,18 @@ func (a *Api) UpdateAccountSettings(c *gin.Context) {
// @Failure 400 {object} Error // @Failure 400 {object} Error
// @Router /v1/accounts/{number}/username [post] // @Router /v1/accounts/{number}/username [post]
func (a *Api) SetUsername(c *gin.Context) { func (a *Api) SetUsername(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
} }
var req SetUsernameRequest var req SetUsernameRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -1916,13 +2049,17 @@ func (a *Api) SetUsername(c *gin.Context) {
// @Failure 400 {object} Error // @Failure 400 {object} Error
// @Router /v1/accounts/{number}/username [delete] // @Router /v1/accounts/{number}/username [delete]
func (a *Api) RemoveUsername(c *gin.Context) { func (a *Api) RemoveUsername(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
} }
err := a.signalClient.RemoveUsername(number) err = a.signalClient.RemoveUsername(number)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: err.Error()}) c.JSON(400, Error{Msg: err.Error()})
return return
@@ -1941,7 +2078,11 @@ func (a *Api) RemoveUsername(c *gin.Context) {
// @Success 200 {object} []client.ListInstalledStickerPacksResponse // @Success 200 {object} []client.ListInstalledStickerPacksResponse
// @Router /v1/sticker-packs/{number} [get] // @Router /v1/sticker-packs/{number} [get]
func (a *Api) ListInstalledStickerPacks(c *gin.Context) { func (a *Api) ListInstalledStickerPacks(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
@@ -1967,14 +2108,18 @@ func (a *Api) ListInstalledStickerPacks(c *gin.Context) {
// @Param data body AddStickerPackRequest true "Request" // @Param data body AddStickerPackRequest true "Request"
// @Router /v1/sticker-packs/{number} [post] // @Router /v1/sticker-packs/{number} [post]
func (a *Api) AddStickerPack(c *gin.Context) { func (a *Api) AddStickerPack(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})
return return
} }
var req AddStickerPackRequest var req AddStickerPackRequest
err := c.BindJSON(&req) err = c.BindJSON(&req)
if err != nil { if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - invalid request"}) c.JSON(400, Error{Msg: "Couldn't process request - invalid request"})
return return
@@ -1997,7 +2142,11 @@ func (a *Api) AddStickerPack(c *gin.Context) {
// @Param number path string true "Registered Phone Number" // @Param number path string true "Registered Phone Number"
// @Router /v1/contacts/{number} [get] // @Router /v1/contacts/{number} [get]
func (a *Api) ListContacts(c *gin.Context) { func (a *Api) ListContacts(c *gin.Context) {
number := c.Param("number") number, err := url.PathUnescape(c.Param("number"))
if err != nil {
c.JSON(400, Error{Msg: "Couldn't process request - malformed number"})
return
}
if number == "" { if number == "" {
c.JSON(400, Error{Msg: "Couldn't process request - number missing"}) c.JSON(400, Error{Msg: "Couldn't process request - number missing"})

View File

@@ -1356,7 +1356,7 @@ func (s *SignalClient) GetAttachment(attachment string) ([]byte, error) {
return attachmentBytes, nil 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 err error
var avatarTmpPath string var avatarTmpPath string
if base64Avatar != "" { if base64Avatar != "" {
@@ -1399,14 +1399,17 @@ func (s *SignalClient) UpdateProfile(number string, profileName string, base64Av
Name string `json:"given-name"` Name string `json:"given-name"`
Avatar string `json:"avatar,omitempty"` Avatar string `json:"avatar,omitempty"`
RemoveAvatar bool `json:"remove-avatar"` RemoveAvatar bool `json:"remove-avatar"`
About *string `json:"about,omitempty"`
} }
request := Request{Name: profileName} request := Request{Name: profileName}
request.About = about
if base64Avatar == "" { if base64Avatar == "" {
request.RemoveAvatar = true request.RemoveAvatar = true
} else { } else {
request.Avatar = avatarTmpPath request.Avatar = avatarTmpPath
request.RemoveAvatar = false request.RemoveAvatar = false
} }
jsonRpc2Client, err := s.getJsonRpc2Client() jsonRpc2Client, err := s.getJsonRpc2Client()
if err != nil { if err != nil {
return err return err
@@ -1420,6 +1423,10 @@ func (s *SignalClient) UpdateProfile(number string, profileName string, base64Av
cmd = append(cmd, []string{"--avatar", avatarTmpPath}...) cmd = append(cmd, []string{"--avatar", avatarTmpPath}...)
} }
if about != nil {
cmd = append(cmd, []string{"--about", *about}...)
}
_, err = s.cliClient.Execute(true, cmd, "") _, err = s.cliClient.Execute(true, cmd, "")
} }