[#338] Resolve "maintainers can restart signalboost w/ signal message + password"
Closes #338 (closed)
context
- when signald crashes a channel's thread, the easiest way to repair the situation is to restart signalboost
- sometimes this happens on a weekend when we are not at a laptop
- so: this MR introduces a flow that allows SB maintainers to restart signalboost from their phone by sending a command and passphrase to the diagnostics channel
changes
-
run against forked signald build with a new
abort
command (only exists in sb fork):- pins us to this commit: signald-fork@6cf17ecb
- added in this MR: signald-fork@6cf17ecb
-
add 2 helpers to
signal module
for use in the restart flow:-
signal#abort
: sends a poison pill message to signald, causing it to shutdown -
signal#isAlive
- issues
version
request to signald - resolves with version if response received or reject if request times out
- issues
-
-
implement
execute#maybeRestart
:- triggered by receiving
BOOST RESTART <PASSPHRASE>
on any channel - authentication flow blocks restart and sends error response if:
- command sender is not maintainer
- command is not issued over diagnostics channel (new restriction)
- passphrase is wrong
- if authentication works, proceed with restart:
- send poison pill to abort signald, leveraging on
restart:always
directive in docker-compose to ensure that it restarts after aborting - use application module's
stop
andstart
methods to restart signalboost with await
directive to ensure signald is running in time forapp.run
's subscribe calls to work - make call to
signal.isAlive
before returning to ensure that signald is in fact up
- send poison pill to abort signald, leveraging on
- if restart worked, send a (localized!) notification of restart success to all maintainers on diagnostics channel
- triggered by receiving
side-effects
-
refine localization lgoci in execute specs:
- goal: fix some errant translation logic, introduce more rigorous approach to testing localization in execute module via randomizing language of incoming commands and all channel members
- fix:
- provide a new
localizedCmd
lookup table (that provides commands in a random language every test suite run) - generate admins/members with randomized language memberships for every run and some helpers to access notifications in their language
- provide a new
- use results of these tests to fix:
- business logic errors in which:
- several notifications were mistakenly being sent in the sender language rather than the recipient language
- french
ADD
results were returning functions instead of strings
- testing errors/omissions in which we:
- asserted that messages were sent in a
channel.language
(when there is no such thing:language
is a field on memberships, not channels) - failed to distinguish between cases in which notifications are sent in a sender/recipient's language or the language in which the incoming command was sent
- asserted presence of (vestigal) command responses instead of parse errors for invalid phone numbers
- failed to provide unit test for parse errors for invalid
REPLY
payloads (which were the subject of prolonged deliberation in last delivery cycle)
- asserted that messages were sent in a
- business logic errors in which:
-
modify all docker containers in all
docker-compose
files to userestart: always
-
add stdout/stderr logging to
util.exec
-
clean up socket/index
- inline
destroySocketConnection
1-liner - make it possible to run socket pool after stopping it
- inline
-
provide default credentials for twilio client
- the twilio client singleton is loaded at import time (maybe we should fix that?)
- and it now throws if valid sid and token aren't provided to constructor
- as workaround, provide them in test configs
Edited by aguestuser