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.
// @Accept json
// @Produce json
// @Param number path string false "Registered Phone Number"
// @Param numbers query []string true "Numbers to check" collectionFormat(multi)
// @Success 200 {object} []SearchResponse
// @Failure 400 {object} Error
@@ -1393,7 +1394,9 @@ func (a *Api) SearchForNumbers(c *gin.Context) {
return
}
searchResults, err := a.signalClient.SearchForNumbers(query["numbers"])
number := c.Param("number")
searchResults, err := a.signalClient.SearchForNumbers(number, query["numbers"])
if err != nil {
c.JSON(400, Error{Msg: err.Error()})
return

View File

@@ -1348,7 +1348,7 @@ func (s *SignalClient) SendStopTyping(number string, recipient string) error {
return err
}
func (s *SignalClient) SearchForNumbers(numbers []string) ([]SearchResultEntry, error) {
func (s *SignalClient) SearchForNumbers(number string, numbers []string) ([]SearchResultEntry, error) {
searchResultEntries := []SearchResultEntry{}
var err error
@@ -1374,7 +1374,11 @@ func (s *SignalClient) SearchForNumbers(numbers []string) ([]SearchResultEntry,
return searchResultEntries, err
}
} 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...)
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.",
"parameters": [
{
"type": "string",
"description": "Registered Phone Number",
"name": "number",
"in": "path"
},
{
"type": "array",
"items": {

View File

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

View File

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

View File

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