@Timed @GET @Path("/{transport}/code/{number}") public Response createAccount( @PathParam("transport") String transport, @PathParam("number") String number) throws IOException, RateLimitExceededException { if (!Util.isValidNumber(number)) { logger.debug("Invalid number: " + number); throw new WebApplicationException(Response.status(400).build()); } switch (transport) { case "sms": rateLimiters.getSmsDestinationLimiter().validate(number); break; case "voice": rateLimiters.getVoiceDestinationLimiter().validate(number); break; default: throw new WebApplicationException(Response.status(422).build()); } VerificationCode verificationCode = generateVerificationCode(); pendingAccounts.store(number, verificationCode.getVerificationCode()); if (transport.equals("sms")) { smsSender.deliverSmsVerification(number, verificationCode.getVerificationCodeDisplay()); } else if (transport.equals("voice")) { smsSender.deliverVoxVerification(number, verificationCode.getVerificationCodeSpeech()); } return Response.ok().build(); }