Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,19 @@ gem 'rails', '~> 6.1.4'
@hostdata_gem ||= { github: '18F/identity-hostdata', tag: 'v3.4.0' }
@logging_gem ||= { github: '18F/identity-logging', tag: 'v0.1.0' }
@saml_gem ||= { github: '18F/saml_idp', tag: 'v0.14.3-18f' }
@telephony_gem ||= { github: '18f/identity-telephony', tag: 'v0.4.4' }
@validations_gem ||= { github: '18F/identity-validations', tag: 'v0.7.1' }

gem 'identity-hostdata', @hostdata_gem
gem 'identity-logging', @logging_gem
gem 'identity-telephony', @telephony_gem
gem 'identity_validations', @validations_gem
gem 'saml_idp', @saml_gem

gem 'ahoy_matey', '~> 3.0'
gem 'autoprefixer-rails', '~> 10.0'
gem 'aws-sdk-kms', '~> 1.4'
gem 'aws-sdk-ses', '~> 1.6'
gem 'aws-sdk-pinpoint'
gem 'aws-sdk-pinpointsmsvoice'
gem 'base32-crockford'
gem 'bootsnap', '~> 1.9.0', require: false
gem 'blueprinter', '~> 0.25.3'
Expand Down
1 change: 0 additions & 1 deletion Gemfile-dev.example
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ FileUtils.cp("Gemfile.lock", "Gemfile-dev.lock")
# @hostdata_gem = { path: '../identity-hostdata' }
# @idp_functions_gem = { path: '../identity-idp-functions' }
# @logging_gem = { path: '../identity-logging' }
# @telephony_gem = { path: '../identity-telephony' }
# @validations_gem = { path: '../identity-validations' }
# @saml_gem = { path: '../saml_idp' }

Expand Down
13 changes: 2 additions & 11 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,6 @@ GIT
pkcs11
uuid

GIT
remote: https://github.com/18f/identity-telephony.git
revision: 15e9eb147900e959e130de1bf409ee1814e24ecc
tag: v0.4.4
specs:
identity-telephony (0.4.4)
aws-sdk-pinpoint
aws-sdk-pinpointsmsvoice
i18n

GEM
remote: https://rubygems.org/
specs:
Expand Down Expand Up @@ -690,6 +680,8 @@ DEPENDENCIES
autoprefixer-rails (~> 10.0)
aws-sdk-cloudwatchlogs
aws-sdk-kms (~> 1.4)
aws-sdk-pinpoint
aws-sdk-pinpointsmsvoice
aws-sdk-ses (~> 1.6)
axe-core-rspec (~> 4.2)
base32-crockford
Expand Down Expand Up @@ -721,7 +713,6 @@ DEPENDENCIES
i18n-tasks (>= 0.9.31)
identity-hostdata!
identity-logging!
identity-telephony!
identity_validations!
irb
jwt
Expand Down
5 changes: 3 additions & 2 deletions config/i18n-tasks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,9 @@ data:
# Find translate calls
search:
## Paths or `File.find` patterns to search in:
# paths:
# - app/
paths:
- app/
- lib/

## Root directories for relative keys resolution.
relative_roots:
Expand Down
1 change: 1 addition & 0 deletions config/initializers/telephony.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
require 'telephony'
require 'pinpoint_supported_countries'

# rubocop:disable Metrics/BlockLength
Expand Down
51 changes: 51 additions & 0 deletions config/locales/telephony/en.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
en:
telephony:
account_reset_cancellation_notice: Your request to delete your login.gov account has been cancelled.
account_reset_notice: As requested, your login.gov account will be deleted in 24
hours. Don't want to delete your account? Sign in to your login.gov
account to cancel.
authentication_otp:
sms: |-
%{app_name}: Your security code is %{code}. It expires in %{expiration} minutes. Don't share this code with anyone.

@%{domain} #%{code}
voice: Hello! Your login.gov one time passcode is, %{code}, again, your passcode
is, %{code}, This code expires in %{expiration} minutes.
confirmation_otp:
sms: |-
%{app_name}: Your security code is %{code}. It expires in %{expiration} minutes. Don't share this code with anyone.

@%{domain} #%{code}
voice: Hello! Your login.gov one time passcode is, %{code}, again, your passcode
is, %{code}, This code expires in %{expiration} minutes.
doc_auth_link: "%{link} You've requested to verify your identity on a mobile
phone. Please take a photo of your state issued ID."
error:
friendly_message:
duplicate_endpoint: The phone number entered is not valid.
generic: Your security code failed to send.
invalid_calling_area: Calls to that phone number are not supported. Please try
SMS if you have an SMS-capable phone.
invalid_phone_number: The phone number entered is not valid.
opt_out: The phone number entered has opted out of text messages.
permanent_failure: The phone number entered is not valid.
sms_unsupported: The phone number entered doesn't support text messaging. Try
the Phone call option.
temporary_failure: We are experiencing technical difficulties. Please try again later.
throttled: That number is experiencing high message volume. Please try again
later.
timeout: The server took too long to respond. Please try again.
unknown_failure: We are experiencing technical difficulties. Please try again later.
voice_unsupported: Invalid phone number. Check that you've entered the correct
country code or area code.
help_keyword_response: Get help at www.login.gov/help or contact us at www.login.gov/contact.
join_keyword_response: 123456 is your login.gov confirmation code. Use this to
confirm your phone number. This code will expire in 5 minutes.
personal_key_regeneration_notice: A new personal key has been issued for your
login.gov account. If this wasn’t you, reset your password.
personal_key_sign_in_notice: Your personal key was just used to sign into your
login.gov account. If this wasn’t you, reset your password.
stop_keyword_response: You have unsubscribed and will not receive alerts from
login.gov . To resubscribe, sign in or set up an account. Help?
www.login.gov/help
58 changes: 58 additions & 0 deletions config/locales/telephony/es.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
es:
telephony:
account_reset_cancellation_notice: Su solicitud para eliminar su cuenta de login.gov ha sido cancelada.
account_reset_notice: Según lo solicitado, su cuenta login.gov se eliminará en
24 horas. ¿No quieres eliminar tu cuenta? Inicie sesión en su cuenta
login.gov para cancelar.
authentication_otp:
sms: |-
%{app_name}: Su código de seguridad es %{code}. Este código se vence en %{expiration} minutos. No lo comparta con ninguna persona.

@%{domain} #%{code}
voice: '¡Hola! Su código de acceso de login.gov es, %{code}, nuevamente, su
código de acceso es %{code}, Este código caducará en %{expiration}
minutos.'
confirmation_otp:
sms: |-
%{app_name}: Su código de seguridad es %{code}. Este código se vence en %{expiration} minutos. No lo comparta con ninguna persona.

@%{domain} #%{code}
voice: '¡Hola! Su código de acceso de login.gov es, %{code}, nuevamente, su
código de acceso es %{code}, Este código caducará en %{expiration}
minutos.'
doc_auth_link: '%{link} Has solicitado verificar tu identidad en un teléfono
móvil. Por favor, tome una foto de la identificación emitida por su
estado'
error:
friendly_message:
duplicate_endpoint: El número de teléfono ingresado no es válido.
generic: Se produjo un error al enviar el código de seguridad.
invalid_calling_area: No se admiten llamadas a ese número de teléfono. Intenta
enviar un SMS si tienes un teléfono que permita enviar SMS.
invalid_phone_number: El número de teléfono ingresado no está en el formato correcto.
opt_out: El número de teléfono ingresado ha sido excluido de los mensajes de
texto.
permanent_failure: El número de teléfono ingresado no es válido.
sms_unsupported: El número de teléfono ingresado no admite mensajes de texto.
Pruebe la opción de llamada telefónica.
temporary_failure: Estamos experimentando dificultades técnicas. Por favor,
inténtelo de nuevo más tarde.
throttled: Ese número está experimentando un alto volumen de mensajes. Por
favor, inténtelo de nuevo más tarde.
timeout: El servidor tardó demasiado en responder. Inténtalo de nuevo.
unknown_failure: Estamos experimentando dificultades técnicas. Por favor,
inténtelo de nuevo más tarde.
voice_unsupported: Numero de telefono invalido. Verifique que haya ingresado el
código de país o de área correcto.
help_keyword_response: Obtenga ayuda en www.login.gov/help o contáctenos en www.login.gov/contact.
join_keyword_response: 123456 es tu código de confirmación de login.gov. Use
esto para confirmar su número de teléfono. Este código caducará en 5
minutos.
personal_key_regeneration_notice: Se ha emitido una nueva clave personal para tu
cuenta login.gov. Si no eres tú, restablece tu contraseña.
personal_key_sign_in_notice: Su clave personal solo se utilizó para iniciar
sesión en su cuenta login.gov. Si no fue así, reinicie su contraseña.
stop_keyword_response: Ha anulado su suscripción y no recibirá alertas de
login.gov. Para volver a suscribirse, inicie sesión o cree una cuenta.
¿Necesita ayuda? www.login.gov/help
61 changes: 61 additions & 0 deletions config/locales/telephony/fr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
fr:
telephony:
account_reset_cancellation_notice: Votre demande de suppression de votre compte login.gov a été annulée.
account_reset_notice: Comme demandé, votre compte login.gov sera supprimé dans
les 24 heures. Vous ne voulez pas supprimer votre compte? Connectez-vous à
votre compte login.gov pour le annuler.
authentication_otp:
sms: |-
%{app_name}: Votre code de sécurité est %{code}. Il est valable pendant %{expiration} minutes. Vous ne devez jamais partager ce code avec personne.

@%{domain} #%{code}
voice: Bonjour! Votre code de sécurité à utilisation unique de login.gov est,
%{code}, de nouveau, votre code de sécurité est, %{code}, Ce code
expirera dans %{expiration} minutes.
confirmation_otp:
sms: |-
%{app_name}: Votre code de sécurité est %{code}. Il est valable pendant %{expiration} minutes. Vous ne devez jamais partager ce code avec personne.

@%{domain} #%{code}
voice: Bonjour! Votre code de sécurité à utilisation unique de login.gov est,
%{code}, de nouveau, votre code de sécurité est, %{code}, Ce code
expirera dans %{expiration} minutes.
doc_auth_link: "%{link} Vous avez demandé à vérifier votre identité sur un
téléphone mobile. S'il vous plaît prendre une photo de votre identité
émise par l'état"
error:
friendly_message:
duplicate_endpoint: Le numéro de téléphone entré n'est pas valide.
generic: Échec de l'envoi de votre code de sécurité.
invalid_calling_area: Les appels vers ce numéro de téléphone ne sont pas pris en
charge. Veuillez essayer par SMS si vous possédez un téléphone
disposant de cette fonction.
invalid_phone_number: Le numéro de téléphone saisi n'est pas valide.
opt_out: Le numéro de téléphone entré a désactivé les messages texte.
permanent_failure: Le numéro de téléphone entré n'est pas valide.
sms_unsupported: Le numéro de téléphone saisi ne prend pas en charge les
messages textuels. Veuillez essayer l'option d'appel téléphonique.
temporary_failure: Nous rencontrons des difficultés techniques. Veuillez
réessayer plus tard.
throttled: Ce nombre connaît un volume de messages élevé. Veuillez réessayer
plus tard.
timeout: Le serveur a pris trop de temps pour répondre. Veuillez réessayer.
unknown_failure: Nous rencontrons des difficultés techniques. Veuillez réessayer
plus tard.
voice_unsupported: Numéro de téléphone invalide. Vérifiez que vous avez entré le
bon indicatif international ou régional.
help_keyword_response: Obtenez de l'aide à l'adresse www.login.gov/help ou
contactez-nous à l'adresse www.login.gov/contact.
join_keyword_response: 123456 est votre code de confirmation login.gov.
Utilisez-le pour confirmer votre numéro de téléphone. Ce code expirera
dans 5 minutes.
personal_key_regeneration_notice: Une nouvelle clé personnelle a été émise pour
votre compte login.gov. Si vous ne l'avez pas demandée, réinitialisez
votre mot de passe.
personal_key_sign_in_notice: Votre clé personnelle a été utilisée pour vous
connecter à votre compte login.gov. Si ce n’était pas vous, changez votre
mot de passe.
stop_keyword_response: Vous vous êtes désinscrit et ne recevrez plus d'alertes
de login.gov. Pour vous réabonner, connectez-vous ou créez un compte.
Besoin d'aide? www.login.gov/help
78 changes: 78 additions & 0 deletions lib/telephony.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
require 'aws-sdk-pinpoint'
require 'aws-sdk-pinpointsmsvoice'
require 'forwardable'
require 'i18n'
require 'telephony/util'
require 'telephony/alert_sender'
require 'telephony/configuration'
require 'telephony/errors'
require 'telephony/otp_sender'
require 'telephony/phone_number_info'
require 'telephony/response'
require 'telephony/test/call'
require 'telephony/test/message'
require 'telephony/test/error_simulator'
require 'telephony/test/sms_sender'
require 'telephony/test/voice_sender'
require 'telephony/pinpoint/aws_credential_builder'
require 'telephony/pinpoint/sms_sender'
require 'telephony/pinpoint/voice_sender'

module Telephony
extend SingleForwardable

def self.config
@config ||= Configuration.new
yield @config if block_given?
@config
end

def self.send_authentication_otp(to:, otp:, expiration:, channel:, domain:, country_code:)
OtpSender.new(
to: to,
otp: otp,
expiration: expiration,
channel: channel,
domain: domain,
country_code: country_code,
).send_authentication_otp
end

def self.send_confirmation_otp(to:, otp:, expiration:, channel:, domain:, country_code:)
OtpSender.new(
to: to,
otp: otp,
expiration: expiration,
channel: channel,
domain: domain,
country_code: country_code,
).send_confirmation_otp
end

def self.alert_sender
AlertSender.new
end

def_delegators :alert_sender,
:send_doc_auth_link,
:send_personal_key_regeneration_notice,
:send_personal_key_sign_in_notice,
:send_join_keyword_response,
:send_stop_keyword_response,
:send_help_keyword_response,
:send_account_reset_notice,
:send_account_reset_cancellation_notice

# @param [String] phone_number phone number in E.164 format
# @return [PhoneNumberInfo] info about the phone number
def self.phone_info(phone_number)
sender = case Telephony.config.adapter
when :pinpoint
Pinpoint::SmsSender.new
when :test
Test::SmsSender.new
end

sender.phone_info(phone_number)
end
end
Loading