fixed bug in search endpoint

* when multiple accounts are registered, signal-cli expects the account
  specified with '-a'. In order to stay backwards compatible, the search
  endpoint was extended with an optional number parameter. i.e:
  '/search/{number}'. In case only one account is registered, the number
  parameter can be omitted.

see #369
This commit is contained in:
Bernhard B
2023-05-26 18:09:06 +02:00
parent d8ded891a1
commit 4dc19813b6
6 changed files with 27 additions and 3 deletions

View File

@@ -1382,6 +1382,7 @@ func (a *Api) SendStopTyping(c *gin.Context) {
// @Description Check if one or more phone numbers are registered with the Signal Service. // @Description Check if one or more phone numbers are registered with the Signal Service.
// @Accept json // @Accept json
// @Produce json // @Produce json
// @Param number path string false "Registered Phone Number"
// @Param numbers query []string true "Numbers to check" collectionFormat(multi) // @Param numbers query []string true "Numbers to check" collectionFormat(multi)
// @Success 200 {object} []SearchResponse // @Success 200 {object} []SearchResponse
// @Failure 400 {object} Error // @Failure 400 {object} Error
@@ -1393,7 +1394,9 @@ func (a *Api) SearchForNumbers(c *gin.Context) {
return return
} }
searchResults, err := a.signalClient.SearchForNumbers(query["numbers"]) number := c.Param("number")
searchResults, err := a.signalClient.SearchForNumbers(number, query["numbers"])
if err != nil { if err != nil {
c.JSON(400, Error{Msg: err.Error()}) c.JSON(400, Error{Msg: err.Error()})
return return

View File

@@ -1348,7 +1348,7 @@ func (s *SignalClient) SendStopTyping(number string, recipient string) error {
return err return err
} }
func (s *SignalClient) SearchForNumbers(numbers []string) ([]SearchResultEntry, error) { func (s *SignalClient) SearchForNumbers(number string, numbers []string) ([]SearchResultEntry, error) {
searchResultEntries := []SearchResultEntry{} searchResultEntries := []SearchResultEntry{}
var err error var err error
@@ -1374,7 +1374,11 @@ func (s *SignalClient) SearchForNumbers(numbers []string) ([]SearchResultEntry,
return searchResultEntries, err return searchResultEntries, err
} }
} else { } else {
cmd := []string{"--config", s.signalCliConfig, "--output", "json", "getUserStatus"} cmd := []string{"--config", s.signalCliConfig, "--output", "json"}
if number != "" {
cmd = append(cmd, []string{"-a", number}...)
}
cmd = append(cmd, "getUserStatus")
cmd = append(cmd, numbers...) cmd = append(cmd, numbers...)
rawData, err = s.cliClient.Execute(true, cmd, "") rawData, err = s.cliClient.Execute(true, cmd, "")
} }

View File

@@ -1289,6 +1289,12 @@ var doc = `{
], ],
"summary": "Check if one or more phone numbers are registered with the Signal Service.", "summary": "Check if one or more phone numbers are registered with the Signal Service.",
"parameters": [ "parameters": [
{
"type": "string",
"description": "Registered Phone Number",
"name": "number",
"in": "path"
},
{ {
"type": "array", "type": "array",
"items": { "items": {

View File

@@ -1273,6 +1273,12 @@
], ],
"summary": "Check if one or more phone numbers are registered with the Signal Service.", "summary": "Check if one or more phone numbers are registered with the Signal Service.",
"parameters": [ "parameters": [
{
"type": "string",
"description": "Registered Phone Number",
"name": "number",
"in": "path"
},
{ {
"type": "array", "type": "array",
"items": { "items": {

View File

@@ -1118,6 +1118,10 @@ paths:
- application/json - application/json
description: Check if one or more phone numbers are registered with the Signal Service. description: Check if one or more phone numbers are registered with the Signal Service.
parameters: parameters:
- description: Registered Phone Number
in: path
name: number
type: string
- collectionFormat: multi - collectionFormat: multi
description: Numbers to check description: Numbers to check
in: query in: query

View File

@@ -235,6 +235,7 @@ func main() {
search := v1.Group("/search") search := v1.Group("/search")
{ {
search.GET("", api.SearchForNumbers) search.GET("", api.SearchForNumbers)
search.GET(":number", api.SearchForNumbers)
} }
contacts := v1.Group("/contacts") contacts := v1.Group("/contacts")