diff --git a/signal-server-patches/remove-twilio.patch b/signal-server-patches/remove-twilio.patch new file mode 100644 index 0000000..0e83f58 --- /dev/null +++ b/signal-server-patches/remove-twilio.patch @@ -0,0 +1,118 @@ +diff --git a/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java b/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java +index 481965d..9e130f8 100644 +--- a/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java ++++ b/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java +@@ -19,105 +19,36 @@ package org.whispersystems.textsecuregcm.sms; + import com.codahale.metrics.Meter; + import com.codahale.metrics.MetricRegistry; + import com.codahale.metrics.SharedMetricRegistries; +-import com.twilio.sdk.TwilioRestClient; +-import com.twilio.sdk.TwilioRestException; +-import com.twilio.sdk.resource.factory.CallFactory; +-import com.twilio.sdk.resource.factory.MessageFactory; +-import org.apache.http.NameValuePair; +-import org.apache.http.message.BasicNameValuePair; + import org.whispersystems.textsecuregcm.configuration.TwilioConfiguration; + import org.whispersystems.textsecuregcm.util.Constants; +-import org.whispersystems.textsecuregcm.util.Util; + + import java.io.IOException; +-import java.util.ArrayList; +-import java.util.HashMap; +-import java.util.LinkedList; +-import java.util.List; +-import java.util.Map; + import java.util.Optional; +-import java.util.Random; ++ ++import org.slf4j.Logger; ++import org.slf4j.LoggerFactory; + + import static com.codahale.metrics.MetricRegistry.name; + +-@SuppressWarnings("OptionalUsedAsFieldOrParameterType") + public class TwilioSmsSender { + +- public static final String SAY_TWIML = "\n" + +- "\n" + +- " " + SmsSender.VOX_VERIFICATION_TEXT + "%s.\n" + +- ""; +- + private final MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME); + private final Meter smsMeter = metricRegistry.meter(name(getClass(), "sms", "delivered")); + private final Meter voxMeter = metricRegistry.meter(name(getClass(), "vox", "delivered")); + +- private final String accountId; +- private final String accountToken; +- private final ArrayList numbers; +- private final String messagingServicesId; +- private final String localDomain; +- private final Random random; ++ private final Logger logger = LoggerFactory.getLogger(TwilioSmsSender.class); + + public TwilioSmsSender(TwilioConfiguration config) { +- this.accountId = config.getAccountId (); +- this.accountToken = config.getAccountToken(); +- this.numbers = new ArrayList<>(config.getNumbers()); +- this.localDomain = config.getLocalDomain(); +- this.messagingServicesId = config.getMessagingServicesId(); +- this.random = new Random(System.currentTimeMillis()); + } + +- public void deliverSmsVerification(String destination, Optional clientType, String verificationCode) +- throws IOException, TwilioRestException +- { +- TwilioRestClient client = new TwilioRestClient(accountId, accountToken); +- MessageFactory messageFactory = client.getAccount().getMessageFactory(); +- List messageParams = new LinkedList<>(); +- messageParams.add(new BasicNameValuePair("To", destination)); +- +- if (Util.isEmpty(messagingServicesId)) { +- messageParams.add(new BasicNameValuePair("From", getRandom(random, numbers))); +- } else { +- messageParams.add(new BasicNameValuePair("MessagingServiceSid", messagingServicesId)); +- } +- +- if ("ios".equals(clientType.orElse(null))) { +- messageParams.add(new BasicNameValuePair("Body", String.format(SmsSender.SMS_IOS_VERIFICATION_TEXT, verificationCode, verificationCode))); +- } else { +- messageParams.add(new BasicNameValuePair("Body", String.format(SmsSender.SMS_VERIFICATION_TEXT, verificationCode))); +- } +- +- try { +- messageFactory.create(messageParams); +- } catch (RuntimeException damnYouTwilio) { +- throw new IOException(damnYouTwilio); +- } +- ++ public void deliverSmsVerification(String destination, Optional clientType, String verificationCode) throws IOException { ++ logger.info("Pretending to send SMS verification to " + destination + ": " + verificationCode); + smsMeter.mark(); + } + +- public void deliverVoxVerification(String destination, String verificationCode) +- throws IOException, TwilioRestException +- { +- TwilioRestClient client = new TwilioRestClient(accountId, accountToken); +- CallFactory callFactory = client.getAccount().getCallFactory(); +- Map callParams = new HashMap<>(); +- callParams.put("To", destination); +- callParams.put("From", getRandom(random, numbers)); +- callParams.put("Url", "https://" + localDomain + "/v1/accounts/voice/twiml/" + verificationCode); +- +- try { +- callFactory.create(callParams); +- } catch (RuntimeException damnYouTwilio) { +- throw new IOException(damnYouTwilio); +- } +- ++ public void deliverVoxVerification(String destination, String verificationCode) throws IOException { ++ logger.info("Pretending to send voice verification to " + destination + ": " + verificationCode); + voxMeter.mark(); + } + +- private String getRandom(Random random, ArrayList elements) { +- return elements.get(random.nextInt(elements.size())); +- } +- + } diff --git a/signal-server.Dockerfile b/signal-server.Dockerfile index 42eed8a..e0e2893 100644 --- a/signal-server.Dockerfile +++ b/signal-server.Dockerfile @@ -2,6 +2,8 @@ FROM debian:9 as build RUN apt-get update && apt-get install -y openjdk-8-jdk-headless maven git RUN git -C /usr/local/src clone https://github.com/signalapp/Signal-Server WORKDIR /usr/local/src/Signal-Server +COPY signal-server-patches /tmp/signal-server-patches +RUN bash -exc "for patch in /tmp/signal-server-patches/*.patch; do patch -p1 $patch; done" RUN mvn install -DskipTests RUN ls -lha target