diff --git a/TODO.md b/TODO.md index 61d834e0b9008ccf44fa99569c519a4dae946814..251a7abfc0191bc53ddaad89f1d3c7b5b543a4b4 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1,5 @@ * Create Adhoc-Commands method to look up single phone number -* Allow users in the directory to loop up others +* Allow users in the directory to look up others * Allow multiple entries (phone numbers) per Jabber ID * Generalize look up method and allow email addresses (and potentially all sort of uris) to be stored in the directory * XEPify look up method diff --git a/src/main/java/im/quicksy/server/configuration/Configuration.java b/src/main/java/im/quicksy/server/configuration/Configuration.java index d33bdf6338a1452726713bf6c510de50b8a40ede..f3a6e3dc5c49d396a67399bde2468a3bc25cc92b 100644 --- a/src/main/java/im/quicksy/server/configuration/Configuration.java +++ b/src/main/java/im/quicksy/server/configuration/Configuration.java @@ -46,6 +46,8 @@ public class Configuration { private String twilioAuthToken; private String nexmoApiKey; + private String nexmoPhoneNumber; + private String nexmoApiSecret; private String cimAuthToken; private Version minVersion; @@ -145,6 +147,10 @@ public class Configuration { return nexmoApiSecret; } + public String getNexmoPhoneNumber() { + return nexmoPhoneNumber; + } + public Optional<String> getCimAuthToken() { return Optional.ofNullable(cimAuthToken); } diff --git a/src/main/java/im/quicksy/server/verification/NexmoVerificationProvider.java b/src/main/java/im/quicksy/server/verification/NexmoVerificationProvider.java index e8df3fe5f643f6db7eb4e42ddc835d938514bb99..def46f2c061ea27b0abf3e341a2cfa2acef3faa8 100644 --- a/src/main/java/im/quicksy/server/verification/NexmoVerificationProvider.java +++ b/src/main/java/im/quicksy/server/verification/NexmoVerificationProvider.java @@ -10,13 +10,13 @@ import com.google.i18n.phonenumbers.Phonenumber; import im.quicksy.server.configuration.Configuration; import im.quicksy.server.verification.nexmo.GenericResponse; import okhttp3.*; -import okhttp3.logging.HttpLoggingInterceptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.security.SecureRandom; import java.time.Duration; +import java.util.Arrays; import java.util.List; public class NexmoVerificationProvider implements VerificationProvider { @@ -34,6 +34,10 @@ public class NexmoVerificationProvider implements VerificationProvider { private static final String BRAND_NAME = "Quicksy.im"; private static final String MESSAGE = "Your Quicksy code is: %s\n\nDon't share this code with others.\n\nOYITl6r6eIp"; + private static final List<Integer> COUNTRY_CODES_SUPPORTING_ALPHA_NUMERIC = Arrays.asList( + 49 + ); + private static final int MAX_ATTEMPTS = 3; private static final SecureRandom SECURE_RANDOM = new SecureRandom(); private final Cache<Phonenumber.PhoneNumber, Pin> PIN_CACHE = CacheBuilder.newBuilder() @@ -59,10 +63,17 @@ public class NexmoVerificationProvider implements VerificationProvider { PIN_CACHE.put(phoneNumber, pin); System.out.println("pin: " + pin); final String to = String.format("%d%d", phoneNumber.getCountryCode(), phoneNumber.getNationalNumber()); + final String nexmoPhoneNumber = Configuration.getInstance().getNexmoPhoneNumber(); + final String from; + if (Strings.isNullOrEmpty(nexmoPhoneNumber) || COUNTRY_CODES_SUPPORTING_ALPHA_NUMERIC.contains(phoneNumber.getCountryCode())) { + from = BRAND_NAME; + } else { + from = nexmoPhoneNumber; + } LOGGER.info("requesting SMS through nexmo for {}", to); final Call call = OK_HTTP_CLIENT.newCall(new Request.Builder() .post(new FormBody.Builder() - .add("from", BRAND_NAME) + .add("from", from) .add("text", String.format(MESSAGE, pin.toString())) .add("to", to) .add("api_key", Configuration.getInstance().getNexmoApiKey()) @@ -87,7 +98,7 @@ public class NexmoVerificationProvider implements VerificationProvider { final GenericResponse.Message message = messages.get(0); final String status = message.getStatus(); if (!"0".equals(status)) { - LOGGER.error("Unable to requests SMS. Status={} text={}",message.getStatus(), message.getErrorText()); + LOGGER.error("Unable to requests SMS. Status={} text={}", message.getStatus(), message.getErrorText()); throw new RequestFailedException(message.getErrorText()); } } else {