Stripe SMS/Vox across multiple numbers

// FREEBIE
This commit is contained in:
Moxie Marlinspike 2015-11-03 08:12:18 -08:00
parent 2b8a11b001
commit 6368b9383a
2 changed files with 23 additions and 11 deletions

View File

@ -19,6 +19,9 @@ package org.whispersystems.textsecuregcm.configuration;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
public class TwilioConfiguration { public class TwilioConfiguration {
@NotEmpty @NotEmpty
@ -29,9 +32,9 @@ public class TwilioConfiguration {
@JsonProperty @JsonProperty
private String accountToken; private String accountToken;
@NotEmpty @NotNull
@JsonProperty @JsonProperty
private String number; private List<String> numbers;
@NotEmpty @NotEmpty
@JsonProperty @JsonProperty
@ -48,8 +51,8 @@ public class TwilioConfiguration {
return accountToken; return accountToken;
} }
public String getNumber() { public List<String> getNumbers() {
return number; return numbers;
} }
public String getLocalDomain() { public String getLocalDomain() {

View File

@ -29,10 +29,12 @@ import org.whispersystems.textsecuregcm.configuration.TwilioConfiguration;
import org.whispersystems.textsecuregcm.util.Constants; import org.whispersystems.textsecuregcm.util.Constants;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random;
import static com.codahale.metrics.MetricRegistry.name; import static com.codahale.metrics.MetricRegistry.name;
@ -49,14 +51,16 @@ public class TwilioSmsSender {
private final String accountId; private final String accountId;
private final String accountToken; private final String accountToken;
private final String number; private final ArrayList<String> numbers;
private final String localDomain; private final String localDomain;
private final Random random;
public TwilioSmsSender(TwilioConfiguration config) { public TwilioSmsSender(TwilioConfiguration config) {
this.accountId = config.getAccountId(); this.accountId = config.getAccountId();
this.accountToken = config.getAccountToken(); this.accountToken = config.getAccountToken();
this.number = config.getNumber(); this.numbers = new ArrayList<>(config.getNumbers());
this.localDomain = config.getLocalDomain(); this.localDomain = config.getLocalDomain();
this.random = new Random(System.currentTimeMillis());
} }
public void deliverSmsVerification(String destination, String verificationCode) public void deliverSmsVerification(String destination, String verificationCode)
@ -66,7 +70,7 @@ public class TwilioSmsSender {
MessageFactory messageFactory = client.getAccount().getMessageFactory(); MessageFactory messageFactory = client.getAccount().getMessageFactory();
List<NameValuePair> messageParams = new LinkedList<>(); List<NameValuePair> messageParams = new LinkedList<>();
messageParams.add(new BasicNameValuePair("To", destination)); messageParams.add(new BasicNameValuePair("To", destination));
messageParams.add(new BasicNameValuePair("From", number)); messageParams.add(new BasicNameValuePair("From", getRandom(random, numbers)));
messageParams.add(new BasicNameValuePair("Body", SmsSender.SMS_VERIFICATION_TEXT + verificationCode)); messageParams.add(new BasicNameValuePair("Body", SmsSender.SMS_VERIFICATION_TEXT + verificationCode));
try { try {
@ -85,7 +89,7 @@ public class TwilioSmsSender {
CallFactory callFactory = client.getAccount().getCallFactory(); CallFactory callFactory = client.getAccount().getCallFactory();
Map<String, String> callParams = new HashMap<>(); Map<String, String> callParams = new HashMap<>();
callParams.put("To", destination); callParams.put("To", destination);
callParams.put("From", number); callParams.put("From", getRandom(random, numbers));
callParams.put("Url", "https://" + localDomain + "/v1/accounts/voice/twiml/" + verificationCode); callParams.put("Url", "https://" + localDomain + "/v1/accounts/voice/twiml/" + verificationCode);
try { try {
@ -96,4 +100,9 @@ public class TwilioSmsSender {
voxMeter.mark(); voxMeter.mark();
} }
private String getRandom(Random random, ArrayList<String> elements) {
return elements.get(random.nextInt(elements.size()));
}
} }