mirror of
https://github.com/aljazceru/signal-cli-rest-api.git
synced 2026-01-14 12:24:26 +01:00
Merge pull request #434 from bbernhard/multimaster_mode
Multimaster mode
This commit is contained in:
@@ -377,7 +377,7 @@ func (s *SignalClient) send(number string, message string,
|
||||
}
|
||||
|
||||
if s.signalCliMode == JsonRpc {
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -431,7 +431,7 @@ func (s *SignalClient) send(number string, message string,
|
||||
request.TextStyles = signalCliTextFormatStrings
|
||||
}
|
||||
|
||||
rawData, err := jsonRpc2Client.getRaw("send", request)
|
||||
rawData, err := jsonRpc2Client.getRaw("send", &number, request)
|
||||
if err != nil {
|
||||
cleanupAttachmentEntries(attachmentEntries)
|
||||
return nil, err
|
||||
@@ -527,20 +527,41 @@ func (s *SignalClient) About() About {
|
||||
|
||||
func (s *SignalClient) RegisterNumber(number string, useVoice bool, captcha string) error {
|
||||
if s.signalCliMode == JsonRpc {
|
||||
return errors.New(endpointNotSupportedInJsonRpcMode)
|
||||
}
|
||||
command := []string{"--config", s.signalCliConfig, "-a", number, "register"}
|
||||
type Request struct {
|
||||
UseVoice bool `json:"voice,omitempty"`
|
||||
Captcha string `json:"captcha,omitempty"`
|
||||
Account string `json:"account,omitempty"`
|
||||
}
|
||||
request := Request{Account: number}
|
||||
|
||||
if useVoice {
|
||||
command = append(command, "--voice")
|
||||
}
|
||||
if useVoice {
|
||||
request.UseVoice = useVoice
|
||||
}
|
||||
|
||||
if captcha != "" {
|
||||
command = append(command, []string{"--captcha", captcha}...)
|
||||
}
|
||||
if captcha != "" {
|
||||
request.Captcha = captcha
|
||||
}
|
||||
|
||||
_, err := s.cliClient.Execute(true, command, "")
|
||||
return err
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("register", nil, request)
|
||||
return err
|
||||
} else {
|
||||
command := []string{"--config", s.signalCliConfig, "-a", number, "register"}
|
||||
|
||||
if useVoice {
|
||||
command = append(command, "--voice")
|
||||
}
|
||||
|
||||
if captcha != "" {
|
||||
command = append(command, []string{"--captcha", captcha}...)
|
||||
}
|
||||
|
||||
_, err := s.cliClient.Execute(true, command, "")
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
func (s *SignalClient) UnregisterNumber(number string, deleteAccount bool, deleteLocalData bool) error {
|
||||
@@ -570,17 +591,33 @@ func (s *SignalClient) UnregisterNumber(number string, deleteAccount bool, delet
|
||||
|
||||
func (s *SignalClient) VerifyRegisteredNumber(number string, token string, pin string) error {
|
||||
if s.signalCliMode == JsonRpc {
|
||||
return errors.New(endpointNotSupportedInJsonRpcMode)
|
||||
}
|
||||
type Request struct {
|
||||
VerificationCode string `json:"verificationCode,omitempty"`
|
||||
Account string `json:"account,omitempty"`
|
||||
Pin string `json:"pin,omitempty"`
|
||||
}
|
||||
request := Request{Account: number, VerificationCode: token}
|
||||
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "verify", token}
|
||||
if pin != "" {
|
||||
cmd = append(cmd, "--pin")
|
||||
cmd = append(cmd, pin)
|
||||
}
|
||||
if pin != "" {
|
||||
request.Pin = pin
|
||||
}
|
||||
|
||||
_, err := s.cliClient.Execute(true, cmd, "")
|
||||
return err
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("verify", nil, request)
|
||||
return err
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "verify", token}
|
||||
if pin != "" {
|
||||
cmd = append(cmd, "--pin")
|
||||
cmd = append(cmd, pin)
|
||||
}
|
||||
|
||||
_, err := s.cliClient.Execute(true, cmd, "")
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
func (s *SignalClient) SendV1(number string, message string, recipients []string, base64Attachments []string, isGroup bool) (*SendResponse, error) {
|
||||
@@ -588,8 +625,8 @@ func (s *SignalClient) SendV1(number string, message string, recipients []string
|
||||
return timestamp, err
|
||||
}
|
||||
|
||||
func (s *SignalClient) getJsonRpc2Client(number string) (*JsonRpc2Client, error) {
|
||||
if val, ok := s.jsonRpc2Clients[number]; ok {
|
||||
func (s *SignalClient) getJsonRpc2Client() (*JsonRpc2Client, error) {
|
||||
if val, ok := s.jsonRpc2Clients[utils.MULTI_ACCOUNT_NUMBER]; ok {
|
||||
return val, nil
|
||||
}
|
||||
return nil, errors.New("Number not registered with JSON-RPC")
|
||||
@@ -692,8 +729,8 @@ func (s *SignalClient) Receive(number string, timeout int64, ignoreAttachments b
|
||||
}
|
||||
}
|
||||
|
||||
func (s *SignalClient) GetReceiveChannel(number string) (chan JsonRpc2ReceivedMessage, error) {
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
func (s *SignalClient) GetReceiveChannel() (chan JsonRpc2ReceivedMessage, error) {
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -729,11 +766,11 @@ func (s *SignalClient) CreateGroup(number string, name string, members []string,
|
||||
request.AddMembersPermissions = addMembersPermission.String()
|
||||
}
|
||||
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
rawData, err := jsonRpc2Client.getRaw("updateGroup", request)
|
||||
rawData, err := jsonRpc2Client.getRaw("updateGroup", &number, request)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -817,11 +854,11 @@ func (s *SignalClient) updateGroupMembers(number string, groupId string, members
|
||||
request.RemoveMembers = append(request.RemoveMembers, members...)
|
||||
}
|
||||
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("updateGroup", request)
|
||||
_, err = jsonRpc2Client.getRaw("updateGroup", &number, request)
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "updateGroup", "-g", internalGroupId}
|
||||
|
||||
@@ -880,11 +917,11 @@ func (s *SignalClient) updateGroupAdmins(number string, groupId string, admins [
|
||||
request.RemoveAdmins = append(request.RemoveAdmins, admins...)
|
||||
}
|
||||
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("updateGroup", request)
|
||||
_, err = jsonRpc2Client.getRaw("updateGroup", &number, request)
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "updateGroup", "-g", internalGroupId}
|
||||
|
||||
@@ -916,11 +953,11 @@ func (s *SignalClient) GetGroups(number string) ([]GroupEntry, error) {
|
||||
var rawData string
|
||||
|
||||
if s.signalCliMode == JsonRpc {
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return groupEntries, err
|
||||
}
|
||||
rawData, err = jsonRpc2Client.getRaw("listGroups", nil)
|
||||
rawData, err = jsonRpc2Client.getRaw("listGroups", &number, nil)
|
||||
if err != nil {
|
||||
return groupEntries, err
|
||||
}
|
||||
@@ -999,11 +1036,11 @@ func (s *SignalClient) DeleteGroup(number string, groupId string) error {
|
||||
}
|
||||
request := Request{GroupId: groupId}
|
||||
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("quitGroup", request)
|
||||
_, err = jsonRpc2Client.getRaw("quitGroup", &number, request)
|
||||
return err
|
||||
} else {
|
||||
ret, err := s.cliClient.Execute(true, []string{"--config", s.signalCliConfig, "-a", number, "quitGroup", "-g", string(groupId)}, "")
|
||||
@@ -1139,11 +1176,11 @@ func (s *SignalClient) UpdateProfile(number string, profileName string, base64Av
|
||||
request.Avatar = avatarTmpPath
|
||||
request.RemoveAvatar = false
|
||||
}
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("updateProfile", request)
|
||||
_, err = jsonRpc2Client.getRaw("updateProfile", &number, request)
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "updateProfile", "--given-name", profileName}
|
||||
if base64Avatar == "" {
|
||||
@@ -1162,11 +1199,11 @@ func (s *SignalClient) UpdateProfile(number string, profileName string, base64Av
|
||||
func (s *SignalClient) ListIdentities(number string) (*[]IdentityEntry, error) {
|
||||
identityEntries := []IdentityEntry{}
|
||||
if s.signalCliMode == JsonRpc {
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rawData, err := jsonRpc2Client.getRaw("listIdentities", nil)
|
||||
rawData, err := jsonRpc2Client.getRaw("listIdentities", &number, nil)
|
||||
signalCliIdentityEntries := []SignalCliIdentityEntry{}
|
||||
err = json.Unmarshal([]byte(rawData), &signalCliIdentityEntries)
|
||||
if err != nil {
|
||||
@@ -1224,11 +1261,11 @@ func (s *SignalClient) TrustIdentity(number string, numberToTrust string, verifi
|
||||
request.TrustAllKnownKeys = *trustAllKnownKeys
|
||||
}
|
||||
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("trust", request)
|
||||
_, err = jsonRpc2Client.getRaw("trust", &number, request)
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "trust", numberToTrust}
|
||||
|
||||
@@ -1252,11 +1289,11 @@ func (s *SignalClient) BlockGroup(number string, groupId string) error {
|
||||
GroupId string `json:"groupId"`
|
||||
}
|
||||
request := Request{GroupId: groupId}
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("block", request)
|
||||
_, err = jsonRpc2Client.getRaw("block", &number, request)
|
||||
} else {
|
||||
_, err = s.cliClient.Execute(true, []string{"--config", s.signalCliConfig, "-a", number, "block", "-g", groupId}, "")
|
||||
}
|
||||
@@ -1270,11 +1307,11 @@ func (s *SignalClient) JoinGroup(number string, groupId string) error {
|
||||
GroupId string `json:"groupId"`
|
||||
}
|
||||
request := Request{GroupId: groupId}
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("updateGroup", request)
|
||||
_, err = jsonRpc2Client.getRaw("updateGroup", &number, request)
|
||||
} else {
|
||||
_, err = s.cliClient.Execute(true, []string{"--config", s.signalCliConfig, "-a", number, "updateGroup", "-g", groupId}, "")
|
||||
}
|
||||
@@ -1288,11 +1325,11 @@ func (s *SignalClient) QuitGroup(number string, groupId string) error {
|
||||
GroupId string `json:"groupId"`
|
||||
}
|
||||
request := Request{GroupId: groupId}
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("quitGroup", request)
|
||||
_, err = jsonRpc2Client.getRaw("quitGroup", &number, request)
|
||||
} else {
|
||||
_, err = s.cliClient.Execute(true, []string{"--config", s.signalCliConfig, "-a", number, "quitGroup", "-g", groupId}, "")
|
||||
}
|
||||
@@ -1354,11 +1391,11 @@ func (s *SignalClient) UpdateGroup(number string, groupId string, base64Avatar *
|
||||
request.Name = groupName
|
||||
|
||||
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("updateGroup", request)
|
||||
_, err = jsonRpc2Client.getRaw("updateGroup", &number, request)
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "updateGroup", "-g", groupId}
|
||||
if base64Avatar != nil {
|
||||
@@ -1420,11 +1457,11 @@ func (s *SignalClient) SendReaction(number string, recipient string, emoji strin
|
||||
if remove {
|
||||
request.Remove = remove
|
||||
}
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("sendReaction", request)
|
||||
_, err = jsonRpc2Client.getRaw("sendReaction", &number, request)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1470,11 +1507,11 @@ func (s *SignalClient) SendStartTyping(number string, recipient string) error {
|
||||
request.GroupId = recp
|
||||
}
|
||||
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("sendTyping", request)
|
||||
_, err = jsonRpc2Client.getRaw("sendTyping", &number, request)
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "sendTyping"}
|
||||
if !isGroup {
|
||||
@@ -1513,11 +1550,11 @@ func (s *SignalClient) SendStopTyping(number string, recipient string) error {
|
||||
request.GroupId = recp
|
||||
}
|
||||
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("sendTyping", request)
|
||||
_, err = jsonRpc2Client.getRaw("sendTyping", &number, request)
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "sendTyping", "--stop"}
|
||||
if !isGroup {
|
||||
@@ -1547,7 +1584,7 @@ func (s *SignalClient) SearchForNumbers(number string, numbers []string) ([]Sear
|
||||
return searchResultEntries, errors.New("No JsonRpc2Client registered!")
|
||||
}
|
||||
for _, jsonRpc2Client := range jsonRpc2Clients {
|
||||
rawData, err = jsonRpc2Client.getRaw("getUserStatus", request)
|
||||
rawData, err = jsonRpc2Client.getRaw("getUserStatus", &number, request)
|
||||
if err == nil { //getUserStatus doesn't need an account to work, so try all the registered acounts and stop until we succeed
|
||||
break
|
||||
}
|
||||
@@ -1592,11 +1629,11 @@ func (s *SignalClient) SearchForNumbers(number string, numbers []string) ([]Sear
|
||||
func (s* SignalClient) SendContacts(number string) error {
|
||||
var err error
|
||||
if s.signalCliMode == JsonRpc {
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("sendContacts", nil)
|
||||
_, err = jsonRpc2Client.getRaw("sendContacts", &number, nil)
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "sendContacts"}
|
||||
_, err = s.cliClient.Execute(true, cmd, "")
|
||||
@@ -1619,11 +1656,11 @@ func (s *SignalClient) UpdateContact(number string, recipient string, name *stri
|
||||
if expirationInSeconds != nil {
|
||||
request.Expiration = *expirationInSeconds
|
||||
}
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("updateContact", request)
|
||||
_, err = jsonRpc2Client.getRaw("updateContact", &number, request)
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "updateContact", recipient}
|
||||
if name != nil {
|
||||
@@ -1644,11 +1681,11 @@ func (s *SignalClient) AddDevice(number string, uri string) error {
|
||||
Uri string `json:"uri"`
|
||||
}
|
||||
request := Request{Uri: uri}
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client(number)
|
||||
jsonRpc2Client, err := s.getJsonRpc2Client()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = jsonRpc2Client.getRaw("addDevice", request)
|
||||
_, err = jsonRpc2Client.getRaw("addDevice", &number, request)
|
||||
} else {
|
||||
cmd := []string{"--config", s.signalCliConfig, "-a", number, "addDevice", "--uri", uri}
|
||||
_, err = s.cliClient.Execute(true, cmd, "")
|
||||
|
||||
@@ -59,7 +59,7 @@ func (r *JsonRpc2Client) Dial(address string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *JsonRpc2Client) getRaw(command string, args interface{}) (string, error) {
|
||||
func (r *JsonRpc2Client) getRaw(command string, account *string, args interface{}) (string, error) {
|
||||
type Request struct {
|
||||
JsonRpc string `json:"jsonrpc"`
|
||||
Method string `json:"method"`
|
||||
@@ -99,6 +99,13 @@ func (r *JsonRpc2Client) getRaw(command string, args interface{}) (string, error
|
||||
}
|
||||
}
|
||||
|
||||
if account != nil {
|
||||
fullCommandBytes, err = sjson.SetBytes(fullCommandBytes, "params.account", account)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
log.Debug("full command: ", string(fullCommandBytes))
|
||||
|
||||
_, err = r.conn.Write([]byte(string(fullCommandBytes) + "\n"))
|
||||
|
||||
Reference in New Issue
Block a user